export const SDK_SOURCE = "(function(global) {\n 'use strict';\n var _Base64 = global.Base64;\n var version = \"2.1.4\";\n var buffer;\n if (typeof module !== 'undefined' && module.exports) {\n buffer = require('buffer').Buffer;\n }\n var b64chars\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n var b64tab = function(bin) {\n var t = {};\n for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;\n return t;\n }(b64chars);\n var fromCharCode = String.fromCharCode;\n var cb_utob = function(c) {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))\n + fromCharCode(0x80 | (cc & 0x3f)))\n : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))\n + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))\n + fromCharCode(0x80 | ( cc & 0x3f)));\n } else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))\n + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))\n + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))\n + fromCharCode(0x80 | ( cc & 0x3f)));\n }\n };\n var re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n var utob = function(u) {\n return u.replace(re_utob, cb_utob);\n };\n var cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3],\n ord = ccc.charCodeAt(0) << 16\n | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)\n | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),\n chars = [\n b64chars.charAt( ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n };\n var btoa = global.btoa ? function(b) {\n return global.btoa(b);\n } : function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n var _encode = buffer\n ? function (u) { return (new buffer(u)).toString('base64') }\n : function (u) { return btoa(utob(u)) }\n ;\n var encode = function(u, urisafe) {\n return !urisafe\n ? _encode(u)\n : _encode(u).replace(/[+\\/]/g, function(m0) {\n return m0 == '+' ? '-' : '_';\n }).replace(/=/g, '');\n };\n var encodeURI = function(u) { return encode(u, true) };\n var re_btou = new RegExp([\n '[\\xC0-\\xDF][\\x80-\\xBF]',\n '[\\xE0-\\xEF][\\x80-\\xBF]{2}',\n '[\\xF0-\\xF7][\\x80-\\xBF]{3}'\n ].join('|'), 'g');\n var cb_btou = function(cccc) {\n switch(cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)),\n offset = cp - 0x10000;\n return (fromCharCode((offset >>> 10) + 0xD800)\n + fromCharCode((offset & 0x3FF) + 0xDC00));\n case 3:\n return fromCharCode(\n ((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2))\n );\n default:\n return fromCharCode(\n ((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1))\n );\n }\n };\n var btou = function(b) {\n return b.replace(re_btou, cb_btou);\n };\n var cb_decode = function(cccc) {\n var len = cccc.length,\n padlen = len % 4,\n n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)\n | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)\n | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)\n | (len > 3 ? b64tab[cccc.charAt(3)] : 0),\n chars = [\n fromCharCode( n >>> 16),\n fromCharCode((n >>> 8) & 0xff),\n fromCharCode( n & 0xff)\n ];\n chars.length -= [0, 0, 2, 1][padlen];\n return chars.join('');\n };\n var atob = global.atob ? function(a) {\n return global.atob(a);\n } : function(a){\n return a.replace(/[\\s\\S]{1,4}/g, cb_decode);\n };\n var _decode = buffer\n ? function(a) { return (new buffer(a, 'base64')).toString() }\n : function(a) { return btou(atob(a)) };\n var decode = function(a){\n return _decode(\n a.replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })\n .replace(/[^A-Za-z0-9\\+\\/]/g, '')\n );\n };\n var noConflict = function() {\n var Base64 = global.Base64;\n global.Base64 = _Base64;\n return Base64;\n };\n global.Base64 = {\n VERSION: version,\n atob: atob,\n btoa: btoa,\n fromBase64: decode,\n toBase64: encode,\n utob: utob,\n encode: encode,\n encodeURI: encodeURI,\n btou: btou,\n decode: decode,\n noConflict: noConflict\n };\n})(this);\n\nCAPIWS = (typeof EIMZOEXT !== 'undefined') ? EIMZOEXT : {\n URL: (window.location.protocol.toLowerCase() === \"https:\" ? \"wss://127.0.0.1:64443\" : \"ws://127.0.0.1:64646\") + \"/service/cryptapi\",\n callFunction: function(funcDef, callback, error){\n if (!window.WebSocket){\n if(error)\n error();\n return;\n }\n var socket;\n try{\n socket = new WebSocket(this.URL);\n } catch (e){\n error(e);\n }\n socket.onclose = function(e){\n if(error) {\n if(e.code != 1000){\n error(e.code);\n }\n }\n };\n socket.onmessage = function(event){\n var data = JSON.parse(event.data);\n socket.close();\n callback(event,data);\n };\n socket.onopen = function(){\n socket.send(JSON.stringify(funcDef));\n };\n },\n version: function(callback, error){\n if (!window.WebSocket){\n if(error)\n error();\n return;\n }\n var socket;\n try{\n socket = new WebSocket(this.URL);\n } catch (e){\n error(e);\n }\n socket.onclose = function(e){\n if(error) {\n if(e.code != 1000){\n error(e.code);\n }\n }\n };\n socket.onmessage = function(event){\n var data = JSON.parse(event.data);\n socket.close();\n callback(event,data);\n };\n socket.onopen = function(){\n var o = {name: 'version'};\n socket.send(JSON.stringify(o));\n };\n },\n apidoc: function(callback, error){\n if (!window.WebSocket){\n if(error)\n error();\n return;\n }\n var socket;\n try{\n socket = new WebSocket(this.URL);\n } catch (e){\n error(e);\n }\n socket.onclose = function(e){\n if(error) {\n if(e.code != 1000){\n error(e.code);\n }\n }\n };\n socket.onmessage = function(event){\n var data = JSON.parse(event.data);\n socket.close();\n callback(event,data);\n };\n socket.onopen = function(){\n var o = {name: 'apidoc'};\n socket.send(JSON.stringify(o));\n };\n },\n apikey: function(domainAndKey, callback, error){\n if (!window.WebSocket){\n if(error)\n error();\n return;\n }\n var socket;\n try{\n socket = new WebSocket(this.URL);\n } catch (e){\n error(e);\n }\n socket.onclose = function(e){\n if(error) {\n if(e.code != 1000){\n error(e.code);\n }\n }\n };\n socket.onmessage = function(event){\n var data = JSON.parse(event.data);\n socket.close();\n callback(event,data);\n };\n socket.onopen = function(){\n var o = {name: 'apikey', arguments: domainAndKey};\n socket.send(JSON.stringify(o));\n };\n }\n};\n\nvar dates = {\n convert: function (d) {\n return (\n d.constructor === Date ? d :\n d.constructor === Array ? new Date(d[0], d[1], d[2]) :\n d.constructor === Number ? new Date(d) :\n d.constructor === String ? new Date(d) :\n typeof d === \"object\" ? new Date(d.year, d.month, d.date) :\n NaN\n );\n },\n compare: function (a, b) {\n return (\n isFinite(a = this.convert(a).valueOf()) &&\n isFinite(b = this.convert(b).valueOf()) ?\n (a > b) - (a < b) :\n NaN\n );\n },\n inRange: function (d, start, end) {\n return (\n isFinite(d = this.convert(d).valueOf()) &&\n isFinite(start = this.convert(start).valueOf()) &&\n isFinite(end = this.convert(end).valueOf()) ?\n start <= d && d <= end :\n NaN\n );\n }\n};\n\nvar EIMZOClient = {\n NEW_API: false,\n NEW_API2: false,\n NEW_API3: false,\n // Add your production domain and API key below:\n // 'yourdomain.uz', 'YOUR_API_KEY_HERE',\n API_KEYS: [\n 'localhost', '96D0C1491615C82B9A54D9989779DF825B690748224C2B04F500F370D51827CE2644D8D4A82C18184D73AB8530BB8ED537269603F61DB0D03D2104ABF789970B',\n '127.0.0.1', 'A7BCFA5D490B351BE0754130DF03A068F855DB4333D43921125B9CF2670EF6A40370C646B90401955E1F7BC9CDBF59CE0B2C5467D820BE189C845D0B79CFC96F'\n ],\n checkVersion: function(success, fail){\n CAPIWS.version(function (event, data) {\n if(data.success === true){\n if(data.major && data.minor){\n var installedVersion = parseInt(data.major) * 100 + parseInt(data.minor);\n EIMZOClient.NEW_API = installedVersion >= 336;\n EIMZOClient.NEW_API2 = installedVersion >= 412;\n EIMZOClient.NEW_API3 = installedVersion >= 486;\n success(data.major, data.minor);\n } else {\n fail(null, 'E-IMZO Version is undefined');\n }\n } else {\n fail(null, data.reason);\n }\n }, function (e) {\n fail(e, null);\n });\n },\n installApiKeys: function(success, fail){\n CAPIWS.apikey(EIMZOClient.API_KEYS, function (event, data) {\n if (data.success) {\n success();\n } else {\n fail(null,data.reason);\n }\n }, function (e) {\n fail(e, null);\n });\n },\n listAllUserKeys: function(itemIdGen, itemUiGen, success, fail, includeLegacyTokens){\n var items = [];\n var errors = [];\n if(!EIMZOClient.NEW_API){\n fail(null, 'Please install new version of E-IMZO');\n } else {\n if(EIMZOClient.NEW_API2 && includeLegacyTokens !== true){\n EIMZOClient._findPfxs2(itemIdGen, itemUiGen, items, errors, function (firstItmId2) {\n if(items.length === 0 && errors.length > 0){\n fail(errors[0].e, errors[0].r);\n } else {\n var firstId = null;\n if (items.length === 1) {\n if (firstItmId2) {\n firstId = firstItmId2;\n }\n }\n success(items, firstId);\n }\n });\n } else {\n EIMZOClient._findPfxs2(itemIdGen, itemUiGen, items, errors, function (firstItmId2) {\n EIMZOClient._findTokens2(itemIdGen, itemUiGen, items, errors, function (firstItmId3) {\n if(items.length === 0 && errors.length > 0){\n fail(errors[0].e, errors[0].r);\n } else {\n var firstId = null;\n if (items.length === 1) {\n if (firstItmId2) {\n firstId = firstItmId2;\n } else if (firstItmId3) {\n firstId = firstItmId3;\n }\n }\n success(items, firstId);\n }\n });\n });\n }\n }\n },\n idCardIsPLuggedIn: function(success, fail){\n if(!EIMZOClient.NEW_API2){\n success(false);\n } else {\n CAPIWS.callFunction({plugin: \"idcard\", name: \"list_readers\"}, function (event, data) {\n if (data.success) {\n success(data.readers.length>0);\n } else {\n fail(null, data.reason);\n }\n }, function (e) {\n fail(e, null);\n });\n }\n },\n isBAIKTokenPLuggedIn: function(success, fail){\n if(!EIMZOClient.NEW_API3){\n success(false);\n } else {\n CAPIWS.callFunction({plugin: \"baikey\", name: \"list_tokens\"}, function (event, data) {\n if (data.success) {\n success(data.tokens.length>0);\n } else {\n fail(null, data.reason);\n }\n }, function (e) {\n fail(e, null);\n });\n }\n },\n isCKCPLuggedIn: function(success, fail){\n if(!EIMZOClient.NEW_API3){\n success(false);\n } else {\n CAPIWS.callFunction({plugin: \"ckc\", name: \"list_ckc\"}, function (event, data) {\n if (data.success) {\n success(data.devices.length>0);\n } else {\n fail(null, data.reason);\n }\n }, function (e) {\n fail(e, null);\n });\n }\n },\n loadKey: function(itemObject, success, fail, verifyPassword){\n if (itemObject) {\n var vo = itemObject;\n if (vo.type === \"pfx\") {\n CAPIWS.callFunction({plugin: \"pfx\", name: \"load_key\", arguments: [vo.disk, vo.path, vo.name, vo.alias]}, function (event, data) {\n if (data.success) {\n var id = data.keyId;\n if(verifyPassword){\n CAPIWS.callFunction({name: \"verify_password\", plugin: \"pfx\", arguments: [id]}, function (event, data) {\n if (data.success) {\n success(id);\n } else {\n fail(null, data.reason);\n }\n }, function (e) {\n fail(e, null);\n });\n } else {\n success(id);\n }\n } else {\n fail(null, data.reason);\n }\n }, function (e) {\n fail(e, null);\n });\n } else if (vo.type === \"ftjc\") {\n CAPIWS.callFunction({plugin: \"ftjc\", name: \"load_key\", arguments: [vo.cardUID]}, function (event, data) {\n if (data.success) {\n var id = data.keyId;\n if(verifyPassword){\n CAPIWS.callFunction({plugin: \"ftjc\", name: \"verify_pin\", arguments: [id,'1']}, function (event, data) {\n if (data.success) {\n success(id);\n } else {\n fail(null, data.reason);\n }\n }, function (e) {\n fail(e, null);\n });\n } else {\n success(id);\n }\n } else {\n fail(null, data.reason);\n }\n }, function (e) {\n fail(e, null);\n });\n }\n }\n },\n createPkcs7: function(id, data, timestamper, success, fail, detached, isDataBase64Encoded){\n var data64;\n if(isDataBase64Encoded === true){\n data64 = data\n }else {\n data64 = Base64.encode(data);\n }\n if(detached === true){\n detached = 'yes';\n } else {\n detached = 'no';\n }\n CAPIWS.callFunction({plugin: \"pkcs7\", name: \"create_pkcs7\", arguments: [data64, id, detached]}, function (event, data) {\n if (data.success) {\n var pkcs7 = data.pkcs7_64;\n success(pkcs7);\n } else {\n fail(null, data.reason);\n }\n }, function (e) {\n fail(e, null);\n });\n },\n _getX500Val: function (s, f) {\n function splitFields(self, splitter, ahead) {\n var result = [];\n if (splitter != '') {\n function getSubst(value) {\n var substChar = value[0] == '0' ? '1' : '0';\n var subst = '';\n for (var index = 0; index < value.length; index++) {\n subst += substChar;\n }\n return subst;\n };\n var matches = [];\n var replaceName = splitter instanceof RegExp ? \"replace\" : \"replaceAll\";\n self[replaceName](splitter, function (match, index) {\n matches.push({value: match, index: index});\n return getSubst(match);\n });\n var lastIndex = 0;\n for (var index = 0; index < matches.length; index++) {\n var match = matches[index];\n var nextIndex = ahead == true ? match.index : match.index + match.value.length;\n if (nextIndex != lastIndex) {\n result.push(self.substring(lastIndex, nextIndex));\n lastIndex = nextIndex;\n }\n };\n if (lastIndex < self.length) {\n result.push(self.substring(lastIndex, self.length));\n };\n } else {\n result.push(self);\n };\n return result;\n }\n\n var res = splitFields(s, /,[A-Z]+=/g, true);\n for (var i = 0; i < res.length; i++) {\n var n = res[i].search((i > 0 ? \",\" : \"\") + f + \"=\");\n if (n !== -1) {\n return res[i].slice(n + f.length + 1 + (i > 0 ? 1 : 0));\n }\n }\n return \"\";\n },\n _findPfxs2: function (itemIdGen, itemUiGen, items, errors, callback) {\n var itmkey0;\n CAPIWS.callFunction({plugin: \"pfx\", name: \"list_all_certificates\"}, function (event, data) {\n if (data.success) {\n for (var rec in data.certificates) {\n var el = data.certificates[rec];\n var x500name_ex = el.alias.toUpperCase();\n x500name_ex = x500name_ex.replace(\"1.2.860.3.16.1.1=\", \"INN=\");\n x500name_ex = x500name_ex.replace(\"1.2.860.3.16.1.2=\", \"PINFL=\");\n var vo = {\n disk: el.disk,\n path: el.path,\n name: el.name,\n alias: el.alias,\n serialNumber: EIMZOClient._getX500Val(x500name_ex, \"SERIALNUMBER\"),\n validFrom: new Date(EIMZOClient._getX500Val(x500name_ex, \"VALIDFROM\").replace(/\\./g, \"-\").replace(\" \", \"T\")),\n validTo: new Date(EIMZOClient._getX500Val(x500name_ex, \"VALIDTO\").replace(/\\./g, \"-\").replace(\" \", \"T\")),\n CN: EIMZOClient._getX500Val(x500name_ex, \"CN\"),\n TIN: (EIMZOClient._getX500Val(x500name_ex, \"INN\") ? EIMZOClient._getX500Val(x500name_ex, \"INN\") : EIMZOClient._getX500Val(x500name_ex, \"UID\")),\n UID: EIMZOClient._getX500Val(x500name_ex, \"UID\"),\n PINFL: EIMZOClient._getX500Val(x500name_ex, \"PINFL\"),\n O: EIMZOClient._getX500Val(x500name_ex, \"O\"),\n T: EIMZOClient._getX500Val(x500name_ex, \"T\"),\n type: 'pfx'\n };\n if (!vo.TIN && !vo.PINFL)\n continue;\n var itmkey = itemIdGen(vo,rec);\n if (!itmkey0) {\n itmkey0 = itmkey;\n }\n var itm = itemUiGen(itmkey, vo);\n items.push(itm);\n }\n } else {\n errors.push({r: data.reason});\n }\n callback(itmkey0);\n }, function (e) {\n errors.push({e: e});\n callback(itmkey0);\n });\n },\n _findTokens2: function (itemIdGen, itemUiGen, items, errors, callback) {\n var itmkey0;\n CAPIWS.callFunction({plugin: \"ftjc\", name: \"list_all_keys\", arguments:['']}, function (event, data) {\n if (data.success) {\n for (var rec in data.tokens) {\n var el = data.tokens[rec];\n var x500name_ex = el.info.toUpperCase();\n x500name_ex = x500name_ex.replace(\"1.2.860.3.16.1.1=\", \"INN=\");\n x500name_ex = x500name_ex.replace(\"1.2.860.3.16.1.2=\", \"PINFL=\");\n var vo = {\n cardUID: el.cardUID,\n statusInfo: el.statusInfo,\n ownerName: el.ownerName,\n info: el.info,\n serialNumber: EIMZOClient._getX500Val(x500name_ex, \"SERIALNUMBER\"),\n validFrom: new Date(EIMZOClient._getX500Val(x500name_ex, \"VALIDFROM\")),\n validTo: new Date(EIMZOClient._getX500Val(x500name_ex, \"VALIDTO\")),\n CN: EIMZOClient._getX500Val(x500name_ex, \"CN\"),\n TIN: (EIMZOClient._getX500Val(x500name_ex, \"INN\") ? EIMZOClient._getX500Val(x500name_ex, \"INN\") : EIMZOClient._getX500Val(x500name_ex, \"UID\")),\n UID: EIMZOClient._getX500Val(x500name_ex, \"UID\"),\n PINFL: EIMZOClient._getX500Val(x500name_ex, \"PINFL\"),\n O: EIMZOClient._getX500Val(x500name_ex, \"O\"),\n T: EIMZOClient._getX500Val(x500name_ex, \"T\"),\n type: 'ftjc'\n };\n if (!vo.TIN && !vo.PINFL)\n continue;\n var itmkey = itemIdGen(vo,rec);\n if (!itmkey0) {\n itmkey0 = itmkey;\n }\n var itm = itemUiGen(itmkey, vo);\n items.push(itm);\n }\n } else {\n errors.push({r: data.reason});\n }\n callback(itmkey0);\n }, function (e) {\n errors.push({e: e});\n callback(itmkey0);\n });\n }\n};\n"