{"version":3,"sources":["package.json","node_modules/jsrsasign/lib/jsrsasign.js","libs/@shared/config/src/lib/types/app-config.ts","libs/@shared/config/src/lib/services/app-config-service.service.ts","libs/@shared/config/src/lib/config.module.ts","node_modules/@angular/core/fesm2022/rxjs-interop.mjs","libs/@shared/auth/src/lib/constants/roles.constant.ts","node_modules/angular-oauth2-oidc/fesm2022/angular-oauth2-oidc.mjs","node_modules/angular-oauth2-oidc-jwks/fesm2022/angular-oauth2-oidc-jwks.mjs","libs/@shared/auth/src/lib/types/authorization-result.ts","libs/@shared/auth/src/lib/types/impersonation.ts","libs/@shared/auth/src/lib/types/user.ts","libs/@shared/auth/src/lib/types/code-flow-auth-config.ts","libs/@shared/auth/src/lib/types/ropc-auth-config.ts","node_modules/uuid/dist/esm-browser/stringify.js","node_modules/uuid/dist/esm-browser/rng.js","node_modules/uuid/dist/esm-browser/native.js","node_modules/uuid/dist/esm-browser/v4.js","libs/@shared/auth/src/lib/types/user-connection.ts","libs/@shared/auth/src/lib/services/auth.service.ts","libs/@shared/auth/src/lib/http-clients/auth-http-client.ts","libs/@shared/auth/src/lib/interceptors/auth.interceptor.ts","libs/@shared/auth/src/lib/auth.module.ts","libs/@shared/auth/src/lib/guards/guards.ts"],"sourcesContent":["{\r\n\t\"name\": \"@e-tenant-hub/source\",\r\n\t\"version\": \"3.2.4\",\r\n\t\"license\": \"MIT\",\r\n\t\"scripts\": {\r\n\t\t\"start\": \"npx nx run-many --target=serve --all=true\",\r\n\t\t\"start:client-platform\": \"npx nx run client-platform:serve\",\r\n\t\t\"start:pay-rent-now\": \"npx nx run pay-rent-now:serve\",\r\n\t\t\"start:client-platform:staging\": \"npx nx run client-platform:serve:staging\",\r\n\t\t\"build:client-platform:release\": \"npx nx build client-platform --configuration=production\",\r\n\t\t\"build:pay-rent-now:release\": \"npx nx build pay-rent-now --configuration=production\",\r\n\t\t\"lint\": \"nx affected:lint\",\r\n\t\t\"format\": \"nx format:write\",\r\n\t\t\"format:check\": \"nx format:check\",\r\n\t\t\"install:localhost-ssl\": \"powershell -NoProfile -ExecutionPolicy Unrestricted -Command ./scripts/set-localhost-ssl-certificate.ps1\",\r\n\t\t\"prepare\": \"husky\"\r\n\t},\r\n\t\"private\": true,\r\n\t\"dependencies\": {\r\n\t\t\"@angular/animations\": \"18.1.1\",\r\n\t\t\"@angular/cdk\": \"18.1.1\",\r\n\t\t\"@angular/common\": \"18.1.1\",\r\n\t\t\"@angular/compiler\": \"18.1.1\",\r\n\t\t\"@angular/core\": \"18.1.1\",\r\n\t\t\"@angular/forms\": \"18.1.1\",\r\n\t\t\"@angular/material\": \"18.1.1\",\r\n\t\t\"@angular/platform-browser\": \"18.1.1\",\r\n\t\t\"@angular/platform-browser-dynamic\": \"18.1.1\",\r\n\t\t\"@angular/router\": \"18.1.1\",\r\n\t\t\"@angular/service-worker\": \"18.1.1\",\r\n\t\t\"@maskito/angular\": \"^3.0.0\",\r\n\t\t\"@maskito/core\": \"^3.0.0\",\r\n\t\t\"@maskito/kit\": \"^3.0.0\",\r\n\t\t\"@microsoft/signalr\": \"^8.0.7\",\r\n\t\t\"@nx/angular\": \"19.5.1\",\r\n\t\t\"angular-oauth2-oidc\": \"^17.0.2\",\r\n\t\t\"angular-oauth2-oidc-jwks\": \"^17.0.2\",\r\n\t\t\"dayjs\": \"^1.11.12\",\r\n\t\t\"file-saver\": \"^2.0.5\",\r\n\t\t\"libphonenumber-js\": \"^1.11.4\",\r\n\t\t\"ngx-cookie-service\": \"^18.0.0\",\r\n\t\t\"ngx-webstorage\": \"^18.0.0\",\r\n\t\t\"rxjs\": \"~7.8.0\",\r\n\t\t\"swiper\": \"^11.1.5\",\r\n\t\t\"tslib\": \"^2.3.0\",\r\n\t\t\"uuid\": \"^11.0.5\",\r\n\t\t\"zone.js\": \"0.14.4\"\r\n\t},\r\n\t\"devDependencies\": {\r\n\t\t\"@angular-devkit/build-angular\": \"18.1.1\",\r\n\t\t\"@angular-devkit/core\": \"18.1.1\",\r\n\t\t\"@angular-devkit/schematics\": \"18.1.1\",\r\n\t\t\"@angular-eslint/eslint-plugin\": \"18.0.1\",\r\n\t\t\"@angular-eslint/eslint-plugin-template\": \"18.0.1\",\r\n\t\t\"@angular-eslint/template-parser\": \"18.0.1\",\r\n\t\t\"@angular/cli\": \"~18.1.0\",\r\n\t\t\"@angular/compiler-cli\": \"18.1.1\",\r\n\t\t\"@angular/language-service\": \"18.1.1\",\r\n\t\t\"@nx/eslint\": \"19.5.1\",\r\n\t\t\"@nx/eslint-plugin\": \"19.5.1\",\r\n\t\t\"@nx/jest\": \"19.5.1\",\r\n\t\t\"@nx/js\": \"19.5.1\",\r\n\t\t\"@nx/workspace\": \"19.5.1\",\r\n\t\t\"@schematics/angular\": \"18.1.1\",\r\n\t\t\"@swc-node/register\": \"1.9.2\",\r\n\t\t\"@swc/core\": \"1.5.7\",\r\n\t\t\"@swc/helpers\": \"0.5.11\",\r\n\t\t\"@types/file-saver\": \"^2.0.7\",\r\n\t\t\"@types/jest\": \"^29.4.0\",\r\n\t\t\"@types/node\": \"^18.16.9\",\r\n\t\t\"@types/uuid\": \"^10.0.0\",\r\n\t\t\"@typescript-eslint/eslint-plugin\": \"7.16.0\",\r\n\t\t\"@typescript-eslint/parser\": \"7.16.0\",\r\n\t\t\"@typescript-eslint/utils\": \"7.16.0\",\r\n\t\t\"autoprefixer\": \"^10.4.19\",\r\n\t\t\"eslint\": \"8.57.0\",\r\n\t\t\"eslint-config-prettier\": \"^9.0.0\",\r\n\t\t\"husky\": \"^9.1.1\",\r\n\t\t\"jest\": \"^29.4.1\",\r\n\t\t\"jest-environment-jsdom\": \"^29.4.1\",\r\n\t\t\"jest-preset-angular\": \"14.1.1\",\r\n\t\t\"jsonc-eslint-parser\": \"^2.1.0\",\r\n\t\t\"lint-staged\": \"^15.2.7\",\r\n\t\t\"nx\": \"19.5.1\",\r\n\t\t\"postcss\": \"^8.4.39\",\r\n\t\t\"prettier\": \"3.3.3\",\r\n\t\t\"prettier-plugin-organize-attributes\": \"^1.0.0\",\r\n\t\t\"prettier-plugin-organize-imports\": \"^4.0.0\",\r\n\t\t\"prettier-plugin-tailwindcss\": \"^0.6.5\",\r\n\t\t\"tailwind-scrollbar\": \"^3.1.0\",\r\n\t\t\"tailwindcss\": \"^3.4.6\",\r\n\t\t\"ts-jest\": \"^29.1.0\",\r\n\t\t\"ts-node\": \"10.9.1\",\r\n\t\t\"typescript\": \"5.5.3\"\r\n\t},\r\n\t\"volta\": {\r\n\t\t\"node\": \"20.15.1\"\r\n\t}\r\n}\r\n","var navigator = {};\nnavigator.userAgent = false;\nvar window = {};\n/*\n * jsrsasign(all) 11.1.0 (2024-02-01) (c) 2010-2023 Kenji Urushima | kjur.github.io/jsrsasign/license\n */\nvar VERSION = \"11.1.0\";\nvar VERSION_FULL = \"jsrsasign(all) 11.1.0 (2024-02-01) (c) 2010-2023 Kenji Urushima | kjur.github.io/jsrsasign/license\";\n\n/*! CryptoJS v3.1.2 core-fix.js\n * code.google.com/p/crypto-js\n * (c) 2009-2013 by Jeff Mott. All rights reserved.\n * code.google.com/p/crypto-js/wiki/License\n * THIS IS FIX of 'core.js' to fix Hmac issue.\n * https://code.google.com/p/crypto-js/issues/detail?id=84\n * https://crypto-js.googlecode.com/svn-history/r667/branches/3.x/src/core.js\n */\nvar CryptoJS = CryptoJS || function (e, g) {\n var a = {};\n var b = a.lib = {};\n var j = b.Base = function () {\n function n() {}\n return {\n extend: function (p) {\n n.prototype = this;\n var o = new n();\n if (p) {\n o.mixIn(p);\n }\n if (!o.hasOwnProperty(\"init\")) {\n o.init = function () {\n o.$super.init.apply(this, arguments);\n };\n }\n o.init.prototype = o;\n o.$super = this;\n return o;\n },\n create: function () {\n var o = this.extend();\n o.init.apply(o, arguments);\n return o;\n },\n init: function () {},\n mixIn: function (p) {\n for (var o in p) {\n if (p.hasOwnProperty(o)) {\n this[o] = p[o];\n }\n }\n if (p.hasOwnProperty(\"toString\")) {\n this.toString = p.toString;\n }\n },\n clone: function () {\n return this.init.prototype.extend(this);\n }\n };\n }();\n var l = b.WordArray = j.extend({\n init: function (o, n) {\n o = this.words = o || [];\n if (n != g) {\n this.sigBytes = n;\n } else {\n this.sigBytes = o.length * 4;\n }\n },\n toString: function (n) {\n return (n || h).stringify(this);\n },\n concat: function (t) {\n var q = this.words;\n var p = t.words;\n var n = this.sigBytes;\n var s = t.sigBytes;\n this.clamp();\n if (n % 4) {\n for (var r = 0; r < s; r++) {\n var o = p[r >>> 2] >>> 24 - r % 4 * 8 & 255;\n q[n + r >>> 2] |= o << 24 - (n + r) % 4 * 8;\n }\n } else {\n for (var r = 0; r < s; r += 4) {\n q[n + r >>> 2] = p[r >>> 2];\n }\n }\n this.sigBytes += s;\n return this;\n },\n clamp: function () {\n var o = this.words;\n var n = this.sigBytes;\n o[n >>> 2] &= 4294967295 << 32 - n % 4 * 8;\n o.length = e.ceil(n / 4);\n },\n clone: function () {\n var n = j.clone.call(this);\n n.words = this.words.slice(0);\n return n;\n },\n random: function (p) {\n var o = [];\n for (var n = 0; n < p; n += 4) {\n o.push(e.random() * 4294967296 | 0);\n }\n return new l.init(o, p);\n }\n });\n var m = a.enc = {};\n var h = m.Hex = {\n stringify: function (p) {\n var r = p.words;\n var o = p.sigBytes;\n var q = [];\n for (var n = 0; n < o; n++) {\n var s = r[n >>> 2] >>> 24 - n % 4 * 8 & 255;\n q.push((s >>> 4).toString(16));\n q.push((s & 15).toString(16));\n }\n return q.join(\"\");\n },\n parse: function (p) {\n var n = p.length;\n var q = [];\n for (var o = 0; o < n; o += 2) {\n q[o >>> 3] |= parseInt(p.substr(o, 2), 16) << 24 - o % 8 * 4;\n }\n return new l.init(q, n / 2);\n }\n };\n var d = m.Latin1 = {\n stringify: function (q) {\n var r = q.words;\n var p = q.sigBytes;\n var n = [];\n for (var o = 0; o < p; o++) {\n var s = r[o >>> 2] >>> 24 - o % 4 * 8 & 255;\n n.push(String.fromCharCode(s));\n }\n return n.join(\"\");\n },\n parse: function (p) {\n var n = p.length;\n var q = [];\n for (var o = 0; o < n; o++) {\n q[o >>> 2] |= (p.charCodeAt(o) & 255) << 24 - o % 4 * 8;\n }\n return new l.init(q, n);\n }\n };\n var c = m.Utf8 = {\n stringify: function (n) {\n try {\n return decodeURIComponent(escape(d.stringify(n)));\n } catch (o) {\n throw new Error(\"Malformed UTF-8 data\");\n }\n },\n parse: function (n) {\n return d.parse(unescape(encodeURIComponent(n)));\n }\n };\n var i = b.BufferedBlockAlgorithm = j.extend({\n reset: function () {\n this._data = new l.init();\n this._nDataBytes = 0;\n },\n _append: function (n) {\n if (typeof n == \"string\") {\n n = c.parse(n);\n }\n this._data.concat(n);\n this._nDataBytes += n.sigBytes;\n },\n _process: function (w) {\n var q = this._data;\n var x = q.words;\n var n = q.sigBytes;\n var t = this.blockSize;\n var v = t * 4;\n var u = n / v;\n if (w) {\n u = e.ceil(u);\n } else {\n u = e.max((u | 0) - this._minBufferSize, 0);\n }\n var s = u * t;\n var r = e.min(s * 4, n);\n if (s) {\n for (var p = 0; p < s; p += t) {\n this._doProcessBlock(x, p);\n }\n var o = x.splice(0, s);\n q.sigBytes -= r;\n }\n return new l.init(o, r);\n },\n clone: function () {\n var n = j.clone.call(this);\n n._data = this._data.clone();\n return n;\n },\n _minBufferSize: 0\n });\n var f = b.Hasher = i.extend({\n cfg: j.extend(),\n init: function (n) {\n this.cfg = this.cfg.extend(n);\n this.reset();\n },\n reset: function () {\n i.reset.call(this);\n this._doReset();\n },\n update: function (n) {\n this._append(n);\n this._process();\n return this;\n },\n finalize: function (n) {\n if (n) {\n this._append(n);\n }\n var o = this._doFinalize();\n return o;\n },\n blockSize: 512 / 32,\n _createHelper: function (n) {\n return function (p, o) {\n return new n.init(o).finalize(p);\n };\n },\n _createHmacHelper: function (n) {\n return function (p, o) {\n return new k.HMAC.init(n, o).finalize(p);\n };\n }\n });\n var k = a.algo = {};\n return a;\n}(Math);\n/*\nCryptoJS v3.1.2 x64-core-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function (g) {\n var a = CryptoJS,\n f = a.lib,\n e = f.Base,\n h = f.WordArray,\n a = a.x64 = {};\n a.Word = e.extend({\n init: function (b, c) {\n this.high = b;\n this.low = c;\n }\n });\n a.WordArray = e.extend({\n init: function (b, c) {\n b = this.words = b || [];\n this.sigBytes = c != g ? c : 8 * b.length;\n },\n toX32: function () {\n for (var b = this.words, c = b.length, a = [], d = 0; d < c; d++) {\n var e = b[d];\n a.push(e.high);\n a.push(e.low);\n }\n return h.create(a, this.sigBytes);\n },\n clone: function () {\n for (var b = e.clone.call(this), c = b.words = this.words.slice(0), a = c.length, d = 0; d < a; d++) c[d] = c[d].clone();\n return b;\n }\n });\n})();\n\n/*\nCryptoJS v3.1.2 cipher-core.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nCryptoJS.lib.Cipher || function (u) {\n var g = CryptoJS,\n f = g.lib,\n k = f.Base,\n l = f.WordArray,\n q = f.BufferedBlockAlgorithm,\n r = g.enc.Base64,\n v = g.algo.EvpKDF,\n n = f.Cipher = q.extend({\n cfg: k.extend(),\n createEncryptor: function (a, b) {\n return this.create(this._ENC_XFORM_MODE, a, b);\n },\n createDecryptor: function (a, b) {\n return this.create(this._DEC_XFORM_MODE, a, b);\n },\n init: function (a, b, c) {\n this.cfg = this.cfg.extend(c);\n this._xformMode = a;\n this._key = b;\n this.reset();\n },\n reset: function () {\n q.reset.call(this);\n this._doReset();\n },\n process: function (a) {\n this._append(a);\n return this._process();\n },\n finalize: function (a) {\n a && this._append(a);\n return this._doFinalize();\n },\n keySize: 4,\n ivSize: 4,\n _ENC_XFORM_MODE: 1,\n _DEC_XFORM_MODE: 2,\n _createHelper: function (a) {\n return {\n encrypt: function (b, c, d) {\n return (\"string\" == typeof c ? s : j).encrypt(a, b, c, d);\n },\n decrypt: function (b, c, d) {\n return (\"string\" == typeof c ? s : j).decrypt(a, b, c, d);\n }\n };\n }\n });\n f.StreamCipher = n.extend({\n _doFinalize: function () {\n return this._process(!0);\n },\n blockSize: 1\n });\n var m = g.mode = {},\n t = function (a, b, c) {\n var d = this._iv;\n d ? this._iv = u : d = this._prevBlock;\n for (var e = 0; e < c; e++) a[b + e] ^= d[e];\n },\n h = (f.BlockCipherMode = k.extend({\n createEncryptor: function (a, b) {\n return this.Encryptor.create(a, b);\n },\n createDecryptor: function (a, b) {\n return this.Decryptor.create(a, b);\n },\n init: function (a, b) {\n this._cipher = a;\n this._iv = b;\n }\n })).extend();\n h.Encryptor = h.extend({\n processBlock: function (a, b) {\n var c = this._cipher,\n d = c.blockSize;\n t.call(this, a, b, d);\n c.encryptBlock(a, b);\n this._prevBlock = a.slice(b, b + d);\n }\n });\n h.Decryptor = h.extend({\n processBlock: function (a, b) {\n var c = this._cipher,\n d = c.blockSize,\n e = a.slice(b, b + d);\n c.decryptBlock(a, b);\n t.call(this, a, b, d);\n this._prevBlock = e;\n }\n });\n m = m.CBC = h;\n h = (g.pad = {}).Pkcs7 = {\n pad: function (a, b) {\n for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, e = [], f = 0; f < c; f += 4) e.push(d);\n c = l.create(e, c);\n a.concat(c);\n },\n unpad: function (a) {\n a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255;\n }\n };\n f.BlockCipher = n.extend({\n cfg: n.cfg.extend({\n mode: m,\n padding: h\n }),\n reset: function () {\n n.reset.call(this);\n var a = this.cfg,\n b = a.iv,\n a = a.mode;\n if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor;else c = a.createDecryptor, this._minBufferSize = 1;\n this._mode = c.call(a, this, b && b.words);\n },\n _doProcessBlock: function (a, b) {\n this._mode.processBlock(a, b);\n },\n _doFinalize: function () {\n var a = this.cfg.padding;\n if (this._xformMode == this._ENC_XFORM_MODE) {\n a.pad(this._data, this.blockSize);\n var b = this._process(!0);\n } else b = this._process(!0), a.unpad(b);\n return b;\n },\n blockSize: 4\n });\n var p = f.CipherParams = k.extend({\n init: function (a) {\n this.mixIn(a);\n },\n toString: function (a) {\n return (a || this.formatter).stringify(this);\n }\n }),\n m = (g.format = {}).OpenSSL = {\n stringify: function (a) {\n var b = a.ciphertext;\n a = a.salt;\n return (a ? l.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(r);\n },\n parse: function (a) {\n a = r.parse(a);\n var b = a.words;\n if (1398893684 == b[0] && 1701076831 == b[1]) {\n var c = l.create(b.slice(2, 4));\n b.splice(0, 4);\n a.sigBytes -= 16;\n }\n return p.create({\n ciphertext: a,\n salt: c\n });\n }\n },\n j = f.SerializableCipher = k.extend({\n cfg: k.extend({\n format: m\n }),\n encrypt: function (a, b, c, d) {\n d = this.cfg.extend(d);\n var e = a.createEncryptor(c, d);\n b = e.finalize(b);\n e = e.cfg;\n return p.create({\n ciphertext: b,\n key: c,\n iv: e.iv,\n algorithm: a,\n mode: e.mode,\n padding: e.padding,\n blockSize: a.blockSize,\n formatter: d.format\n });\n },\n decrypt: function (a, b, c, d) {\n d = this.cfg.extend(d);\n b = this._parse(b, d.format);\n return a.createDecryptor(c, d).finalize(b.ciphertext);\n },\n _parse: function (a, b) {\n return \"string\" == typeof a ? b.parse(a, this) : a;\n }\n }),\n g = (g.kdf = {}).OpenSSL = {\n execute: function (a, b, c, d) {\n d || (d = l.random(8));\n a = v.create({\n keySize: b + c\n }).compute(a, d);\n c = l.create(a.words.slice(b), 4 * c);\n a.sigBytes = 4 * b;\n return p.create({\n key: a,\n iv: c,\n salt: d\n });\n }\n },\n s = f.PasswordBasedCipher = j.extend({\n cfg: j.cfg.extend({\n kdf: g\n }),\n encrypt: function (a, b, c, d) {\n d = this.cfg.extend(d);\n c = d.kdf.execute(c, a.keySize, a.ivSize);\n d.iv = c.iv;\n a = j.encrypt.call(this, a, b, c.key, d);\n a.mixIn(c);\n return a;\n },\n decrypt: function (a, b, c, d) {\n d = this.cfg.extend(d);\n b = this._parse(b, d.format);\n c = d.kdf.execute(c, a.keySize, a.ivSize, b.salt);\n d.iv = c.iv;\n return j.decrypt.call(this, a, b, c.key, d);\n }\n });\n}();\n\n/*\nCryptoJS v3.1.2 aes.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n for (var q = CryptoJS, x = q.lib.BlockCipher, r = q.algo, j = [], y = [], z = [], A = [], B = [], C = [], s = [], u = [], v = [], w = [], g = [], k = 0; 256 > k; k++) g[k] = 128 > k ? k << 1 : k << 1 ^ 283;\n for (var n = 0, l = 0, k = 0; 256 > k; k++) {\n var f = l ^ l << 1 ^ l << 2 ^ l << 3 ^ l << 4,\n f = f >>> 8 ^ f & 255 ^ 99;\n j[n] = f;\n y[f] = n;\n var t = g[n],\n D = g[t],\n E = g[D],\n b = 257 * g[f] ^ 16843008 * f;\n z[n] = b << 24 | b >>> 8;\n A[n] = b << 16 | b >>> 16;\n B[n] = b << 8 | b >>> 24;\n C[n] = b;\n b = 16843009 * E ^ 65537 * D ^ 257 * t ^ 16843008 * n;\n s[f] = b << 24 | b >>> 8;\n u[f] = b << 16 | b >>> 16;\n v[f] = b << 8 | b >>> 24;\n w[f] = b;\n n ? (n = t ^ g[g[g[E ^ t]]], l ^= g[g[l]]) : n = l = 1;\n }\n var F = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],\n r = r.AES = x.extend({\n _doReset: function () {\n for (var c = this._key, e = c.words, a = c.sigBytes / 4, c = 4 * ((this._nRounds = a + 6) + 1), b = this._keySchedule = [], h = 0; h < c; h++) if (h < a) b[h] = e[h];else {\n var d = b[h - 1];\n h % a ? 6 < a && 4 == h % a && (d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255]) : (d = d << 8 | d >>> 24, d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255], d ^= F[h / a | 0] << 24);\n b[h] = b[h - a] ^ d;\n }\n e = this._invKeySchedule = [];\n for (a = 0; a < c; a++) h = c - a, d = a % 4 ? b[h] : b[h - 4], e[a] = 4 > a || 4 >= h ? d : s[j[d >>> 24]] ^ u[j[d >>> 16 & 255]] ^ v[j[d >>> 8 & 255]] ^ w[j[d & 255]];\n },\n encryptBlock: function (c, e) {\n this._doCryptBlock(c, e, this._keySchedule, z, A, B, C, j);\n },\n decryptBlock: function (c, e) {\n var a = c[e + 1];\n c[e + 1] = c[e + 3];\n c[e + 3] = a;\n this._doCryptBlock(c, e, this._invKeySchedule, s, u, v, w, y);\n a = c[e + 1];\n c[e + 1] = c[e + 3];\n c[e + 3] = a;\n },\n _doCryptBlock: function (c, e, a, b, h, d, j, m) {\n for (var n = this._nRounds, f = c[e] ^ a[0], g = c[e + 1] ^ a[1], k = c[e + 2] ^ a[2], p = c[e + 3] ^ a[3], l = 4, t = 1; t < n; t++) var q = b[f >>> 24] ^ h[g >>> 16 & 255] ^ d[k >>> 8 & 255] ^ j[p & 255] ^ a[l++], r = b[g >>> 24] ^ h[k >>> 16 & 255] ^ d[p >>> 8 & 255] ^ j[f & 255] ^ a[l++], s = b[k >>> 24] ^ h[p >>> 16 & 255] ^ d[f >>> 8 & 255] ^ j[g & 255] ^ a[l++], p = b[p >>> 24] ^ h[f >>> 16 & 255] ^ d[g >>> 8 & 255] ^ j[k & 255] ^ a[l++], f = q, g = r, k = s;\n q = (m[f >>> 24] << 24 | m[g >>> 16 & 255] << 16 | m[k >>> 8 & 255] << 8 | m[p & 255]) ^ a[l++];\n r = (m[g >>> 24] << 24 | m[k >>> 16 & 255] << 16 | m[p >>> 8 & 255] << 8 | m[f & 255]) ^ a[l++];\n s = (m[k >>> 24] << 24 | m[p >>> 16 & 255] << 16 | m[f >>> 8 & 255] << 8 | m[g & 255]) ^ a[l++];\n p = (m[p >>> 24] << 24 | m[f >>> 16 & 255] << 16 | m[g >>> 8 & 255] << 8 | m[k & 255]) ^ a[l++];\n c[e] = q;\n c[e + 1] = r;\n c[e + 2] = s;\n c[e + 3] = p;\n },\n keySize: 8\n });\n q.AES = x._createHelper(r);\n})();\n\n/*\nCryptoJS v3.1.2 tripledes-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n function j(b, c) {\n var a = (this._lBlock >>> b ^ this._rBlock) & c;\n this._rBlock ^= a;\n this._lBlock ^= a << b;\n }\n function l(b, c) {\n var a = (this._rBlock >>> b ^ this._lBlock) & c;\n this._lBlock ^= a;\n this._rBlock ^= a << b;\n }\n var h = CryptoJS,\n e = h.lib,\n n = e.WordArray,\n e = e.BlockCipher,\n g = h.algo,\n q = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4],\n p = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32],\n r = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],\n s = [{\n \"0\": 8421888,\n 268435456: 32768,\n 536870912: 8421378,\n 805306368: 2,\n 1073741824: 512,\n 1342177280: 8421890,\n 1610612736: 8389122,\n 1879048192: 8388608,\n 2147483648: 514,\n 2415919104: 8389120,\n 2684354560: 33280,\n 2952790016: 8421376,\n 3221225472: 32770,\n 3489660928: 8388610,\n 3758096384: 0,\n 4026531840: 33282,\n 134217728: 0,\n 402653184: 8421890,\n 671088640: 33282,\n 939524096: 32768,\n 1207959552: 8421888,\n 1476395008: 512,\n 1744830464: 8421378,\n 2013265920: 2,\n 2281701376: 8389120,\n 2550136832: 33280,\n 2818572288: 8421376,\n 3087007744: 8389122,\n 3355443200: 8388610,\n 3623878656: 32770,\n 3892314112: 514,\n 4160749568: 8388608,\n 1: 32768,\n 268435457: 2,\n 536870913: 8421888,\n 805306369: 8388608,\n 1073741825: 8421378,\n 1342177281: 33280,\n 1610612737: 512,\n 1879048193: 8389122,\n 2147483649: 8421890,\n 2415919105: 8421376,\n 2684354561: 8388610,\n 2952790017: 33282,\n 3221225473: 514,\n 3489660929: 8389120,\n 3758096385: 32770,\n 4026531841: 0,\n 134217729: 8421890,\n 402653185: 8421376,\n 671088641: 8388608,\n 939524097: 512,\n 1207959553: 32768,\n 1476395009: 8388610,\n 1744830465: 2,\n 2013265921: 33282,\n 2281701377: 32770,\n 2550136833: 8389122,\n 2818572289: 514,\n 3087007745: 8421888,\n 3355443201: 8389120,\n 3623878657: 0,\n 3892314113: 33280,\n 4160749569: 8421378\n }, {\n \"0\": 1074282512,\n 16777216: 16384,\n 33554432: 524288,\n 50331648: 1074266128,\n 67108864: 1073741840,\n 83886080: 1074282496,\n 100663296: 1073758208,\n 117440512: 16,\n 134217728: 540672,\n 150994944: 1073758224,\n 167772160: 1073741824,\n 184549376: 540688,\n 201326592: 524304,\n 218103808: 0,\n 234881024: 16400,\n 251658240: 1074266112,\n 8388608: 1073758208,\n 25165824: 540688,\n 41943040: 16,\n 58720256: 1073758224,\n 75497472: 1074282512,\n 92274688: 1073741824,\n 109051904: 524288,\n 125829120: 1074266128,\n 142606336: 524304,\n 159383552: 0,\n 176160768: 16384,\n 192937984: 1074266112,\n 209715200: 1073741840,\n 226492416: 540672,\n 243269632: 1074282496,\n 260046848: 16400,\n 268435456: 0,\n 285212672: 1074266128,\n 301989888: 1073758224,\n 318767104: 1074282496,\n 335544320: 1074266112,\n 352321536: 16,\n 369098752: 540688,\n 385875968: 16384,\n 402653184: 16400,\n 419430400: 524288,\n 436207616: 524304,\n 452984832: 1073741840,\n 469762048: 540672,\n 486539264: 1073758208,\n 503316480: 1073741824,\n 520093696: 1074282512,\n 276824064: 540688,\n 293601280: 524288,\n 310378496: 1074266112,\n 327155712: 16384,\n 343932928: 1073758208,\n 360710144: 1074282512,\n 377487360: 16,\n 394264576: 1073741824,\n 411041792: 1074282496,\n 427819008: 1073741840,\n 444596224: 1073758224,\n 461373440: 524304,\n 478150656: 0,\n 494927872: 16400,\n 511705088: 1074266128,\n 528482304: 540672\n }, {\n \"0\": 260,\n 1048576: 0,\n 2097152: 67109120,\n 3145728: 65796,\n 4194304: 65540,\n 5242880: 67108868,\n 6291456: 67174660,\n 7340032: 67174400,\n 8388608: 67108864,\n 9437184: 67174656,\n 10485760: 65792,\n 11534336: 67174404,\n 12582912: 67109124,\n 13631488: 65536,\n 14680064: 4,\n 15728640: 256,\n 524288: 67174656,\n 1572864: 67174404,\n 2621440: 0,\n 3670016: 67109120,\n 4718592: 67108868,\n 5767168: 65536,\n 6815744: 65540,\n 7864320: 260,\n 8912896: 4,\n 9961472: 256,\n 11010048: 67174400,\n 12058624: 65796,\n 13107200: 65792,\n 14155776: 67109124,\n 15204352: 67174660,\n 16252928: 67108864,\n 16777216: 67174656,\n 17825792: 65540,\n 18874368: 65536,\n 19922944: 67109120,\n 20971520: 256,\n 22020096: 67174660,\n 23068672: 67108868,\n 24117248: 0,\n 25165824: 67109124,\n 26214400: 67108864,\n 27262976: 4,\n 28311552: 65792,\n 29360128: 67174400,\n 30408704: 260,\n 31457280: 65796,\n 32505856: 67174404,\n 17301504: 67108864,\n 18350080: 260,\n 19398656: 67174656,\n 20447232: 0,\n 21495808: 65540,\n 22544384: 67109120,\n 23592960: 256,\n 24641536: 67174404,\n 25690112: 65536,\n 26738688: 67174660,\n 27787264: 65796,\n 28835840: 67108868,\n 29884416: 67109124,\n 30932992: 67174400,\n 31981568: 4,\n 33030144: 65792\n }, {\n \"0\": 2151682048,\n 65536: 2147487808,\n 131072: 4198464,\n 196608: 2151677952,\n 262144: 0,\n 327680: 4198400,\n 393216: 2147483712,\n 458752: 4194368,\n 524288: 2147483648,\n 589824: 4194304,\n 655360: 64,\n 720896: 2147487744,\n 786432: 2151678016,\n 851968: 4160,\n 917504: 4096,\n 983040: 2151682112,\n 32768: 2147487808,\n 98304: 64,\n 163840: 2151678016,\n 229376: 2147487744,\n 294912: 4198400,\n 360448: 2151682112,\n 425984: 0,\n 491520: 2151677952,\n 557056: 4096,\n 622592: 2151682048,\n 688128: 4194304,\n 753664: 4160,\n 819200: 2147483648,\n 884736: 4194368,\n 950272: 4198464,\n 1015808: 2147483712,\n 1048576: 4194368,\n 1114112: 4198400,\n 1179648: 2147483712,\n 1245184: 0,\n 1310720: 4160,\n 1376256: 2151678016,\n 1441792: 2151682048,\n 1507328: 2147487808,\n 1572864: 2151682112,\n 1638400: 2147483648,\n 1703936: 2151677952,\n 1769472: 4198464,\n 1835008: 2147487744,\n 1900544: 4194304,\n 1966080: 64,\n 2031616: 4096,\n 1081344: 2151677952,\n 1146880: 2151682112,\n 1212416: 0,\n 1277952: 4198400,\n 1343488: 4194368,\n 1409024: 2147483648,\n 1474560: 2147487808,\n 1540096: 64,\n 1605632: 2147483712,\n 1671168: 4096,\n 1736704: 2147487744,\n 1802240: 2151678016,\n 1867776: 4160,\n 1933312: 2151682048,\n 1998848: 4194304,\n 2064384: 4198464\n }, {\n \"0\": 128,\n 4096: 17039360,\n 8192: 262144,\n 12288: 536870912,\n 16384: 537133184,\n 20480: 16777344,\n 24576: 553648256,\n 28672: 262272,\n 32768: 16777216,\n 36864: 537133056,\n 40960: 536871040,\n 45056: 553910400,\n 49152: 553910272,\n 53248: 0,\n 57344: 17039488,\n 61440: 553648128,\n 2048: 17039488,\n 6144: 553648256,\n 10240: 128,\n 14336: 17039360,\n 18432: 262144,\n 22528: 537133184,\n 26624: 553910272,\n 30720: 536870912,\n 34816: 537133056,\n 38912: 0,\n 43008: 553910400,\n 47104: 16777344,\n 51200: 536871040,\n 55296: 553648128,\n 59392: 16777216,\n 63488: 262272,\n 65536: 262144,\n 69632: 128,\n 73728: 536870912,\n 77824: 553648256,\n 81920: 16777344,\n 86016: 553910272,\n 90112: 537133184,\n 94208: 16777216,\n 98304: 553910400,\n 102400: 553648128,\n 106496: 17039360,\n 110592: 537133056,\n 114688: 262272,\n 118784: 536871040,\n 122880: 0,\n 126976: 17039488,\n 67584: 553648256,\n 71680: 16777216,\n 75776: 17039360,\n 79872: 537133184,\n 83968: 536870912,\n 88064: 17039488,\n 92160: 128,\n 96256: 553910272,\n 100352: 262272,\n 104448: 553910400,\n 108544: 0,\n 112640: 553648128,\n 116736: 16777344,\n 120832: 262144,\n 124928: 537133056,\n 129024: 536871040\n }, {\n \"0\": 268435464,\n 256: 8192,\n 512: 270532608,\n 768: 270540808,\n 1024: 268443648,\n 1280: 2097152,\n 1536: 2097160,\n 1792: 268435456,\n 2048: 0,\n 2304: 268443656,\n 2560: 2105344,\n 2816: 8,\n 3072: 270532616,\n 3328: 2105352,\n 3584: 8200,\n 3840: 270540800,\n 128: 270532608,\n 384: 270540808,\n 640: 8,\n 896: 2097152,\n 1152: 2105352,\n 1408: 268435464,\n 1664: 268443648,\n 1920: 8200,\n 2176: 2097160,\n 2432: 8192,\n 2688: 268443656,\n 2944: 270532616,\n 3200: 0,\n 3456: 270540800,\n 3712: 2105344,\n 3968: 268435456,\n 4096: 268443648,\n 4352: 270532616,\n 4608: 270540808,\n 4864: 8200,\n 5120: 2097152,\n 5376: 268435456,\n 5632: 268435464,\n 5888: 2105344,\n 6144: 2105352,\n 6400: 0,\n 6656: 8,\n 6912: 270532608,\n 7168: 8192,\n 7424: 268443656,\n 7680: 270540800,\n 7936: 2097160,\n 4224: 8,\n 4480: 2105344,\n 4736: 2097152,\n 4992: 268435464,\n 5248: 268443648,\n 5504: 8200,\n 5760: 270540808,\n 6016: 270532608,\n 6272: 270540800,\n 6528: 270532616,\n 6784: 8192,\n 7040: 2105352,\n 7296: 2097160,\n 7552: 0,\n 7808: 268435456,\n 8064: 268443656\n }, {\n \"0\": 1048576,\n 16: 33555457,\n 32: 1024,\n 48: 1049601,\n 64: 34604033,\n 80: 0,\n 96: 1,\n 112: 34603009,\n 128: 33555456,\n 144: 1048577,\n 160: 33554433,\n 176: 34604032,\n 192: 34603008,\n 208: 1025,\n 224: 1049600,\n 240: 33554432,\n 8: 34603009,\n 24: 0,\n 40: 33555457,\n 56: 34604032,\n 72: 1048576,\n 88: 33554433,\n 104: 33554432,\n 120: 1025,\n 136: 1049601,\n 152: 33555456,\n 168: 34603008,\n 184: 1048577,\n 200: 1024,\n 216: 34604033,\n 232: 1,\n 248: 1049600,\n 256: 33554432,\n 272: 1048576,\n 288: 33555457,\n 304: 34603009,\n 320: 1048577,\n 336: 33555456,\n 352: 34604032,\n 368: 1049601,\n 384: 1025,\n 400: 34604033,\n 416: 1049600,\n 432: 1,\n 448: 0,\n 464: 34603008,\n 480: 33554433,\n 496: 1024,\n 264: 1049600,\n 280: 33555457,\n 296: 34603009,\n 312: 1,\n 328: 33554432,\n 344: 1048576,\n 360: 1025,\n 376: 34604032,\n 392: 33554433,\n 408: 34603008,\n 424: 0,\n 440: 34604033,\n 456: 1049601,\n 472: 1024,\n 488: 33555456,\n 504: 1048577\n }, {\n \"0\": 134219808,\n 1: 131072,\n 2: 134217728,\n 3: 32,\n 4: 131104,\n 5: 134350880,\n 6: 134350848,\n 7: 2048,\n 8: 134348800,\n 9: 134219776,\n 10: 133120,\n 11: 134348832,\n 12: 2080,\n 13: 0,\n 14: 134217760,\n 15: 133152,\n 2147483648: 2048,\n 2147483649: 134350880,\n 2147483650: 134219808,\n 2147483651: 134217728,\n 2147483652: 134348800,\n 2147483653: 133120,\n 2147483654: 133152,\n 2147483655: 32,\n 2147483656: 134217760,\n 2147483657: 2080,\n 2147483658: 131104,\n 2147483659: 134350848,\n 2147483660: 0,\n 2147483661: 134348832,\n 2147483662: 134219776,\n 2147483663: 131072,\n 16: 133152,\n 17: 134350848,\n 18: 32,\n 19: 2048,\n 20: 134219776,\n 21: 134217760,\n 22: 134348832,\n 23: 131072,\n 24: 0,\n 25: 131104,\n 26: 134348800,\n 27: 134219808,\n 28: 134350880,\n 29: 133120,\n 30: 2080,\n 31: 134217728,\n 2147483664: 131072,\n 2147483665: 2048,\n 2147483666: 134348832,\n 2147483667: 133152,\n 2147483668: 32,\n 2147483669: 134348800,\n 2147483670: 134217728,\n 2147483671: 134219808,\n 2147483672: 134350880,\n 2147483673: 134217760,\n 2147483674: 134219776,\n 2147483675: 0,\n 2147483676: 133120,\n 2147483677: 2080,\n 2147483678: 131104,\n 2147483679: 134350848\n }],\n t = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679],\n m = g.DES = e.extend({\n _doReset: function () {\n for (var b = this._key.words, c = [], a = 0; 56 > a; a++) {\n var f = q[a] - 1;\n c[a] = b[f >>> 5] >>> 31 - f % 32 & 1;\n }\n b = this._subKeys = [];\n for (f = 0; 16 > f; f++) {\n for (var d = b[f] = [], e = r[f], a = 0; 24 > a; a++) d[a / 6 | 0] |= c[(p[a] - 1 + e) % 28] << 31 - a % 6, d[4 + (a / 6 | 0)] |= c[28 + (p[a + 24] - 1 + e) % 28] << 31 - a % 6;\n d[0] = d[0] << 1 | d[0] >>> 31;\n for (a = 1; 7 > a; a++) d[a] >>>= 4 * (a - 1) + 3;\n d[7] = d[7] << 5 | d[7] >>> 27;\n }\n c = this._invSubKeys = [];\n for (a = 0; 16 > a; a++) c[a] = b[15 - a];\n },\n encryptBlock: function (b, c) {\n this._doCryptBlock(b, c, this._subKeys);\n },\n decryptBlock: function (b, c) {\n this._doCryptBlock(b, c, this._invSubKeys);\n },\n _doCryptBlock: function (b, c, a) {\n this._lBlock = b[c];\n this._rBlock = b[c + 1];\n j.call(this, 4, 252645135);\n j.call(this, 16, 65535);\n l.call(this, 2, 858993459);\n l.call(this, 8, 16711935);\n j.call(this, 1, 1431655765);\n for (var f = 0; 16 > f; f++) {\n for (var d = a[f], e = this._lBlock, h = this._rBlock, g = 0, k = 0; 8 > k; k++) g |= s[k][((h ^ d[k]) & t[k]) >>> 0];\n this._lBlock = h;\n this._rBlock = e ^ g;\n }\n a = this._lBlock;\n this._lBlock = this._rBlock;\n this._rBlock = a;\n j.call(this, 1, 1431655765);\n l.call(this, 8, 16711935);\n l.call(this, 2, 858993459);\n j.call(this, 16, 65535);\n j.call(this, 4, 252645135);\n b[c] = this._lBlock;\n b[c + 1] = this._rBlock;\n },\n keySize: 2,\n ivSize: 2,\n blockSize: 2\n });\n h.DES = e._createHelper(m);\n g = g.TripleDES = e.extend({\n _doReset: function () {\n var b = this._key.words;\n this._des1 = m.createEncryptor(n.create(b.slice(0, 2)));\n this._des2 = m.createEncryptor(n.create(b.slice(2, 4)));\n this._des3 = m.createEncryptor(n.create(b.slice(4, 6)));\n },\n encryptBlock: function (b, c) {\n this._des1.encryptBlock(b, c);\n this._des2.decryptBlock(b, c);\n this._des3.encryptBlock(b, c);\n },\n decryptBlock: function (b, c) {\n this._des3.decryptBlock(b, c);\n this._des2.encryptBlock(b, c);\n this._des1.decryptBlock(b, c);\n },\n keySize: 6,\n ivSize: 2,\n blockSize: 2\n });\n h.TripleDES = e._createHelper(g);\n})();\n\n/*\nCryptoJS v3.1.2 enc-base64.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var h = CryptoJS,\n j = h.lib.WordArray;\n h.enc.Base64 = {\n stringify: function (b) {\n var e = b.words,\n f = b.sigBytes,\n c = this._map;\n b.clamp();\n b = [];\n for (var a = 0; a < f; a += 3) for (var d = (e[a >>> 2] >>> 24 - 8 * (a % 4) & 255) << 16 | (e[a + 1 >>> 2] >>> 24 - 8 * ((a + 1) % 4) & 255) << 8 | e[a + 2 >>> 2] >>> 24 - 8 * ((a + 2) % 4) & 255, g = 0; 4 > g && a + 0.75 * g < f; g++) b.push(c.charAt(d >>> 6 * (3 - g) & 63));\n if (e = c.charAt(64)) for (; b.length % 4;) b.push(e);\n return b.join(\"\");\n },\n parse: function (b) {\n var e = b.length,\n f = this._map,\n c = f.charAt(64);\n c && (c = b.indexOf(c), -1 != c && (e = c));\n for (var c = [], a = 0, d = 0; d < e; d++) if (d % 4) {\n var g = f.indexOf(b.charAt(d - 1)) << 2 * (d % 4),\n h = f.indexOf(b.charAt(d)) >>> 6 - 2 * (d % 4);\n c[a >>> 2] |= (g | h) << 24 - 8 * (a % 4);\n a++;\n }\n return j.create(c, a);\n },\n _map: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n };\n})();\n\n/*\nCryptoJS v3.1.2 md5.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function (E) {\n function h(a, f, g, j, p, h, k) {\n a = a + (f & g | ~f & j) + p + k;\n return (a << h | a >>> 32 - h) + f;\n }\n function k(a, f, g, j, p, h, k) {\n a = a + (f & j | g & ~j) + p + k;\n return (a << h | a >>> 32 - h) + f;\n }\n function l(a, f, g, j, h, k, l) {\n a = a + (f ^ g ^ j) + h + l;\n return (a << k | a >>> 32 - k) + f;\n }\n function n(a, f, g, j, h, k, l) {\n a = a + (g ^ (f | ~j)) + h + l;\n return (a << k | a >>> 32 - k) + f;\n }\n for (var r = CryptoJS, q = r.lib, F = q.WordArray, s = q.Hasher, q = r.algo, a = [], t = 0; 64 > t; t++) a[t] = 4294967296 * E.abs(E.sin(t + 1)) | 0;\n q = q.MD5 = s.extend({\n _doReset: function () {\n this._hash = new F.init([1732584193, 4023233417, 2562383102, 271733878]);\n },\n _doProcessBlock: function (m, f) {\n for (var g = 0; 16 > g; g++) {\n var j = f + g,\n p = m[j];\n m[j] = (p << 8 | p >>> 24) & 16711935 | (p << 24 | p >>> 8) & 4278255360;\n }\n var g = this._hash.words,\n j = m[f + 0],\n p = m[f + 1],\n q = m[f + 2],\n r = m[f + 3],\n s = m[f + 4],\n t = m[f + 5],\n u = m[f + 6],\n v = m[f + 7],\n w = m[f + 8],\n x = m[f + 9],\n y = m[f + 10],\n z = m[f + 11],\n A = m[f + 12],\n B = m[f + 13],\n C = m[f + 14],\n D = m[f + 15],\n b = g[0],\n c = g[1],\n d = g[2],\n e = g[3],\n b = h(b, c, d, e, j, 7, a[0]),\n e = h(e, b, c, d, p, 12, a[1]),\n d = h(d, e, b, c, q, 17, a[2]),\n c = h(c, d, e, b, r, 22, a[3]),\n b = h(b, c, d, e, s, 7, a[4]),\n e = h(e, b, c, d, t, 12, a[5]),\n d = h(d, e, b, c, u, 17, a[6]),\n c = h(c, d, e, b, v, 22, a[7]),\n b = h(b, c, d, e, w, 7, a[8]),\n e = h(e, b, c, d, x, 12, a[9]),\n d = h(d, e, b, c, y, 17, a[10]),\n c = h(c, d, e, b, z, 22, a[11]),\n b = h(b, c, d, e, A, 7, a[12]),\n e = h(e, b, c, d, B, 12, a[13]),\n d = h(d, e, b, c, C, 17, a[14]),\n c = h(c, d, e, b, D, 22, a[15]),\n b = k(b, c, d, e, p, 5, a[16]),\n e = k(e, b, c, d, u, 9, a[17]),\n d = k(d, e, b, c, z, 14, a[18]),\n c = k(c, d, e, b, j, 20, a[19]),\n b = k(b, c, d, e, t, 5, a[20]),\n e = k(e, b, c, d, y, 9, a[21]),\n d = k(d, e, b, c, D, 14, a[22]),\n c = k(c, d, e, b, s, 20, a[23]),\n b = k(b, c, d, e, x, 5, a[24]),\n e = k(e, b, c, d, C, 9, a[25]),\n d = k(d, e, b, c, r, 14, a[26]),\n c = k(c, d, e, b, w, 20, a[27]),\n b = k(b, c, d, e, B, 5, a[28]),\n e = k(e, b, c, d, q, 9, a[29]),\n d = k(d, e, b, c, v, 14, a[30]),\n c = k(c, d, e, b, A, 20, a[31]),\n b = l(b, c, d, e, t, 4, a[32]),\n e = l(e, b, c, d, w, 11, a[33]),\n d = l(d, e, b, c, z, 16, a[34]),\n c = l(c, d, e, b, C, 23, a[35]),\n b = l(b, c, d, e, p, 4, a[36]),\n e = l(e, b, c, d, s, 11, a[37]),\n d = l(d, e, b, c, v, 16, a[38]),\n c = l(c, d, e, b, y, 23, a[39]),\n b = l(b, c, d, e, B, 4, a[40]),\n e = l(e, b, c, d, j, 11, a[41]),\n d = l(d, e, b, c, r, 16, a[42]),\n c = l(c, d, e, b, u, 23, a[43]),\n b = l(b, c, d, e, x, 4, a[44]),\n e = l(e, b, c, d, A, 11, a[45]),\n d = l(d, e, b, c, D, 16, a[46]),\n c = l(c, d, e, b, q, 23, a[47]),\n b = n(b, c, d, e, j, 6, a[48]),\n e = n(e, b, c, d, v, 10, a[49]),\n d = n(d, e, b, c, C, 15, a[50]),\n c = n(c, d, e, b, t, 21, a[51]),\n b = n(b, c, d, e, A, 6, a[52]),\n e = n(e, b, c, d, r, 10, a[53]),\n d = n(d, e, b, c, y, 15, a[54]),\n c = n(c, d, e, b, p, 21, a[55]),\n b = n(b, c, d, e, w, 6, a[56]),\n e = n(e, b, c, d, D, 10, a[57]),\n d = n(d, e, b, c, u, 15, a[58]),\n c = n(c, d, e, b, B, 21, a[59]),\n b = n(b, c, d, e, s, 6, a[60]),\n e = n(e, b, c, d, z, 10, a[61]),\n d = n(d, e, b, c, q, 15, a[62]),\n c = n(c, d, e, b, x, 21, a[63]);\n g[0] = g[0] + b | 0;\n g[1] = g[1] + c | 0;\n g[2] = g[2] + d | 0;\n g[3] = g[3] + e | 0;\n },\n _doFinalize: function () {\n var a = this._data,\n f = a.words,\n g = 8 * this._nDataBytes,\n j = 8 * a.sigBytes;\n f[j >>> 5] |= 128 << 24 - j % 32;\n var h = E.floor(g / 4294967296);\n f[(j + 64 >>> 9 << 4) + 15] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360;\n f[(j + 64 >>> 9 << 4) + 14] = (g << 8 | g >>> 24) & 16711935 | (g << 24 | g >>> 8) & 4278255360;\n a.sigBytes = 4 * (f.length + 1);\n this._process();\n a = this._hash;\n f = a.words;\n for (g = 0; 4 > g; g++) j = f[g], f[g] = (j << 8 | j >>> 24) & 16711935 | (j << 24 | j >>> 8) & 4278255360;\n return a;\n },\n clone: function () {\n var a = s.clone.call(this);\n a._hash = this._hash.clone();\n return a;\n }\n });\n r.MD5 = s._createHelper(q);\n r.HmacMD5 = s._createHmacHelper(q);\n})(Math);\n\n/*\nCryptoJS v3.1.2 sha1-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var k = CryptoJS,\n b = k.lib,\n m = b.WordArray,\n l = b.Hasher,\n d = [],\n b = k.algo.SHA1 = l.extend({\n _doReset: function () {\n this._hash = new m.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]);\n },\n _doProcessBlock: function (n, p) {\n for (var a = this._hash.words, e = a[0], f = a[1], h = a[2], j = a[3], b = a[4], c = 0; 80 > c; c++) {\n if (16 > c) d[c] = n[p + c] | 0;else {\n var g = d[c - 3] ^ d[c - 8] ^ d[c - 14] ^ d[c - 16];\n d[c] = g << 1 | g >>> 31;\n }\n g = (e << 5 | e >>> 27) + b + d[c];\n g = 20 > c ? g + ((f & h | ~f & j) + 1518500249) : 40 > c ? g + ((f ^ h ^ j) + 1859775393) : 60 > c ? g + ((f & h | f & j | h & j) - 1894007588) : g + ((f ^ h ^ j) - 899497514);\n b = j;\n j = h;\n h = f << 30 | f >>> 2;\n f = e;\n e = g;\n }\n a[0] = a[0] + e | 0;\n a[1] = a[1] + f | 0;\n a[2] = a[2] + h | 0;\n a[3] = a[3] + j | 0;\n a[4] = a[4] + b | 0;\n },\n _doFinalize: function () {\n var b = this._data,\n d = b.words,\n a = 8 * this._nDataBytes,\n e = 8 * b.sigBytes;\n d[e >>> 5] |= 128 << 24 - e % 32;\n d[(e + 64 >>> 9 << 4) + 14] = Math.floor(a / 4294967296);\n d[(e + 64 >>> 9 << 4) + 15] = a;\n b.sigBytes = 4 * d.length;\n this._process();\n return this._hash;\n },\n clone: function () {\n var b = l.clone.call(this);\n b._hash = this._hash.clone();\n return b;\n }\n });\n k.SHA1 = l._createHelper(b);\n k.HmacSHA1 = l._createHmacHelper(b);\n})();\n\n/*\nCryptoJS v3.1.2 sha256-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function (k) {\n for (var g = CryptoJS, h = g.lib, v = h.WordArray, j = h.Hasher, h = g.algo, s = [], t = [], u = function (q) {\n return 4294967296 * (q - (q | 0)) | 0;\n }, l = 2, b = 0; 64 > b;) {\n var d;\n a: {\n d = l;\n for (var w = k.sqrt(d), r = 2; r <= w; r++) if (!(d % r)) {\n d = !1;\n break a;\n }\n d = !0;\n }\n d && (8 > b && (s[b] = u(k.pow(l, 0.5))), t[b] = u(k.pow(l, 1 / 3)), b++);\n l++;\n }\n var n = [],\n h = h.SHA256 = j.extend({\n _doReset: function () {\n this._hash = new v.init(s.slice(0));\n },\n _doProcessBlock: function (q, h) {\n for (var a = this._hash.words, c = a[0], d = a[1], b = a[2], k = a[3], f = a[4], g = a[5], j = a[6], l = a[7], e = 0; 64 > e; e++) {\n if (16 > e) n[e] = q[h + e] | 0;else {\n var m = n[e - 15],\n p = n[e - 2];\n n[e] = ((m << 25 | m >>> 7) ^ (m << 14 | m >>> 18) ^ m >>> 3) + n[e - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + n[e - 16];\n }\n m = l + ((f << 26 | f >>> 6) ^ (f << 21 | f >>> 11) ^ (f << 7 | f >>> 25)) + (f & g ^ ~f & j) + t[e] + n[e];\n p = ((c << 30 | c >>> 2) ^ (c << 19 | c >>> 13) ^ (c << 10 | c >>> 22)) + (c & d ^ c & b ^ d & b);\n l = j;\n j = g;\n g = f;\n f = k + m | 0;\n k = b;\n b = d;\n d = c;\n c = m + p | 0;\n }\n a[0] = a[0] + c | 0;\n a[1] = a[1] + d | 0;\n a[2] = a[2] + b | 0;\n a[3] = a[3] + k | 0;\n a[4] = a[4] + f | 0;\n a[5] = a[5] + g | 0;\n a[6] = a[6] + j | 0;\n a[7] = a[7] + l | 0;\n },\n _doFinalize: function () {\n var d = this._data,\n b = d.words,\n a = 8 * this._nDataBytes,\n c = 8 * d.sigBytes;\n b[c >>> 5] |= 128 << 24 - c % 32;\n b[(c + 64 >>> 9 << 4) + 14] = k.floor(a / 4294967296);\n b[(c + 64 >>> 9 << 4) + 15] = a;\n d.sigBytes = 4 * b.length;\n this._process();\n return this._hash;\n },\n clone: function () {\n var b = j.clone.call(this);\n b._hash = this._hash.clone();\n return b;\n }\n });\n g.SHA256 = j._createHelper(h);\n g.HmacSHA256 = j._createHmacHelper(h);\n})(Math);\n\n/*\nCryptoJS v3.1.2 sha224-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var b = CryptoJS,\n d = b.lib.WordArray,\n a = b.algo,\n c = a.SHA256,\n a = a.SHA224 = c.extend({\n _doReset: function () {\n this._hash = new d.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428]);\n },\n _doFinalize: function () {\n var a = c._doFinalize.call(this);\n a.sigBytes -= 4;\n return a;\n }\n });\n b.SHA224 = c._createHelper(a);\n b.HmacSHA224 = c._createHmacHelper(a);\n})();\n\n/*\nCryptoJS v3.1.2 sha512-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n function a() {\n return d.create.apply(d, arguments);\n }\n for (var n = CryptoJS, r = n.lib.Hasher, e = n.x64, d = e.Word, T = e.WordArray, e = n.algo, ea = [a(1116352408, 3609767458), a(1899447441, 602891725), a(3049323471, 3964484399), a(3921009573, 2173295548), a(961987163, 4081628472), a(1508970993, 3053834265), a(2453635748, 2937671579), a(2870763221, 3664609560), a(3624381080, 2734883394), a(310598401, 1164996542), a(607225278, 1323610764), a(1426881987, 3590304994), a(1925078388, 4068182383), a(2162078206, 991336113), a(2614888103, 633803317), a(3248222580, 3479774868), a(3835390401, 2666613458), a(4022224774, 944711139), a(264347078, 2341262773), a(604807628, 2007800933), a(770255983, 1495990901), a(1249150122, 1856431235), a(1555081692, 3175218132), a(1996064986, 2198950837), a(2554220882, 3999719339), a(2821834349, 766784016), a(2952996808, 2566594879), a(3210313671, 3203337956), a(3336571891, 1034457026), a(3584528711, 2466948901), a(113926993, 3758326383), a(338241895, 168717936), a(666307205, 1188179964), a(773529912, 1546045734), a(1294757372, 1522805485), a(1396182291, 2643833823), a(1695183700, 2343527390), a(1986661051, 1014477480), a(2177026350, 1206759142), a(2456956037, 344077627), a(2730485921, 1290863460), a(2820302411, 3158454273), a(3259730800, 3505952657), a(3345764771, 106217008), a(3516065817, 3606008344), a(3600352804, 1432725776), a(4094571909, 1467031594), a(275423344, 851169720), a(430227734, 3100823752), a(506948616, 1363258195), a(659060556, 3750685593), a(883997877, 3785050280), a(958139571, 3318307427), a(1322822218, 3812723403), a(1537002063, 2003034995), a(1747873779, 3602036899), a(1955562222, 1575990012), a(2024104815, 1125592928), a(2227730452, 2716904306), a(2361852424, 442776044), a(2428436474, 593698344), a(2756734187, 3733110249), a(3204031479, 2999351573), a(3329325298, 3815920427), a(3391569614, 3928383900), a(3515267271, 566280711), a(3940187606, 3454069534), a(4118630271, 4000239992), a(116418474, 1914138554), a(174292421, 2731055270), a(289380356, 3203993006), a(460393269, 320620315), a(685471733, 587496836), a(852142971, 1086792851), a(1017036298, 365543100), a(1126000580, 2618297676), a(1288033470, 3409855158), a(1501505948, 4234509866), a(1607167915, 987167468), a(1816402316, 1246189591)], v = [], w = 0; 80 > w; w++) v[w] = a();\n e = e.SHA512 = r.extend({\n _doReset: function () {\n this._hash = new T.init([new d.init(1779033703, 4089235720), new d.init(3144134277, 2227873595), new d.init(1013904242, 4271175723), new d.init(2773480762, 1595750129), new d.init(1359893119, 2917565137), new d.init(2600822924, 725511199), new d.init(528734635, 4215389547), new d.init(1541459225, 327033209)]);\n },\n _doProcessBlock: function (a, d) {\n for (var f = this._hash.words, F = f[0], e = f[1], n = f[2], r = f[3], G = f[4], H = f[5], I = f[6], f = f[7], w = F.high, J = F.low, X = e.high, K = e.low, Y = n.high, L = n.low, Z = r.high, M = r.low, $ = G.high, N = G.low, aa = H.high, O = H.low, ba = I.high, P = I.low, ca = f.high, Q = f.low, k = w, g = J, z = X, x = K, A = Y, y = L, U = Z, B = M, l = $, h = N, R = aa, C = O, S = ba, D = P, V = ca, E = Q, m = 0; 80 > m; m++) {\n var s = v[m];\n if (16 > m) var j = s.high = a[d + 2 * m] | 0,\n b = s.low = a[d + 2 * m + 1] | 0;else {\n var j = v[m - 15],\n b = j.high,\n p = j.low,\n j = (b >>> 1 | p << 31) ^ (b >>> 8 | p << 24) ^ b >>> 7,\n p = (p >>> 1 | b << 31) ^ (p >>> 8 | b << 24) ^ (p >>> 7 | b << 25),\n u = v[m - 2],\n b = u.high,\n c = u.low,\n u = (b >>> 19 | c << 13) ^ (b << 3 | c >>> 29) ^ b >>> 6,\n c = (c >>> 19 | b << 13) ^ (c << 3 | b >>> 29) ^ (c >>> 6 | b << 26),\n b = v[m - 7],\n W = b.high,\n t = v[m - 16],\n q = t.high,\n t = t.low,\n b = p + b.low,\n j = j + W + (b >>> 0 < p >>> 0 ? 1 : 0),\n b = b + c,\n j = j + u + (b >>> 0 < c >>> 0 ? 1 : 0),\n b = b + t,\n j = j + q + (b >>> 0 < t >>> 0 ? 1 : 0);\n s.high = j;\n s.low = b;\n }\n var W = l & R ^ ~l & S,\n t = h & C ^ ~h & D,\n s = k & z ^ k & A ^ z & A,\n T = g & x ^ g & y ^ x & y,\n p = (k >>> 28 | g << 4) ^ (k << 30 | g >>> 2) ^ (k << 25 | g >>> 7),\n u = (g >>> 28 | k << 4) ^ (g << 30 | k >>> 2) ^ (g << 25 | k >>> 7),\n c = ea[m],\n fa = c.high,\n da = c.low,\n c = E + ((h >>> 14 | l << 18) ^ (h >>> 18 | l << 14) ^ (h << 23 | l >>> 9)),\n q = V + ((l >>> 14 | h << 18) ^ (l >>> 18 | h << 14) ^ (l << 23 | h >>> 9)) + (c >>> 0 < E >>> 0 ? 1 : 0),\n c = c + t,\n q = q + W + (c >>> 0 < t >>> 0 ? 1 : 0),\n c = c + da,\n q = q + fa + (c >>> 0 < da >>> 0 ? 1 : 0),\n c = c + b,\n q = q + j + (c >>> 0 < b >>> 0 ? 1 : 0),\n b = u + T,\n s = p + s + (b >>> 0 < u >>> 0 ? 1 : 0),\n V = S,\n E = D,\n S = R,\n D = C,\n R = l,\n C = h,\n h = B + c | 0,\n l = U + q + (h >>> 0 < B >>> 0 ? 1 : 0) | 0,\n U = A,\n B = y,\n A = z,\n y = x,\n z = k,\n x = g,\n g = c + b | 0,\n k = q + s + (g >>> 0 < c >>> 0 ? 1 : 0) | 0;\n }\n J = F.low = J + g;\n F.high = w + k + (J >>> 0 < g >>> 0 ? 1 : 0);\n K = e.low = K + x;\n e.high = X + z + (K >>> 0 < x >>> 0 ? 1 : 0);\n L = n.low = L + y;\n n.high = Y + A + (L >>> 0 < y >>> 0 ? 1 : 0);\n M = r.low = M + B;\n r.high = Z + U + (M >>> 0 < B >>> 0 ? 1 : 0);\n N = G.low = N + h;\n G.high = $ + l + (N >>> 0 < h >>> 0 ? 1 : 0);\n O = H.low = O + C;\n H.high = aa + R + (O >>> 0 < C >>> 0 ? 1 : 0);\n P = I.low = P + D;\n I.high = ba + S + (P >>> 0 < D >>> 0 ? 1 : 0);\n Q = f.low = Q + E;\n f.high = ca + V + (Q >>> 0 < E >>> 0 ? 1 : 0);\n },\n _doFinalize: function () {\n var a = this._data,\n d = a.words,\n f = 8 * this._nDataBytes,\n e = 8 * a.sigBytes;\n d[e >>> 5] |= 128 << 24 - e % 32;\n d[(e + 128 >>> 10 << 5) + 30] = Math.floor(f / 4294967296);\n d[(e + 128 >>> 10 << 5) + 31] = f;\n a.sigBytes = 4 * d.length;\n this._process();\n return this._hash.toX32();\n },\n clone: function () {\n var a = r.clone.call(this);\n a._hash = this._hash.clone();\n return a;\n },\n blockSize: 32\n });\n n.SHA512 = r._createHelper(e);\n n.HmacSHA512 = r._createHmacHelper(e);\n})();\n\n/*\nCryptoJS v3.1.2 sha384-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var c = CryptoJS,\n a = c.x64,\n b = a.Word,\n e = a.WordArray,\n a = c.algo,\n d = a.SHA512,\n a = a.SHA384 = d.extend({\n _doReset: function () {\n this._hash = new e.init([new b.init(3418070365, 3238371032), new b.init(1654270250, 914150663), new b.init(2438529370, 812702999), new b.init(355462360, 4144912697), new b.init(1731405415, 4290775857), new b.init(2394180231, 1750603025), new b.init(3675008525, 1694076839), new b.init(1203062813, 3204075428)]);\n },\n _doFinalize: function () {\n var a = d._doFinalize.call(this);\n a.sigBytes -= 16;\n return a;\n }\n });\n c.SHA384 = d._createHelper(a);\n c.HmacSHA384 = d._createHmacHelper(a);\n})();\n\n/*\nCryptoJS v3.1.2 ripemd160-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n/*\n\n(c) 2012 by Cedric Mesnil. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n(function () {\n var q = CryptoJS,\n d = q.lib,\n n = d.WordArray,\n p = d.Hasher,\n d = q.algo,\n x = n.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]),\n y = n.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]),\n z = n.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]),\n A = n.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]),\n B = n.create([0, 1518500249, 1859775393, 2400959708, 2840853838]),\n C = n.create([1352829926, 1548603684, 1836072691, 2053994217, 0]),\n d = d.RIPEMD160 = p.extend({\n _doReset: function () {\n this._hash = n.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520]);\n },\n _doProcessBlock: function (e, v) {\n for (var b = 0; 16 > b; b++) {\n var c = v + b,\n f = e[c];\n e[c] = (f << 8 | f >>> 24) & 16711935 | (f << 24 | f >>> 8) & 4278255360;\n }\n var c = this._hash.words,\n f = B.words,\n d = C.words,\n n = x.words,\n q = y.words,\n p = z.words,\n w = A.words,\n t,\n g,\n h,\n j,\n r,\n u,\n k,\n l,\n m,\n s;\n u = t = c[0];\n k = g = c[1];\n l = h = c[2];\n m = j = c[3];\n s = r = c[4];\n for (var a, b = 0; 80 > b; b += 1) a = t + e[v + n[b]] | 0, a = 16 > b ? a + ((g ^ h ^ j) + f[0]) : 32 > b ? a + ((g & h | ~g & j) + f[1]) : 48 > b ? a + (((g | ~h) ^ j) + f[2]) : 64 > b ? a + ((g & j | h & ~j) + f[3]) : a + ((g ^ (h | ~j)) + f[4]), a |= 0, a = a << p[b] | a >>> 32 - p[b], a = a + r | 0, t = r, r = j, j = h << 10 | h >>> 22, h = g, g = a, a = u + e[v + q[b]] | 0, a = 16 > b ? a + ((k ^ (l | ~m)) + d[0]) : 32 > b ? a + ((k & m | l & ~m) + d[1]) : 48 > b ? a + (((k | ~l) ^ m) + d[2]) : 64 > b ? a + ((k & l | ~k & m) + d[3]) : a + ((k ^ l ^ m) + d[4]), a |= 0, a = a << w[b] | a >>> 32 - w[b], a = a + s | 0, u = s, s = m, m = l << 10 | l >>> 22, l = k, k = a;\n a = c[1] + h + m | 0;\n c[1] = c[2] + j + s | 0;\n c[2] = c[3] + r + u | 0;\n c[3] = c[4] + t + k | 0;\n c[4] = c[0] + g + l | 0;\n c[0] = a;\n },\n _doFinalize: function () {\n var e = this._data,\n d = e.words,\n b = 8 * this._nDataBytes,\n c = 8 * e.sigBytes;\n d[c >>> 5] |= 128 << 24 - c % 32;\n d[(c + 64 >>> 9 << 4) + 14] = (b << 8 | b >>> 24) & 16711935 | (b << 24 | b >>> 8) & 4278255360;\n e.sigBytes = 4 * (d.length + 1);\n this._process();\n e = this._hash;\n d = e.words;\n for (b = 0; 5 > b; b++) c = d[b], d[b] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;\n return e;\n },\n clone: function () {\n var d = p.clone.call(this);\n d._hash = this._hash.clone();\n return d;\n }\n });\n q.RIPEMD160 = p._createHelper(d);\n q.HmacRIPEMD160 = p._createHmacHelper(d);\n})(Math);\n\n/*\nCryptoJS v3.1.2 hmac.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var c = CryptoJS,\n k = c.enc.Utf8;\n c.algo.HMAC = c.lib.Base.extend({\n init: function (a, b) {\n a = this._hasher = new a.init();\n \"string\" == typeof b && (b = k.parse(b));\n var c = a.blockSize,\n e = 4 * c;\n b.sigBytes > e && (b = a.finalize(b));\n b.clamp();\n for (var f = this._oKey = b.clone(), g = this._iKey = b.clone(), h = f.words, j = g.words, d = 0; d < c; d++) h[d] ^= 1549556828, j[d] ^= 909522486;\n f.sigBytes = g.sigBytes = e;\n this.reset();\n },\n reset: function () {\n var a = this._hasher;\n a.reset();\n a.update(this._iKey);\n },\n update: function (a) {\n this._hasher.update(a);\n return this;\n },\n finalize: function (a) {\n var b = this._hasher;\n a = b.finalize(a);\n b.reset();\n return b.finalize(this._oKey.clone().concat(a));\n }\n });\n})();\n\n/*\nCryptoJS v3.1.2 pbkdf2-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var b = CryptoJS,\n a = b.lib,\n d = a.Base,\n m = a.WordArray,\n a = b.algo,\n q = a.HMAC,\n l = a.PBKDF2 = d.extend({\n cfg: d.extend({\n keySize: 4,\n hasher: a.SHA1,\n iterations: 1\n }),\n init: function (a) {\n this.cfg = this.cfg.extend(a);\n },\n compute: function (a, b) {\n for (var c = this.cfg, f = q.create(c.hasher, a), g = m.create(), d = m.create([1]), l = g.words, r = d.words, n = c.keySize, c = c.iterations; l.length < n;) {\n var h = f.update(b).finalize(d);\n f.reset();\n for (var j = h.words, s = j.length, k = h, p = 1; p < c; p++) {\n k = f.finalize(k);\n f.reset();\n for (var t = k.words, e = 0; e < s; e++) j[e] ^= t[e];\n }\n g.concat(h);\n r[0]++;\n }\n g.sigBytes = 4 * n;\n return g;\n }\n });\n b.PBKDF2 = function (a, b, c) {\n return l.create(c).compute(a, b);\n };\n})();\n\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nvar b64map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar b64pad = \"=\";\nfunction hex2b64(d) {\n var b;\n var e;\n var a = \"\";\n for (b = 0; b + 3 <= d.length; b += 3) {\n e = parseInt(d.substring(b, b + 3), 16);\n a += b64map.charAt(e >> 6) + b64map.charAt(e & 63);\n }\n if (b + 1 == d.length) {\n e = parseInt(d.substring(b, b + 1), 16);\n a += b64map.charAt(e << 2);\n } else {\n if (b + 2 == d.length) {\n e = parseInt(d.substring(b, b + 2), 16);\n a += b64map.charAt(e >> 2) + b64map.charAt((e & 3) << 4);\n }\n }\n if (b64pad) {\n while ((a.length & 3) > 0) {\n a += b64pad;\n }\n }\n return a;\n}\nfunction b64tohex(f) {\n var d = \"\";\n var e;\n var b = 0;\n var c;\n var a;\n for (e = 0; e < f.length; ++e) {\n if (f.charAt(e) == b64pad) {\n break;\n }\n a = b64map.indexOf(f.charAt(e));\n if (a < 0) {\n continue;\n }\n if (b == 0) {\n d += int2char(a >> 2);\n c = a & 3;\n b = 1;\n } else {\n if (b == 1) {\n d += int2char(c << 2 | a >> 4);\n c = a & 15;\n b = 2;\n } else {\n if (b == 2) {\n d += int2char(c);\n d += int2char(a >> 2);\n c = a & 3;\n b = 3;\n } else {\n d += int2char(c << 2 | a >> 4);\n d += int2char(a & 15);\n b = 0;\n }\n }\n }\n }\n if (b == 1) {\n d += int2char(c << 2);\n }\n return d;\n}\nfunction b64toBA(e) {\n var d = b64tohex(e);\n var c;\n var b = new Array();\n for (c = 0; 2 * c < d.length; ++c) {\n b[c] = parseInt(d.substring(2 * c, 2 * c + 2), 16);\n }\n return b;\n}\n;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nvar dbits;\nvar canary = 244837814094590;\nvar j_lm = (canary & 16777215) == 15715070;\nfunction BigInteger(e, d, f) {\n if (e != null) {\n if (\"number\" == typeof e) {\n this.fromNumber(e, d, f);\n } else {\n if (d == null && \"string\" != typeof e) {\n this.fromString(e, 256);\n } else {\n this.fromString(e, d);\n }\n }\n }\n}\nfunction nbi() {\n return new BigInteger(null);\n}\nfunction am1(f, a, b, e, h, g) {\n while (--g >= 0) {\n var d = a * this[f++] + b[e] + h;\n h = Math.floor(d / 67108864);\n b[e++] = d & 67108863;\n }\n return h;\n}\nfunction am2(f, q, r, e, o, a) {\n var k = q & 32767,\n p = q >> 15;\n while (--a >= 0) {\n var d = this[f] & 32767;\n var g = this[f++] >> 15;\n var b = p * d + g * k;\n d = k * d + ((b & 32767) << 15) + r[e] + (o & 1073741823);\n o = (d >>> 30) + (b >>> 15) + p * g + (o >>> 30);\n r[e++] = d & 1073741823;\n }\n return o;\n}\nfunction am3(f, q, r, e, o, a) {\n var k = q & 16383,\n p = q >> 14;\n while (--a >= 0) {\n var d = this[f] & 16383;\n var g = this[f++] >> 14;\n var b = p * d + g * k;\n d = k * d + ((b & 16383) << 14) + r[e] + o;\n o = (d >> 28) + (b >> 14) + p * g;\n r[e++] = d & 268435455;\n }\n return o;\n}\nif (j_lm && navigator.appName == \"Microsoft Internet Explorer\") {\n BigInteger.prototype.am = am2;\n dbits = 30;\n} else {\n if (j_lm && navigator.appName != \"Netscape\") {\n BigInteger.prototype.am = am1;\n dbits = 26;\n } else {\n BigInteger.prototype.am = am3;\n dbits = 28;\n }\n}\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = (1 << dbits) - 1;\nBigInteger.prototype.DV = 1 << dbits;\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nvar BI_RC = new Array();\nvar rr, vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nfunction int2char(a) {\n return BI_RM.charAt(a);\n}\nfunction intAt(b, a) {\n var d = BI_RC[b.charCodeAt(a)];\n return d == null ? -1 : d;\n}\nfunction bnpCopyTo(b) {\n for (var a = this.t - 1; a >= 0; --a) {\n b[a] = this[a];\n }\n b.t = this.t;\n b.s = this.s;\n}\nfunction bnpFromInt(a) {\n this.t = 1;\n this.s = a < 0 ? -1 : 0;\n if (a > 0) {\n this[0] = a;\n } else {\n if (a < -1) {\n this[0] = a + this.DV;\n } else {\n this.t = 0;\n }\n }\n}\nfunction nbv(a) {\n var b = nbi();\n b.fromInt(a);\n return b;\n}\nfunction bnpFromString(h, c) {\n var e;\n if (c == 16) {\n e = 4;\n } else {\n if (c == 8) {\n e = 3;\n } else {\n if (c == 256) {\n e = 8;\n } else {\n if (c == 2) {\n e = 1;\n } else {\n if (c == 32) {\n e = 5;\n } else {\n if (c == 4) {\n e = 2;\n } else {\n this.fromRadix(h, c);\n return;\n }\n }\n }\n }\n }\n }\n this.t = 0;\n this.s = 0;\n var g = h.length,\n d = false,\n f = 0;\n while (--g >= 0) {\n var a = e == 8 ? h[g] & 255 : intAt(h, g);\n if (a < 0) {\n if (h.charAt(g) == \"-\") {\n d = true;\n }\n continue;\n }\n d = false;\n if (f == 0) {\n this[this.t++] = a;\n } else {\n if (f + e > this.DB) {\n this[this.t - 1] |= (a & (1 << this.DB - f) - 1) << f;\n this[this.t++] = a >> this.DB - f;\n } else {\n this[this.t - 1] |= a << f;\n }\n }\n f += e;\n if (f >= this.DB) {\n f -= this.DB;\n }\n }\n if (e == 8 && (h[0] & 128) != 0) {\n this.s = -1;\n if (f > 0) {\n this[this.t - 1] |= (1 << this.DB - f) - 1 << f;\n }\n }\n this.clamp();\n if (d) {\n BigInteger.ZERO.subTo(this, this);\n }\n}\nfunction bnpClamp() {\n var a = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == a) {\n --this.t;\n }\n}\nfunction bnToString(c) {\n if (this.s < 0) {\n return \"-\" + this.negate().toString(c);\n }\n var e;\n if (c == 16) {\n e = 4;\n } else {\n if (c == 8) {\n e = 3;\n } else {\n if (c == 2) {\n e = 1;\n } else {\n if (c == 32) {\n e = 5;\n } else {\n if (c == 4) {\n e = 2;\n } else {\n return this.toRadix(c);\n }\n }\n }\n }\n }\n var g = (1 << e) - 1,\n l,\n a = false,\n h = \"\",\n f = this.t;\n var j = this.DB - f * this.DB % e;\n if (f-- > 0) {\n if (j < this.DB && (l = this[f] >> j) > 0) {\n a = true;\n h = int2char(l);\n }\n while (f >= 0) {\n if (j < e) {\n l = (this[f] & (1 << j) - 1) << e - j;\n l |= this[--f] >> (j += this.DB - e);\n } else {\n l = this[f] >> (j -= e) & g;\n if (j <= 0) {\n j += this.DB;\n --f;\n }\n }\n if (l > 0) {\n a = true;\n }\n if (a) {\n h += int2char(l);\n }\n }\n }\n return a ? h : \"0\";\n}\nfunction bnNegate() {\n var a = nbi();\n BigInteger.ZERO.subTo(this, a);\n return a;\n}\nfunction bnAbs() {\n return this.s < 0 ? this.negate() : this;\n}\nfunction bnCompareTo(b) {\n var d = this.s - b.s;\n if (d != 0) {\n return d;\n }\n var c = this.t;\n d = c - b.t;\n if (d != 0) {\n return this.s < 0 ? -d : d;\n }\n while (--c >= 0) {\n if ((d = this[c] - b[c]) != 0) {\n return d;\n }\n }\n return 0;\n}\nfunction nbits(a) {\n var c = 1,\n b;\n if ((b = a >>> 16) != 0) {\n a = b;\n c += 16;\n }\n if ((b = a >> 8) != 0) {\n a = b;\n c += 8;\n }\n if ((b = a >> 4) != 0) {\n a = b;\n c += 4;\n }\n if ((b = a >> 2) != 0) {\n a = b;\n c += 2;\n }\n if ((b = a >> 1) != 0) {\n a = b;\n c += 1;\n }\n return c;\n}\nfunction bnBitLength() {\n if (this.t <= 0) {\n return 0;\n }\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM);\n}\nfunction bnpDLShiftTo(c, b) {\n var a;\n for (a = this.t - 1; a >= 0; --a) {\n b[a + c] = this[a];\n }\n for (a = c - 1; a >= 0; --a) {\n b[a] = 0;\n }\n b.t = this.t + c;\n b.s = this.s;\n}\nfunction bnpDRShiftTo(c, b) {\n for (var a = c; a < this.t; ++a) {\n b[a - c] = this[a];\n }\n b.t = Math.max(this.t - c, 0);\n b.s = this.s;\n}\nfunction bnpLShiftTo(j, e) {\n var b = j % this.DB;\n var a = this.DB - b;\n var g = (1 << a) - 1;\n var f = Math.floor(j / this.DB),\n h = this.s << b & this.DM,\n d;\n for (d = this.t - 1; d >= 0; --d) {\n e[d + f + 1] = this[d] >> a | h;\n h = (this[d] & g) << b;\n }\n for (d = f - 1; d >= 0; --d) {\n e[d] = 0;\n }\n e[f] = h;\n e.t = this.t + f + 1;\n e.s = this.s;\n e.clamp();\n}\nfunction bnpRShiftTo(g, d) {\n d.s = this.s;\n var e = Math.floor(g / this.DB);\n if (e >= this.t) {\n d.t = 0;\n return;\n }\n var b = g % this.DB;\n var a = this.DB - b;\n var f = (1 << b) - 1;\n d[0] = this[e] >> b;\n for (var c = e + 1; c < this.t; ++c) {\n d[c - e - 1] |= (this[c] & f) << a;\n d[c - e] = this[c] >> b;\n }\n if (b > 0) {\n d[this.t - e - 1] |= (this.s & f) << a;\n }\n d.t = this.t - e;\n d.clamp();\n}\nfunction bnpSubTo(d, f) {\n var e = 0,\n g = 0,\n b = Math.min(d.t, this.t);\n while (e < b) {\n g += this[e] - d[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n if (d.t < this.t) {\n g -= d.s;\n while (e < this.t) {\n g += this[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n g += this.s;\n } else {\n g += this.s;\n while (e < d.t) {\n g -= d[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n g -= d.s;\n }\n f.s = g < 0 ? -1 : 0;\n if (g < -1) {\n f[e++] = this.DV + g;\n } else {\n if (g > 0) {\n f[e++] = g;\n }\n }\n f.t = e;\n f.clamp();\n}\nfunction bnpMultiplyTo(c, e) {\n var b = this.abs(),\n f = c.abs();\n var d = b.t;\n e.t = d + f.t;\n while (--d >= 0) {\n e[d] = 0;\n }\n for (d = 0; d < f.t; ++d) {\n e[d + b.t] = b.am(0, f[d], e, d, 0, b.t);\n }\n e.s = 0;\n e.clamp();\n if (this.s != c.s) {\n BigInteger.ZERO.subTo(e, e);\n }\n}\nfunction bnpSquareTo(d) {\n var a = this.abs();\n var b = d.t = 2 * a.t;\n while (--b >= 0) {\n d[b] = 0;\n }\n for (b = 0; b < a.t - 1; ++b) {\n var e = a.am(b, a[b], d, 2 * b, 0, 1);\n if ((d[b + a.t] += a.am(b + 1, 2 * a[b], d, 2 * b + 1, e, a.t - b - 1)) >= a.DV) {\n d[b + a.t] -= a.DV;\n d[b + a.t + 1] = 1;\n }\n }\n if (d.t > 0) {\n d[d.t - 1] += a.am(b, a[b], d, 2 * b, 0, 1);\n }\n d.s = 0;\n d.clamp();\n}\nfunction bnpDivRemTo(n, h, g) {\n var w = n.abs();\n if (w.t <= 0) {\n return;\n }\n var k = this.abs();\n if (k.t < w.t) {\n if (h != null) {\n h.fromInt(0);\n }\n if (g != null) {\n this.copyTo(g);\n }\n return;\n }\n if (g == null) {\n g = nbi();\n }\n var d = nbi(),\n a = this.s,\n l = n.s;\n var v = this.DB - nbits(w[w.t - 1]);\n if (v > 0) {\n w.lShiftTo(v, d);\n k.lShiftTo(v, g);\n } else {\n w.copyTo(d);\n k.copyTo(g);\n }\n var p = d.t;\n var b = d[p - 1];\n if (b == 0) {\n return;\n }\n var o = b * (1 << this.F1) + (p > 1 ? d[p - 2] >> this.F2 : 0);\n var A = this.FV / o,\n z = (1 << this.F1) / o,\n x = 1 << this.F2;\n var u = g.t,\n s = u - p,\n f = h == null ? nbi() : h;\n d.dlShiftTo(s, f);\n if (g.compareTo(f) >= 0) {\n g[g.t++] = 1;\n g.subTo(f, g);\n }\n BigInteger.ONE.dlShiftTo(p, f);\n f.subTo(d, d);\n while (d.t < p) {\n d[d.t++] = 0;\n }\n while (--s >= 0) {\n var c = g[--u] == b ? this.DM : Math.floor(g[u] * A + (g[u - 1] + x) * z);\n if ((g[u] += d.am(0, c, g, s, 0, p)) < c) {\n d.dlShiftTo(s, f);\n g.subTo(f, g);\n while (g[u] < --c) {\n g.subTo(f, g);\n }\n }\n }\n if (h != null) {\n g.drShiftTo(p, h);\n if (a != l) {\n BigInteger.ZERO.subTo(h, h);\n }\n }\n g.t = p;\n g.clamp();\n if (v > 0) {\n g.rShiftTo(v, g);\n }\n if (a < 0) {\n BigInteger.ZERO.subTo(g, g);\n }\n}\nfunction bnMod(b) {\n var c = nbi();\n this.abs().divRemTo(b, null, c);\n if (this.s < 0 && c.compareTo(BigInteger.ZERO) > 0) {\n b.subTo(c, c);\n }\n return c;\n}\nfunction Classic(a) {\n this.m = a;\n}\nfunction cConvert(a) {\n if (a.s < 0 || a.compareTo(this.m) >= 0) {\n return a.mod(this.m);\n } else {\n return a;\n }\n}\nfunction cRevert(a) {\n return a;\n}\nfunction cReduce(a) {\n a.divRemTo(this.m, null, a);\n}\nfunction cMulTo(a, c, b) {\n a.multiplyTo(c, b);\n this.reduce(b);\n}\nfunction cSqrTo(a, b) {\n a.squareTo(b);\n this.reduce(b);\n}\nClassic.prototype.convert = cConvert;\nClassic.prototype.revert = cRevert;\nClassic.prototype.reduce = cReduce;\nClassic.prototype.mulTo = cMulTo;\nClassic.prototype.sqrTo = cSqrTo;\nfunction bnpInvDigit() {\n if (this.t < 1) {\n return 0;\n }\n var a = this[0];\n if ((a & 1) == 0) {\n return 0;\n }\n var b = a & 3;\n b = b * (2 - (a & 15) * b) & 15;\n b = b * (2 - (a & 255) * b) & 255;\n b = b * (2 - ((a & 65535) * b & 65535)) & 65535;\n b = b * (2 - a * b % this.DV) % this.DV;\n return b > 0 ? this.DV - b : -b;\n}\nfunction Montgomery(a) {\n this.m = a;\n this.mp = a.invDigit();\n this.mpl = this.mp & 32767;\n this.mph = this.mp >> 15;\n this.um = (1 << a.DB - 15) - 1;\n this.mt2 = 2 * a.t;\n}\nfunction montConvert(a) {\n var b = nbi();\n a.abs().dlShiftTo(this.m.t, b);\n b.divRemTo(this.m, null, b);\n if (a.s < 0 && b.compareTo(BigInteger.ZERO) > 0) {\n this.m.subTo(b, b);\n }\n return b;\n}\nfunction montRevert(a) {\n var b = nbi();\n a.copyTo(b);\n this.reduce(b);\n return b;\n}\nfunction montReduce(a) {\n while (a.t <= this.mt2) {\n a[a.t++] = 0;\n }\n for (var c = 0; c < this.m.t; ++c) {\n var b = a[c] & 32767;\n var d = b * this.mpl + ((b * this.mph + (a[c] >> 15) * this.mpl & this.um) << 15) & a.DM;\n b = c + this.m.t;\n a[b] += this.m.am(0, d, a, c, 0, this.m.t);\n while (a[b] >= a.DV) {\n a[b] -= a.DV;\n a[++b]++;\n }\n }\n a.clamp();\n a.drShiftTo(this.m.t, a);\n if (a.compareTo(this.m) >= 0) {\n a.subTo(this.m, a);\n }\n}\nfunction montSqrTo(a, b) {\n a.squareTo(b);\n this.reduce(b);\n}\nfunction montMulTo(a, c, b) {\n a.multiplyTo(c, b);\n this.reduce(b);\n}\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo;\nfunction bnpIsEven() {\n return (this.t > 0 ? this[0] & 1 : this.s) == 0;\n}\nfunction bnpExp(h, j) {\n if (h > 4294967295 || h < 1) {\n return BigInteger.ONE;\n }\n var f = nbi(),\n a = nbi(),\n d = j.convert(this),\n c = nbits(h) - 1;\n d.copyTo(f);\n while (--c >= 0) {\n j.sqrTo(f, a);\n if ((h & 1 << c) > 0) {\n j.mulTo(a, d, f);\n } else {\n var b = f;\n f = a;\n a = b;\n }\n }\n return j.revert(f);\n}\nfunction bnModPowInt(b, a) {\n var c;\n if (b < 256 || a.isEven()) {\n c = new Classic(a);\n } else {\n c = new Montgomery(a);\n }\n return this.exp(b, c);\n}\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.isEven = bnpIsEven;\nBigInteger.prototype.exp = bnpExp;\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.modPowInt = bnModPowInt;\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction bnClone() {\n var a = nbi();\n this.copyTo(a);\n return a;\n}\nfunction bnIntValue() {\n if (this.s < 0) {\n if (this.t == 1) {\n return this[0] - this.DV;\n } else {\n if (this.t == 0) {\n return -1;\n }\n }\n } else {\n if (this.t == 1) {\n return this[0];\n } else {\n if (this.t == 0) {\n return 0;\n }\n }\n }\n return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0];\n}\nfunction bnByteValue() {\n return this.t == 0 ? this.s : this[0] << 24 >> 24;\n}\nfunction bnShortValue() {\n return this.t == 0 ? this.s : this[0] << 16 >> 16;\n}\nfunction bnpChunkSize(a) {\n return Math.floor(Math.LN2 * this.DB / Math.log(a));\n}\nfunction bnSigNum() {\n if (this.s < 0) {\n return -1;\n } else {\n if (this.t <= 0 || this.t == 1 && this[0] <= 0) {\n return 0;\n } else {\n return 1;\n }\n }\n}\nfunction bnpToRadix(c) {\n if (c == null) {\n c = 10;\n }\n if (this.signum() == 0 || c < 2 || c > 36) {\n return \"0\";\n }\n var f = this.chunkSize(c);\n var e = Math.pow(c, f);\n var i = nbv(e),\n j = nbi(),\n h = nbi(),\n g = \"\";\n this.divRemTo(i, j, h);\n while (j.signum() > 0) {\n g = (e + h.intValue()).toString(c).substr(1) + g;\n j.divRemTo(i, j, h);\n }\n return h.intValue().toString(c) + g;\n}\nfunction bnpFromRadix(m, h) {\n this.fromInt(0);\n if (h == null) {\n h = 10;\n }\n var f = this.chunkSize(h);\n var g = Math.pow(h, f),\n e = false,\n a = 0,\n l = 0;\n for (var c = 0; c < m.length; ++c) {\n var k = intAt(m, c);\n if (k < 0) {\n if (m.charAt(c) == \"-\" && this.signum() == 0) {\n e = true;\n }\n continue;\n }\n l = h * l + k;\n if (++a >= f) {\n this.dMultiply(g);\n this.dAddOffset(l, 0);\n a = 0;\n l = 0;\n }\n }\n if (a > 0) {\n this.dMultiply(Math.pow(h, a));\n this.dAddOffset(l, 0);\n }\n if (e) {\n BigInteger.ZERO.subTo(this, this);\n }\n}\nfunction bnpFromNumber(f, e, h) {\n if (\"number\" == typeof e) {\n if (f < 2) {\n this.fromInt(1);\n } else {\n this.fromNumber(f, h);\n if (!this.testBit(f - 1)) {\n this.bitwiseTo(BigInteger.ONE.shiftLeft(f - 1), op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n }\n while (!this.isProbablePrime(e)) {\n this.dAddOffset(2, 0);\n if (this.bitLength() > f) {\n this.subTo(BigInteger.ONE.shiftLeft(f - 1), this);\n }\n }\n }\n } else {\n var d = new Array(),\n g = f & 7;\n d.length = (f >> 3) + 1;\n e.nextBytes(d);\n if (g > 0) {\n d[0] &= (1 << g) - 1;\n } else {\n d[0] = 0;\n }\n this.fromString(d, 256);\n }\n}\nfunction bnToByteArray() {\n var b = this.t,\n c = new Array();\n c[0] = this.s;\n var e = this.DB - b * this.DB % 8,\n f,\n a = 0;\n if (b-- > 0) {\n if (e < this.DB && (f = this[b] >> e) != (this.s & this.DM) >> e) {\n c[a++] = f | this.s << this.DB - e;\n }\n while (b >= 0) {\n if (e < 8) {\n f = (this[b] & (1 << e) - 1) << 8 - e;\n f |= this[--b] >> (e += this.DB - 8);\n } else {\n f = this[b] >> (e -= 8) & 255;\n if (e <= 0) {\n e += this.DB;\n --b;\n }\n }\n if ((f & 128) != 0) {\n f |= -256;\n }\n if (a == 0 && (this.s & 128) != (f & 128)) {\n ++a;\n }\n if (a > 0 || f != this.s) {\n c[a++] = f;\n }\n }\n }\n return c;\n}\nfunction bnEquals(b) {\n return this.compareTo(b) == 0;\n}\nfunction bnMin(b) {\n return this.compareTo(b) < 0 ? this : b;\n}\nfunction bnMax(b) {\n return this.compareTo(b) > 0 ? this : b;\n}\nfunction bnpBitwiseTo(c, h, e) {\n var d,\n g,\n b = Math.min(c.t, this.t);\n for (d = 0; d < b; ++d) {\n e[d] = h(this[d], c[d]);\n }\n if (c.t < this.t) {\n g = c.s & this.DM;\n for (d = b; d < this.t; ++d) {\n e[d] = h(this[d], g);\n }\n e.t = this.t;\n } else {\n g = this.s & this.DM;\n for (d = b; d < c.t; ++d) {\n e[d] = h(g, c[d]);\n }\n e.t = c.t;\n }\n e.s = h(this.s, c.s);\n e.clamp();\n}\nfunction op_and(a, b) {\n return a & b;\n}\nfunction bnAnd(b) {\n var c = nbi();\n this.bitwiseTo(b, op_and, c);\n return c;\n}\nfunction op_or(a, b) {\n return a | b;\n}\nfunction bnOr(b) {\n var c = nbi();\n this.bitwiseTo(b, op_or, c);\n return c;\n}\nfunction op_xor(a, b) {\n return a ^ b;\n}\nfunction bnXor(b) {\n var c = nbi();\n this.bitwiseTo(b, op_xor, c);\n return c;\n}\nfunction op_andnot(a, b) {\n return a & ~b;\n}\nfunction bnAndNot(b) {\n var c = nbi();\n this.bitwiseTo(b, op_andnot, c);\n return c;\n}\nfunction bnNot() {\n var b = nbi();\n for (var a = 0; a < this.t; ++a) {\n b[a] = this.DM & ~this[a];\n }\n b.t = this.t;\n b.s = ~this.s;\n return b;\n}\nfunction bnShiftLeft(b) {\n var a = nbi();\n if (b < 0) {\n this.rShiftTo(-b, a);\n } else {\n this.lShiftTo(b, a);\n }\n return a;\n}\nfunction bnShiftRight(b) {\n var a = nbi();\n if (b < 0) {\n this.lShiftTo(-b, a);\n } else {\n this.rShiftTo(b, a);\n }\n return a;\n}\nfunction lbit(a) {\n if (a == 0) {\n return -1;\n }\n var b = 0;\n if ((a & 65535) == 0) {\n a >>= 16;\n b += 16;\n }\n if ((a & 255) == 0) {\n a >>= 8;\n b += 8;\n }\n if ((a & 15) == 0) {\n a >>= 4;\n b += 4;\n }\n if ((a & 3) == 0) {\n a >>= 2;\n b += 2;\n }\n if ((a & 1) == 0) {\n ++b;\n }\n return b;\n}\nfunction bnGetLowestSetBit() {\n for (var a = 0; a < this.t; ++a) {\n if (this[a] != 0) {\n return a * this.DB + lbit(this[a]);\n }\n }\n if (this.s < 0) {\n return this.t * this.DB;\n }\n return -1;\n}\nfunction cbit(a) {\n var b = 0;\n while (a != 0) {\n a &= a - 1;\n ++b;\n }\n return b;\n}\nfunction bnBitCount() {\n var c = 0,\n a = this.s & this.DM;\n for (var b = 0; b < this.t; ++b) {\n c += cbit(this[b] ^ a);\n }\n return c;\n}\nfunction bnTestBit(b) {\n var a = Math.floor(b / this.DB);\n if (a >= this.t) {\n return this.s != 0;\n }\n return (this[a] & 1 << b % this.DB) != 0;\n}\nfunction bnpChangeBit(c, b) {\n var a = BigInteger.ONE.shiftLeft(c);\n this.bitwiseTo(a, b, a);\n return a;\n}\nfunction bnSetBit(a) {\n return this.changeBit(a, op_or);\n}\nfunction bnClearBit(a) {\n return this.changeBit(a, op_andnot);\n}\nfunction bnFlipBit(a) {\n return this.changeBit(a, op_xor);\n}\nfunction bnpAddTo(d, f) {\n var e = 0,\n g = 0,\n b = Math.min(d.t, this.t);\n while (e < b) {\n g += this[e] + d[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n if (d.t < this.t) {\n g += d.s;\n while (e < this.t) {\n g += this[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n g += this.s;\n } else {\n g += this.s;\n while (e < d.t) {\n g += d[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n g += d.s;\n }\n f.s = g < 0 ? -1 : 0;\n if (g > 0) {\n f[e++] = g;\n } else {\n if (g < -1) {\n f[e++] = this.DV + g;\n }\n }\n f.t = e;\n f.clamp();\n}\nfunction bnAdd(b) {\n var c = nbi();\n this.addTo(b, c);\n return c;\n}\nfunction bnSubtract(b) {\n var c = nbi();\n this.subTo(b, c);\n return c;\n}\nfunction bnMultiply(b) {\n var c = nbi();\n this.multiplyTo(b, c);\n return c;\n}\nfunction bnSquare() {\n var a = nbi();\n this.squareTo(a);\n return a;\n}\nfunction bnDivide(b) {\n var c = nbi();\n this.divRemTo(b, c, null);\n return c;\n}\nfunction bnRemainder(b) {\n var c = nbi();\n this.divRemTo(b, null, c);\n return c;\n}\nfunction bnDivideAndRemainder(b) {\n var d = nbi(),\n c = nbi();\n this.divRemTo(b, d, c);\n return new Array(d, c);\n}\nfunction bnpDMultiply(a) {\n this[this.t] = this.am(0, a - 1, this, 0, 0, this.t);\n ++this.t;\n this.clamp();\n}\nfunction bnpDAddOffset(b, a) {\n if (b == 0) {\n return;\n }\n while (this.t <= a) {\n this[this.t++] = 0;\n }\n this[a] += b;\n while (this[a] >= this.DV) {\n this[a] -= this.DV;\n if (++a >= this.t) {\n this[this.t++] = 0;\n }\n ++this[a];\n }\n}\nfunction NullExp() {}\nfunction nNop(a) {\n return a;\n}\nfunction nMulTo(a, c, b) {\n a.multiplyTo(c, b);\n}\nfunction nSqrTo(a, b) {\n a.squareTo(b);\n}\nNullExp.prototype.convert = nNop;\nNullExp.prototype.revert = nNop;\nNullExp.prototype.mulTo = nMulTo;\nNullExp.prototype.sqrTo = nSqrTo;\nfunction bnPow(a) {\n return this.exp(a, new NullExp());\n}\nfunction bnpMultiplyLowerTo(b, f, e) {\n var d = Math.min(this.t + b.t, f);\n e.s = 0;\n e.t = d;\n while (d > 0) {\n e[--d] = 0;\n }\n var c;\n for (c = e.t - this.t; d < c; ++d) {\n e[d + this.t] = this.am(0, b[d], e, d, 0, this.t);\n }\n for (c = Math.min(b.t, f); d < c; ++d) {\n this.am(0, b[d], e, d, 0, f - d);\n }\n e.clamp();\n}\nfunction bnpMultiplyUpperTo(b, e, d) {\n --e;\n var c = d.t = this.t + b.t - e;\n d.s = 0;\n while (--c >= 0) {\n d[c] = 0;\n }\n for (c = Math.max(e - this.t, 0); c < b.t; ++c) {\n d[this.t + c - e] = this.am(e - c, b[c], d, 0, 0, this.t + c - e);\n }\n d.clamp();\n d.drShiftTo(1, d);\n}\nfunction Barrett(a) {\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2 * a.t, this.r2);\n this.mu = this.r2.divide(a);\n this.m = a;\n}\nfunction barrettConvert(a) {\n if (a.s < 0 || a.t > 2 * this.m.t) {\n return a.mod(this.m);\n } else {\n if (a.compareTo(this.m) < 0) {\n return a;\n } else {\n var b = nbi();\n a.copyTo(b);\n this.reduce(b);\n return b;\n }\n }\n}\nfunction barrettRevert(a) {\n return a;\n}\nfunction barrettReduce(a) {\n a.drShiftTo(this.m.t - 1, this.r2);\n if (a.t > this.m.t + 1) {\n a.t = this.m.t + 1;\n a.clamp();\n }\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n while (a.compareTo(this.r2) < 0) {\n a.dAddOffset(1, this.m.t + 1);\n }\n a.subTo(this.r2, a);\n while (a.compareTo(this.m) >= 0) {\n a.subTo(this.m, a);\n }\n}\nfunction barrettSqrTo(a, b) {\n a.squareTo(b);\n this.reduce(b);\n}\nfunction barrettMulTo(a, c, b) {\n a.multiplyTo(c, b);\n this.reduce(b);\n}\nBarrett.prototype.convert = barrettConvert;\nBarrett.prototype.revert = barrettRevert;\nBarrett.prototype.reduce = barrettReduce;\nBarrett.prototype.mulTo = barrettMulTo;\nBarrett.prototype.sqrTo = barrettSqrTo;\nfunction bnModPow(q, f) {\n var o = q.bitLength(),\n h,\n b = nbv(1),\n v;\n if (o <= 0) {\n return b;\n } else {\n if (o < 18) {\n h = 1;\n } else {\n if (o < 48) {\n h = 3;\n } else {\n if (o < 144) {\n h = 4;\n } else {\n if (o < 768) {\n h = 5;\n } else {\n h = 6;\n }\n }\n }\n }\n }\n if (o < 8) {\n v = new Classic(f);\n } else {\n if (f.isEven()) {\n v = new Barrett(f);\n } else {\n v = new Montgomery(f);\n }\n }\n var p = new Array(),\n d = 3,\n s = h - 1,\n a = (1 << h) - 1;\n p[1] = v.convert(this);\n if (h > 1) {\n var A = nbi();\n v.sqrTo(p[1], A);\n while (d <= a) {\n p[d] = nbi();\n v.mulTo(A, p[d - 2], p[d]);\n d += 2;\n }\n }\n var l = q.t - 1,\n x,\n u = true,\n c = nbi(),\n y;\n o = nbits(q[l]) - 1;\n while (l >= 0) {\n if (o >= s) {\n x = q[l] >> o - s & a;\n } else {\n x = (q[l] & (1 << o + 1) - 1) << s - o;\n if (l > 0) {\n x |= q[l - 1] >> this.DB + o - s;\n }\n }\n d = h;\n while ((x & 1) == 0) {\n x >>= 1;\n --d;\n }\n if ((o -= d) < 0) {\n o += this.DB;\n --l;\n }\n if (u) {\n p[x].copyTo(b);\n u = false;\n } else {\n while (d > 1) {\n v.sqrTo(b, c);\n v.sqrTo(c, b);\n d -= 2;\n }\n if (d > 0) {\n v.sqrTo(b, c);\n } else {\n y = b;\n b = c;\n c = y;\n }\n v.mulTo(c, p[x], b);\n }\n while (l >= 0 && (q[l] & 1 << o) == 0) {\n v.sqrTo(b, c);\n y = b;\n b = c;\n c = y;\n if (--o < 0) {\n o = this.DB - 1;\n --l;\n }\n }\n }\n return v.revert(b);\n}\nfunction bnGCD(c) {\n var b = this.s < 0 ? this.negate() : this.clone();\n var h = c.s < 0 ? c.negate() : c.clone();\n if (b.compareTo(h) < 0) {\n var e = b;\n b = h;\n h = e;\n }\n var d = b.getLowestSetBit(),\n f = h.getLowestSetBit();\n if (f < 0) {\n return b;\n }\n if (d < f) {\n f = d;\n }\n if (f > 0) {\n b.rShiftTo(f, b);\n h.rShiftTo(f, h);\n }\n while (b.signum() > 0) {\n if ((d = b.getLowestSetBit()) > 0) {\n b.rShiftTo(d, b);\n }\n if ((d = h.getLowestSetBit()) > 0) {\n h.rShiftTo(d, h);\n }\n if (b.compareTo(h) >= 0) {\n b.subTo(h, b);\n b.rShiftTo(1, b);\n } else {\n h.subTo(b, h);\n h.rShiftTo(1, h);\n }\n }\n if (f > 0) {\n h.lShiftTo(f, h);\n }\n return h;\n}\nfunction bnpModInt(e) {\n if (e <= 0) {\n return 0;\n }\n var c = this.DV % e,\n b = this.s < 0 ? e - 1 : 0;\n if (this.t > 0) {\n if (c == 0) {\n b = this[0] % e;\n } else {\n for (var a = this.t - 1; a >= 0; --a) {\n b = (c * b + this[a]) % e;\n }\n }\n }\n return b;\n}\nfunction bnModInverse(f) {\n var j = f.isEven();\n if (this.isEven() && j || f.signum() == 0) {\n return BigInteger.ZERO;\n }\n var i = f.clone(),\n h = this.clone();\n var g = nbv(1),\n e = nbv(0),\n l = nbv(0),\n k = nbv(1);\n while (i.signum() != 0) {\n while (i.isEven()) {\n i.rShiftTo(1, i);\n if (j) {\n if (!g.isEven() || !e.isEven()) {\n g.addTo(this, g);\n e.subTo(f, e);\n }\n g.rShiftTo(1, g);\n } else {\n if (!e.isEven()) {\n e.subTo(f, e);\n }\n }\n e.rShiftTo(1, e);\n }\n while (h.isEven()) {\n h.rShiftTo(1, h);\n if (j) {\n if (!l.isEven() || !k.isEven()) {\n l.addTo(this, l);\n k.subTo(f, k);\n }\n l.rShiftTo(1, l);\n } else {\n if (!k.isEven()) {\n k.subTo(f, k);\n }\n }\n k.rShiftTo(1, k);\n }\n if (i.compareTo(h) >= 0) {\n i.subTo(h, i);\n if (j) {\n g.subTo(l, g);\n }\n e.subTo(k, e);\n } else {\n h.subTo(i, h);\n if (j) {\n l.subTo(g, l);\n }\n k.subTo(e, k);\n }\n }\n if (h.compareTo(BigInteger.ONE) != 0) {\n return BigInteger.ZERO;\n }\n if (k.compareTo(f) >= 0) {\n return k.subtract(f);\n }\n if (k.signum() < 0) {\n k.addTo(f, k);\n } else {\n return k;\n }\n if (k.signum() < 0) {\n return k.add(f);\n } else {\n return k;\n }\n}\nvar lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\nfunction bnIsProbablePrime(e) {\n var d,\n b = this.abs();\n if (b.t == 1 && b[0] <= lowprimes[lowprimes.length - 1]) {\n for (d = 0; d < lowprimes.length; ++d) {\n if (b[0] == lowprimes[d]) {\n return true;\n }\n }\n return false;\n }\n if (b.isEven()) {\n return false;\n }\n d = 1;\n while (d < lowprimes.length) {\n var a = lowprimes[d],\n c = d + 1;\n while (c < lowprimes.length && a < lplim) {\n a *= lowprimes[c++];\n }\n a = b.modInt(a);\n while (d < c) {\n if (a % lowprimes[d++] == 0) {\n return false;\n }\n }\n }\n return b.millerRabin(e);\n}\nfunction bnpMillerRabin(f) {\n var g = this.subtract(BigInteger.ONE);\n var c = g.getLowestSetBit();\n if (c <= 0) {\n return false;\n }\n var h = g.shiftRight(c);\n f = f + 1 >> 1;\n if (f > lowprimes.length) {\n f = lowprimes.length;\n }\n var b = nbi();\n for (var e = 0; e < f; ++e) {\n b.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\n var l = b.modPow(h, this);\n if (l.compareTo(BigInteger.ONE) != 0 && l.compareTo(g) != 0) {\n var d = 1;\n while (d++ < c && l.compareTo(g) != 0) {\n l = l.modPowInt(2, this);\n if (l.compareTo(BigInteger.ONE) == 0) {\n return false;\n }\n }\n if (l.compareTo(g) != 0) {\n return false;\n }\n }\n }\n return true;\n}\nBigInteger.prototype.chunkSize = bnpChunkSize;\nBigInteger.prototype.toRadix = bnpToRadix;\nBigInteger.prototype.fromRadix = bnpFromRadix;\nBigInteger.prototype.fromNumber = bnpFromNumber;\nBigInteger.prototype.bitwiseTo = bnpBitwiseTo;\nBigInteger.prototype.changeBit = bnpChangeBit;\nBigInteger.prototype.addTo = bnpAddTo;\nBigInteger.prototype.dMultiply = bnpDMultiply;\nBigInteger.prototype.dAddOffset = bnpDAddOffset;\nBigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\nBigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\nBigInteger.prototype.modInt = bnpModInt;\nBigInteger.prototype.millerRabin = bnpMillerRabin;\nBigInteger.prototype.clone = bnClone;\nBigInteger.prototype.intValue = bnIntValue;\nBigInteger.prototype.byteValue = bnByteValue;\nBigInteger.prototype.shortValue = bnShortValue;\nBigInteger.prototype.signum = bnSigNum;\nBigInteger.prototype.toByteArray = bnToByteArray;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.min = bnMin;\nBigInteger.prototype.max = bnMax;\nBigInteger.prototype.and = bnAnd;\nBigInteger.prototype.or = bnOr;\nBigInteger.prototype.xor = bnXor;\nBigInteger.prototype.andNot = bnAndNot;\nBigInteger.prototype.not = bnNot;\nBigInteger.prototype.shiftLeft = bnShiftLeft;\nBigInteger.prototype.shiftRight = bnShiftRight;\nBigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\nBigInteger.prototype.bitCount = bnBitCount;\nBigInteger.prototype.testBit = bnTestBit;\nBigInteger.prototype.setBit = bnSetBit;\nBigInteger.prototype.clearBit = bnClearBit;\nBigInteger.prototype.flipBit = bnFlipBit;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.remainder = bnRemainder;\nBigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\nBigInteger.prototype.modPow = bnModPow;\nBigInteger.prototype.modInverse = bnModInverse;\nBigInteger.prototype.pow = bnPow;\nBigInteger.prototype.gcd = bnGCD;\nBigInteger.prototype.isProbablePrime = bnIsProbablePrime;\nBigInteger.prototype.square = bnSquare;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = new Array();\n}\nfunction ARC4init(d) {\n var c, a, b;\n for (c = 0; c < 256; ++c) {\n this.S[c] = c;\n }\n a = 0;\n for (c = 0; c < 256; ++c) {\n a = a + this.S[c] + d[c % d.length] & 255;\n b = this.S[c];\n this.S[c] = this.S[a];\n this.S[a] = b;\n }\n this.i = 0;\n this.j = 0;\n}\nfunction ARC4next() {\n var a;\n this.i = this.i + 1 & 255;\n this.j = this.j + this.S[this.i] & 255;\n a = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = a;\n return this.S[a + this.S[this.i] & 255];\n}\nArcfour.prototype.init = ARC4init;\nArcfour.prototype.next = ARC4next;\nfunction prng_newstate() {\n return new Arcfour();\n}\nvar rng_psize = 256;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nvar rng_state;\nvar rng_pool;\nvar rng_pptr;\nfunction rng_seed_int(a) {\n rng_pool[rng_pptr++] ^= a & 255;\n rng_pool[rng_pptr++] ^= a >> 8 & 255;\n rng_pool[rng_pptr++] ^= a >> 16 & 255;\n rng_pool[rng_pptr++] ^= a >> 24 & 255;\n if (rng_pptr >= rng_psize) {\n rng_pptr -= rng_psize;\n }\n}\nfunction rng_seed_time() {\n rng_seed_int(new Date().getTime());\n}\nif (rng_pool == null) {\n rng_pool = new Array();\n rng_pptr = 0;\n var t;\n if (window !== undefined && (window.crypto !== undefined || window.msCrypto !== undefined)) {\n var crypto = window.crypto || window.msCrypto;\n if (crypto.getRandomValues) {\n var ua = new Uint8Array(32);\n crypto.getRandomValues(ua);\n for (t = 0; t < 32; ++t) {\n rng_pool[rng_pptr++] = ua[t];\n }\n } else {\n if (navigator.appName == \"Netscape\" && navigator.appVersion < \"5\") {\n var z = window.crypto.random(32);\n for (t = 0; t < z.length; ++t) {\n rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;\n }\n }\n }\n }\n while (rng_pptr < rng_psize) {\n t = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = t >>> 8;\n rng_pool[rng_pptr++] = t & 255;\n }\n rng_pptr = 0;\n rng_seed_time();\n}\nfunction rng_get_byte() {\n if (rng_state == null) {\n rng_seed_time();\n rng_state = prng_newstate();\n rng_state.init(rng_pool);\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {\n rng_pool[rng_pptr] = 0;\n }\n rng_pptr = 0;\n }\n return rng_state.next();\n}\nfunction rng_get_bytes(b) {\n var a;\n for (a = 0; a < b.length; ++a) {\n b[a] = rng_get_byte();\n }\n}\nfunction SecureRandom() {}\nSecureRandom.prototype.nextBytes = rng_get_bytes;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction parseBigInt(b, a) {\n return new BigInteger(b, a);\n}\nfunction linebrk(c, d) {\n var a = \"\";\n var b = 0;\n while (b + d < c.length) {\n a += c.substring(b, b + d) + \"\\n\";\n b += d;\n }\n return a + c.substring(b, c.length);\n}\nfunction byte2Hex(a) {\n if (a < 16) {\n return \"0\" + a.toString(16);\n } else {\n return a.toString(16);\n }\n}\nfunction pkcs1pad2(e, h) {\n if (h < e.length + 11) {\n throw \"Message too long for RSA\";\n return null;\n }\n var g = new Array();\n var d = e.length - 1;\n while (d >= 0 && h > 0) {\n var f = e.charCodeAt(d--);\n if (f < 128) {\n g[--h] = f;\n } else {\n if (f > 127 && f < 2048) {\n g[--h] = f & 63 | 128;\n g[--h] = f >> 6 | 192;\n } else {\n g[--h] = f & 63 | 128;\n g[--h] = f >> 6 & 63 | 128;\n g[--h] = f >> 12 | 224;\n }\n }\n }\n g[--h] = 0;\n var b = new SecureRandom();\n var a = new Array();\n while (h > 2) {\n a[0] = 0;\n while (a[0] == 0) {\n b.nextBytes(a);\n }\n g[--h] = a[0];\n }\n g[--h] = 2;\n g[--h] = 0;\n return new BigInteger(g);\n}\nfunction oaep_mgf1_arr(c, a, e) {\n var b = \"\",\n d = 0;\n while (b.length < a) {\n b += e(String.fromCharCode.apply(String, c.concat([(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255])));\n d += 1;\n }\n return b;\n}\nfunction oaep_pad(q, a, f, l) {\n var c = KJUR.crypto.MessageDigest;\n var o = KJUR.crypto.Util;\n var b = null;\n if (!f) {\n f = \"sha1\";\n }\n if (typeof f === \"string\") {\n b = c.getCanonicalAlgName(f);\n l = c.getHashLength(b);\n f = function (i) {\n return hextorstr(o.hashHex(rstrtohex(i), b));\n };\n }\n if (q.length + 2 * l + 2 > a) {\n throw \"Message too long for RSA\";\n }\n var k = \"\",\n e;\n for (e = 0; e < a - q.length - 2 * l - 2; e += 1) {\n k += \"\\x00\";\n }\n var h = f(\"\") + k + \"\\x01\" + q;\n var g = new Array(l);\n new SecureRandom().nextBytes(g);\n var j = oaep_mgf1_arr(g, h.length, f);\n var p = [];\n for (e = 0; e < h.length; e += 1) {\n p[e] = h.charCodeAt(e) ^ j.charCodeAt(e);\n }\n var m = oaep_mgf1_arr(p, g.length, f);\n var d = [0];\n for (e = 0; e < g.length; e += 1) {\n d[e + 1] = g[e] ^ m.charCodeAt(e);\n }\n return new BigInteger(d.concat(p));\n}\nfunction RSAKey() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n}\nfunction RSASetPublic(b, a) {\n this.isPublic = true;\n this.isPrivate = false;\n if (typeof b !== \"string\") {\n this.n = b;\n this.e = a;\n } else {\n if (b != null && a != null && b.length > 0 && a.length > 0) {\n this.n = parseBigInt(b, 16);\n this.e = parseInt(a, 16);\n } else {\n throw \"Invalid RSA public key\";\n }\n }\n}\nfunction RSADoPublic(a) {\n return a.modPowInt(this.e, this.n);\n}\nRSAKey.prototype.doPublic = RSADoPublic;\nRSAKey.prototype.setPublic = RSASetPublic;\nRSAKey.prototype.type = \"RSA\";\n/*! (c) Tom Wu, Kenji Urushima | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction pkcs1unpad2(g, j) {\n var a = g.toByteArray();\n var f = 0;\n while (f < a.length && a[f] == 0) {\n ++f;\n }\n if (a.length - f != j - 1 || a[f] != 2) {\n return null;\n }\n ++f;\n while (a[f] != 0) {\n if (++f >= a.length) {\n return null;\n }\n }\n var e = \"\";\n while (++f < a.length) {\n var h = a[f] & 255;\n if (h < 128) {\n e += String.fromCharCode(h);\n } else {\n if (h > 191 && h < 224) {\n e += String.fromCharCode((h & 31) << 6 | a[f + 1] & 63);\n ++f;\n } else {\n e += String.fromCharCode((h & 15) << 12 | (a[f + 1] & 63) << 6 | a[f + 2] & 63);\n f += 2;\n }\n }\n }\n return e;\n}\nfunction oaep_mgf1_str(c, a, e) {\n var b = \"\",\n d = 0;\n while (b.length < a) {\n b += e(c + String.fromCharCode.apply(String, [(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255]));\n d += 1;\n }\n return b;\n}\nfunction oaep_unpad(o, b, g, p) {\n var e = KJUR.crypto.MessageDigest;\n var r = KJUR.crypto.Util;\n var c = null;\n if (!g) {\n g = \"sha1\";\n }\n if (typeof g === \"string\") {\n c = e.getCanonicalAlgName(g);\n p = e.getHashLength(c);\n g = function (d) {\n return hextorstr(r.hashHex(rstrtohex(d), c));\n };\n }\n o = o.toByteArray();\n var h;\n for (h = 0; h < o.length; h += 1) {\n o[h] &= 255;\n }\n while (o.length < b) {\n o.unshift(0);\n }\n o = String.fromCharCode.apply(String, o);\n if (o.length < 2 * p + 2) {\n throw \"Cipher too short\";\n }\n var f = o.substr(1, p);\n var s = o.substr(p + 1);\n var q = oaep_mgf1_str(s, p, g);\n var k = [],\n h;\n for (h = 0; h < f.length; h += 1) {\n k[h] = f.charCodeAt(h) ^ q.charCodeAt(h);\n }\n var l = oaep_mgf1_str(String.fromCharCode.apply(String, k), o.length - p, g);\n var j = [];\n for (h = 0; h < s.length; h += 1) {\n j[h] = s.charCodeAt(h) ^ l.charCodeAt(h);\n }\n j = String.fromCharCode.apply(String, j);\n if (j.substr(0, p) !== g(\"\")) {\n throw \"Hash mismatch\";\n }\n j = j.substr(p);\n var a = j.indexOf(\"\\x01\");\n var m = a != -1 ? j.substr(0, a).lastIndexOf(\"\\x00\") : -1;\n if (m + 1 != a) {\n throw \"Malformed data\";\n }\n return j.substr(a + 1);\n}\nfunction RSASetPrivate(c, a, b) {\n this.isPrivate = true;\n if (typeof c !== \"string\") {\n this.n = c;\n this.e = a;\n this.d = b;\n } else {\n if (c != null && a != null && c.length > 0 && a.length > 0) {\n this.n = parseBigInt(c, 16);\n this.e = parseInt(a, 16);\n this.d = parseBigInt(b, 16);\n } else {\n throw \"Invalid RSA private key\";\n }\n }\n}\nfunction RSASetPrivateEx(g, d, e, c, b, a, h, f) {\n this.isPrivate = true;\n this.isPublic = false;\n if (g == null) {\n throw \"RSASetPrivateEx N == null\";\n }\n if (d == null) {\n throw \"RSASetPrivateEx E == null\";\n }\n if (g.length == 0) {\n throw \"RSASetPrivateEx N.length == 0\";\n }\n if (d.length == 0) {\n throw \"RSASetPrivateEx E.length == 0\";\n }\n if (g != null && d != null && g.length > 0 && d.length > 0) {\n this.n = parseBigInt(g, 16);\n this.e = parseInt(d, 16);\n this.d = parseBigInt(e, 16);\n this.p = parseBigInt(c, 16);\n this.q = parseBigInt(b, 16);\n this.dmp1 = parseBigInt(a, 16);\n this.dmq1 = parseBigInt(h, 16);\n this.coeff = parseBigInt(f, 16);\n } else {\n throw \"Invalid RSA private key in RSASetPrivateEx\";\n }\n}\nfunction RSAGenerate(b, l) {\n var a = new SecureRandom();\n var g = b >> 1;\n this.e = parseInt(l, 16);\n var c = new BigInteger(l, 16);\n var d = b / 2 - 100;\n var k = BigInteger.ONE.shiftLeft(d);\n for (;;) {\n for (;;) {\n this.p = new BigInteger(b - g, 1, a);\n if (this.p.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {\n break;\n }\n }\n for (;;) {\n this.q = new BigInteger(g, 1, a);\n if (this.q.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {\n break;\n }\n }\n if (this.p.compareTo(this.q) <= 0) {\n var j = this.p;\n this.p = this.q;\n this.q = j;\n }\n var h = this.q.subtract(this.p).abs();\n if (h.bitLength() < d || h.compareTo(k) <= 0) {\n continue;\n }\n var i = this.p.subtract(BigInteger.ONE);\n var e = this.q.subtract(BigInteger.ONE);\n var f = i.multiply(e);\n if (f.gcd(c).compareTo(BigInteger.ONE) == 0) {\n this.n = this.p.multiply(this.q);\n if (this.n.bitLength() == b) {\n this.d = c.modInverse(f);\n this.dmp1 = this.d.mod(i);\n this.dmq1 = this.d.mod(e);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n }\n this.isPrivate = true;\n}\nfunction RSADoPrivate(a) {\n if (this.p == null || this.q == null) {\n return a.modPow(this.d, this.n);\n }\n var c = a.mod(this.p).modPow(this.dmp1, this.p);\n var b = a.mod(this.q).modPow(this.dmq1, this.q);\n while (c.compareTo(b) < 0) {\n c = c.add(this.p);\n }\n return c.subtract(b).multiply(this.coeff).mod(this.p).multiply(this.q).add(b);\n}\nRSAKey.prototype.doPrivate = RSADoPrivate;\nRSAKey.prototype.setPrivate = RSASetPrivate;\nRSAKey.prototype.setPrivateEx = RSASetPrivateEx;\nRSAKey.prototype.generate = RSAGenerate;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction ECFieldElementFp(b, a) {\n this.x = a;\n this.q = b;\n}\nfunction feFpEquals(a) {\n if (a == this) {\n return true;\n }\n return this.q.equals(a.q) && this.x.equals(a.x);\n}\nfunction feFpToBigInteger() {\n return this.x;\n}\nfunction feFpNegate() {\n return new ECFieldElementFp(this.q, this.x.negate().mod(this.q));\n}\nfunction feFpAdd(a) {\n return new ECFieldElementFp(this.q, this.x.add(a.toBigInteger()).mod(this.q));\n}\nfunction feFpSubtract(a) {\n return new ECFieldElementFp(this.q, this.x.subtract(a.toBigInteger()).mod(this.q));\n}\nfunction feFpMultiply(a) {\n return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger()).mod(this.q));\n}\nfunction feFpSquare() {\n return new ECFieldElementFp(this.q, this.x.square().mod(this.q));\n}\nfunction feFpDivide(a) {\n return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger().modInverse(this.q)).mod(this.q));\n}\nECFieldElementFp.prototype.equals = feFpEquals;\nECFieldElementFp.prototype.toBigInteger = feFpToBigInteger;\nECFieldElementFp.prototype.negate = feFpNegate;\nECFieldElementFp.prototype.add = feFpAdd;\nECFieldElementFp.prototype.subtract = feFpSubtract;\nECFieldElementFp.prototype.multiply = feFpMultiply;\nECFieldElementFp.prototype.square = feFpSquare;\nECFieldElementFp.prototype.divide = feFpDivide;\nECFieldElementFp.prototype.sqrt = function () {\n return new ECFieldElementFp(this.q, this.x.sqrt().mod(this.q));\n};\nfunction ECPointFp(c, a, d, b) {\n this.curve = c;\n this.x = a;\n this.y = d;\n if (b == null) {\n this.z = BigInteger.ONE;\n } else {\n this.z = b;\n }\n this.zinv = null;\n}\nfunction pointFpGetX() {\n if (this.zinv == null) {\n this.zinv = this.z.modInverse(this.curve.q);\n }\n return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q));\n}\nfunction pointFpGetY() {\n if (this.zinv == null) {\n this.zinv = this.z.modInverse(this.curve.q);\n }\n return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q));\n}\nfunction pointFpEquals(a) {\n if (a == this) {\n return true;\n }\n if (this.isInfinity()) {\n return a.isInfinity();\n }\n if (a.isInfinity()) {\n return this.isInfinity();\n }\n var c, b;\n c = a.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(a.z)).mod(this.curve.q);\n if (!c.equals(BigInteger.ZERO)) {\n return false;\n }\n b = a.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(a.z)).mod(this.curve.q);\n return b.equals(BigInteger.ZERO);\n}\nfunction pointFpIsInfinity() {\n if (this.x == null && this.y == null) {\n return true;\n }\n return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO);\n}\nfunction pointFpNegate() {\n return new ECPointFp(this.curve, this.x, this.y.negate(), this.z);\n}\nfunction pointFpAdd(l) {\n if (this.isInfinity()) {\n return l;\n }\n if (l.isInfinity()) {\n return this;\n }\n var p = l.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(l.z)).mod(this.curve.q);\n var o = l.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(l.z)).mod(this.curve.q);\n if (BigInteger.ZERO.equals(o)) {\n if (BigInteger.ZERO.equals(p)) {\n return this.twice();\n }\n return this.curve.getInfinity();\n }\n var j = new BigInteger(\"3\");\n var e = this.x.toBigInteger();\n var n = this.y.toBigInteger();\n var c = l.x.toBigInteger();\n var k = l.y.toBigInteger();\n var m = o.square();\n var i = m.multiply(o);\n var d = e.multiply(m);\n var g = p.square().multiply(this.z);\n var a = g.subtract(d.shiftLeft(1)).multiply(l.z).subtract(i).multiply(o).mod(this.curve.q);\n var h = d.multiply(j).multiply(p).subtract(n.multiply(i)).subtract(g.multiply(p)).multiply(l.z).add(p.multiply(i)).mod(this.curve.q);\n var f = i.multiply(this.z).multiply(l.z).mod(this.curve.q);\n return new ECPointFp(this.curve, this.curve.fromBigInteger(a), this.curve.fromBigInteger(h), f);\n}\nfunction pointFpTwice() {\n if (this.isInfinity()) {\n return this;\n }\n if (this.y.toBigInteger().signum() == 0) {\n return this.curve.getInfinity();\n }\n var g = new BigInteger(\"3\");\n var c = this.x.toBigInteger();\n var h = this.y.toBigInteger();\n var e = h.multiply(this.z);\n var j = e.multiply(h).mod(this.curve.q);\n var i = this.curve.a.toBigInteger();\n var k = c.square().multiply(g);\n if (!BigInteger.ZERO.equals(i)) {\n k = k.add(this.z.square().multiply(i));\n }\n k = k.mod(this.curve.q);\n var b = k.square().subtract(c.shiftLeft(3).multiply(j)).shiftLeft(1).multiply(e).mod(this.curve.q);\n var f = k.multiply(g).multiply(c).subtract(j.shiftLeft(1)).shiftLeft(2).multiply(j).subtract(k.square().multiply(k)).mod(this.curve.q);\n var d = e.square().multiply(e).shiftLeft(3).mod(this.curve.q);\n return new ECPointFp(this.curve, this.curve.fromBigInteger(b), this.curve.fromBigInteger(f), d);\n}\nfunction pointFpMultiply(d) {\n if (this.isInfinity()) {\n return this;\n }\n if (d.signum() == 0) {\n return this.curve.getInfinity();\n }\n var m = d;\n var l = m.multiply(new BigInteger(\"3\"));\n var b = this.negate();\n var j = this;\n var q = this.curve.q.subtract(d);\n var o = q.multiply(new BigInteger(\"3\"));\n var c = new ECPointFp(this.curve, this.x, this.y);\n var a = c.negate();\n var g;\n for (g = l.bitLength() - 2; g > 0; --g) {\n j = j.twice();\n var n = l.testBit(g);\n var f = m.testBit(g);\n if (n != f) {\n j = j.add(n ? this : b);\n }\n }\n for (g = o.bitLength() - 2; g > 0; --g) {\n c = c.twice();\n var p = o.testBit(g);\n var r = q.testBit(g);\n if (p != r) {\n c = c.add(p ? c : a);\n }\n }\n return j;\n}\nfunction pointFpMultiplyTwo(c, a, b) {\n var d;\n if (c.bitLength() > b.bitLength()) {\n d = c.bitLength() - 1;\n } else {\n d = b.bitLength() - 1;\n }\n var f = this.curve.getInfinity();\n var e = this.add(a);\n while (d >= 0) {\n f = f.twice();\n if (c.testBit(d)) {\n if (b.testBit(d)) {\n f = f.add(e);\n } else {\n f = f.add(this);\n }\n } else {\n if (b.testBit(d)) {\n f = f.add(a);\n }\n }\n --d;\n }\n return f;\n}\nECPointFp.prototype.getX = pointFpGetX;\nECPointFp.prototype.getY = pointFpGetY;\nECPointFp.prototype.equals = pointFpEquals;\nECPointFp.prototype.isInfinity = pointFpIsInfinity;\nECPointFp.prototype.negate = pointFpNegate;\nECPointFp.prototype.add = pointFpAdd;\nECPointFp.prototype.twice = pointFpTwice;\nECPointFp.prototype.multiply = pointFpMultiply;\nECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo;\nfunction ECCurveFp(e, d, c) {\n this.q = e;\n this.a = this.fromBigInteger(d);\n this.b = this.fromBigInteger(c);\n this.infinity = new ECPointFp(this, null, null);\n}\nfunction curveFpGetQ() {\n return this.q;\n}\nfunction curveFpGetA() {\n return this.a;\n}\nfunction curveFpGetB() {\n return this.b;\n}\nfunction curveFpEquals(a) {\n if (a == this) {\n return true;\n }\n return this.q.equals(a.q) && this.a.equals(a.a) && this.b.equals(a.b);\n}\nfunction curveFpGetInfinity() {\n return this.infinity;\n}\nfunction curveFpFromBigInteger(a) {\n return new ECFieldElementFp(this.q, a);\n}\nfunction curveFpDecodePointHex(m) {\n switch (parseInt(m.substr(0, 2), 16)) {\n case 0:\n return this.infinity;\n case 2:\n case 3:\n var c = m.substr(0, 2);\n var l = m.substr(2);\n var j = this.fromBigInteger(new BigInteger(k, 16));\n var i = this.getA();\n var h = this.getB();\n var e = j.square().add(i).multiply(j).add(h);\n var g = e.sqrt();\n if (c == \"03\") {\n g = g.negate();\n }\n return new ECPointFp(this, j, g);\n case 4:\n case 6:\n case 7:\n var d = (m.length - 2) / 2;\n var k = m.substr(2, d);\n var f = m.substr(d + 2, d);\n return new ECPointFp(this, this.fromBigInteger(new BigInteger(k, 16)), this.fromBigInteger(new BigInteger(f, 16)));\n default:\n return null;\n }\n}\nECCurveFp.prototype.getQ = curveFpGetQ;\nECCurveFp.prototype.getA = curveFpGetA;\nECCurveFp.prototype.getB = curveFpGetB;\nECCurveFp.prototype.equals = curveFpEquals;\nECCurveFp.prototype.getInfinity = curveFpGetInfinity;\nECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger;\nECCurveFp.prototype.decodePointHex = curveFpDecodePointHex;\n/*! (c) Stefan Thomas | https://github.com/bitcoinjs/bitcoinjs-lib\n */\nECFieldElementFp.prototype.getByteLength = function () {\n return Math.floor((this.toBigInteger().bitLength() + 7) / 8);\n};\nECPointFp.prototype.getEncoded = function (c) {\n var d = function (h, f) {\n var g = h.toByteArrayUnsigned();\n if (f < g.length) {\n g = g.slice(g.length - f);\n } else {\n while (f > g.length) {\n g.unshift(0);\n }\n }\n return g;\n };\n var a = this.getX().toBigInteger();\n var e = this.getY().toBigInteger();\n var b = d(a, 32);\n if (c) {\n if (e.isEven()) {\n b.unshift(2);\n } else {\n b.unshift(3);\n }\n } else {\n b.unshift(4);\n b = b.concat(d(e, 32));\n }\n return b;\n};\nECPointFp.decodeFrom = function (g, c) {\n var f = c[0];\n var e = c.length - 1;\n var d = c.slice(1, 1 + e / 2);\n var b = c.slice(1 + e / 2, 1 + e);\n d.unshift(0);\n b.unshift(0);\n var a = new BigInteger(d);\n var h = new BigInteger(b);\n return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h));\n};\nECPointFp.decodeFromHex = function (g, c) {\n var f = c.substr(0, 2);\n var e = c.length - 2;\n var d = c.substr(2, e / 2);\n var b = c.substr(2 + e / 2, e / 2);\n var a = new BigInteger(d, 16);\n var h = new BigInteger(b, 16);\n return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h));\n};\nECPointFp.prototype.add2D = function (c) {\n if (this.isInfinity()) {\n return c;\n }\n if (c.isInfinity()) {\n return this;\n }\n if (this.x.equals(c.x)) {\n if (this.y.equals(c.y)) {\n return this.twice();\n }\n return this.curve.getInfinity();\n }\n var g = c.x.subtract(this.x);\n var e = c.y.subtract(this.y);\n var a = e.divide(g);\n var d = a.square().subtract(this.x).subtract(c.x);\n var f = a.multiply(this.x.subtract(d)).subtract(this.y);\n return new ECPointFp(this.curve, d, f);\n};\nECPointFp.prototype.twice2D = function () {\n if (this.isInfinity()) {\n return this;\n }\n if (this.y.toBigInteger().signum() == 0) {\n return this.curve.getInfinity();\n }\n var b = this.curve.fromBigInteger(BigInteger.valueOf(2));\n var e = this.curve.fromBigInteger(BigInteger.valueOf(3));\n var a = this.x.square().multiply(e).add(this.curve.a).divide(this.y.multiply(b));\n var c = a.square().subtract(this.x.multiply(b));\n var d = a.multiply(this.x.subtract(c)).subtract(this.y);\n return new ECPointFp(this.curve, c, d);\n};\nECPointFp.prototype.multiply2D = function (b) {\n if (this.isInfinity()) {\n return this;\n }\n if (b.signum() == 0) {\n return this.curve.getInfinity();\n }\n var g = b;\n var f = g.multiply(new BigInteger(\"3\"));\n var l = this.negate();\n var d = this;\n var c;\n for (c = f.bitLength() - 2; c > 0; --c) {\n d = d.twice();\n var a = f.testBit(c);\n var j = g.testBit(c);\n if (a != j) {\n d = d.add2D(a ? this : l);\n }\n }\n return d;\n};\nECPointFp.prototype.isOnCurve = function () {\n var d = this.getX().toBigInteger();\n var i = this.getY().toBigInteger();\n var f = this.curve.getA().toBigInteger();\n var c = this.curve.getB().toBigInteger();\n var h = this.curve.getQ();\n var e = i.multiply(i).mod(h);\n var g = d.multiply(d).multiply(d).add(f.multiply(d)).add(c).mod(h);\n return e.equals(g);\n};\nECPointFp.prototype.toString = function () {\n return \"(\" + this.getX().toBigInteger().toString() + \",\" + this.getY().toBigInteger().toString() + \")\";\n};\nECPointFp.prototype.validate = function () {\n var c = this.curve.getQ();\n if (this.isInfinity()) {\n throw new Error(\"Point is at infinity.\");\n }\n var a = this.getX().toBigInteger();\n var b = this.getY().toBigInteger();\n if (a.compareTo(BigInteger.ONE) < 0 || a.compareTo(c.subtract(BigInteger.ONE)) > 0) {\n throw new Error(\"x coordinate out of bounds\");\n }\n if (b.compareTo(BigInteger.ONE) < 0 || b.compareTo(c.subtract(BigInteger.ONE)) > 0) {\n throw new Error(\"y coordinate out of bounds\");\n }\n if (!this.isOnCurve()) {\n throw new Error(\"Point is not on the curve.\");\n }\n if (this.multiply(c).isInfinity()) {\n throw new Error(\"Point is not a scalar multiple of G.\");\n }\n return true;\n};\n/*! Mike Samuel (c) 2009 | code.google.com/p/json-sans-eval\n */\nvar jsonParse = function () {\n var e = \"(?:-?\\\\b(?:0|[1-9][0-9]*)(?:\\\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\\\b)\";\n var j = '(?:[^\\\\0-\\\\x08\\\\x0a-\\\\x1f\"\\\\\\\\]|\\\\\\\\(?:[\"/\\\\\\\\bfnrt]|u[0-9A-Fa-f]{4}))';\n var i = '(?:\"' + j + '*\")';\n var d = new RegExp(\"(?:false|true|null|[\\\\{\\\\}\\\\[\\\\]]|\" + e + \"|\" + i + \")\", \"g\");\n var k = new RegExp(\"\\\\\\\\(?:([^u])|u(.{4}))\", \"g\");\n var g = {\n '\"': '\"',\n \"/\": \"/\",\n \"\\\\\": \"\\\\\",\n b: \"\\b\",\n f: \"\\f\",\n n: \"\\n\",\n r: \"\\r\",\n t: \"\\t\"\n };\n function h(l, m, n) {\n return m ? g[m] : String.fromCharCode(parseInt(n, 16));\n }\n var c = new String(\"\");\n var a = \"\\\\\";\n var f = {\n \"{\": Object,\n \"[\": Array\n };\n var b = Object.hasOwnProperty;\n return function (u, q) {\n var p = u.match(d);\n var x;\n var v = p[0];\n var l = false;\n if (\"{\" === v) {\n x = {};\n } else {\n if (\"[\" === v) {\n x = [];\n } else {\n x = [];\n l = true;\n }\n }\n var t;\n var r = [x];\n for (var o = 1 - l, m = p.length; o < m; ++o) {\n v = p[o];\n var w;\n switch (v.charCodeAt(0)) {\n default:\n w = r[0];\n w[t || w.length] = +v;\n t = void 0;\n break;\n case 34:\n v = v.substring(1, v.length - 1);\n if (v.indexOf(a) !== -1) {\n v = v.replace(k, h);\n }\n w = r[0];\n if (!t) {\n if (w instanceof Array) {\n t = w.length;\n } else {\n t = v || c;\n break;\n }\n }\n w[t] = v;\n t = void 0;\n break;\n case 91:\n w = r[0];\n r.unshift(w[t || w.length] = []);\n t = void 0;\n break;\n case 93:\n r.shift();\n break;\n case 102:\n w = r[0];\n w[t || w.length] = false;\n t = void 0;\n break;\n case 110:\n w = r[0];\n w[t || w.length] = null;\n t = void 0;\n break;\n case 116:\n w = r[0];\n w[t || w.length] = true;\n t = void 0;\n break;\n case 123:\n w = r[0];\n r.unshift(w[t || w.length] = {});\n t = void 0;\n break;\n case 125:\n r.shift();\n break;\n }\n }\n if (l) {\n if (r.length !== 1) {\n throw new Error();\n }\n x = x[0];\n } else {\n if (r.length) {\n throw new Error();\n }\n }\n if (q) {\n var s = function (C, B) {\n var D = C[B];\n if (D && typeof D === \"object\") {\n var n = null;\n for (var z in D) {\n if (b.call(D, z) && D !== C) {\n var y = s(D, z);\n if (y !== void 0) {\n D[z] = y;\n } else {\n if (!n) {\n n = [];\n }\n n.push(z);\n }\n }\n }\n if (n) {\n for (var A = n.length; --A >= 0;) {\n delete D[n[A]];\n }\n }\n }\n return q.call(C, B, D);\n };\n x = s({\n \"\": x\n }, \"\");\n }\n return x;\n };\n}();\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nKJUR.asn1.ASN1Util = new function () {\n this.integerToByteHex = function (a) {\n var b = a.toString(16);\n if (b.length % 2 == 1) {\n b = \"0\" + b;\n }\n return b;\n };\n this.bigIntToMinTwosComplementsHex = function (a) {\n return twoscompl(a);\n };\n this.getPEMStringFromHex = function (a, b) {\n return hextopem(a, b);\n };\n this.newObject = function (k) {\n var F = KJUR,\n o = F.asn1,\n v = o.ASN1Object,\n B = o.DERBoolean,\n e = o.DERInteger,\n t = o.DERBitString,\n h = o.DEROctetString,\n x = o.DERNull,\n y = o.DERObjectIdentifier,\n m = o.DEREnumerated,\n g = o.DERUTF8String,\n f = o.DERNumericString,\n A = o.DERPrintableString,\n w = o.DERTeletexString,\n q = o.DERIA5String,\n E = o.DERUTCTime,\n j = o.DERGeneralizedTime,\n b = o.DERVisibleString,\n l = o.DERBMPString,\n n = o.DERSequence,\n c = o.DERSet,\n s = o.DERTaggedObject,\n p = o.ASN1Util.newObject;\n if (k instanceof o.ASN1Object) {\n return k;\n }\n var u = Object.keys(k);\n if (u.length != 1) {\n throw new Error(\"key of param shall be only one.\");\n }\n var H = u[0];\n if (\":asn1:bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:visstr:bmpstr:seq:set:tag:\".indexOf(\":\" + H + \":\") == -1) {\n throw new Error(\"undefined key: \" + H);\n }\n if (H == \"bool\") {\n return new B(k[H]);\n }\n if (H == \"int\") {\n return new e(k[H]);\n }\n if (H == \"bitstr\") {\n return new t(k[H]);\n }\n if (H == \"octstr\") {\n return new h(k[H]);\n }\n if (H == \"null\") {\n return new x(k[H]);\n }\n if (H == \"oid\") {\n return new y(k[H]);\n }\n if (H == \"enum\") {\n return new m(k[H]);\n }\n if (H == \"utf8str\") {\n return new g(k[H]);\n }\n if (H == \"numstr\") {\n return new f(k[H]);\n }\n if (H == \"prnstr\") {\n return new A(k[H]);\n }\n if (H == \"telstr\") {\n return new w(k[H]);\n }\n if (H == \"ia5str\") {\n return new q(k[H]);\n }\n if (H == \"utctime\") {\n return new E(k[H]);\n }\n if (H == \"gentime\") {\n return new j(k[H]);\n }\n if (H == \"visstr\") {\n return new b(k[H]);\n }\n if (H == \"bmpstr\") {\n return new l(k[H]);\n }\n if (H == \"asn1\") {\n return new v(k[H]);\n }\n if (H == \"seq\") {\n var d = k[H];\n var G = [];\n for (var z = 0; z < d.length; z++) {\n var D = p(d[z]);\n G.push(D);\n }\n return new n({\n array: G\n });\n }\n if (H == \"set\") {\n var d = k[H];\n var G = [];\n for (var z = 0; z < d.length; z++) {\n var D = p(d[z]);\n G.push(D);\n }\n return new c({\n array: G\n });\n }\n if (H == \"tag\") {\n var C = k[H];\n if (Object.prototype.toString.call(C) === \"[object Array]\" && C.length == 3) {\n var r = p(C[2]);\n return new s({\n tag: C[0],\n explicit: C[1],\n obj: r\n });\n } else {\n return new s(C);\n }\n }\n };\n this.jsonToASN1HEX = function (b) {\n var a = this.newObject(b);\n return a.tohex();\n };\n}();\nKJUR.asn1.ASN1Util.oidHexToInt = function (a) {\n var j = \"\";\n var k = parseInt(a.substr(0, 2), 16);\n var d = Math.floor(k / 40);\n var c = k % 40;\n var j = d + \".\" + c;\n var e = \"\";\n for (var f = 2; f < a.length; f += 2) {\n var g = parseInt(a.substr(f, 2), 16);\n var h = (\"00000000\" + g.toString(2)).slice(-8);\n e = e + h.substr(1, 7);\n if (h.substr(0, 1) == \"0\") {\n var b = new BigInteger(e, 2);\n j = j + \".\" + b.toString(10);\n e = \"\";\n }\n }\n return j;\n};\nKJUR.asn1.ASN1Util.oidIntToHex = function (f) {\n var e = function (a) {\n var k = a.toString(16);\n if (k.length == 1) {\n k = \"0\" + k;\n }\n return k;\n };\n var d = function (o) {\n var n = \"\";\n var k = new BigInteger(o, 10);\n var a = k.toString(2);\n var l = 7 - a.length % 7;\n if (l == 7) {\n l = 0;\n }\n var q = \"\";\n for (var m = 0; m < l; m++) {\n q += \"0\";\n }\n a = q + a;\n for (var m = 0; m < a.length - 1; m += 7) {\n var p = a.substr(m, 7);\n if (m != a.length - 7) {\n p = \"1\" + p;\n }\n n += e(parseInt(p, 2));\n }\n return n;\n };\n if (!f.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + f;\n }\n var g = \"\";\n var b = f.split(\".\");\n var j = parseInt(b[0]) * 40 + parseInt(b[1]);\n g += e(j);\n b.splice(0, 2);\n for (var c = 0; c < b.length; c++) {\n g += d(b[c]);\n }\n return g;\n};\nKJUR.asn1.ASN1Object = function (e) {\n var c = true;\n var b = null;\n var d = \"00\";\n var f = \"00\";\n var a = \"\";\n this.params = null;\n this.getLengthHexFromValue = function () {\n if (typeof this.hV == \"undefined\" || this.hV == null) {\n throw new Error(\"this.hV is null or undefined\");\n }\n if (this.hV.length % 2 == 1) {\n throw new Error(\"value hex must be even length: n=\" + a.length + \",v=\" + this.hV);\n }\n var j = this.hV.length / 2;\n var i = j.toString(16);\n if (i.length % 2 == 1) {\n i = \"0\" + i;\n }\n if (j < 128) {\n return i;\n } else {\n var h = i.length / 2;\n if (h > 15) {\n throw new Error(\"ASN.1 length too long to represent by 8x: n = \" + j.toString(16));\n }\n var g = 128 + h;\n return g.toString(16) + i;\n }\n };\n this.tohex = function () {\n if (this.hTLV == null || this.isModified) {\n this.hV = this.getFreshValueHex();\n this.hL = this.getLengthHexFromValue();\n this.hTLV = this.hT + this.hL + this.hV;\n this.isModified = false;\n }\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.getValueHex = function () {\n this.tohex();\n return this.hV;\n };\n this.getFreshValueHex = function () {\n return \"\";\n };\n this.setByParam = function (g) {\n this.params = g;\n };\n if (e != undefined) {\n if (e.tlv != undefined) {\n this.hTLV = e.tlv;\n this.isModified = false;\n }\n }\n};\nKJUR.asn1.DERAbstractString = function (c) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var b = null;\n var a = null;\n this.getString = function () {\n return this.s;\n };\n this.setString = function (d) {\n this.hTLV = null;\n this.isModified = true;\n this.s = d;\n this.hV = utf8tohex(this.s).toLowerCase();\n };\n this.setStringHex = function (d) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = d;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof c != \"undefined\") {\n if (typeof c == \"string\") {\n this.setString(c);\n } else {\n if (typeof c.str != \"undefined\") {\n this.setString(c.str);\n } else {\n if (typeof c.hex != \"undefined\") {\n this.setStringHex(c.hex);\n }\n }\n }\n }\n};\nextendClass(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERAbstractTime = function (c) {\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\n var b = null;\n var a = null;\n this.localDateToUTC = function (g) {\n var e = g.getTime() + g.getTimezoneOffset() * 60000;\n var f = new Date(e);\n return f;\n };\n this.formatDate = function (m, o, e) {\n var g = this.zeroPadding;\n var n = this.localDateToUTC(m);\n var p = String(n.getFullYear());\n if (o == \"utc\") {\n p = p.substr(2, 2);\n }\n var l = g(String(n.getMonth() + 1), 2);\n var q = g(String(n.getDate()), 2);\n var h = g(String(n.getHours()), 2);\n var i = g(String(n.getMinutes()), 2);\n var j = g(String(n.getSeconds()), 2);\n var r = p + l + q + h + i + j;\n if (e === true) {\n var f = n.getMilliseconds();\n if (f != 0) {\n var k = g(String(f), 3);\n k = k.replace(/[0]+$/, \"\");\n r = r + \".\" + k;\n }\n }\n return r + \"Z\";\n };\n this.zeroPadding = function (e, d) {\n if (e.length >= d) {\n return e;\n }\n return new Array(d - e.length + 1).join(\"0\") + e;\n };\n this.setByParam = function (d) {\n this.hV = null;\n this.hTLV = null;\n this.params = d;\n };\n this.getString = function () {\n return undefined;\n };\n this.setString = function (d) {\n this.hTLV = null;\n this.isModified = true;\n if (this.params == undefined) {\n this.params = {};\n }\n this.params.str = d;\n };\n this.setByDate = function (d) {\n this.hTLV = null;\n this.isModified = true;\n if (this.params == undefined) {\n this.params = {};\n }\n this.params.date = d;\n };\n this.setByDateValue = function (h, j, e, d, f, g) {\n var i = new Date(Date.UTC(h, j - 1, e, d, f, g, 0));\n this.setByDate(i);\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n};\nextendClass(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERAbstractStructured = function (b) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var a = null;\n this.setByASN1ObjectArray = function (c) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array = c;\n };\n this.appendASN1Object = function (c) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array.push(c);\n };\n this.asn1Array = new Array();\n if (typeof b != \"undefined\") {\n if (typeof b.array != \"undefined\") {\n this.asn1Array = b.array;\n }\n }\n};\nextendClass(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERBoolean = function (a) {\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\n this.hT = \"01\";\n if (a == false) {\n this.hTLV = \"010100\";\n } else {\n this.hTLV = \"0101ff\";\n }\n};\nextendClass(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERInteger = function (b) {\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\n this.hT = \"02\";\n this.params = null;\n var a = twoscompl;\n this.setByBigInteger = function (c) {\n this.isModified = true;\n this.params = {\n bigint: c\n };\n };\n this.setByInteger = function (c) {\n this.isModified = true;\n this.params = c;\n };\n this.setValueHex = function (c) {\n this.isModified = true;\n this.params = {\n hex: c\n };\n };\n this.getFreshValueHex = function () {\n var d = this.params;\n var c = null;\n if (d == null) {\n throw new Error(\"value not set\");\n }\n if (typeof d == \"object\" && d.hex != undefined) {\n this.hV = d.hex;\n return this.hV;\n }\n if (typeof d == \"number\") {\n c = new BigInteger(String(d), 10);\n } else {\n if (d[\"int\"] != undefined) {\n c = new BigInteger(String(d[\"int\"]), 10);\n } else {\n if (d.bigint != undefined) {\n c = d.bigint;\n } else {\n throw new Error(\"wrong parameter\");\n }\n }\n }\n this.hV = a(c);\n return this.hV;\n };\n if (b != undefined) {\n this.params = b;\n }\n};\nextendClass(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERBitString = function (b) {\n if (b !== undefined && typeof b.obj !== \"undefined\") {\n var a = KJUR.asn1.ASN1Util.newObject(b.obj);\n b.hex = \"00\" + a.tohex();\n }\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\n this.hT = \"03\";\n this.setHexValueIncludingUnusedBits = function (c) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = c;\n };\n this.setUnusedBitsAndHexValue = function (c, e) {\n if (c < 0 || 7 < c) {\n throw \"unused bits shall be from 0 to 7: u = \" + c;\n }\n var d = \"0\" + c;\n this.hTLV = null;\n this.isModified = true;\n this.hV = d + e;\n };\n this.setByBinaryString = function (e) {\n e = e.replace(/0+$/, \"\");\n var f = 8 - e.length % 8;\n if (f == 8) {\n f = 0;\n }\n e += \"0000000\".substr(0, f);\n var j = \"\";\n for (var g = 0; g < e.length - 1; g += 8) {\n var d = e.substr(g, 8);\n var c = parseInt(d, 2).toString(16);\n if (c.length == 1) {\n c = \"0\" + c;\n }\n j += c;\n }\n this.hTLV = null;\n this.isModified = true;\n this.hV = \"0\" + f + j;\n };\n this.setByBooleanArray = function (e) {\n var d = \"\";\n for (var c = 0; c < e.length; c++) {\n if (e[c] == true) {\n d += \"1\";\n } else {\n d += \"0\";\n }\n }\n this.setByBinaryString(d);\n };\n this.newFalseArray = function (e) {\n var c = new Array(e);\n for (var d = 0; d < e; d++) {\n c[d] = false;\n }\n return c;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof b != \"undefined\") {\n if (typeof b == \"string\" && b.toLowerCase().match(/^[0-9a-f]+$/)) {\n this.setHexValueIncludingUnusedBits(b);\n } else {\n if (typeof b.hex != \"undefined\") {\n this.setHexValueIncludingUnusedBits(b.hex);\n } else {\n if (typeof b.bin != \"undefined\") {\n this.setByBinaryString(b.bin);\n } else {\n if (typeof b.array != \"undefined\") {\n this.setByBooleanArray(b.array);\n }\n }\n }\n }\n }\n};\nextendClass(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\nKJUR.asn1.DEROctetString = function (b) {\n if (b !== undefined && typeof b.obj !== \"undefined\") {\n var a = KJUR.asn1.ASN1Util.newObject(b.obj);\n b.hex = a.tohex();\n }\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, b);\n this.hT = \"04\";\n};\nextendClass(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERNull = function () {\n KJUR.asn1.DERNull.superclass.constructor.call(this);\n this.hT = \"05\";\n this.hTLV = \"0500\";\n};\nextendClass(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERObjectIdentifier = function (a) {\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\n this.hT = \"06\";\n this.setValueHex = function (b) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = b;\n };\n this.setValueOidString = function (b) {\n var c = oidtohex(b);\n if (c == null) {\n throw new Error(\"malformed oid string: \" + b);\n }\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = c;\n };\n this.setValueName = function (c) {\n var b = KJUR.asn1.x509.OID.name2oid(c);\n if (b !== \"\") {\n this.setValueOidString(b);\n } else {\n throw new Error(\"DERObjectIdentifier oidName undefined: \" + c);\n }\n };\n this.setValueNameOrOid = function (b) {\n if (b.match(/^[0-2].[0-9.]+$/)) {\n this.setValueOidString(b);\n } else {\n this.setValueName(b);\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n this.setByParam = function (b) {\n if (typeof b === \"string\") {\n this.setValueNameOrOid(b);\n } else {\n if (b.oid !== undefined) {\n this.setValueNameOrOid(b.oid);\n } else {\n if (b.name !== undefined) {\n this.setValueNameOrOid(b.name);\n } else {\n if (b.hex !== undefined) {\n this.setValueHex(b.hex);\n }\n }\n }\n }\n };\n if (a !== undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\nKJUR.asn1.DEREnumerated = function (a) {\n KJUR.asn1.DEREnumerated.superclass.constructor.call(this);\n this.hT = \"0a\";\n this.setByBigInteger = function (b) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = twoscompl(b);\n };\n this.setByInteger = function (c) {\n var b = new BigInteger(String(c), 10);\n this.setByBigInteger(b);\n };\n this.setValueHex = function (b) {\n this.hV = b;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof a != \"undefined\") {\n if (typeof a[\"int\"] != \"undefined\") {\n this.setByInteger(a[\"int\"]);\n } else {\n if (typeof a == \"number\") {\n this.setByInteger(a);\n } else {\n if (typeof a.hex != \"undefined\") {\n this.setValueHex(a.hex);\n }\n }\n }\n }\n};\nextendClass(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERUTF8String = function (a) {\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, a);\n this.hT = \"0c\";\n};\nextendClass(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERNumericString = function (a) {\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, a);\n this.hT = \"12\";\n};\nextendClass(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERPrintableString = function (a) {\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, a);\n this.hT = \"13\";\n};\nextendClass(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERTeletexString = function (a) {\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, a);\n this.hT = \"14\";\n};\nextendClass(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERIA5String = function (a) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, a);\n this.hT = \"16\";\n};\nextendClass(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERVisibleString = function (a) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, a);\n this.hT = \"1a\";\n};\nextendClass(KJUR.asn1.DERVisibleString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERBMPString = function (a) {\n KJUR.asn1.DERBMPString.superclass.constructor.call(this, a);\n this.hT = \"1e\";\n};\nextendClass(KJUR.asn1.DERBMPString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERUTCTime = function (a) {\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, a);\n this.hT = \"17\";\n this.params = undefined;\n this.getFreshValueHex = function () {\n var d = this.params;\n if (this.params == undefined) {\n d = {\n date: new Date()\n };\n }\n if (typeof d == \"string\") {\n if (d.match(/^[0-9]{12}Z$/) || d.match(/^[0-9]{12}\\.[0-9]+Z$/)) {\n this.hV = stohex(d);\n } else {\n throw new Error(\"malformed string for UTCTime: \" + d);\n }\n } else {\n if (d.str != undefined) {\n this.hV = stohex(d.str);\n } else {\n if (d.date == undefined && d.millis == true) {\n var c = new Date();\n this.hV = stohex(this.formatDate(c, \"utc\", true));\n } else {\n if (d.date != undefined && d.date instanceof Date) {\n var b = d.millis === true;\n this.hV = stohex(this.formatDate(d.date, \"utc\", b));\n } else {\n if (d instanceof Date) {\n this.hV = stohex(this.formatDate(d, \"utc\"));\n }\n }\n }\n }\n }\n if (this.hV == undefined) {\n throw new Error(\"parameter not specified properly for UTCTime\");\n }\n return this.hV;\n };\n if (a != undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\nKJUR.asn1.DERGeneralizedTime = function (a) {\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, a);\n this.hT = \"18\";\n this.params = a;\n this.getFreshValueHex = function () {\n var d = this.params;\n if (this.params == undefined) {\n d = {\n date: new Date()\n };\n }\n if (typeof d == \"string\") {\n if (d.match(/^[0-9]{14}Z$/) || d.match(/^[0-9]{14}\\.[0-9]+Z$/)) {\n this.hV = stohex(d);\n } else {\n throw new Error(\"malformed string for GeneralizedTime: \" + d);\n }\n } else {\n if (d.str != undefined) {\n this.hV = stohex(d.str);\n } else {\n if (d.date == undefined && d.millis == true) {\n var c = new Date();\n this.hV = stohex(this.formatDate(c, \"gen\", true));\n } else {\n if (d.date != undefined && d.date instanceof Date) {\n var b = d.millis === true;\n this.hV = stohex(this.formatDate(d.date, \"gen\", b));\n } else {\n if (d instanceof Date) {\n this.hV = stohex(this.formatDate(d, \"gen\"));\n }\n }\n }\n }\n }\n if (this.hV == undefined) {\n throw new Error(\"parameter not specified properly for GeneralizedTime\");\n }\n return this.hV;\n };\n if (a != undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\nKJUR.asn1.DERSequence = function (a) {\n KJUR.asn1.DERSequence.superclass.constructor.call(this, a);\n this.hT = \"30\";\n this.getFreshValueHex = function () {\n var c = \"\";\n for (var b = 0; b < this.asn1Array.length; b++) {\n var d = this.asn1Array[b];\n c += d.tohex();\n }\n this.hV = c;\n return this.hV;\n };\n};\nextendClass(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\nKJUR.asn1.DERSet = function (a) {\n KJUR.asn1.DERSet.superclass.constructor.call(this, a);\n this.hT = \"31\";\n this.sortFlag = true;\n this.getFreshValueHex = function () {\n var b = new Array();\n for (var c = 0; c < this.asn1Array.length; c++) {\n var d = this.asn1Array[c];\n b.push(d.tohex());\n }\n if (this.sortFlag == true) {\n b.sort();\n }\n this.hV = b.join(\"\");\n return this.hV;\n };\n if (typeof a != \"undefined\") {\n if (typeof a.sortflag != \"undefined\" && a.sortflag == false) {\n this.sortFlag = false;\n }\n }\n};\nextendClass(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\nKJUR.asn1.DERTaggedObject = function (f) {\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\n var d = KJUR.asn1,\n e = ASN1HEX,\n a = e.getV,\n c = e.isASN1HEX,\n b = d.ASN1Util.newObject;\n this.hT = \"a0\";\n this.hV = \"\";\n this.isExplicit = true;\n this.asn1Object = null;\n this.params = {\n tag: \"a0\",\n explicit: true\n };\n this.setASN1Object = function (g, h, i) {\n this.params = {\n tag: h,\n explicit: g,\n obj: i\n };\n };\n this.getFreshValueHex = function () {\n var h = this.params;\n if (h.explicit == undefined) {\n h.explicit = true;\n }\n if (h.tage != undefined) {\n h.tag = h.tage;\n h.explicit = true;\n }\n if (h.tagi != undefined) {\n h.tag = h.tagi;\n h.explicit = false;\n }\n if (h.str != undefined) {\n this.hV = utf8tohex(h.str);\n } else {\n if (h.hex != undefined) {\n this.hV = h.hex;\n } else {\n if (h.obj != undefined) {\n var g;\n if (h.obj instanceof d.ASN1Object) {\n g = h.obj.tohex();\n } else {\n if (typeof h.obj == \"object\") {\n g = b(h.obj).tohex();\n }\n }\n if (h.explicit) {\n this.hV = g;\n } else {\n this.hV = a(g, 0);\n }\n } else {\n throw new Error(\"str, hex nor obj not specified\");\n }\n }\n }\n if (h.tag == undefined) {\n h.tag = \"a0\";\n }\n this.hT = h.tag;\n this.hTLV = null;\n this.isModified = true;\n return this.hV;\n };\n this.setByParam = function (g) {\n this.params = g;\n };\n if (f !== undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);\nvar ASN1HEX = new function () {}();\nASN1HEX.getLblen = function (c, a) {\n if (c.substr(a + 2, 1) != \"8\") {\n return 1;\n }\n var b = parseInt(c.substr(a + 3, 1));\n if (b == 0) {\n return -1;\n }\n if (0 < b && b < 10) {\n return b + 1;\n }\n return -2;\n};\nASN1HEX.getL = function (c, b) {\n var a = ASN1HEX.getLblen(c, b);\n if (a < 1) {\n return \"\";\n }\n return c.substr(b + 2, a * 2);\n};\nASN1HEX.getVblen = function (d, a) {\n var c, b;\n c = ASN1HEX.getL(d, a);\n if (c == \"\") {\n return -1;\n }\n if (c.substr(0, 1) === \"8\") {\n b = new BigInteger(c.substr(2), 16);\n } else {\n b = new BigInteger(c, 16);\n }\n return b.intValue();\n};\nASN1HEX.getVidx = function (c, b) {\n var a = ASN1HEX.getLblen(c, b);\n if (a < 0) {\n return a;\n }\n return b + (a + 1) * 2;\n};\nASN1HEX.getV = function (d, a) {\n var c = ASN1HEX.getVidx(d, a);\n var b = ASN1HEX.getVblen(d, a);\n return d.substr(c, b * 2);\n};\nASN1HEX.getTLV = function (b, a) {\n return b.substr(a, 2) + ASN1HEX.getL(b, a) + ASN1HEX.getV(b, a);\n};\nASN1HEX.getTLVblen = function (b, a) {\n return 2 + ASN1HEX.getLblen(b, a) * 2 + ASN1HEX.getVblen(b, a) * 2;\n};\nASN1HEX.getNextSiblingIdx = function (d, a) {\n var c = ASN1HEX.getVidx(d, a);\n var b = ASN1HEX.getVblen(d, a);\n return c + b * 2;\n};\nASN1HEX.getChildIdx = function (e, k) {\n var l = ASN1HEX;\n var j = [];\n var c, f, g;\n c = l.getVidx(e, k);\n f = l.getVblen(e, k) * 2;\n if (e.substr(k, 2) == \"03\") {\n c += 2;\n f -= 2;\n }\n g = 0;\n var d = c;\n while (g <= f) {\n var b = l.getTLVblen(e, d);\n g += b;\n if (g <= f) {\n j.push(d);\n }\n d += b;\n if (g >= f) {\n break;\n }\n }\n return j;\n};\nASN1HEX.getNthChildIdx = function (d, b, e) {\n var c = ASN1HEX.getChildIdx(d, b);\n return c[e];\n};\nASN1HEX.getIdxbyList = function (e, d, c, i) {\n var g = ASN1HEX;\n var f, b;\n if (c.length == 0) {\n if (i !== undefined) {\n if (e.substr(d, 2) !== i) {\n return -1;\n }\n }\n return d;\n }\n f = c.shift();\n b = g.getChildIdx(e, d);\n if (f >= b.length) {\n return -1;\n }\n return g.getIdxbyList(e, b[f], c, i);\n};\nASN1HEX.getIdxbyListEx = function (f, k, b, g) {\n var m = ASN1HEX;\n var d, l;\n if (b.length == 0) {\n if (g !== undefined) {\n if (f.substr(k, 2) !== g) {\n return -1;\n }\n }\n return k;\n }\n d = b.shift();\n l = m.getChildIdx(f, k);\n var j = 0;\n for (var e = 0; e < l.length; e++) {\n var c = f.substr(l[e], 2);\n if (typeof d == \"number\" && !m.isContextTag(c) && j == d || typeof d == \"string\" && m.isContextTag(c, d)) {\n return m.getIdxbyListEx(f, l[e], b, g);\n }\n if (!m.isContextTag(c)) {\n j++;\n }\n }\n return -1;\n};\nASN1HEX.getTLVbyList = function (d, c, b, f) {\n var e = ASN1HEX;\n var a = e.getIdxbyList(d, c, b, f);\n if (a == -1) {\n return null;\n }\n if (a >= d.length) {\n return null;\n }\n return e.getTLV(d, a);\n};\nASN1HEX.getTLVbyListEx = function (d, c, b, f) {\n var e = ASN1HEX;\n var a = e.getIdxbyListEx(d, c, b, f);\n if (a == -1) {\n return null;\n }\n return e.getTLV(d, a);\n};\nASN1HEX.getVbyList = function (e, c, b, g, i) {\n var f = ASN1HEX;\n var a, d;\n a = f.getIdxbyList(e, c, b, g);\n if (a == -1) {\n return null;\n }\n if (a >= e.length) {\n return null;\n }\n d = f.getV(e, a);\n if (i === true) {\n d = d.substr(2);\n }\n return d;\n};\nASN1HEX.getVbyListEx = function (b, e, a, d, f) {\n var j = ASN1HEX;\n var g, c, i;\n g = j.getIdxbyListEx(b, e, a, d);\n if (g == -1) {\n return null;\n }\n i = j.getV(b, g);\n if (b.substr(g, 2) == \"03\" && f !== false) {\n i = i.substr(2);\n }\n return i;\n};\nASN1HEX.getInt = function (e, b, f) {\n if (f == undefined) {\n f = -1;\n }\n try {\n var c = e.substr(b, 2);\n if (c != \"02\" && c != \"03\") {\n return f;\n }\n var a = ASN1HEX.getV(e, b);\n if (c == \"02\") {\n return parseInt(a, 16);\n } else {\n return bitstrtoint(a);\n }\n } catch (d) {\n return f;\n }\n};\nASN1HEX.getOID = function (c, a, d) {\n if (d == undefined) {\n d = null;\n }\n try {\n if (c.substr(a, 2) != \"06\") {\n return d;\n }\n var e = ASN1HEX.getV(c, a);\n return hextooid(e);\n } catch (b) {\n return d;\n }\n};\nASN1HEX.getOIDName = function (d, a, f) {\n if (f == undefined) {\n f = null;\n }\n try {\n var e = ASN1HEX.getOID(d, a, f);\n if (e == f) {\n return f;\n }\n var b = KJUR.asn1.x509.OID.oid2name(e);\n if (b == \"\") {\n return e;\n }\n return b;\n } catch (c) {\n return f;\n }\n};\nASN1HEX.getString = function (d, b, e) {\n if (e == undefined) {\n e = null;\n }\n try {\n var a = ASN1HEX.getV(d, b);\n return hextorstr(a);\n } catch (c) {\n return e;\n }\n};\nASN1HEX.hextooidstr = function (e) {\n var h = function (b, a) {\n if (b.length >= a) {\n return b;\n }\n return new Array(a - b.length + 1).join(\"0\") + b;\n };\n var l = [];\n var o = e.substr(0, 2);\n var f = parseInt(o, 16);\n l[0] = new String(Math.floor(f / 40));\n l[1] = new String(f % 40);\n var m = e.substr(2);\n var k = [];\n for (var g = 0; g < m.length / 2; g++) {\n k.push(parseInt(m.substr(g * 2, 2), 16));\n }\n var j = [];\n var d = \"\";\n for (var g = 0; g < k.length; g++) {\n if (k[g] & 128) {\n d = d + h((k[g] & 127).toString(2), 7);\n } else {\n d = d + h((k[g] & 127).toString(2), 7);\n j.push(new String(parseInt(d, 2)));\n d = \"\";\n }\n }\n var n = l.join(\".\");\n if (j.length > 0) {\n n = n + \".\" + j.join(\".\");\n }\n return n;\n};\nASN1HEX.dump = function (t, c, l, g) {\n var p = ASN1HEX;\n var j = p.getV;\n var y = p.dump;\n var w = p.getChildIdx;\n var e = t;\n if (t instanceof KJUR.asn1.ASN1Object) {\n e = t.tohex();\n }\n var q = function (A, i) {\n if (A.length <= i * 2) {\n return A;\n } else {\n var v = A.substr(0, i) + \"..(total \" + A.length / 2 + \"bytes)..\" + A.substr(A.length - i, i);\n return v;\n }\n };\n if (c === undefined) {\n c = {\n ommit_long_octet: 32\n };\n }\n if (l === undefined) {\n l = 0;\n }\n if (g === undefined) {\n g = \"\";\n }\n var x = c.ommit_long_octet;\n var z = e.substr(l, 2);\n if (z == \"01\") {\n var h = j(e, l);\n if (h == \"00\") {\n return g + \"BOOLEAN FALSE\\n\";\n } else {\n return g + \"BOOLEAN TRUE\\n\";\n }\n }\n if (z == \"02\") {\n var h = j(e, l);\n return g + \"INTEGER \" + q(h, x) + \"\\n\";\n }\n if (z == \"03\") {\n var h = j(e, l);\n if (p.isASN1HEX(h.substr(2))) {\n var k = g + \"BITSTRING, encapsulates\\n\";\n k = k + y(h.substr(2), c, 0, g + \" \");\n return k;\n } else {\n return g + \"BITSTRING \" + q(h, x) + \"\\n\";\n }\n }\n if (z == \"04\") {\n var h = j(e, l);\n if (p.isASN1HEX(h)) {\n var k = g + \"OCTETSTRING, encapsulates\\n\";\n k = k + y(h, c, 0, g + \" \");\n return k;\n } else {\n return g + \"OCTETSTRING \" + q(h, x) + \"\\n\";\n }\n }\n if (z == \"05\") {\n return g + \"NULL\\n\";\n }\n if (z == \"06\") {\n var m = j(e, l);\n var b = KJUR.asn1.ASN1Util.oidHexToInt(m);\n var o = KJUR.asn1.x509.OID.oid2name(b);\n var a = b.replace(/\\./g, \" \");\n if (o != \"\") {\n return g + \"ObjectIdentifier \" + o + \" (\" + a + \")\\n\";\n } else {\n return g + \"ObjectIdentifier (\" + a + \")\\n\";\n }\n }\n if (z == \"0a\") {\n return g + \"ENUMERATED \" + parseInt(j(e, l)) + \"\\n\";\n }\n if (z == \"0c\") {\n return g + \"UTF8String '\" + hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"13\") {\n return g + \"PrintableString '\" + hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"14\") {\n return g + \"TeletexString '\" + hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"16\") {\n return g + \"IA5String '\" + hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"17\") {\n return g + \"UTCTime \" + hextoutf8(j(e, l)) + \"\\n\";\n }\n if (z == \"18\") {\n return g + \"GeneralizedTime \" + hextoutf8(j(e, l)) + \"\\n\";\n }\n if (z == \"1a\") {\n return g + \"VisualString '\" + hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"1e\") {\n return g + \"BMPString '\" + ucs2hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"30\") {\n if (e.substr(l, 4) == \"3000\") {\n return g + \"SEQUENCE {}\\n\";\n }\n var k = g + \"SEQUENCE\\n\";\n var d = w(e, l);\n var f = c;\n if ((d.length == 2 || d.length == 3) && e.substr(d[0], 2) == \"06\" && e.substr(d[d.length - 1], 2) == \"04\") {\n var o = p.oidname(j(e, d[0]));\n var r = JSON.parse(JSON.stringify(c));\n r.x509ExtName = o;\n f = r;\n }\n for (var u = 0; u < d.length; u++) {\n k = k + y(e, f, d[u], g + \" \");\n }\n return k;\n }\n if (z == \"31\") {\n var k = g + \"SET\\n\";\n var d = w(e, l);\n for (var u = 0; u < d.length; u++) {\n k = k + y(e, c, d[u], g + \" \");\n }\n return k;\n }\n var z = parseInt(z, 16);\n if ((z & 128) != 0) {\n var n = z & 31;\n if ((z & 32) != 0) {\n var k = g + \"[\" + n + \"]\\n\";\n var d = w(e, l);\n for (var u = 0; u < d.length; u++) {\n k = k + y(e, c, d[u], g + \" \");\n }\n return k;\n } else {\n var h = j(e, l);\n if (ASN1HEX.isASN1HEX(h)) {\n var k = g + \"[\" + n + \"]\\n\";\n k = k + y(h, c, 0, g + \" \");\n return k;\n } else {\n if (h.substr(0, 8) == \"68747470\") {\n h = hextoutf8(h);\n } else {\n if (c.x509ExtName === \"subjectAltName\" && n == 2) {\n h = hextoutf8(h);\n }\n }\n }\n var k = g + \"[\" + n + \"] \" + h + \"\\n\";\n return k;\n }\n }\n return g + \"UNKNOWN(\" + z + \") \" + j(e, l) + \"\\n\";\n};\nASN1HEX.parse = function (x) {\n var t = ASN1HEX,\n f = t.parse,\n a = t.isASN1HEX,\n l = t.getV,\n b = t.getTLV,\n y = t.getChildIdx,\n i = KJUR.asn1,\n e = i.ASN1Util.oidHexToInt,\n B = i.x509.OID.oid2name,\n k = hextoutf8,\n n = ucs2hextoutf8,\n q = iso88591hextoutf8;\n var c = {\n \"0c\": \"utf8str\",\n \"12\": \"numstr\",\n \"13\": \"prnstr\",\n \"14\": \"telstr\",\n \"16\": \"ia5str\",\n \"17\": \"utctime\",\n \"18\": \"gentime\",\n \"1a\": \"visstr\",\n \"1e\": \"bmpstr\",\n \"30\": \"seq\",\n \"31\": \"set\"\n };\n var u = function (H) {\n var D = [];\n var E = y(H, 0);\n for (var G = 0; G < E.length; G++) {\n var s = E[G];\n var d = b(H, s);\n var F = f(d);\n D.push(F);\n }\n return D;\n };\n var C = x.substr(0, 2);\n var j = {};\n var p = l(x, 0);\n if (C == \"01\") {\n if (x == \"0101ff\") {\n return {\n bool: true\n };\n }\n return {\n bool: false\n };\n } else {\n if (C == \"02\") {\n return {\n \"int\": {\n hex: p\n }\n };\n } else {\n if (C == \"03\") {\n try {\n if (p.substr(0, 2) != \"00\") {\n throw \"not encap\";\n }\n var v = p.substr(2);\n if (!a(v)) {\n throw \"not encap\";\n }\n return {\n bitstr: {\n obj: f(v)\n }\n };\n } catch (z) {\n var m = null;\n if (p.length <= 10) {\n m = bitstrtobinstr(p);\n }\n if (m == null) {\n return {\n bitstr: {\n hex: p\n }\n };\n } else {\n return {\n bitstr: {\n bin: m\n }\n };\n }\n }\n } else {\n if (C == \"04\") {\n try {\n if (!a(p)) {\n throw \"not encap\";\n }\n return {\n octstr: {\n obj: f(p)\n }\n };\n } catch (z) {\n return {\n octstr: {\n hex: p\n }\n };\n }\n } else {\n if (C == \"05\") {\n return {\n \"null\": \"\"\n };\n } else {\n if (C == \"06\") {\n var g = e(p);\n var r = B(g);\n if (r == \"\") {\n return {\n oid: g\n };\n } else {\n return {\n oid: r\n };\n }\n } else {\n if (C == \"0a\") {\n if (p.length > 4) {\n return {\n \"enum\": {\n hex: p\n }\n };\n } else {\n return {\n \"enum\": parseInt(p, 16)\n };\n }\n } else {\n if (C == \"30\" || C == \"31\") {\n j[c[C]] = u(x);\n return j;\n } else {\n if (C == \"14\") {\n var o = q(p);\n j[c[C]] = {\n str: o\n };\n return j;\n } else {\n if (C == \"1e\") {\n var o = n(p);\n j[c[C]] = {\n str: o\n };\n return j;\n } else {\n if (\":0c:12:13:16:17:18:1a:\".indexOf(C) != -1) {\n var o = k(p);\n j[c[C]] = {\n str: o\n };\n return j;\n } else {\n if (C.match(/^8[0-9]$/)) {\n var o = k(p);\n if (o == null | o == \"\") {\n return {\n tag: {\n tag: C,\n explicit: false,\n hex: p\n }\n };\n } else {\n if (o.match(/[\\x00-\\x1F\\x7F-\\x9F]/) != null || o.match(/[\\u0000-\\u001F\\u0080–\\u009F]/) != null) {\n return {\n tag: {\n tag: C,\n explicit: false,\n hex: p\n }\n };\n } else {\n return {\n tag: {\n tag: C,\n explicit: false,\n str: o\n }\n };\n }\n }\n } else {\n if (C.match(/^a[0-9]$/)) {\n try {\n if (!a(p)) {\n throw new Error(\"not encap\");\n }\n return {\n tag: {\n tag: C,\n explicit: true,\n obj: f(p)\n }\n };\n } catch (z) {\n return {\n tag: {\n tag: C,\n explicit: true,\n hex: p\n }\n };\n }\n } else {\n var A = new KJUR.asn1.ASN1Object();\n A.hV = p;\n var w = A.getLengthHexFromValue();\n return {\n asn1: {\n tlv: C + w + p\n }\n };\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n};\nASN1HEX.isContextTag = function (c, b) {\n c = c.toLowerCase();\n var f, e;\n try {\n f = parseInt(c, 16);\n } catch (d) {\n return -1;\n }\n if (b === undefined) {\n if ((f & 192) == 128) {\n return true;\n } else {\n return false;\n }\n }\n try {\n var a = b.match(/^\\[[0-9]+\\]$/);\n if (a == null) {\n return false;\n }\n e = parseInt(b.substr(1, b.length - 1), 10);\n if (e > 31) {\n return false;\n }\n if ((f & 192) == 128 && (f & 31) == e) {\n return true;\n }\n return false;\n } catch (d) {\n return false;\n }\n};\nASN1HEX.isASN1HEX = function (e) {\n var d = ASN1HEX;\n if (e.length % 2 == 1) {\n return false;\n }\n var c = d.getVblen(e, 0);\n var b = e.substr(0, 2);\n var f = d.getL(e, 0);\n var a = e.length - b.length - f.length;\n if (a == c * 2) {\n return true;\n }\n return false;\n};\nASN1HEX.checkStrictDER = function (g, o, d, c, r) {\n var s = ASN1HEX;\n if (d === undefined) {\n if (typeof g != \"string\") {\n throw new Error(\"not hex string\");\n }\n g = g.toLowerCase();\n if (!KJUR.lang.String.isHex(g)) {\n throw new Error(\"not hex string\");\n }\n d = g.length;\n c = g.length / 2;\n if (c < 128) {\n r = 1;\n } else {\n r = Math.ceil(c.toString(16)) + 1;\n }\n }\n var k = s.getL(g, o);\n if (k.length > r * 2) {\n throw new Error(\"L of TLV too long: idx=\" + o);\n }\n var n = s.getVblen(g, o);\n if (n > c) {\n throw new Error(\"value of L too long than hex: idx=\" + o);\n }\n var q = s.getTLV(g, o);\n var f = q.length - 2 - s.getL(g, o).length;\n if (f !== n * 2) {\n throw new Error(\"V string length and L's value not the same:\" + f + \"/\" + n * 2);\n }\n if (o === 0) {\n if (g.length != q.length) {\n throw new Error(\"total length and TLV length unmatch:\" + g.length + \"!=\" + q.length);\n }\n }\n var b = g.substr(o, 2);\n if (b === \"02\") {\n var a = s.getVidx(g, o);\n if (g.substr(a, 2) == \"00\" && g.charCodeAt(a + 2) < 56) {\n throw new Error(\"not least zeros for DER INTEGER\");\n }\n }\n if (parseInt(b, 16) & 32) {\n var p = s.getVblen(g, o);\n var m = 0;\n var l = s.getChildIdx(g, o);\n for (var e = 0; e < l.length; e++) {\n var j = s.getTLV(g, l[e]);\n m += j.length;\n s.checkStrictDER(g, l[e], d, c, r);\n }\n if (p * 2 != m) {\n throw new Error(\"sum of children's TLV length and L unmatch: \" + p * 2 + \"!=\" + m);\n }\n }\n};\nASN1HEX.oidname = function (a) {\n var c = KJUR.asn1;\n if (KJUR.lang.String.isHex(a)) {\n a = c.ASN1Util.oidHexToInt(a);\n }\n var b = c.x509.OID.oid2name(a);\n if (b === \"\") {\n b = a;\n }\n return b;\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nif (typeof KJUR.asn1.x509 == \"undefined\" || !KJUR.asn1.x509) {\n KJUR.asn1.x509 = {};\n}\nKJUR.asn1.x509.Certificate = function (h) {\n KJUR.asn1.x509.Certificate.superclass.constructor.call(this);\n var d = KJUR,\n c = d.asn1,\n f = c.DERBitString,\n b = c.DERSequence,\n g = c.x509,\n a = g.TBSCertificate,\n e = g.AlgorithmIdentifier;\n this.params = undefined;\n this.setByParam = function (i) {\n this.params = i;\n };\n this.sign = function () {\n var l = this.params;\n var k = l.sigalg;\n if (l.sigalg.name != undefined) {\n k = l.sigalg.name;\n }\n var i = l.tbsobj.tohex();\n var j = new KJUR.crypto.Signature({\n alg: k\n });\n j.init(l.cakey);\n j.updateHex(i);\n l.sighex = j.sign();\n };\n this.getPEM = function () {\n return hextopem(this.tohex(), \"CERTIFICATE\");\n };\n this.tohex = function () {\n var k = this.params;\n if (k.tbsobj == undefined || k.tbsobj == null) {\n k.tbsobj = new a(k);\n }\n if (k.sighex == undefined && k.cakey != undefined) {\n this.sign();\n }\n if (k.sighex == undefined) {\n throw new Error(\"sighex or cakey parameter not defined\");\n }\n var i = [];\n i.push(k.tbsobj);\n i.push(new e({\n name: k.sigalg\n }));\n i.push(new f({\n hex: \"00\" + k.sighex\n }));\n var j = new b({\n array: i\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (h != undefined) {\n this.params = h;\n }\n};\nextendClass(KJUR.asn1.x509.Certificate, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.TBSCertificate = function (f) {\n KJUR.asn1.x509.TBSCertificate.superclass.constructor.call(this);\n var b = KJUR,\n i = b.asn1,\n d = i.x509,\n c = i.DERTaggedObject,\n h = i.DERInteger,\n g = i.DERSequence,\n l = d.AlgorithmIdentifier,\n e = d.Time,\n a = d.X500Name,\n j = d.Extensions,\n k = d.SubjectPublicKeyInfo;\n this.params = null;\n this.setByParam = function (m) {\n this.params = m;\n };\n this.tohex = function () {\n var n = [];\n var q = this.params;\n if (q.version != undefined || q.version != 1) {\n var m = 2;\n if (q.version != undefined) {\n m = q.version - 1;\n }\n var p = new c({\n obj: new h({\n \"int\": m\n })\n });\n n.push(p);\n }\n n.push(new h(q.serial));\n n.push(new l({\n name: q.sigalg\n }));\n n.push(new a(q.issuer));\n n.push(new g({\n array: [new e(q.notbefore), new e(q.notafter)]\n }));\n n.push(new a(q.subject));\n n.push(new k(KEYUTIL.getKey(q.sbjpubkey)));\n if (q.ext !== undefined && q.ext.length > 0) {\n n.push(new c({\n tag: \"a3\",\n obj: new j(q.ext)\n }));\n }\n var o = new KJUR.asn1.DERSequence({\n array: n\n });\n return o.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.x509.TBSCertificate, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.Extensions = function (d) {\n KJUR.asn1.x509.Extensions.superclass.constructor.call(this);\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n e = b.x509;\n this.aParam = [];\n this.setByParam = function (f) {\n this.aParam = f;\n };\n this.tohex = function () {\n var f = [];\n for (var h = 0; h < this.aParam.length; h++) {\n var l = this.aParam[h];\n var k = l.extname;\n var j = null;\n if (l.extn != undefined) {\n j = new e.PrivateExtension(l);\n } else {\n if (k == \"subjectKeyIdentifier\") {\n j = new e.SubjectKeyIdentifier(l);\n } else {\n if (k == \"keyUsage\") {\n j = new e.KeyUsage(l);\n } else {\n if (k == \"subjectAltName\") {\n j = new e.SubjectAltName(l);\n } else {\n if (k == \"issuerAltName\") {\n j = new e.IssuerAltName(l);\n } else {\n if (k == \"basicConstraints\") {\n j = new e.BasicConstraints(l);\n } else {\n if (k == \"nameConstraints\") {\n j = new e.NameConstraints(l);\n } else {\n if (k == \"cRLDistributionPoints\") {\n j = new e.CRLDistributionPoints(l);\n } else {\n if (k == \"certificatePolicies\") {\n j = new e.CertificatePolicies(l);\n } else {\n if (k == \"policyMappings\") {\n j = new e.PolicyMappings(l);\n } else {\n if (k == \"policyConstraints\") {\n j = new e.PolicyConstraints(l);\n } else {\n if (k == \"inhibitAnyPolicy\") {\n j = new e.InhibitAnyPolicy(l);\n } else {\n if (k == \"authorityKeyIdentifier\") {\n j = new e.AuthorityKeyIdentifier(l);\n } else {\n if (k == \"extKeyUsage\") {\n j = new e.ExtKeyUsage(l);\n } else {\n if (k == \"authorityInfoAccess\") {\n j = new e.AuthorityInfoAccess(l);\n } else {\n if (k == \"cRLNumber\") {\n j = new e.CRLNumber(l);\n } else {\n if (k == \"cRLReason\") {\n j = new e.CRLReason(l);\n } else {\n if (k == \"ocspNonce\") {\n j = new e.OCSPNonce(l);\n } else {\n if (k == \"ocspNoCheck\") {\n j = new e.OCSPNoCheck(l);\n } else {\n if (k == \"adobeTimeStamp\") {\n j = new e.AdobeTimeStamp(l);\n } else {\n if (k == \"subjectDirectoryAttributes\") {\n j = new e.SubjectDirectoryAttributes(l);\n } else {\n throw new Error(\"extension not supported:\" + JSON.stringify(l));\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (j != null) {\n f.push(j);\n }\n }\n var g = new a({\n array: f\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d != undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.x509.Extensions, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.Extension = function (d) {\n KJUR.asn1.x509.Extension.superclass.constructor.call(this);\n var f = null,\n a = KJUR,\n e = a.asn1,\n h = e.DERObjectIdentifier,\n i = e.DEROctetString,\n b = e.DERBitString,\n g = e.DERBoolean,\n c = e.DERSequence;\n this.tohex = function () {\n var m = new h({\n oid: this.oid\n });\n var l = new i({\n hex: this.getExtnValueHex()\n });\n var k = new Array();\n k.push(m);\n if (this.critical) {\n k.push(new g());\n }\n k.push(l);\n var j = new c({\n array: k\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.critical = false;\n if (d !== undefined) {\n if (d.critical !== undefined) {\n this.critical = d.critical;\n }\n }\n};\nextendClass(KJUR.asn1.x509.Extension, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.KeyUsage = function (c) {\n KJUR.asn1.x509.KeyUsage.superclass.constructor.call(this, c);\n var b = Error;\n var a = {\n digitalSignature: 0,\n nonRepudiation: 1,\n keyEncipherment: 2,\n dataEncipherment: 3,\n keyAgreement: 4,\n keyCertSign: 5,\n cRLSign: 6,\n encipherOnly: 7,\n decipherOnly: 8\n };\n this.getExtnValueHex = function () {\n var d = this.getBinValue();\n this.asn1ExtnValue = new KJUR.asn1.DERBitString({\n bin: d\n });\n return this.asn1ExtnValue.tohex();\n };\n this.getBinValue = function () {\n var d = this.params;\n if (typeof d != \"object\" || typeof d.names != \"object\" && typeof d.bin != \"string\") {\n throw new b(\"parameter not yet set\");\n }\n if (d.names != undefined) {\n return namearraytobinstr(d.names, a);\n } else {\n if (d.bin != undefined) {\n return d.bin;\n } else {\n throw new b(\"parameter not set properly\");\n }\n }\n };\n this.oid = \"2.5.29.15\";\n if (c !== undefined) {\n this.params = c;\n }\n};\nextendClass(KJUR.asn1.x509.KeyUsage, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.BasicConstraints = function (g) {\n KJUR.asn1.x509.BasicConstraints.superclass.constructor.call(this, g);\n var c = KJUR.asn1,\n e = c.DERBoolean,\n f = c.DERInteger,\n b = c.DERSequence;\n var a = false;\n var d = -1;\n this.getExtnValueHex = function () {\n var i = new Array();\n if (this.cA) {\n i.push(new e());\n }\n if (this.pathLen > -1) {\n i.push(new f({\n \"int\": this.pathLen\n }));\n }\n var h = new b({\n array: i\n });\n this.asn1ExtnValue = h;\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.19\";\n this.cA = false;\n this.pathLen = -1;\n if (g !== undefined) {\n if (g.cA !== undefined) {\n this.cA = g.cA;\n }\n if (g.pathLen !== undefined) {\n this.pathLen = g.pathLen;\n }\n }\n};\nextendClass(KJUR.asn1.x509.BasicConstraints, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.CRLDistributionPoints = function (d) {\n KJUR.asn1.x509.CRLDistributionPoints.superclass.constructor.call(this, d);\n var b = KJUR,\n a = b.asn1,\n c = a.x509;\n this.getExtnValueHex = function () {\n return this.asn1ExtnValue.tohex();\n };\n this.setByDPArray = function (e) {\n var f = [];\n for (var g = 0; g < e.length; g++) {\n if (e[g] instanceof KJUR.asn1.ASN1Object) {\n f.push(e[g]);\n } else {\n var h = new c.DistributionPoint(e[g]);\n f.push(h);\n }\n }\n this.asn1ExtnValue = new a.DERSequence({\n array: f\n });\n };\n this.setByOneURI = function (f) {\n var e = new c.DistributionPoint({\n fulluri: f\n });\n this.setByDPArray([e]);\n };\n this.oid = \"2.5.29.31\";\n if (d !== undefined) {\n if (d.array !== undefined) {\n this.setByDPArray(d.array);\n } else {\n if (d.uri !== undefined) {\n this.setByOneURI(d.uri);\n }\n }\n }\n};\nextendClass(KJUR.asn1.x509.CRLDistributionPoints, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.DistributionPoint = function (e) {\n KJUR.asn1.x509.DistributionPoint.superclass.constructor.call(this);\n var a = null,\n c = KJUR,\n b = c.asn1,\n d = b.x509.DistributionPointName;\n this.tohex = function () {\n var f = new b.DERSequence();\n if (this.asn1DP != null) {\n var g = new b.DERTaggedObject({\n explicit: true,\n tag: \"a0\",\n obj: this.asn1DP\n });\n f.appendASN1Object(g);\n }\n this.hTLV = f.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n if (e.dpobj !== undefined) {\n this.asn1DP = e.dpobj;\n } else {\n if (e.dpname !== undefined) {\n this.asn1DP = new d(e.dpname);\n } else {\n if (e.fulluri !== undefined) {\n this.asn1DP = new d({\n full: [{\n uri: e.fulluri\n }]\n });\n }\n }\n }\n }\n};\nextendClass(KJUR.asn1.x509.DistributionPoint, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.DistributionPointName = function (h) {\n KJUR.asn1.x509.DistributionPointName.superclass.constructor.call(this);\n var g = null,\n d = null,\n a = null,\n f = null,\n c = KJUR,\n b = c.asn1,\n e = b.DERTaggedObject;\n this.tohex = function () {\n if (this.type != \"full\") {\n throw new Error(\"currently type shall be 'full': \" + this.type);\n }\n this.asn1Obj = new e({\n explicit: false,\n tag: this.tag,\n obj: this.asn1V\n });\n this.hTLV = this.asn1Obj.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (h !== undefined) {\n if (b.x509.GeneralNames.prototype.isPrototypeOf(h)) {\n this.type = \"full\";\n this.tag = \"a0\";\n this.asn1V = h;\n } else {\n if (h.full !== undefined) {\n this.type = \"full\";\n this.tag = \"a0\";\n this.asn1V = new b.x509.GeneralNames(h.full);\n } else {\n throw new Error(\"This class supports GeneralNames only as argument\");\n }\n }\n }\n};\nextendClass(KJUR.asn1.x509.DistributionPointName, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.CertificatePolicies = function (f) {\n KJUR.asn1.x509.CertificatePolicies.superclass.constructor.call(this, f);\n var c = KJUR,\n b = c.asn1,\n e = b.x509,\n a = b.DERSequence,\n d = e.PolicyInformation;\n this.params = null;\n this.getExtnValueHex = function () {\n var j = [];\n for (var h = 0; h < this.params.array.length; h++) {\n j.push(new d(this.params.array[h]));\n }\n var g = new a({\n array: j\n });\n this.asn1ExtnValue = g;\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.32\";\n if (f !== undefined) {\n this.params = f;\n }\n};\nextendClass(KJUR.asn1.x509.CertificatePolicies, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.PolicyInformation = function (d) {\n KJUR.asn1.x509.PolicyInformation.superclass.constructor.call(this, d);\n var c = KJUR.asn1,\n b = c.DERSequence,\n e = c.DERObjectIdentifier,\n a = c.x509.PolicyQualifierInfo;\n this.params = null;\n this.tohex = function () {\n if (this.params.policyoid === undefined && this.params.array === undefined) {\n throw new Error(\"parameter oid and array missing\");\n }\n var f = [new e(this.params.policyoid)];\n if (this.params.array !== undefined) {\n var j = [];\n for (var h = 0; h < this.params.array.length; h++) {\n j.push(new a(this.params.array[h]));\n }\n if (j.length > 0) {\n f.push(new b({\n array: j\n }));\n }\n }\n var g = new b({\n array: f\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d !== undefined) {\n this.params = d;\n }\n};\nextendClass(KJUR.asn1.x509.PolicyInformation, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.PolicyQualifierInfo = function (e) {\n KJUR.asn1.x509.PolicyQualifierInfo.superclass.constructor.call(this, e);\n var c = KJUR.asn1,\n b = c.DERSequence,\n d = c.DERIA5String,\n f = c.DERObjectIdentifier,\n a = c.x509.UserNotice;\n this.params = null;\n this.tohex = function () {\n if (this.params.cps !== undefined) {\n var g = new b({\n array: [new f({\n oid: \"1.3.6.1.5.5.7.2.1\"\n }), new d({\n str: this.params.cps\n })]\n });\n return g.tohex();\n }\n if (this.params.unotice != undefined) {\n var g = new b({\n array: [new f({\n oid: \"1.3.6.1.5.5.7.2.2\"\n }), new a(this.params.unotice)]\n });\n return g.tohex();\n }\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.PolicyQualifierInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.UserNotice = function (e) {\n KJUR.asn1.x509.UserNotice.superclass.constructor.call(this, e);\n var a = KJUR.asn1.DERSequence,\n d = KJUR.asn1.DERInteger,\n c = KJUR.asn1.x509.DisplayText,\n b = KJUR.asn1.x509.NoticeReference;\n this.params = null;\n this.tohex = function () {\n var f = [];\n if (this.params.noticeref !== undefined) {\n f.push(new b(this.params.noticeref));\n }\n if (this.params.exptext !== undefined) {\n f.push(new c(this.params.exptext));\n }\n var g = new a({\n array: f\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.UserNotice, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.NoticeReference = function (d) {\n KJUR.asn1.x509.NoticeReference.superclass.constructor.call(this, d);\n var a = KJUR.asn1.DERSequence,\n c = KJUR.asn1.DERInteger,\n b = KJUR.asn1.x509.DisplayText;\n this.params = null;\n this.tohex = function () {\n var f = [];\n if (this.params.org !== undefined) {\n f.push(new b(this.params.org));\n }\n if (this.params.noticenum !== undefined) {\n var h = [];\n var e = this.params.noticenum;\n for (var j = 0; j < e.length; j++) {\n h.push(new c(e[j]));\n }\n f.push(new a({\n array: h\n }));\n }\n if (f.length == 0) {\n throw new Error(\"parameter is empty\");\n }\n var g = new a({\n array: f\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d !== undefined) {\n this.params = d;\n }\n};\nextendClass(KJUR.asn1.x509.NoticeReference, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.DisplayText = function (a) {\n KJUR.asn1.x509.DisplayText.superclass.constructor.call(this, a);\n this.hT = \"0c\";\n if (a !== undefined) {\n if (a.type === \"ia5\") {\n this.hT = \"16\";\n } else {\n if (a.type === \"vis\") {\n this.hT = \"1a\";\n } else {\n if (a.type === \"bmp\") {\n this.hT = \"1e\";\n }\n }\n }\n }\n};\nextendClass(KJUR.asn1.x509.DisplayText, KJUR.asn1.DERAbstractString);\nKJUR.asn1.x509.PolicyMappings = function (e) {\n KJUR.asn1.x509.PolicyMappings.superclass.constructor.call(this, e);\n var c = KJUR,\n b = c.asn1,\n d = b.x509,\n a = b.ASN1Util.newObject;\n this.params = null;\n this.getExtnValueHex = function () {\n var j = this.params;\n var f = [];\n for (var g = 0; g < j.array.length; g++) {\n var h = j.array[g];\n f.push({\n seq: [{\n oid: h[0]\n }, {\n oid: h[1]\n }]\n });\n }\n this.asn1ExtnValue = a({\n seq: f\n });\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.33\";\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.PolicyMappings, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.PolicyConstraints = function (e) {\n KJUR.asn1.x509.PolicyConstraints.superclass.constructor.call(this, e);\n var c = KJUR,\n b = c.asn1,\n d = b.x509,\n a = b.ASN1Util.newObject;\n this.params = null;\n this.getExtnValueHex = function () {\n var g = this.params;\n var f = [];\n if (g.reqexp != undefined) {\n f.push({\n tag: {\n tagi: \"80\",\n obj: {\n \"int\": g.reqexp\n }\n }\n });\n }\n if (g.inhibit != undefined) {\n f.push({\n tag: {\n tagi: \"81\",\n obj: {\n \"int\": g.inhibit\n }\n }\n });\n }\n this.asn1ExtnValue = a({\n seq: f\n });\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.36\";\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.PolicyConstraints, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.InhibitAnyPolicy = function (e) {\n KJUR.asn1.x509.InhibitAnyPolicy.superclass.constructor.call(this, e);\n var c = KJUR,\n b = c.asn1,\n d = b.x509,\n a = b.ASN1Util.newObject;\n this.params = null;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = a({\n \"int\": this.params.skip\n });\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.54\";\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.InhibitAnyPolicy, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.NameConstraints = function (f) {\n KJUR.asn1.x509.NameConstraints.superclass.constructor.call(this, f);\n var c = KJUR,\n b = c.asn1,\n e = b.x509,\n a = b.ASN1Util.newObject,\n d = e.GeneralSubtree;\n this.params = null;\n this.getExtnValueHex = function () {\n var l = this.params;\n var g = [];\n if (l.permit != undefined && l.permit.length != undefined) {\n var k = [];\n for (var h = 0; h < l.permit.length; h++) {\n k.push(new d(l.permit[h]));\n }\n g.push({\n tag: {\n tagi: \"a0\",\n obj: {\n seq: k\n }\n }\n });\n }\n if (l.exclude != undefined && l.exclude.length != undefined) {\n var j = [];\n for (var h = 0; h < l.exclude.length; h++) {\n j.push(new d(l.exclude[h]));\n }\n g.push({\n tag: {\n tagi: \"a1\",\n obj: {\n seq: j\n }\n }\n });\n }\n this.asn1ExtnValue = a({\n seq: g\n });\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.30\";\n if (f !== undefined) {\n this.params = f;\n }\n};\nextendClass(KJUR.asn1.x509.NameConstraints, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.GeneralSubtree = function (e) {\n KJUR.asn1.x509.GeneralSubtree.superclass.constructor.call(this);\n var b = KJUR.asn1,\n d = b.x509,\n c = d.GeneralName,\n a = b.ASN1Util.newObject;\n this.params = null;\n this.setByParam = function (f) {\n this.params = f;\n };\n this.tohex = function () {\n var h = this.params;\n var f = [new c(h)];\n if (h.min != undefined) {\n f.push({\n tag: {\n tagi: \"80\",\n obj: {\n \"int\": h.min\n }\n }\n });\n }\n if (h.max != undefined) {\n f.push({\n tag: {\n tagi: \"81\",\n obj: {\n \"int\": h.max\n }\n }\n });\n }\n var g = a({\n seq: f\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.x509.GeneralSubtree, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.ExtKeyUsage = function (c) {\n KJUR.asn1.x509.ExtKeyUsage.superclass.constructor.call(this, c);\n var b = KJUR,\n a = b.asn1;\n this.setPurposeArray = function (d) {\n this.asn1ExtnValue = new a.DERSequence();\n for (var e = 0; e < d.length; e++) {\n var f = new a.DERObjectIdentifier(d[e]);\n this.asn1ExtnValue.appendASN1Object(f);\n }\n };\n this.getExtnValueHex = function () {\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.37\";\n if (c !== undefined) {\n if (c.array !== undefined) {\n this.setPurposeArray(c.array);\n }\n }\n};\nextendClass(KJUR.asn1.x509.ExtKeyUsage, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.AuthorityKeyIdentifier = function (f) {\n KJUR.asn1.x509.AuthorityKeyIdentifier.superclass.constructor.call(this, f);\n var b = KJUR,\n a = b.asn1,\n d = a.DERTaggedObject,\n e = a.x509.GeneralNames,\n c = b.crypto.Util.isKey;\n this.asn1KID = null;\n this.asn1CertIssuer = null;\n this.asn1CertSN = null;\n this.getExtnValueHex = function () {\n var h = new Array();\n if (this.asn1KID) {\n h.push(new d({\n explicit: false,\n tag: \"80\",\n obj: this.asn1KID\n }));\n }\n if (this.asn1CertIssuer) {\n h.push(new d({\n explicit: false,\n tag: \"a1\",\n obj: new e([{\n dn: this.asn1CertIssuer\n }])\n }));\n }\n if (this.asn1CertSN) {\n h.push(new d({\n explicit: false,\n tag: \"82\",\n obj: this.asn1CertSN\n }));\n }\n var g = new a.DERSequence({\n array: h\n });\n this.asn1ExtnValue = g;\n return this.asn1ExtnValue.tohex();\n };\n this.setKIDByParam = function (i) {\n if (i.str !== undefined || i.hex !== undefined) {\n this.asn1KID = new KJUR.asn1.DEROctetString(i);\n } else {\n if (typeof i === \"object\" && KJUR.crypto.Util.isKey(i) || typeof i === \"string\" && i.indexOf(\"BEGIN \") != -1) {\n var h = i;\n if (typeof i === \"string\") {\n h = KEYUTIL.getKey(i);\n }\n var g = KEYUTIL.getKeyID(h);\n this.asn1KID = new KJUR.asn1.DEROctetString({\n hex: g\n });\n }\n }\n };\n this.setCertIssuerByParam = function (g) {\n if (g.str !== undefined || g.ldapstr !== undefined || g.hex !== undefined || g.certsubject !== undefined || g.certissuer !== undefined) {\n this.asn1CertIssuer = new KJUR.asn1.x509.X500Name(g);\n } else {\n if (typeof g === \"string\" && g.indexOf(\"BEGIN \") != -1 && g.indexOf(\"CERTIFICATE\") != -1) {\n this.asn1CertIssuer = new KJUR.asn1.x509.X500Name({\n certissuer: g\n });\n }\n }\n };\n this.setCertSNByParam = function (i) {\n if (i.str !== undefined || i.bigint !== undefined || i.hex !== undefined) {\n this.asn1CertSN = new KJUR.asn1.DERInteger(i);\n } else {\n if (typeof i === \"string\" && i.indexOf(\"BEGIN \") != -1 && i.indexOf(\"CERTIFICATE\")) {\n var g = new X509();\n g.readCertPEM(i);\n var h = g.getSerialNumberHex();\n this.asn1CertSN = new KJUR.asn1.DERInteger({\n hex: h\n });\n }\n }\n };\n this.oid = \"2.5.29.35\";\n if (f !== undefined) {\n if (f.kid !== undefined) {\n this.setKIDByParam(f.kid);\n }\n if (f.issuer !== undefined) {\n this.setCertIssuerByParam(f.issuer);\n }\n if (f.sn !== undefined) {\n this.setCertSNByParam(f.sn);\n }\n if (f.issuersn !== undefined && typeof f.issuersn === \"string\" && f.issuersn.indexOf(\"BEGIN \") != -1 && f.issuersn.indexOf(\"CERTIFICATE\")) {\n this.setCertSNByParam(f.issuersn);\n this.setCertIssuerByParam(f.issuersn);\n }\n }\n};\nextendClass(KJUR.asn1.x509.AuthorityKeyIdentifier, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.SubjectKeyIdentifier = function (d) {\n KJUR.asn1.x509.SubjectKeyIdentifier.superclass.constructor.call(this, d);\n var b = KJUR,\n a = b.asn1,\n c = a.DEROctetString;\n this.asn1KID = null;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = this.asn1KID;\n return this.asn1ExtnValue.tohex();\n };\n this.setKIDByParam = function (g) {\n if (g.str !== undefined || g.hex !== undefined) {\n this.asn1KID = new c(g);\n } else {\n if (typeof g === \"object\" && KJUR.crypto.Util.isKey(g) || typeof g === \"string\" && g.indexOf(\"BEGIN\") != -1) {\n var f = g;\n if (typeof g === \"string\") {\n f = KEYUTIL.getKey(g);\n }\n var e = KEYUTIL.getKeyID(f);\n this.asn1KID = new KJUR.asn1.DEROctetString({\n hex: e\n });\n }\n }\n };\n this.oid = \"2.5.29.14\";\n if (d !== undefined) {\n if (d.kid !== undefined) {\n this.setKIDByParam(d.kid);\n }\n }\n};\nextendClass(KJUR.asn1.x509.SubjectKeyIdentifier, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.AuthorityInfoAccess = function (a) {\n KJUR.asn1.x509.AuthorityInfoAccess.superclass.constructor.call(this, a);\n this.setAccessDescriptionArray = function (k) {\n var d = new Array(),\n b = KJUR,\n g = b.asn1,\n c = g.DERSequence,\n j = g.DERObjectIdentifier,\n l = g.x509.GeneralName;\n for (var f = 0; f < k.length; f++) {\n var e;\n var h = k[f];\n if (h.ocsp !== undefined) {\n e = new c({\n array: [new j({\n oid: \"1.3.6.1.5.5.7.48.1\"\n }), new l({\n uri: h.ocsp\n })]\n });\n } else {\n if (h.caissuer !== undefined) {\n e = new c({\n array: [new j({\n oid: \"1.3.6.1.5.5.7.48.2\"\n }), new l({\n uri: h.caissuer\n })]\n });\n } else {\n throw new Error(\"unknown AccessMethod parameter: \" + JSON.stringify(h));\n }\n }\n d.push(e);\n }\n this.asn1ExtnValue = new c({\n array: d\n });\n };\n this.getExtnValueHex = function () {\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"1.3.6.1.5.5.7.1.1\";\n if (a !== undefined) {\n if (a.array !== undefined) {\n this.setAccessDescriptionArray(a.array);\n }\n }\n};\nextendClass(KJUR.asn1.x509.AuthorityInfoAccess, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.SubjectAltName = function (a) {\n KJUR.asn1.x509.SubjectAltName.superclass.constructor.call(this, a);\n this.setNameArray = function (b) {\n this.asn1ExtnValue = new KJUR.asn1.x509.GeneralNames(b);\n };\n this.getExtnValueHex = function () {\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.17\";\n if (a !== undefined) {\n if (a.array !== undefined) {\n this.setNameArray(a.array);\n }\n }\n};\nextendClass(KJUR.asn1.x509.SubjectAltName, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.IssuerAltName = function (a) {\n KJUR.asn1.x509.IssuerAltName.superclass.constructor.call(this, a);\n this.setNameArray = function (b) {\n this.asn1ExtnValue = new KJUR.asn1.x509.GeneralNames(b);\n };\n this.getExtnValueHex = function () {\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.18\";\n if (a !== undefined) {\n if (a.array !== undefined) {\n this.setNameArray(a.array);\n }\n }\n};\nextendClass(KJUR.asn1.x509.IssuerAltName, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.SubjectDirectoryAttributes = function (e) {\n KJUR.asn1.x509.SubjectDirectoryAttributes.superclass.constructor.call(this, e);\n var c = KJUR.asn1,\n a = c.DERSequence,\n b = c.ASN1Util.newObject,\n d = c.x509.OID.name2oid;\n this.params = null;\n this.getExtnValueHex = function () {\n var f = [];\n for (var j = 0; j < this.params.array.length; j++) {\n var l = this.params.array[j];\n if (l.attr != undefined && l.array != undefined) {\n var k = {\n seq: [{\n oid: l.attr\n }, {\n set: l.array\n }]\n };\n f.push(b(k));\n continue;\n }\n var h = {\n seq: [{\n oid: \"1.2.3.4\"\n }, {\n set: [{\n utf8str: \"DE\"\n }]\n }]\n };\n if (l.attr == \"dateOfBirth\") {\n h.seq[0].oid = d(l.attr);\n h.seq[1].set[0] = {\n gentime: l.str\n };\n } else {\n if (l.attr == \"placeOfBirth\") {\n h.seq[0].oid = d(l.attr);\n h.seq[1].set[0] = {\n utf8str: l.str\n };\n } else {\n if (l.attr == \"gender\") {\n h.seq[0].oid = d(l.attr);\n h.seq[1].set[0] = {\n prnstr: l.str\n };\n } else {\n if (l.attr == \"countryOfCitizenship\") {\n h.seq[0].oid = d(l.attr);\n h.seq[1].set[0] = {\n prnstr: l.str\n };\n } else {\n if (l.attr == \"countryOfResidence\") {\n h.seq[0].oid = d(l.attr);\n h.seq[1].set[0] = {\n prnstr: l.str\n };\n } else {\n throw new Error(\"unsupported attribute: \" + l.attr);\n }\n }\n }\n }\n }\n f.push(new b(h));\n }\n var g = new a({\n array: f\n });\n this.asn1ExtnValue = g;\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.9\";\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.SubjectDirectoryAttributes, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.PrivateExtension = function (f) {\n KJUR.asn1.x509.PrivateExtension.superclass.constructor.call(this, f);\n var c = KJUR,\n e = c.lang.String.isHex,\n b = c.asn1,\n d = b.x509.OID.name2oid,\n a = b.ASN1Util.newObject;\n this.params = null;\n this.setByParam = function (g) {\n this.oid = d(g.extname);\n this.params = g;\n };\n this.getExtnValueHex = function () {\n if (this.params.extname == undefined || this.params.extn == undefined) {\n throw new Error(\"extname or extnhex not specified\");\n }\n var h = this.params.extn;\n if (typeof h == \"string\" && e(h)) {\n return h;\n } else {\n if (typeof h == \"object\") {\n try {\n return a(h).tohex();\n } catch (g) {}\n }\n }\n throw new Error(\"unsupported extn value\");\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.x509.PrivateExtension, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.CRL = function (g) {\n KJUR.asn1.x509.CRL.superclass.constructor.call(this);\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n e = b.DERBitString,\n f = b.x509,\n d = f.AlgorithmIdentifier,\n h = f.TBSCertList;\n this.params = undefined;\n this.setByParam = function (i) {\n this.params = i;\n };\n this.sign = function () {\n var j = new h(this.params).tohex();\n var k = new KJUR.crypto.Signature({\n alg: this.params.sigalg\n });\n k.init(this.params.cakey);\n k.updateHex(j);\n var i = k.sign();\n this.params.sighex = i;\n };\n this.getPEM = function () {\n return hextopem(this.tohex(), \"X509 CRL\");\n };\n this.tohex = function () {\n var k = this.params;\n if (k.tbsobj == undefined) {\n k.tbsobj = new h(k);\n }\n if (k.sighex == undefined && k.cakey != undefined) {\n this.sign();\n }\n if (k.sighex == undefined) {\n throw new Error(\"sighex or cakey parameter not defined\");\n }\n var i = [];\n i.push(k.tbsobj);\n i.push(new d({\n name: k.sigalg\n }));\n i.push(new e({\n hex: \"00\" + k.sighex\n }));\n var j = new a({\n array: i\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.params = g;\n }\n};\nextendClass(KJUR.asn1.x509.CRL, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.TBSCertList = function (f) {\n KJUR.asn1.x509.TBSCertList.superclass.constructor.call(this);\n var b = KJUR,\n i = b.asn1,\n h = i.DERInteger,\n g = i.DERSequence,\n c = i.DERTaggedObject,\n k = i.DERObjectIdentifier,\n d = i.x509,\n l = d.AlgorithmIdentifier,\n e = d.Time,\n j = d.Extensions,\n a = d.X500Name;\n this.params = null;\n this.setByParam = function (m) {\n this.params = m;\n };\n this.getRevCertSequence = function () {\n var m = [];\n var n = this.params.revcert;\n for (var o = 0; o < n.length; o++) {\n var p = [new h(n[o].sn), new e(n[o].date)];\n if (n[o].ext != undefined) {\n p.push(new j(n[o].ext));\n }\n m.push(new g({\n array: p\n }));\n }\n return new g({\n array: m\n });\n };\n this.tohex = function () {\n var n = [];\n var r = this.params;\n if (r.version != undefined) {\n var m = r.version - 1;\n var p = new h({\n \"int\": m\n });\n n.push(p);\n }\n n.push(new l({\n name: r.sigalg\n }));\n n.push(new a(r.issuer));\n n.push(new e(r.thisupdate));\n if (r.nextupdate != undefined) {\n n.push(new e(r.nextupdate));\n }\n if (r.revcert != undefined) {\n n.push(this.getRevCertSequence());\n }\n if (r.ext != undefined) {\n var q = new j(r.ext);\n n.push(new c({\n tag: \"a0\",\n explicit: true,\n obj: q\n }));\n }\n var o = new g({\n array: n\n });\n return o.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.x509.TBSCertList, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.CRLEntry = function (e) {\n KJUR.asn1.x509.CRLEntry.superclass.constructor.call(this);\n var d = null,\n c = null,\n b = KJUR,\n a = b.asn1;\n this.setCertSerial = function (f) {\n this.sn = new a.DERInteger(f);\n };\n this.setRevocationDate = function (f) {\n this.time = new a.x509.Time(f);\n };\n this.tohex = function () {\n var f = new a.DERSequence({\n array: [this.sn, this.time]\n });\n this.TLV = f.tohex();\n return this.TLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n if (e.time !== undefined) {\n this.setRevocationDate(e.time);\n }\n if (e.sn !== undefined) {\n this.setCertSerial(e.sn);\n }\n }\n};\nextendClass(KJUR.asn1.x509.CRLEntry, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.CRLNumber = function (a) {\n KJUR.asn1.x509.CRLNumber.superclass.constructor.call(this, a);\n this.params = undefined;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = new KJUR.asn1.DERInteger(this.params.num);\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.20\";\n if (a != undefined) {\n this.params = a;\n }\n};\nextendClass(KJUR.asn1.x509.CRLNumber, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.CRLReason = function (a) {\n KJUR.asn1.x509.CRLReason.superclass.constructor.call(this, a);\n this.params = undefined;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = new KJUR.asn1.DEREnumerated(this.params.code);\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.21\";\n if (a != undefined) {\n this.params = a;\n }\n};\nextendClass(KJUR.asn1.x509.CRLReason, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.OCSPNonce = function (a) {\n KJUR.asn1.x509.OCSPNonce.superclass.constructor.call(this, a);\n this.params = undefined;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = new KJUR.asn1.DEROctetString(this.params);\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"1.3.6.1.5.5.7.48.1.2\";\n if (a != undefined) {\n this.params = a;\n }\n};\nextendClass(KJUR.asn1.x509.OCSPNonce, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.OCSPNoCheck = function (a) {\n KJUR.asn1.x509.OCSPNoCheck.superclass.constructor.call(this, a);\n this.params = undefined;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = new KJUR.asn1.DERNull();\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"1.3.6.1.5.5.7.48.1.5\";\n if (a != undefined) {\n this.params = a;\n }\n};\nextendClass(KJUR.asn1.x509.OCSPNoCheck, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.AdobeTimeStamp = function (g) {\n KJUR.asn1.x509.AdobeTimeStamp.superclass.constructor.call(this, g);\n var c = KJUR,\n b = c.asn1,\n f = b.DERInteger,\n d = b.DERBoolean,\n a = b.DERSequence,\n e = b.x509.GeneralName;\n this.params = null;\n this.getExtnValueHex = function () {\n var i = this.params;\n var h = [new f(1)];\n h.push(new e({\n uri: i.uri\n }));\n if (i.reqauth != undefined) {\n h.push(new d(i.reqauth));\n }\n this.asn1ExtnValue = new a({\n array: h\n });\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"1.2.840.113583.1.1.9.1\";\n if (g !== undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.x509.AdobeTimeStamp, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.X500Name = function (f) {\n KJUR.asn1.x509.X500Name.superclass.constructor.call(this);\n this.asn1Array = [];\n this.paramArray = [];\n this.sRule = \"utf8\";\n var c = KJUR,\n b = c.asn1,\n e = b.x509,\n d = e.RDN,\n a = pemtohex;\n this.setByString = function (g, l) {\n if (l !== undefined) {\n this.sRule = l;\n }\n var k = g.split(\"/\");\n k.shift();\n var j = [];\n for (var m = 0; m < k.length; m++) {\n if (k[m].match(/^[^=]+=.+$/)) {\n j.push(k[m]);\n } else {\n var h = j.length - 1;\n j[h] = j[h] + \"/\" + k[m];\n }\n }\n for (var m = 0; m < j.length; m++) {\n this.asn1Array.push(new d({\n str: j[m],\n rule: this.sRule\n }));\n }\n };\n this.setByLdapString = function (g, h) {\n if (h !== undefined) {\n this.sRule = h;\n }\n var i = e.X500Name.ldapToCompat(g);\n this.setByString(i, h);\n };\n this.setByObject = function (j, i) {\n if (i !== undefined) {\n this.sRule = i;\n }\n for (var g in j) {\n if (j.hasOwnProperty(g)) {\n var h = new d({\n str: g + \"=\" + j[g],\n rule: this.sRule\n });\n this.asn1Array ? this.asn1Array.push(h) : this.asn1Array = [h];\n }\n }\n };\n this.setByParam = function (h) {\n if (h.rule !== undefined) {\n this.sRule = h.rule;\n }\n if (h.array !== undefined) {\n this.paramArray = h.array;\n } else {\n if (h.str !== undefined) {\n this.setByString(h.str);\n } else {\n if (h.ldapstr !== undefined) {\n this.setByLdapString(h.ldapstr);\n } else {\n if (h.hex !== undefined) {\n this.hTLV = h.hex;\n } else {\n if (h.certissuer !== undefined) {\n var g = new X509();\n g.readCertPEM(h.certissuer);\n this.hTLV = g.getIssuerHex();\n } else {\n if (h.certsubject !== undefined) {\n var g = new X509();\n g.readCertPEM(h.certsubject);\n this.hTLV = g.getSubjectHex();\n } else {\n if (typeof h === \"object\" && h.certsubject === undefined && h.certissuer === undefined) {\n this.setByObject(h);\n }\n }\n }\n }\n }\n }\n }\n };\n this.tohex = function () {\n if (typeof this.hTLV == \"string\") {\n return this.hTLV;\n }\n if (this.asn1Array.length == 0 && this.paramArray.length > 0) {\n for (var g = 0; g < this.paramArray.length; g++) {\n var k = {\n array: this.paramArray[g]\n };\n if (this.sRule != \"utf8\") {\n k.rule = this.sRule;\n }\n var h = new d(k);\n this.asn1Array.push(h);\n }\n }\n var j = new b.DERSequence({\n array: this.asn1Array\n });\n this.hTLV = j.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.x509.X500Name, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.X500Name.compatToLDAP = function (d) {\n if (d.substr(0, 1) !== \"/\") {\n throw \"malformed input\";\n }\n var b = \"\";\n d = d.substr(1);\n var c = d.split(\"/\");\n c.reverse();\n c = c.map(function (a) {\n return a.replace(/,/, \"\\\\,\");\n });\n return c.join(\",\");\n};\nKJUR.asn1.x509.X500Name.onelineToLDAP = function (a) {\n return KJUR.asn1.x509.X500Name.compatToLDAP(a);\n};\nKJUR.asn1.x509.X500Name.ldapToCompat = function (g) {\n var c = g.split(\",\");\n var e = false;\n var b = [];\n for (var f = 0; c.length > 0; f++) {\n var h = c.shift();\n if (e === true) {\n var d = b.pop();\n var j = (d + \",\" + h).replace(/\\\\,/g, \",\");\n b.push(j);\n e = false;\n } else {\n b.push(h);\n }\n if (h.substr(-1, 1) === \"\\\\\") {\n e = true;\n }\n }\n b = b.map(function (a) {\n return a.replace(\"/\", \"\\\\/\");\n });\n b.reverse();\n return \"/\" + b.join(\"/\");\n};\nKJUR.asn1.x509.X500Name.ldapToOneline = function (a) {\n return KJUR.asn1.x509.X500Name.ldapToCompat(a);\n};\nKJUR.asn1.x509.RDN = function (b) {\n KJUR.asn1.x509.RDN.superclass.constructor.call(this);\n this.asn1Array = [];\n this.paramArray = [];\n this.sRule = \"utf8\";\n var a = KJUR.asn1.x509.AttributeTypeAndValue;\n this.setByParam = function (c) {\n if (c.rule !== undefined) {\n this.sRule = c.rule;\n }\n if (c.str !== undefined) {\n this.addByMultiValuedString(c.str);\n }\n if (c.array !== undefined) {\n this.paramArray = c.array;\n }\n };\n this.addByString = function (c) {\n this.asn1Array.push(new KJUR.asn1.x509.AttributeTypeAndValue({\n str: c,\n rule: this.sRule\n }));\n };\n this.addByMultiValuedString = function (e) {\n var c = KJUR.asn1.x509.RDN.parseString(e);\n for (var d = 0; d < c.length; d++) {\n this.addByString(c[d]);\n }\n };\n this.tohex = function () {\n if (this.asn1Array.length == 0 && this.paramArray.length > 0) {\n for (var d = 0; d < this.paramArray.length; d++) {\n var f = this.paramArray[d];\n if (f.rule !== undefined && this.sRule != \"utf8\") {\n f.rule = this.sRule;\n }\n var c = new a(f);\n this.asn1Array.push(c);\n }\n }\n var e = new KJUR.asn1.DERSet({\n array: this.asn1Array\n });\n this.TLV = e.tohex();\n return this.TLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (b !== undefined) {\n this.setByParam(b);\n }\n};\nextendClass(KJUR.asn1.x509.RDN, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.RDN.parseString = function (m) {\n var j = m.split(/\\+/);\n var h = false;\n var c = [];\n for (var g = 0; j.length > 0; g++) {\n var k = j.shift();\n if (h === true) {\n var f = c.pop();\n var d = (f + \"+\" + k).replace(/\\\\\\+/g, \"+\");\n c.push(d);\n h = false;\n } else {\n c.push(k);\n }\n if (k.substr(-1, 1) === \"\\\\\") {\n h = true;\n }\n }\n var l = false;\n var b = [];\n for (var g = 0; c.length > 0; g++) {\n var k = c.shift();\n if (l === true) {\n var e = b.pop();\n if (k.match(/\"$/)) {\n var d = (e + \"+\" + k).replace(/^([^=]+)=\"(.*)\"$/, \"$1=$2\");\n b.push(d);\n l = false;\n } else {\n b.push(e + \"+\" + k);\n }\n } else {\n b.push(k);\n }\n if (k.match(/^[^=]+=\"/)) {\n l = true;\n }\n }\n return b;\n};\nKJUR.asn1.x509.AttributeTypeAndValue = function (c) {\n KJUR.asn1.x509.AttributeTypeAndValue.superclass.constructor.call(this);\n this.sRule = \"utf8\";\n this.sType = null;\n this.sValue = null;\n this.dsType = null;\n var a = KJUR,\n g = a.asn1,\n d = g.DERSequence,\n l = g.DERUTF8String,\n i = g.DERPrintableString,\n h = g.DERTeletexString,\n b = g.DERIA5String,\n e = g.DERVisibleString,\n k = g.DERBMPString,\n f = a.lang.String.isMail,\n j = a.lang.String.isPrintable;\n this.setByParam = function (o) {\n if (o.rule !== undefined) {\n this.sRule = o.rule;\n }\n if (o.ds !== undefined) {\n this.dsType = o.ds;\n }\n if (o.value === undefined && o.str !== undefined) {\n var n = o.str;\n var m = n.match(/^([^=]+)=(.+)$/);\n if (m) {\n this.sType = m[1];\n this.sValue = m[2];\n } else {\n throw new Error(\"malformed attrTypeAndValueStr: \" + attrTypeAndValueStr);\n }\n } else {\n this.sType = o.type;\n this.sValue = o.value;\n }\n };\n this.setByString = function (n, o) {\n if (o !== undefined) {\n this.sRule = o;\n }\n var m = n.match(/^([^=]+)=(.+)$/);\n if (m) {\n this.setByAttrTypeAndValueStr(m[1], m[2]);\n } else {\n throw new Error(\"malformed attrTypeAndValueStr: \" + attrTypeAndValueStr);\n }\n };\n this._getDsType = function () {\n var o = this.sType;\n var n = this.sValue;\n var m = this.sRule;\n if (m === \"prn\") {\n if (o == \"CN\" && f(n)) {\n return \"ia5\";\n }\n if (j(n)) {\n return \"prn\";\n }\n return \"utf8\";\n } else {\n if (m === \"utf8\") {\n if (o == \"CN\" && f(n)) {\n return \"ia5\";\n }\n if (o == \"C\") {\n return \"prn\";\n }\n return \"utf8\";\n }\n }\n return \"utf8\";\n };\n this.setByAttrTypeAndValueStr = function (o, n, m) {\n if (m !== undefined) {\n this.sRule = m;\n }\n this.sType = o;\n this.sValue = n;\n };\n this.getValueObj = function (n, m) {\n if (n == \"utf8\") {\n return new l({\n str: m\n });\n }\n if (n == \"prn\") {\n return new i({\n str: m\n });\n }\n if (n == \"tel\") {\n return new h({\n str: m\n });\n }\n if (n == \"ia5\") {\n return new b({\n str: m\n });\n }\n if (n == \"vis\") {\n return new e({\n str: m\n });\n }\n if (n == \"bmp\") {\n return new k({\n str: m\n });\n }\n throw new Error(\"unsupported directory string type: type=\" + n + \" value=\" + m);\n };\n this.tohex = function () {\n if (this.dsType == null) {\n this.dsType = this._getDsType();\n }\n var n = KJUR.asn1.x509.OID.atype2obj(this.sType);\n var m = this.getValueObj(this.dsType, this.sValue);\n var p = new d({\n array: [n, m]\n });\n this.TLV = p.tohex();\n return this.TLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (c !== undefined) {\n this.setByParam(c);\n }\n};\nextendClass(KJUR.asn1.x509.AttributeTypeAndValue, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.SubjectPublicKeyInfo = function (f) {\n KJUR.asn1.x509.SubjectPublicKeyInfo.superclass.constructor.call(this);\n var l = null,\n k = null,\n a = KJUR,\n j = a.asn1,\n i = j.DERInteger,\n b = j.DERBitString,\n m = j.DERObjectIdentifier,\n e = j.DERSequence,\n h = j.ASN1Util.newObject,\n d = j.x509,\n o = d.AlgorithmIdentifier,\n g = a.crypto,\n n = g.ECDSA,\n c = g.DSA;\n this.getASN1Object = function () {\n if (this.asn1AlgId == null || this.asn1SubjPKey == null) {\n throw \"algId and/or subjPubKey not set\";\n }\n var p = new e({\n array: [this.asn1AlgId, this.asn1SubjPKey]\n });\n return p;\n };\n this.tohex = function () {\n var p = this.getASN1Object();\n this.hTLV = p.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setPubKey = function (q) {\n try {\n if (q instanceof RSAKey) {\n var u = h({\n seq: [{\n \"int\": {\n bigint: q.n\n }\n }, {\n \"int\": {\n \"int\": q.e\n }\n }]\n });\n var s = u.tohex();\n this.asn1AlgId = new o({\n name: \"rsaEncryption\"\n });\n this.asn1SubjPKey = new b({\n hex: \"00\" + s\n });\n }\n } catch (p) {}\n try {\n if (q instanceof KJUR.crypto.ECDSA) {\n var r = new m({\n name: q.curveName\n });\n this.asn1AlgId = new o({\n name: \"ecPublicKey\",\n asn1params: r\n });\n this.asn1SubjPKey = new b({\n hex: \"00\" + q.pubKeyHex\n });\n }\n } catch (p) {}\n try {\n if (q instanceof KJUR.crypto.DSA) {\n var r = new h({\n seq: [{\n \"int\": {\n bigint: q.p\n }\n }, {\n \"int\": {\n bigint: q.q\n }\n }, {\n \"int\": {\n bigint: q.g\n }\n }]\n });\n this.asn1AlgId = new o({\n name: \"dsa\",\n asn1params: r\n });\n var t = new i({\n bigint: q.y\n });\n this.asn1SubjPKey = new b({\n hex: \"00\" + t.tohex()\n });\n }\n } catch (p) {}\n };\n if (f !== undefined) {\n this.setPubKey(f);\n }\n};\nextendClass(KJUR.asn1.x509.SubjectPublicKeyInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.Time = function (f) {\n KJUR.asn1.x509.Time.superclass.constructor.call(this);\n var e = null,\n a = null,\n d = KJUR,\n c = d.asn1,\n b = c.DERUTCTime,\n g = c.DERGeneralizedTime;\n this.params = null;\n this.type = null;\n this.setTimeParams = function (h) {\n this.timeParams = h;\n };\n this.setByParam = function (h) {\n this.params = h;\n };\n this.getType = function (h) {\n if (h.match(/^[0-9]{12}Z$/)) {\n return \"utc\";\n }\n if (h.match(/^[0-9]{14}Z$/)) {\n return \"gen\";\n }\n if (h.match(/^[0-9]{12}\\.[0-9]+Z$/)) {\n return \"utc\";\n }\n if (h.match(/^[0-9]{14}\\.[0-9]+Z$/)) {\n return \"gen\";\n }\n return null;\n };\n this.tohex = function () {\n var i = this.params;\n var h = null;\n if (typeof i == \"string\") {\n i = {\n str: i\n };\n }\n if (i != null && i.str && (i.type == null || i.type == undefined)) {\n i.type = this.getType(i.str);\n }\n if (i != null && i.str) {\n if (i.type == \"utc\") {\n h = new b(i.str);\n }\n if (i.type == \"gen\") {\n h = new g(i.str);\n }\n } else {\n if (this.type == \"gen\") {\n h = new g();\n } else {\n h = new b();\n }\n }\n if (h == null) {\n throw new Error(\"wrong setting for Time\");\n }\n this.TLV = h.tohex();\n return this.TLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nKJUR.asn1.x509.Time_bak = function (f) {\n KJUR.asn1.x509.Time_bak.superclass.constructor.call(this);\n var e = null,\n a = null,\n d = KJUR,\n c = d.asn1,\n b = c.DERUTCTime,\n g = c.DERGeneralizedTime;\n this.setTimeParams = function (h) {\n this.timeParams = h;\n };\n this.tohex = function () {\n var h = null;\n if (this.timeParams != null) {\n if (this.type == \"utc\") {\n h = new b(this.timeParams);\n } else {\n h = new g(this.timeParams);\n }\n } else {\n if (this.type == \"utc\") {\n h = new b();\n } else {\n h = new g();\n }\n }\n this.TLV = h.tohex();\n return this.TLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.type = \"utc\";\n if (f !== undefined) {\n if (f.type !== undefined) {\n this.type = f.type;\n } else {\n if (f.str !== undefined) {\n if (f.str.match(/^[0-9]{12}Z$/)) {\n this.type = \"utc\";\n }\n if (f.str.match(/^[0-9]{14}Z$/)) {\n this.type = \"gen\";\n }\n }\n }\n this.timeParams = f;\n }\n};\nextendClass(KJUR.asn1.x509.Time, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.AlgorithmIdentifier = function (e) {\n KJUR.asn1.x509.AlgorithmIdentifier.superclass.constructor.call(this);\n this.nameAlg = null;\n this.asn1Alg = null;\n this.asn1Params = null;\n this.paramEmpty = false;\n var b = KJUR,\n a = b.asn1,\n c = a.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV;\n this.tohex = function () {\n if (this.nameAlg === null && this.asn1Alg === null) {\n throw new Error(\"algorithm not specified\");\n }\n if (this.nameAlg !== null) {\n var f = null;\n for (var h in c) {\n if (h === this.nameAlg) {\n f = c[h];\n }\n }\n if (f !== null) {\n this.hTLV = f;\n return this.hTLV;\n }\n }\n if (this.nameAlg !== null && this.asn1Alg === null) {\n this.asn1Alg = a.x509.OID.name2obj(this.nameAlg);\n }\n var g = [this.asn1Alg];\n if (this.asn1Params !== null) {\n g.push(this.asn1Params);\n }\n var i = new a.DERSequence({\n array: g\n });\n this.hTLV = i.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n if (e.name !== undefined) {\n this.nameAlg = e.name;\n }\n if (e.asn1params !== undefined) {\n this.asn1Params = e.asn1params;\n }\n if (e.paramempty !== undefined) {\n this.paramEmpty = e.paramempty;\n }\n }\n if (this.asn1Params === null && this.paramEmpty === false && this.nameAlg !== null) {\n if (this.nameAlg.name !== undefined) {\n this.nameAlg = this.nameAlg.name;\n }\n var d = this.nameAlg.toLowerCase();\n if (d.substr(-7, 7) !== \"withdsa\" && d.substr(-9, 9) !== \"withecdsa\") {\n this.asn1Params = new a.DERNull();\n }\n }\n};\nextendClass(KJUR.asn1.x509.AlgorithmIdentifier, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV = {\n SHAwithRSAandMGF1: \"300d06092a864886f70d01010a3000\",\n SHA256withRSAandMGF1: \"303d06092a864886f70d01010a3030a00d300b0609608648016503040201a11a301806092a864886f70d010108300b0609608648016503040201a203020120\",\n SHA384withRSAandMGF1: \"303d06092a864886f70d01010a3030a00d300b0609608648016503040202a11a301806092a864886f70d010108300b0609608648016503040202a203020130\",\n SHA512withRSAandMGF1: \"303d06092a864886f70d01010a3030a00d300b0609608648016503040203a11a301806092a864886f70d010108300b0609608648016503040203a203020140\"\n};\nKJUR.asn1.x509.GeneralName = function (f) {\n KJUR.asn1.x509.GeneralName.superclass.constructor.call(this);\n var l = {\n rfc822: \"81\",\n dns: \"82\",\n dn: \"a4\",\n uri: \"86\",\n ip: \"87\",\n otherName: \"a0\"\n },\n b = KJUR,\n h = b.asn1,\n d = h.x509,\n a = d.X500Name,\n g = d.OtherName,\n e = h.DERIA5String,\n i = h.DERPrintableString,\n k = h.DEROctetString,\n c = h.DERTaggedObject,\n m = h.ASN1Object,\n j = Error;\n this.params = null;\n this.setByParam = function (n) {\n this.params = n;\n };\n this.tohex = function () {\n var p = this.params;\n var A, y, q;\n var y = false;\n if (p.other !== undefined) {\n A = \"a0\", q = new g(p.other);\n } else {\n if (p.rfc822 !== undefined) {\n A = \"81\";\n q = new e({\n str: p.rfc822\n });\n } else {\n if (p.dns !== undefined) {\n A = \"82\";\n q = new e({\n str: p.dns\n });\n } else {\n if (p.dn !== undefined) {\n A = \"a4\";\n y = true;\n if (typeof p.dn === \"string\") {\n q = new a({\n str: p.dn\n });\n } else {\n if (p.dn instanceof KJUR.asn1.x509.X500Name) {\n q = p.dn;\n } else {\n q = new a(p.dn);\n }\n }\n } else {\n if (p.ldapdn !== undefined) {\n A = \"a4\";\n y = true;\n q = new a({\n ldapstr: p.ldapdn\n });\n } else {\n if (p.certissuer !== undefined || p.certsubj !== undefined) {\n A = \"a4\";\n y = true;\n var n, o;\n var z = null;\n if (p.certsubj !== undefined) {\n n = false;\n o = p.certsubj;\n } else {\n n = true;\n o = p.certissuer;\n }\n if (o.match(/^[0-9A-Fa-f]+$/)) {\n z == o;\n }\n if (o.indexOf(\"-----BEGIN \") != -1) {\n z = pemtohex(o);\n }\n if (z == null) {\n throw new Error(\"certsubj/certissuer not cert\");\n }\n var w = new X509();\n w.hex = z;\n var s;\n if (n) {\n s = w.getIssuerHex();\n } else {\n s = w.getSubjectHex();\n }\n q = new m();\n q.hTLV = s;\n } else {\n if (p.uri !== undefined) {\n A = \"86\";\n q = new e({\n str: p.uri\n });\n } else {\n if (p.ip !== undefined) {\n A = \"87\";\n var v;\n var t = p.ip;\n try {\n if (t.match(/^[0-9a-f]+$/)) {\n var r = t.length;\n if (r == 8 || r == 16 || r == 32 || r == 64) {\n v = t;\n } else {\n throw \"err\";\n }\n } else {\n v = iptohex(t);\n }\n } catch (u) {\n throw new j(\"malformed IP address: \" + p.ip + \":\" + u.message);\n }\n q = new k({\n hex: v\n });\n } else {\n throw new j(\"improper params\");\n }\n }\n }\n }\n }\n }\n }\n }\n var B = new c({\n tag: A,\n explicit: y,\n obj: q\n });\n return B.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.x509.GeneralName, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.GeneralNames = function (d) {\n KJUR.asn1.x509.GeneralNames.superclass.constructor.call(this);\n var a = null,\n c = KJUR,\n b = c.asn1;\n this.setByParamArray = function (g) {\n for (var e = 0; e < g.length; e++) {\n var f = new b.x509.GeneralName(g[e]);\n this.asn1Array.push(f);\n }\n };\n this.tohex = function () {\n var e = new b.DERSequence({\n array: this.asn1Array\n });\n return e.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.asn1Array = new Array();\n if (typeof d != \"undefined\") {\n this.setByParamArray(d);\n }\n};\nextendClass(KJUR.asn1.x509.GeneralNames, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.OtherName = function (g) {\n KJUR.asn1.x509.OtherName.superclass.constructor.call(this);\n var f = null,\n e = null,\n d = KJUR,\n c = d.asn1,\n h = c.DERObjectIdentifier,\n a = c.DERSequence,\n b = c.ASN1Util.newObject;\n this.params = null;\n this.setByParam = function (i) {\n this.params = i;\n };\n this.tohex = function () {\n var k = this.params;\n if (k.oid == undefined || k.value == undefined) {\n throw new Error(\"oid or value not specified\");\n }\n var l = new h({\n oid: k.oid\n });\n var i = b({\n tag: {\n tag: \"a0\",\n explicit: true,\n obj: k.value\n }\n });\n var j = new a({\n array: [l, i]\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g !== undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.x509.OtherName, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.OID = new function () {\n var a = KJUR.asn1.DERObjectIdentifier;\n this.name2oidList = {\n \"aes128-CBC\": \"2.16.840.1.101.3.4.1.2\",\n \"aes256-CBC\": \"2.16.840.1.101.3.4.1.42\",\n sha1: \"1.3.14.3.2.26\",\n sha256: \"2.16.840.1.101.3.4.2.1\",\n sha384: \"2.16.840.1.101.3.4.2.2\",\n sha512: \"2.16.840.1.101.3.4.2.3\",\n sha224: \"2.16.840.1.101.3.4.2.4\",\n md5: \"1.2.840.113549.2.5\",\n md2: \"1.3.14.7.2.2.1\",\n ripemd160: \"1.3.36.3.2.1\",\n hmacWithSHA1: \"1.2.840.113549.2.7\",\n hmacWithSHA224: \"1.2.840.113549.2.8\",\n hmacWithSHA256: \"1.2.840.113549.2.9\",\n hmacWithSHA384: \"1.2.840.113549.2.10\",\n hmacWithSHA512: \"1.2.840.113549.2.11\",\n MD2withRSA: \"1.2.840.113549.1.1.2\",\n MD4withRSA: \"1.2.840.113549.1.1.3\",\n MD5withRSA: \"1.2.840.113549.1.1.4\",\n SHA1withRSA: \"1.2.840.113549.1.1.5\",\n \"pkcs1-MGF\": \"1.2.840.113549.1.1.8\",\n rsaPSS: \"1.2.840.113549.1.1.10\",\n SHA224withRSA: \"1.2.840.113549.1.1.14\",\n SHA256withRSA: \"1.2.840.113549.1.1.11\",\n SHA384withRSA: \"1.2.840.113549.1.1.12\",\n SHA512withRSA: \"1.2.840.113549.1.1.13\",\n SHA1withECDSA: \"1.2.840.10045.4.1\",\n SHA224withECDSA: \"1.2.840.10045.4.3.1\",\n SHA256withECDSA: \"1.2.840.10045.4.3.2\",\n SHA384withECDSA: \"1.2.840.10045.4.3.3\",\n SHA512withECDSA: \"1.2.840.10045.4.3.4\",\n dsa: \"1.2.840.10040.4.1\",\n SHA1withDSA: \"1.2.840.10040.4.3\",\n SHA224withDSA: \"2.16.840.1.101.3.4.3.1\",\n SHA256withDSA: \"2.16.840.1.101.3.4.3.2\",\n rsaEncryption: \"1.2.840.113549.1.1.1\",\n commonName: \"2.5.4.3\",\n countryName: \"2.5.4.6\",\n localityName: \"2.5.4.7\",\n stateOrProvinceName: \"2.5.4.8\",\n streetAddress: \"2.5.4.9\",\n organizationName: \"2.5.4.10\",\n organizationalUnitName: \"2.5.4.11\",\n domainComponent: \"0.9.2342.19200300.100.1.25\",\n userId: \"0.9.2342.19200300.100.1.1\",\n surname: \"2.5.4.4\",\n givenName: \"2.5.4.42\",\n title: \"2.5.4.12\",\n distinguishedName: \"2.5.4.49\",\n emailAddress: \"1.2.840.113549.1.9.1\",\n description: \"2.5.4.13\",\n businessCategory: \"2.5.4.15\",\n postalCode: \"2.5.4.17\",\n uniqueIdentifier: \"2.5.4.45\",\n organizationIdentifier: \"2.5.4.97\",\n jurisdictionOfIncorporationL: \"1.3.6.1.4.1.311.60.2.1.1\",\n jurisdictionOfIncorporationSP: \"1.3.6.1.4.1.311.60.2.1.2\",\n jurisdictionOfIncorporationC: \"1.3.6.1.4.1.311.60.2.1.3\",\n subjectDirectoryAttributes: \"2.5.29.9\",\n subjectKeyIdentifier: \"2.5.29.14\",\n keyUsage: \"2.5.29.15\",\n subjectAltName: \"2.5.29.17\",\n issuerAltName: \"2.5.29.18\",\n basicConstraints: \"2.5.29.19\",\n cRLNumber: \"2.5.29.20\",\n cRLReason: \"2.5.29.21\",\n nameConstraints: \"2.5.29.30\",\n cRLDistributionPoints: \"2.5.29.31\",\n certificatePolicies: \"2.5.29.32\",\n anyPolicy: \"2.5.29.32.0\",\n policyMappings: \"2.5.29.33\",\n authorityKeyIdentifier: \"2.5.29.35\",\n policyConstraints: \"2.5.29.36\",\n extKeyUsage: \"2.5.29.37\",\n inhibitAnyPolicy: \"2.5.29.54\",\n authorityInfoAccess: \"1.3.6.1.5.5.7.1.1\",\n ocsp: \"1.3.6.1.5.5.7.48.1\",\n ocspBasic: \"1.3.6.1.5.5.7.48.1.1\",\n ocspNonce: \"1.3.6.1.5.5.7.48.1.2\",\n ocspNoCheck: \"1.3.6.1.5.5.7.48.1.5\",\n caIssuers: \"1.3.6.1.5.5.7.48.2\",\n anyExtendedKeyUsage: \"2.5.29.37.0\",\n serverAuth: \"1.3.6.1.5.5.7.3.1\",\n clientAuth: \"1.3.6.1.5.5.7.3.2\",\n codeSigning: \"1.3.6.1.5.5.7.3.3\",\n emailProtection: \"1.3.6.1.5.5.7.3.4\",\n timeStamping: \"1.3.6.1.5.5.7.3.8\",\n ocspSigning: \"1.3.6.1.5.5.7.3.9\",\n smtpUTF8Mailbox: \"1.3.6.1.5.5.7.8.9\",\n dateOfBirth: \"1.3.6.1.5.5.7.9.1\",\n placeOfBirth: \"1.3.6.1.5.5.7.9.2\",\n gender: \"1.3.6.1.5.5.7.9.3\",\n countryOfCitizenship: \"1.3.6.1.5.5.7.9.4\",\n countryOfResidence: \"1.3.6.1.5.5.7.9.5\",\n ecPublicKey: \"1.2.840.10045.2.1\",\n \"P-256\": \"1.2.840.10045.3.1.7\",\n secp256r1: \"1.2.840.10045.3.1.7\",\n secp256k1: \"1.3.132.0.10\",\n secp384r1: \"1.3.132.0.34\",\n secp521r1: \"1.3.132.0.35\",\n pkcs5PBES2: \"1.2.840.113549.1.5.13\",\n pkcs5PBKDF2: \"1.2.840.113549.1.5.12\",\n \"des-EDE3-CBC\": \"1.2.840.113549.3.7\",\n data: \"1.2.840.113549.1.7.1\",\n \"signed-data\": \"1.2.840.113549.1.7.2\",\n \"enveloped-data\": \"1.2.840.113549.1.7.3\",\n \"digested-data\": \"1.2.840.113549.1.7.5\",\n \"encrypted-data\": \"1.2.840.113549.1.7.6\",\n \"authenticated-data\": \"1.2.840.113549.1.9.16.1.2\",\n tstinfo: \"1.2.840.113549.1.9.16.1.4\",\n signingCertificate: \"1.2.840.113549.1.9.16.2.12\",\n timeStampToken: \"1.2.840.113549.1.9.16.2.14\",\n signaturePolicyIdentifier: \"1.2.840.113549.1.9.16.2.15\",\n etsArchiveTimeStamp: \"1.2.840.113549.1.9.16.2.27\",\n signingCertificateV2: \"1.2.840.113549.1.9.16.2.47\",\n etsArchiveTimeStampV2: \"1.2.840.113549.1.9.16.2.48\",\n extensionRequest: \"1.2.840.113549.1.9.14\",\n contentType: \"1.2.840.113549.1.9.3\",\n messageDigest: \"1.2.840.113549.1.9.4\",\n signingTime: \"1.2.840.113549.1.9.5\",\n counterSignature: \"1.2.840.113549.1.9.6\",\n archiveTimeStampV3: \"0.4.0.1733.2.4\",\n pdfRevocationInfoArchival: \"1.2.840.113583.1.1.8\",\n adobeTimeStamp: \"1.2.840.113583.1.1.9.1\",\n smimeMailboxLegacy: \"2.23.140.1.5.1.1\",\n smimeMailboxMulti: \"2.23.140.1.5.1.2\",\n smimeMailboxStrict: \"2.23.140.1.5.1.3\",\n smimeOrganizationLegacy: \"2.23.140.1.5.2.1\",\n smimeOrganizationMulti: \"2.23.140.1.5.2.2\",\n smimeOrganizationStrict: \"2.23.140.1.5.2.3\",\n smimeSponsorLegacy: \"2.23.140.1.5.3.1\",\n smimeSponsorMulti: \"2.23.140.1.5.3.2\",\n smimeSponsorStrict: \"2.23.140.1.5.3.3\",\n smimeIndividualLegacy: \"2.23.140.1.5.4.1\",\n smimeIndividualMulti: \"2.23.140.1.5.4.2\",\n smimeIndividualStrict: \"2.23.140.1.5.4.3\"\n };\n this.atype2oidList = {\n CN: \"2.5.4.3\",\n L: \"2.5.4.7\",\n ST: \"2.5.4.8\",\n O: \"2.5.4.10\",\n OU: \"2.5.4.11\",\n C: \"2.5.4.6\",\n STREET: \"2.5.4.9\",\n DC: \"0.9.2342.19200300.100.1.25\",\n UID: \"0.9.2342.19200300.100.1.1\",\n SN: \"2.5.4.4\",\n T: \"2.5.4.12\",\n GN: \"2.5.4.42\",\n DN: \"2.5.4.49\",\n E: \"1.2.840.113549.1.9.1\",\n description: \"2.5.4.13\",\n businessCategory: \"2.5.4.15\",\n postalCode: \"2.5.4.17\",\n serialNumber: \"2.5.4.5\",\n uniqueIdentifier: \"2.5.4.45\",\n organizationIdentifier: \"2.5.4.97\",\n jurisdictionOfIncorporationL: \"1.3.6.1.4.1.311.60.2.1.1\",\n jurisdictionOfIncorporationSP: \"1.3.6.1.4.1.311.60.2.1.2\",\n jurisdictionOfIncorporationC: \"1.3.6.1.4.1.311.60.2.1.3\"\n };\n this.objCache = {};\n this.name2obj = function (b) {\n if (typeof this.objCache[b] != \"undefined\") {\n return this.objCache[b];\n }\n if (typeof this.name2oidList[b] == \"undefined\") {\n throw \"Name of ObjectIdentifier not defined: \" + b;\n }\n var c = this.name2oidList[b];\n var d = new a({\n oid: c\n });\n this.objCache[b] = d;\n return d;\n };\n this.atype2obj = function (b) {\n if (this.objCache[b] !== undefined) {\n return this.objCache[b];\n }\n var c;\n if (b.match(/^\\d+\\.\\d+\\.[0-9.]+$/)) {\n c = b;\n } else {\n if (this.atype2oidList[b] !== undefined) {\n c = this.atype2oidList[b];\n } else {\n if (this.name2oidList[b] !== undefined) {\n c = this.name2oidList[b];\n } else {\n throw new Error(\"AttributeType name undefined: \" + b);\n }\n }\n }\n var d = new a({\n oid: c\n });\n this.objCache[b] = d;\n return d;\n };\n this.registerOIDs = function (b) {\n if (!this.checkOIDs(b)) {\n return;\n }\n for (var c in b) {\n this.name2oidList[c] = b[c];\n }\n };\n this.checkOIDs = function (b) {\n try {\n var d = Object.keys(b);\n if (d.length == 0) {\n return false;\n }\n d.map(function (g, e, h) {\n var f = this[g];\n if (!f.match(/^[0-2]\\.[0-9.]+$/)) {\n throw new Error(\"value is not OID\");\n }\n }, b);\n return true;\n } catch (c) {\n return false;\n }\n };\n}();\nKJUR.asn1.x509.OID.oid2name = function (b) {\n var c = KJUR.asn1.x509.OID.name2oidList;\n for (var a in c) {\n if (c[a] == b) {\n return a;\n }\n }\n return \"\";\n};\nKJUR.asn1.x509.OID.oid2atype = function (b) {\n var c = KJUR.asn1.x509.OID.atype2oidList;\n for (var a in c) {\n if (c[a] == b) {\n return a;\n }\n }\n return b;\n};\nKJUR.asn1.x509.OID.name2oid = function (a) {\n if (a.match(/^[0-9.]+$/)) {\n return a;\n }\n var b = KJUR.asn1.x509.OID.name2oidList;\n if (b[a] === undefined) {\n return \"\";\n }\n return b[a];\n};\nKJUR.asn1.x509.X509Util = {};\nKJUR.asn1.x509.X509Util.newCertPEM = function (e) {\n var d = KJUR.asn1.x509,\n b = d.TBSCertificate,\n a = d.Certificate;\n var c = new a(e);\n return c.getPEM();\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nif (typeof KJUR.asn1.cms == \"undefined\" || !KJUR.asn1.cms) {\n KJUR.asn1.cms = {};\n}\nKJUR.asn1.cms.Attribute = function (f) {\n var e = Error,\n d = KJUR,\n c = d.asn1,\n b = c.DERSequence,\n a = c.DERSet,\n g = c.DERObjectIdentifier;\n this.params = null;\n this.typeOid = null;\n this.setByParam = function (h) {\n this.params = h;\n };\n this.getValueArray = function () {\n throw new e(\"not yet implemented abstract\");\n };\n this.tohex = function () {\n var j = new g({\n oid: this.typeOid\n });\n var h = new a({\n array: this.getValueArray()\n });\n var i = new b({\n array: [j, h]\n });\n return i.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n};\nextendClass(KJUR.asn1.cms.Attribute, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.ContentType = function (c) {\n var b = KJUR,\n a = b.asn1;\n a.cms.ContentType.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.3\";\n this.getValueArray = function () {\n var d = new a.DERObjectIdentifier(this.params.type);\n return [d];\n };\n if (c != undefined) {\n this.setByParam(c);\n }\n};\nextendClass(KJUR.asn1.cms.ContentType, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cms.MessageDigest = function (e) {\n var b = KJUR,\n a = b.asn1,\n c = a.DEROctetString,\n d = a.cms;\n d.MessageDigest.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.4\";\n this.getValueArray = function () {\n var f = new c(this.params);\n return [f];\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cms.MessageDigest, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cms.SigningTime = function (c) {\n var b = KJUR,\n a = b.asn1;\n a.cms.SigningTime.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.5\";\n this.getValueArray = function () {\n var d = new a.x509.Time(this.params);\n return [d];\n };\n if (c != undefined) {\n this.setByParam(c);\n }\n};\nextendClass(KJUR.asn1.cms.SigningTime, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cms.SigningCertificate = function (h) {\n var e = Error,\n d = KJUR,\n c = d.asn1,\n b = c.DERSequence,\n g = c.cms,\n a = g.ESSCertID,\n f = d.crypto;\n g.SigningCertificate.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.16.2.12\";\n this.getValueArray = function () {\n if (this.params == null || this.params == undefined || this.params.array == undefined) {\n throw new e(\"parameter 'array' not specified\");\n }\n var o = this.params.array;\n var k = [];\n for (var l = 0; l < o.length; l++) {\n var n = o[l];\n if (h.hasis == false && typeof n == \"string\" && (n.indexOf(\"-----BEGIN\") != -1 || ASN1HEX.isASN1HEX(n))) {\n n = {\n cert: n\n };\n }\n if (n.hasis != false && h.hasis == false) {\n n.hasis = false;\n }\n k.push(new a(n));\n }\n var j = new b({\n array: k\n });\n var m = new b({\n array: [j]\n });\n return [m];\n };\n if (h != undefined) {\n this.setByParam(h);\n }\n};\nextendClass(KJUR.asn1.cms.SigningCertificate, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cms.ESSCertID = function (g) {\n KJUR.asn1.cms.ESSCertID.superclass.constructor.call(this);\n var d = Error,\n c = KJUR,\n b = c.asn1,\n f = b.DEROctetString,\n a = b.DERSequence,\n e = b.cms.IssuerSerial;\n this.params = null;\n this.getCertHash = function (k, h) {\n if (k.hash != undefined) {\n return k.hash;\n }\n if (typeof k == \"string\" && k.indexOf(\"-----BEGIN\") == -1 && !ASN1HEX.isASN1HEX(k)) {\n return k;\n }\n var i;\n if (typeof k == \"string\") {\n i = k;\n } else {\n if (k.cert != undefined) {\n i = k.cert;\n } else {\n throw new d(\"hash nor cert unspecified\");\n }\n }\n var j;\n if (i.indexOf(\"-----BEGIN\") != -1) {\n j = pemtohex(i);\n } else {\n j = i;\n }\n if (typeof k == \"string\") {\n if (k.indexOf(\"-----BEGIN\") != -1) {\n j = pemtohex(k);\n } else {\n if (ASN1HEX.isASN1HEX(k)) {\n j = k;\n }\n }\n }\n var l;\n if (k.alg != undefined) {\n l = k.alg;\n } else {\n if (h != undefined) {\n l = h;\n } else {\n throw new d(\"hash alg unspecified\");\n }\n }\n return c.crypto.Util.hashHex(j, l);\n };\n this.tohex = function () {\n var k = this.params;\n var j = this.getCertHash(k, \"sha1\");\n var h = [];\n h.push(new f({\n hex: j\n }));\n if (typeof k == \"string\" && k.indexOf(\"-----BEGIN\") != -1 || k.cert != undefined && k.hasis != false || k.issuer != undefined && k.serial != undefined) {\n h.push(new e(k));\n }\n var i = new a({\n array: h\n });\n return i.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cms.ESSCertID, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.SigningCertificateV2 = function (d) {\n var h = Error,\n a = KJUR,\n g = a.asn1,\n e = g.DERSequence,\n b = g.x509,\n i = g.cms,\n c = i.ESSCertIDv2,\n f = a.crypto;\n i.SigningCertificateV2.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.16.2.47\";\n this.getValueArray = function () {\n if (this.params == null || this.params == undefined || this.params.array == undefined) {\n throw new h(\"parameter 'array' not specified\");\n }\n var o = this.params.array;\n var l = [];\n for (var m = 0; m < o.length; m++) {\n var n = o[m];\n if ((d.alg != undefined || d.hasis == false) && typeof n == \"string\" && (n.indexOf(\"-----BEGIN\") != -1 || ASN1HEX.isASN1HEX(n))) {\n n = {\n cert: n\n };\n }\n if (n.alg == undefined && d.alg != undefined) {\n n.alg = d.alg;\n }\n if (n.hasis != false && d.hasis == false) {\n n.hasis = false;\n }\n l.push(new c(n));\n }\n var k = new e({\n array: l\n });\n var j = new e({\n array: [k]\n });\n return [j];\n };\n if (d != undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.cms.SigningCertificateV2, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cms.ESSCertIDv2 = function (h) {\n KJUR.asn1.cms.ESSCertIDv2.superclass.constructor.call(this);\n var d = Error,\n c = KJUR,\n b = c.asn1,\n f = b.DEROctetString,\n a = b.DERSequence,\n e = b.cms.IssuerSerial,\n g = b.x509.AlgorithmIdentifier;\n this.params = null;\n this.tohex = function () {\n var l = this.params;\n var k = this.getCertHash(l, \"sha256\");\n var i = [];\n if (l.alg != undefined && l.alg != \"sha256\") {\n i.push(new g({\n name: l.alg\n }));\n }\n i.push(new f({\n hex: k\n }));\n if (typeof l == \"string\" && l.indexOf(\"-----BEGIN\") != -1 || l.cert != undefined && l.hasis != false || l.issuer != undefined && l.serial != undefined) {\n i.push(new e(l));\n }\n var j = new a({\n array: i\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (h != undefined) {\n this.setByParam(h);\n }\n};\nextendClass(KJUR.asn1.cms.ESSCertIDv2, KJUR.asn1.cms.ESSCertID);\nKJUR.asn1.cms.IssuerSerial = function (e) {\n var i = Error,\n c = KJUR,\n h = c.asn1,\n g = h.DERInteger,\n f = h.DERSequence,\n j = h.cms,\n d = h.x509,\n a = d.GeneralNames,\n b = X509;\n j.IssuerSerial.superclass.constructor.call(this);\n this.setByParam = function (k) {\n this.params = k;\n };\n this.tohex = function () {\n var p = this.params;\n var l, r;\n if (typeof p == \"string\" && p.indexOf(\"-----BEGIN\") != -1 || p.cert != undefined) {\n var n;\n if (p.cert != undefined) {\n n = p.cert;\n } else {\n n = p;\n }\n var k = new b();\n k.readCertPEM(n);\n l = k.getIssuer();\n r = {\n hex: k.getSerialNumberHex()\n };\n } else {\n if (p.issuer != undefined && p.serial) {\n l = p.issuer;\n r = p.serial;\n } else {\n throw new i(\"cert or issuer and serial parameter not specified\");\n }\n }\n var q = new a([{\n dn: l\n }]);\n var o = new g(r);\n var m = new f({\n array: [q, o]\n });\n return m.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cms.IssuerSerial, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.SignerIdentifier = function (f) {\n var c = KJUR,\n i = c.asn1,\n h = i.DERInteger,\n g = i.DERSequence,\n l = i.cms,\n k = l.IssuerAndSerialNumber,\n d = l.SubjectKeyIdentifier,\n e = i.x509,\n a = e.X500Name,\n b = X509,\n j = Error;\n l.SignerIdentifier.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var o = this.params;\n if (o.type == \"isssn\") {\n var m = new k(o);\n return m.tohex();\n } else {\n if (o.type == \"skid\") {\n var n = new d(o);\n return n.tohex();\n } else {\n throw new Error(\"wrong property for isssn or skid\");\n }\n }\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.cms.SignerIdentifier, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.IssuerAndSerialNumber = function (e) {\n var c = KJUR,\n h = c.asn1,\n g = h.DERInteger,\n f = h.DERSequence,\n j = h.cms,\n d = h.x509,\n a = d.X500Name,\n b = X509,\n i = Error;\n j.IssuerAndSerialNumber.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var p = this.params;\n var l, r;\n if (typeof p == \"string\" && p.indexOf(\"-----BEGIN\") != -1 || p.cert != undefined) {\n var n;\n if (p.cert != undefined) {\n n = p.cert;\n } else {\n n = p;\n }\n var k = new b();\n k.readCertPEM(n);\n l = k.getIssuer();\n r = {\n hex: k.getSerialNumberHex()\n };\n } else {\n if (p.issuer != undefined && p.serial) {\n l = p.issuer;\n r = p.serial;\n } else {\n throw new i(\"cert or issuer and serial parameter not specified\");\n }\n }\n var q = new a(l);\n var o = new g(r);\n var m = new f({\n array: [q, o]\n });\n return m.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (k) {\n this.params = k;\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cms.IssuerAndSerialNumber, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.SubjectKeyIdentifier = function (g) {\n var d = KJUR,\n k = d.asn1,\n i = k.DERInteger,\n h = k.DERSequence,\n j = k.ASN1Util.newObject,\n m = k.cms,\n f = m.IssuerAndSerialName,\n c = m.SubjectKeyIdentifier,\n e = k.x509,\n a = e.X500Name,\n b = X509,\n l = Error;\n m.SubjectKeyIdentifier.superclass.constructor.call(this);\n this.tohex = function () {\n var r = this.params;\n if (r.cert == undefined && r.skid == undefined) {\n throw new l(\"property cert nor skid undefined\");\n }\n var q;\n if (r.cert != undefined) {\n var n = new b(r.cert);\n var o = n.getExtSubjectKeyIdentifier();\n q = o.kid.hex;\n } else {\n if (r.skid != undefined) {\n q = r.skid;\n }\n }\n var p = j({\n tag: {\n tage: \"a0\",\n obj: {\n octstr: {\n hex: q\n }\n }\n }\n });\n return p.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cms.SubjectKeyIdentifier, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.AttributeList = function (f) {\n var d = Error,\n c = KJUR,\n b = c.asn1,\n a = b.DERSet,\n e = b.cms;\n e.AttributeList.superclass.constructor.call(this);\n this.params = null;\n this.hTLV = null;\n this.setByParam = function (g) {\n this.params = g;\n };\n this.tohex = function () {\n var o = this.params;\n if (this.hTLV != null) {\n return this.hTLV;\n }\n var m = true;\n if (o.sortflag != undefined) {\n m = o.sortflag;\n }\n var j = o.array;\n var g = [];\n for (var l = 0; l < j.length; l++) {\n var n = j[l];\n var k = n.attr;\n if (k == \"contentType\") {\n g.push(new e.ContentType(n));\n } else {\n if (k == \"messageDigest\") {\n g.push(new e.MessageDigest(n));\n } else {\n if (k == \"signingTime\") {\n g.push(new e.SigningTime(n));\n } else {\n if (k == \"signingCertificate\") {\n g.push(new e.SigningCertificate(n));\n } else {\n if (k == \"signingCertificateV2\") {\n g.push(new e.SigningCertificateV2(n));\n } else {\n if (k == \"signaturePolicyIdentifier\") {\n g.push(new KJUR.asn1.cades.SignaturePolicyIdentifier(n));\n } else {\n if (k == \"signatureTimeStamp\" || k == \"timeStampToken\") {\n g.push(new KJUR.asn1.cades.SignatureTimeStamp(n));\n } else {\n throw new d(\"unknown attr: \" + k);\n }\n }\n }\n }\n }\n }\n }\n }\n var h = new a({\n array: g,\n sortflag: m\n });\n this.hTLV = h.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.cms.AttributeList, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.SignerInfo = function (q) {\n var n = Error,\n r = KJUR,\n i = r.asn1,\n c = i.DERInteger,\n f = i.DEROctetString,\n h = i.DERSequence,\n m = i.DERTaggedObject,\n k = i.cms,\n p = k.SignerIdentifier,\n l = k.AttributeList,\n g = k.ContentType,\n e = k.EncapsulatedContentInfo,\n d = k.MessageDigest,\n j = k.SignedData,\n a = i.x509,\n s = a.AlgorithmIdentifier,\n b = r.crypto,\n o = KEYUTIL;\n k.SignerInfo.superclass.constructor.call(this);\n this.params = null;\n this.sign = function () {\n var y = this.params;\n var x = y.sigalg;\n var u = new l(y.sattrs).tohex();\n var v = o.getKey(y.signkey);\n var w = new b.Signature({\n alg: x\n });\n w.init(v);\n w.updateHex(u);\n var t = w.sign();\n y.sighex = t;\n };\n this.tohex = function () {\n var w = this.params;\n var t = [];\n t.push(new c({\n \"int\": w.version\n }));\n t.push(new p(w.id));\n t.push(new s({\n name: w.hashalg\n }));\n if (w.sattrs != undefined) {\n var x = new l(w.sattrs);\n try {\n t.push(new m({\n tag: \"a0\",\n explicit: false,\n obj: x\n }));\n } catch (v) {\n throw new n(\"si sattr error: \" + v);\n }\n }\n if (w.sigalgfield != undefined) {\n t.push(new s({\n name: w.sigalgfield\n }));\n } else {\n t.push(new s({\n name: w.sigalg\n }));\n }\n if (w.sighex == undefined && w.signkey != undefined) {\n this.sign();\n }\n t.push(new f({\n hex: w.sighex\n }));\n if (w.uattrs != undefined) {\n var x = new l(w.uattrs);\n try {\n t.push(new m({\n tag: \"a1\",\n explicit: false,\n obj: x\n }));\n } catch (v) {\n throw new n(\"si uattr error: \" + v);\n }\n }\n var u = new h({\n array: t\n });\n return u.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (q != undefined) {\n this.setByParam(q);\n }\n};\nextendClass(KJUR.asn1.cms.SignerInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.EncapsulatedContentInfo = function (g) {\n var c = KJUR,\n b = c.asn1,\n e = b.DERTaggedObject,\n a = b.DERSequence,\n h = b.DERObjectIdentifier,\n d = b.DEROctetString,\n f = b.cms;\n f.EncapsulatedContentInfo.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var m = this.params;\n var i = [];\n i.push(new h(m.type));\n if (m.content != undefined && (m.content.hex != undefined || m.content.str != undefined) && m.isDetached != true) {\n var k = new d(m.content);\n var l = new e({\n tag: \"a0\",\n explicit: true,\n obj: k\n });\n i.push(l);\n }\n var j = new a({\n array: i\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (i) {\n this.params = i;\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cms.EncapsulatedContentInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.ContentInfo = function (g) {\n var c = KJUR,\n b = c.asn1,\n d = b.DERTaggedObject,\n a = b.DERSequence,\n h = b.DERObjectIdentifier,\n f = b.x509,\n e = f.OID.name2obj;\n KJUR.asn1.cms.ContentInfo.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var l = this.params;\n var i = [];\n i.push(new h(l.type));\n var k = new d({\n tag: \"a0\",\n explicit: true,\n obj: l.obj\n });\n i.push(k);\n var j = new a({\n array: i\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (i) {\n this.params = i;\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cms.ContentInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.SignedData = function (e) {\n var j = Error,\n a = KJUR,\n h = a.asn1,\n m = h.ASN1Object,\n g = h.DERInteger,\n p = h.DERSet,\n f = h.DERSequence,\n b = h.DERTaggedObject,\n o = h.cms,\n l = o.EncapsulatedContentInfo,\n d = o.SignerInfo,\n q = o.ContentInfo,\n k = o.CertificateSet,\n i = o.RevocationInfoChoices,\n c = h.x509,\n n = c.AlgorithmIdentifier;\n KJUR.asn1.cms.SignedData.superclass.constructor.call(this);\n this.params = null;\n this.checkAndFixParam = function () {\n var r = this.params;\n this._setDigestAlgs(r);\n this._setContentTypeByEContent(r);\n this._setMessageDigestByEContent(r);\n this._setSignerInfoVersion(r);\n this._setSignedDataVersion(r);\n };\n this._setDigestAlgs = function (v) {\n var u = {};\n var t = v.sinfos;\n for (var r = 0; r < t.length; r++) {\n var s = t[r];\n u[s.hashalg] = 1;\n }\n v.hashalgs = Object.keys(u).sort();\n };\n this._setContentTypeByEContent = function (w) {\n var u = w.econtent.type;\n var v = w.sinfos;\n for (var r = 0; r < v.length; r++) {\n var t = v[r];\n var s = this._getAttrParamByName(t, \"contentType\");\n s.type = u;\n }\n };\n this._setMessageDigestByEContent = function (r) {\n var v = r.econtent;\n var y = r.econtent.type;\n var x = v.content.hex;\n if (x == undefined && v.type == \"data\" && v.content.str != undefined) {\n x = rstrtohex(v.content.str);\n }\n var A = r.sinfos;\n for (var u = 0; u < A.length; u++) {\n var t = A[u];\n var s = t.hashalg;\n var z = this._getAttrParamByName(t, \"messageDigest\");\n var w = KJUR.crypto.Util.hashHex(x, s);\n z.hex = w;\n }\n };\n this._getAttrParamByName = function (t, s) {\n var u = t.sattrs.array;\n for (var r = 0; r < u.length; r++) {\n if (u[r].attr == s) {\n return u[r];\n }\n }\n };\n this._setSignerInfoVersion = function (v) {\n var t = v.sinfos;\n for (var r = 0; r < t.length; r++) {\n var s = t[r];\n var u = 1;\n if (s.id.type == \"skid\") {\n u = 3;\n }\n s.version = u;\n }\n };\n this._setSignedDataVersion = function (s) {\n var r = this._getSignedDataVersion(s);\n s.version = r;\n };\n this._getSignedDataVersion = function (w) {\n if (w.revinfos != undefined) {\n var r = w.revinfos;\n for (var t = 0; t < r.length; t++) {\n var s = r[t];\n if (s.ocsp != undefined) {\n return 5;\n }\n }\n }\n var v = w.sinfos;\n for (var t = 0; t < v.length; t++) {\n var u = w.sinfos[t];\n if (u.version == 3) {\n return 3;\n }\n }\n if (w.econtent.type != \"data\") {\n return 3;\n }\n return 1;\n };\n this.tohex = function () {\n var y = this.params;\n if (this.getEncodedHexPrepare != undefined) {\n this.getEncodedHexPrepare();\n }\n if (y.fixed != true) {\n this.checkAndFixParam();\n }\n var r = [];\n r.push(new g({\n \"int\": y.version\n }));\n var w = [];\n for (var v = 0; v < y.hashalgs.length; v++) {\n var t = y.hashalgs[v];\n w.push(new n({\n name: t\n }));\n }\n r.push(new p({\n array: w\n }));\n r.push(new l(y.econtent));\n if (y.certs != undefined) {\n r.push(new k(y.certs));\n }\n if (y.revinfos != undefined) {\n r.push(new i(y.revinfos));\n }\n var u = [];\n for (var v = 0; v < y.sinfos.length; v++) {\n var x = y.sinfos[v];\n u.push(new d(x));\n }\n r.push(new p({\n array: u\n }));\n var s = new f({\n array: r\n });\n return s.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.getContentInfo = function () {\n var r = new q({\n type: \"signed-data\",\n obj: this\n });\n return r;\n };\n this.getContentInfoEncodedHex = function () {\n return this.getContentInfo().tohex();\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cms.SignedData, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.CertificateSet = function (f) {\n KJUR.asn1.cms.CertificateSet.superclass.constructor.call(this);\n var c = Error,\n b = KJUR.asn1,\n e = b.DERTaggedObject,\n a = b.DERSet,\n d = b.ASN1Object;\n this.params = null;\n this.tohex = function () {\n var j = this.params;\n var p = [];\n var q;\n if (j instanceof Array) {\n q = j;\n } else {\n if (j.array != undefined) {\n q = j.array;\n } else {\n throw new c(\"cert array not specified\");\n }\n }\n for (var k = 0; k < q.length; k++) {\n var l = q[k];\n var n = pemtohex(l);\n var g = new d();\n g.hTLV = n;\n p.push(g);\n }\n var m = {\n array: p\n };\n if (j.sortflag == false) {\n m.sortflag = false;\n }\n var o = new a(m);\n var h = new e({\n tag: \"a0\",\n explicit: false,\n obj: o\n });\n return h.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.cms.CertificateSet, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.RevocationInfoChoices = function (a) {\n KJUR.asn1.cms.RevocationInfoChoices.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var e = this.params;\n if (!e instanceof Array) {\n throw new Error(\"params is not array\");\n }\n var b = [];\n for (var c = 0; c < e.length; c++) {\n b.push(new KJUR.asn1.cms.RevocationInfoChoice(e[c]));\n }\n var d = KJUR.asn1.ASN1Util.newObject({\n tag: {\n tagi: \"a1\",\n obj: {\n set: b\n }\n }\n });\n return d.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (a != undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.cms.RevocationInfoChoices, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.RevocationInfoChoice = function (a) {\n KJUR.asn1.cms.RevocationInfoChoice.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var d = this.params;\n if (d.crl != undefined && typeof d.crl == \"string\") {\n var b = d.crl;\n if (d.crl.indexOf(\"-----BEGIN\") != -1) {\n b = pemtohex(d.crl);\n }\n return b;\n } else {\n if (d.ocsp != undefined) {\n var c = KJUR.asn1.ASN1Util.newObject({\n tag: {\n tagi: \"a1\",\n obj: new KJUR.asn1.cms.OtherRevocationFormat(d)\n }\n });\n return c.tohex();\n } else {\n throw new Error(\"property crl or ocsp undefined\");\n }\n }\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (a != undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.cms.RevocationInfoChoice, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.OtherRevocationFormat = function (f) {\n KJUR.asn1.cms.OtherRevocationFormat.superclass.constructor.call(this);\n var d = Error,\n c = KJUR,\n b = c.asn1,\n a = b.ASN1Util.newObject,\n e = c.lang.String.isHex;\n this.params = null;\n this.tohex = function () {\n var h = this.params;\n if (h.ocsp == undefined) {\n throw new d(\"property ocsp not specified\");\n }\n if (!e(h.ocsp) || !ASN1HEX.isASN1HEX(h.ocsp)) {\n throw new d(\"ocsp value not ASN.1 hex string\");\n }\n var g = a({\n seq: [{\n oid: \"1.3.6.1.5.5.7.16.2\"\n }, {\n asn1: {\n tlv: h.ocsp\n }\n }]\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.cms.OtherRevocationFormat, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.CMSUtil = new function () {}();\nKJUR.asn1.cms.CMSUtil.newSignedData = function (a) {\n return new KJUR.asn1.cms.SignedData(a);\n};\nKJUR.asn1.cms.CMSUtil.verifySignedData = function (n) {\n var C = KJUR,\n p = C.asn1,\n s = p.cms,\n D = s.SignerInfo,\n q = s.SignedData,\n y = s.SigningTime,\n b = s.SigningCertificate,\n d = s.SigningCertificateV2,\n A = p.cades,\n u = A.SignaturePolicyIdentifier,\n i = C.lang.String.isHex,\n v = ASN1HEX,\n h = v.getVbyList,\n a = v.getTLVbyList,\n t = v.getIdxbyList,\n z = v.getChildIdx,\n c = v.getTLV,\n B = v.oidname,\n j = C.crypto.Util.hashHex;\n if (n.cms === undefined && !i(n.cms)) {}\n var E = n.cms;\n var g = function (J, H) {\n var G;\n for (var I = 3; I < 6; I++) {\n G = t(J, 0, [1, 0, I]);\n if (G !== undefined) {\n var F = J.substr(G, 2);\n if (F === \"a0\") {\n H.certsIdx = G;\n }\n if (F === \"a1\") {\n H.revinfosIdx = G;\n }\n if (F === \"31\") {\n H.signerinfosIdx = G;\n }\n }\n }\n };\n var l = function (I, F) {\n var H = F.signerinfosIdx;\n if (H === undefined) {\n return;\n }\n var L = z(I, H);\n F.signerInfoIdxList = L;\n for (var G = 0; G < L.length; G++) {\n var K = L[G];\n var J = {\n idx: K\n };\n k(I, J);\n F.signerInfos.push(J);\n }\n };\n var k = function (I, J) {\n var F = J.idx;\n J.signerid_issuer1 = a(I, F, [1, 0], \"30\");\n J.signerid_serial1 = h(I, F, [1, 1], \"02\");\n J.hashalg = B(h(I, F, [2, 0], \"06\"));\n var H = t(I, F, [3], \"a0\");\n J.idxSignedAttrs = H;\n f(I, J, H);\n var G = z(I, F);\n var K = G.length;\n if (K < 6) {\n throw \"malformed SignerInfo\";\n }\n J.sigalg = B(h(I, F, [K - 2, 0], \"06\"));\n J.sigval = h(I, F, [K - 1], \"04\");\n };\n var f = function (L, M, F) {\n var J = z(L, F);\n M.signedAttrIdxList = J;\n for (var K = 0; K < J.length; K++) {\n var I = J[K];\n var G = h(L, I, [0], \"06\");\n var H;\n if (G === \"2a864886f70d010905\") {\n H = hextoutf8(h(L, I, [1, 0]));\n M.saSigningTime = H;\n } else {\n if (G === \"2a864886f70d010904\") {\n H = h(L, I, [1, 0], \"04\");\n M.saMessageDigest = H;\n }\n }\n }\n };\n var w = function (G, F) {\n if (h(G, 0, [0], \"06\") !== \"2a864886f70d010702\") {\n return F;\n }\n F.cmsType = \"signedData\";\n F.econtent = h(G, 0, [1, 0, 2, 1, 0]);\n g(G, F);\n F.signerInfos = [];\n l(G, F);\n };\n var o = function (J, F) {\n var G = F.parse.signerInfos;\n var L = G.length;\n var K = true;\n for (var I = 0; I < L; I++) {\n var H = G[I];\n e(J, F, H, I);\n if (!H.isValid) {\n K = false;\n }\n }\n F.isValid = K;\n };\n var x = function (F, Q, J, P) {\n var N = Q.parse.certsIdx;\n var H;\n if (Q.certs === undefined) {\n H = [];\n Q.certkeys = [];\n var K = z(F, N);\n for (var I = 0; I < K.length; I++) {\n var M = c(F, K[I]);\n var O = new X509();\n O.readCertHex(M);\n H[I] = O;\n Q.certkeys[I] = O.getPublicKey();\n }\n Q.certs = H;\n } else {\n H = Q.certs;\n }\n Q.cccc = H.length;\n Q.cccci = K.length;\n for (var I = 0; I < H.length; I++) {\n var L = O.getIssuerHex();\n var G = O.getSerialNumberHex();\n if (J.signerid_issuer1 === L && J.signerid_serial1 === G) {\n J.certkey_idx = I;\n }\n }\n };\n var e = function (F, R, I, N) {\n I.verifyDetail = {};\n var Q = I.verifyDetail;\n var K = R.parse.econtent;\n var G = I.hashalg;\n var L = I.saMessageDigest;\n Q.validMessageDigest = false;\n if (j(K, G) === L) {\n Q.validMessageDigest = true;\n }\n x(F, R, I, N);\n Q.validSignatureValue = false;\n var H = I.sigalg;\n var M = \"31\" + c(F, I.idxSignedAttrs).substr(2);\n I.signedattrshex = M;\n var J = R.certs[I.certkey_idx].getPublicKey();\n var P = new KJUR.crypto.Signature({\n alg: H\n });\n P.init(J);\n P.updateHex(M);\n var O = P.verify(I.sigval);\n Q.validSignatureValue_isValid = O;\n if (O === true) {\n Q.validSignatureValue = true;\n }\n I.isValid = false;\n if (Q.validMessageDigest && Q.validSignatureValue) {\n I.isValid = true;\n }\n };\n var m = function () {};\n var r = {\n isValid: false,\n parse: {}\n };\n w(E, r.parse);\n o(E, r);\n return r;\n};\nKJUR.asn1.cms.CMSParser = function () {\n var g = Error,\n a = X509,\n h = new a(),\n l = ASN1HEX,\n i = l.getV,\n b = l.getTLV,\n f = l.getIdxbyList,\n c = l.getTLVbyList,\n d = l.getTLVbyListEx,\n e = l.getVbyList,\n k = l.getVbyListEx,\n j = l.getChildIdx;\n this.getCMSSignedData = function (m) {\n var o = c(m, 0, [1, 0]);\n var n = this.getSignedData(o);\n return n;\n };\n this.getSignedData = function (o) {\n var q = j(o, 0);\n var v = {};\n var p = i(o, q[0]);\n var n = parseInt(p, 16);\n v.version = n;\n var r = b(o, q[1]);\n v.hashalgs = this.getHashAlgArray(r);\n var t = b(o, q[2]);\n v.econtent = this.getEContent(t);\n var m = d(o, 0, [\"[0]\"]);\n if (m != null) {\n v.certs = this.getCertificateSet(m);\n }\n var u = d(o, 0, [\"[1]\"]);\n if (u != null) {}\n var s = d(o, 0, [3]);\n v.sinfos = this.getSignerInfos(s);\n return v;\n };\n this.getHashAlgArray = function (s) {\n var q = j(s, 0);\n var m = new a();\n var n = [];\n for (var r = 0; r < q.length; r++) {\n var p = b(s, q[r]);\n var o = m.getAlgorithmIdentifierName(p);\n n.push(o);\n }\n return n;\n };\n this.getEContent = function (m) {\n var n = {};\n var p = e(m, 0, [0]);\n var o = e(m, 0, [1, 0]);\n n.type = KJUR.asn1.x509.OID.oid2name(ASN1HEX.hextooidstr(p));\n n.content = {\n hex: o\n };\n return n;\n };\n this.getSignerInfos = function (p) {\n var r = [];\n var m = j(p, 0);\n for (var n = 0; n < m.length; n++) {\n var o = b(p, m[n]);\n var q = this.getSignerInfo(o);\n r.push(q);\n }\n return r;\n };\n this.getSignerInfo = function (s) {\n var y = {};\n var u = j(s, 0);\n var q = l.getInt(s, u[0], -1);\n if (q != -1) {\n y.version = q;\n }\n var t = b(s, u[1]);\n var p = this.getIssuerAndSerialNumber(t);\n y.id = p;\n var z = b(s, u[2]);\n var n = h.getAlgorithmIdentifierName(z);\n y.hashalg = n;\n var w = d(s, 0, [\"[0]\"]);\n if (w != null) {\n var A = this.getAttributeList(w);\n y.sattrs = A;\n }\n var m = d(s, 0, [3]);\n var x = h.getAlgorithmIdentifierName(m);\n y.sigalg = x;\n var o = k(s, 0, [4]);\n y.sighex = o;\n var r = d(s, 0, [\"[1]\"]);\n if (r != null) {\n var v = this.getAttributeList(r);\n y.uattrs = v;\n }\n return y;\n };\n this.getSignerIdentifier = function (m) {\n if (m.substr(0, 2) == \"30\") {\n return this.getIssuerAndSerialNumber(m);\n } else {\n throw new Error(\"SKID of signerIdentifier not supported\");\n }\n };\n this.getIssuerAndSerialNumber = function (n) {\n var o = {\n type: \"isssn\"\n };\n var m = j(n, 0);\n var p = b(n, m[0]);\n o.issuer = h.getX500Name(p);\n var q = i(n, m[1]);\n o.serial = {\n hex: q\n };\n return o;\n };\n this.getAttributeList = function (q) {\n var m = [];\n var n = j(q, 0);\n for (var o = 0; o < n.length; o++) {\n var p = b(q, n[o]);\n var r = this.getAttribute(p);\n m.push(r);\n }\n return {\n array: m\n };\n };\n this.getAttribute = function (p) {\n var t = {};\n var q = j(p, 0);\n var o = l.getOID(p, q[0]);\n var m = KJUR.asn1.x509.OID.oid2name(o);\n t.attr = m;\n var r = b(p, q[1]);\n var u = j(r, 0);\n if (u.length == 1) {\n t.valhex = b(r, u[0]);\n } else {\n var s = [];\n for (var n = 0; n < u.length; n++) {\n s.push(b(r, u[n]));\n }\n t.valhex = s;\n }\n if (m == \"contentType\") {\n this.setContentType(t);\n } else {\n if (m == \"messageDigest\") {\n this.setMessageDigest(t);\n } else {\n if (m == \"signingTime\") {\n this.setSigningTime(t);\n } else {\n if (m == \"signingCertificate\") {\n this.setSigningCertificate(t);\n } else {\n if (m == \"signingCertificateV2\") {\n this.setSigningCertificateV2(t);\n } else {\n if (m == \"signaturePolicyIdentifier\") {\n this.setSignaturePolicyIdentifier(t);\n }\n }\n }\n }\n }\n }\n return t;\n };\n this.setContentType = function (m) {\n var n = l.getOIDName(m.valhex, 0, null);\n if (n != null) {\n m.type = n;\n delete m.valhex;\n }\n };\n this.setSigningTime = function (o) {\n var n = i(o.valhex, 0);\n var m = hextoutf8(n);\n o.str = m;\n delete o.valhex;\n };\n this.setMessageDigest = function (m) {\n var n = i(m.valhex, 0);\n m.hex = n;\n delete m.valhex;\n };\n this.setSigningCertificate = function (n) {\n var q = j(n.valhex, 0);\n if (q.length > 0) {\n var m = b(n.valhex, q[0]);\n var p = j(m, 0);\n var t = [];\n for (var o = 0; o < p.length; o++) {\n var s = b(m, p[o]);\n var u = this.getESSCertID(s);\n t.push(u);\n }\n n.array = t;\n }\n if (q.length > 1) {\n var r = b(n.valhex, q[1]);\n n.polhex = r;\n }\n delete n.valhex;\n };\n this.setSignaturePolicyIdentifier = function (s) {\n var q = j(s.valhex, 0);\n if (q.length > 0) {\n var r = l.getOID(s.valhex, q[0]);\n s.oid = r;\n }\n if (q.length > 1) {\n var m = new a();\n var t = j(s.valhex, q[1]);\n var p = b(s.valhex, t[0]);\n var o = m.getAlgorithmIdentifierName(p);\n s.alg = o;\n var n = i(s.valhex, t[1]);\n s.hash = n;\n }\n delete s.valhex;\n };\n this.setSigningCertificateV2 = function (o) {\n var s = j(o.valhex, 0);\n if (s.length > 0) {\n var n = b(o.valhex, s[0]);\n var r = j(n, 0);\n var u = [];\n for (var q = 0; q < r.length; q++) {\n var m = b(n, r[q]);\n var p = this.getESSCertIDv2(m);\n u.push(p);\n }\n o.array = u;\n }\n if (s.length > 1) {\n var t = b(o.valhex, s[1]);\n o.polhex = t;\n }\n delete o.valhex;\n };\n this.getESSCertID = function (o) {\n var p = {};\n var n = j(o, 0);\n if (n.length > 0) {\n var q = i(o, n[0]);\n p.hash = q;\n }\n if (n.length > 1) {\n var m = b(o, n[1]);\n var r = this.getIssuerSerial(m);\n if (r.serial != undefined) {\n p.serial = r.serial;\n }\n if (r.issuer != undefined) {\n p.issuer = r.issuer;\n }\n }\n return p;\n };\n this.getESSCertIDv2 = function (q) {\n var s = {};\n var p = j(q, 0);\n if (p.length < 1 || 3 < p.length) {\n throw new g(\"wrong number of elements\");\n }\n var r = 0;\n if (q.substr(p[0], 2) == \"30\") {\n var o = b(q, p[0]);\n s.alg = h.getAlgorithmIdentifierName(o);\n r++;\n } else {\n s.alg = \"sha256\";\n }\n var n = i(q, p[r]);\n s.hash = n;\n if (p.length > r + 1) {\n var m = b(q, p[r + 1]);\n var t = this.getIssuerSerial(m);\n s.issuer = t.issuer;\n s.serial = t.serial;\n }\n return s;\n };\n this.getIssuerSerial = function (q) {\n var r = {};\n var n = j(q, 0);\n var m = b(q, n[0]);\n var p = h.getGeneralNames(m);\n var o = p[0].dn;\n r.issuer = o;\n var s = i(q, n[1]);\n r.serial = {\n hex: s\n };\n return r;\n };\n this.getCertificateSet = function (p) {\n var n = j(p, 0);\n var m = [];\n for (var o = 0; o < n.length; o++) {\n var r = b(p, n[o]);\n if (r.substr(0, 2) == \"30\") {\n var q = hextopem(r, \"CERTIFICATE\");\n m.push(q);\n }\n }\n return {\n array: m,\n sortflag: false\n };\n };\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nif (typeof KJUR.asn1.tsp == \"undefined\" || !KJUR.asn1.tsp) {\n KJUR.asn1.tsp = {};\n}\nKJUR.asn1.tsp.TimeStampToken = function (d) {\n var c = KJUR,\n b = c.asn1,\n a = b.tsp;\n a.TimeStampToken.superclass.constructor.call(this);\n this.params = null;\n this.getEncodedHexPrepare = function () {\n var e = new a.TSTInfo(this.params.econtent.content);\n this.params.econtent.content.hex = e.tohex();\n };\n if (d != undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.tsp.TimeStampToken, KJUR.asn1.cms.SignedData);\nKJUR.asn1.tsp.TSTInfo = function (f) {\n var m = Error,\n c = KJUR,\n j = c.asn1,\n g = j.DERSequence,\n i = j.DERInteger,\n l = j.DERBoolean,\n h = j.DERGeneralizedTime,\n n = j.DERObjectIdentifier,\n e = j.DERTaggedObject,\n k = j.tsp,\n d = k.MessageImprint,\n b = k.Accuracy,\n a = j.x509.X500Name,\n o = j.x509.GeneralName;\n k.TSTInfo.superclass.constructor.call(this);\n this.dVersion = new i({\n \"int\": 1\n });\n this.dPolicy = null;\n this.dMessageImprint = null;\n this.dSerial = null;\n this.dGenTime = null;\n this.dAccuracy = null;\n this.dOrdering = null;\n this.dNonce = null;\n this.dTsa = null;\n this.tohex = function () {\n var p = [this.dVersion];\n if (this.dPolicy == null) {\n throw new Error(\"policy shall be specified.\");\n }\n p.push(this.dPolicy);\n if (this.dMessageImprint == null) {\n throw new Error(\"messageImprint shall be specified.\");\n }\n p.push(this.dMessageImprint);\n if (this.dSerial == null) {\n throw new Error(\"serialNumber shall be specified.\");\n }\n p.push(this.dSerial);\n if (this.dGenTime == null) {\n throw new Error(\"genTime shall be specified.\");\n }\n p.push(this.dGenTime);\n if (this.dAccuracy != null) {\n p.push(this.dAccuracy);\n }\n if (this.dOrdering != null) {\n p.push(this.dOrdering);\n }\n if (this.dNonce != null) {\n p.push(this.dNonce);\n }\n if (this.dTsa != null) {\n p.push(this.dTsa);\n }\n var q = new g({\n array: p\n });\n this.hTLV = q.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n if (typeof f.policy == \"string\") {\n if (!f.policy.match(/^[0-9.]+$/)) {\n throw \"policy shall be oid like 0.1.4.134\";\n }\n this.dPolicy = new n({\n oid: f.policy\n });\n }\n if (f.messageImprint !== undefined) {\n this.dMessageImprint = new d(f.messageImprint);\n }\n if (f.serial !== undefined) {\n this.dSerial = new i(f.serial);\n }\n if (f.genTime !== undefined) {\n this.dGenTime = new h(f.genTime);\n }\n if (f.accuracy !== undefined) {\n this.dAccuracy = new b(f.accuracy);\n }\n if (f.ordering !== undefined && f.ordering == true) {\n this.dOrdering = new l();\n }\n if (f.nonce !== undefined) {\n this.dNonce = new i(f.nonce);\n }\n if (f.tsa !== undefined) {\n this.dTsa = new e({\n tag: \"a0\",\n explicit: true,\n obj: new o({\n dn: f.tsa\n })\n });\n }\n }\n};\nextendClass(KJUR.asn1.tsp.TSTInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.Accuracy = function (d) {\n var c = KJUR,\n b = c.asn1,\n a = b.ASN1Util.newObject;\n b.tsp.Accuracy.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var f = this.params;\n var e = [];\n if (f.seconds != undefined && typeof f.seconds == \"number\") {\n e.push({\n \"int\": f.seconds\n });\n }\n if (f.millis != undefined && typeof f.millis == \"number\") {\n e.push({\n tag: {\n tagi: \"80\",\n obj: {\n \"int\": f.millis\n }\n }\n });\n }\n if (f.micros != undefined && typeof f.micros == \"number\") {\n e.push({\n tag: {\n tagi: \"81\",\n obj: {\n \"int\": f.micros\n }\n }\n });\n }\n return a({\n seq: e\n }).tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d != undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.tsp.Accuracy, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.MessageImprint = function (g) {\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n d = b.DEROctetString,\n f = b.x509,\n e = f.AlgorithmIdentifier;\n b.tsp.MessageImprint.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var k = this.params;\n var j = new e({\n name: k.alg\n });\n var h = new d({\n hex: k.hash\n });\n var i = new a({\n array: [j, h]\n });\n return i.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g !== undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.tsp.MessageImprint, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.TimeStampReq = function (c) {\n var a = KJUR,\n f = a.asn1,\n d = f.DERSequence,\n e = f.DERInteger,\n h = f.DERBoolean,\n j = f.ASN1Object,\n i = f.DERObjectIdentifier,\n g = f.tsp,\n b = g.MessageImprint;\n g.TimeStampReq.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var m = this.params;\n var k = [];\n k.push(new e({\n \"int\": 1\n }));\n if (m.messageImprint instanceof KJUR.asn1.ASN1Object) {\n k.push(m.messageImprint);\n } else {\n k.push(new b(m.messageImprint));\n }\n if (m.policy != undefined) {\n k.push(new i(m.policy));\n }\n if (m.nonce != undefined) {\n k.push(new e(m.nonce));\n }\n if (m.certreq == true) {\n k.push(new h());\n }\n var l = new d({\n array: k\n });\n return l.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (c != undefined) {\n this.setByParam(c);\n }\n};\nextendClass(KJUR.asn1.tsp.TimeStampReq, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.TimeStampResp = function (g) {\n var e = KJUR,\n d = e.asn1,\n c = d.DERSequence,\n f = d.ASN1Object,\n a = d.tsp,\n b = a.PKIStatusInfo;\n a.TimeStampResp.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var j = this.params;\n var h = [];\n if (j.econtent != undefined || j.tst != undefined) {\n if (j.statusinfo != undefined) {\n h.push(new b(j.statusinfo));\n } else {\n h.push(new b(\"granted\"));\n }\n if (j.econtent != undefined) {\n h.push(new a.TimeStampToken(j).getContentInfo());\n } else {\n if (j.tst instanceof d.ASN1Object) {\n h.push(j.tst);\n } else {\n throw new Error(\"improper member tst value\");\n }\n }\n } else {\n if (j.statusinfo != undefined) {\n h.push(new b(j.statusinfo));\n } else {\n throw new Error(\"parameter for token nor statusinfo not specified\");\n }\n }\n var i = new c({\n array: h\n });\n return i.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.tsp.TimeStampResp, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.PKIStatusInfo = function (d) {\n var h = Error,\n a = KJUR,\n g = a.asn1,\n e = g.DERSequence,\n i = g.tsp,\n f = i.PKIStatus,\n c = i.PKIFreeText,\n b = i.PKIFailureInfo;\n i.PKIStatusInfo.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var l = this.params;\n var j = [];\n if (typeof l == \"string\") {\n j.push(new f(l));\n } else {\n if (l.status == undefined) {\n throw new h(\"property 'status' unspecified\");\n }\n j.push(new f(l.status));\n if (l.statusstr != undefined) {\n j.push(new c(l.statusstr));\n }\n if (l.failinfo != undefined) {\n j.push(new b(l.failinfo));\n }\n }\n var k = new e({\n array: j\n });\n return k.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d != undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.tsp.PKIStatusInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.PKIStatus = function (g) {\n var e = Error,\n d = KJUR,\n c = d.asn1,\n f = c.DERInteger,\n b = c.tsp;\n b.PKIStatus.superclass.constructor.call(this);\n var a = {\n granted: 0,\n grantedWithMods: 1,\n rejection: 2,\n waiting: 3,\n revocationWarning: 4,\n revocationNotification: 5\n };\n this.params = null;\n this.tohex = function () {\n var k = this.params;\n var h, j;\n if (typeof k == \"string\") {\n try {\n j = a[k];\n } catch (i) {\n throw new e(\"undefined name: \" + k);\n }\n } else {\n if (typeof k == \"number\") {\n j = k;\n } else {\n throw new e(\"unsupported params\");\n }\n }\n return new f({\n \"int\": j\n }).tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.tsp.PKIStatus, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.PKIFreeText = function (g) {\n var f = Error,\n e = KJUR,\n d = e.asn1,\n b = d.DERSequence,\n c = d.DERUTF8String,\n a = d.tsp;\n a.PKIFreeText.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var l = this.params;\n if (!l instanceof Array) {\n throw new f(\"wrong params: not array\");\n }\n var h = [];\n for (var k = 0; k < l.length; k++) {\n h.push(new c({\n str: l[k]\n }));\n }\n var j = new b({\n array: h\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.tsp.PKIFreeText, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.PKIFailureInfo = function (h) {\n var f = Error,\n e = KJUR,\n d = e.asn1,\n g = d.DERBitString,\n b = d.tsp,\n c = b.PKIFailureInfo;\n var a = {\n badAlg: 0,\n badRequest: 2,\n badDataFormat: 5,\n timeNotAvailable: 14,\n unacceptedPolicy: 15,\n unacceptedExtension: 16,\n addInfoNotAvailable: 17,\n systemFailure: 25\n };\n c.superclass.constructor.call(this);\n this.params = null;\n this.getBinValue = function () {\n var n = this.params;\n var m = 0;\n if (typeof n == \"number\" && 0 <= n && n <= 25) {\n m |= 1 << n;\n var k = m.toString(2);\n var l = \"\";\n for (var j = k.length - 1; j >= 0; j--) {\n l += k[j];\n }\n return l;\n } else {\n if (typeof n == \"string\" && a[n] != undefined) {\n return namearraytobinstr([n], a);\n } else {\n if (typeof n == \"object\" && n.length != undefined) {\n return namearraytobinstr(n, a);\n } else {\n throw new f(\"wrong params\");\n }\n }\n }\n return;\n };\n this.tohex = function () {\n var j = this.params;\n var i = this.getBinValue();\n return new g({\n bin: i\n }).tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (h != undefined) {\n this.setByParam(h);\n }\n};\nextendClass(KJUR.asn1.tsp.PKIFailureInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.AbstractTSAAdapter = function (a) {\n this.getTSTHex = function (c, b) {\n throw \"not implemented yet\";\n };\n};\nKJUR.asn1.tsp.SimpleTSAAdapter = function (e) {\n var d = KJUR,\n c = d.asn1,\n a = c.tsp,\n b = d.crypto.Util.hashHex;\n a.SimpleTSAAdapter.superclass.constructor.call(this);\n this.params = null;\n this.serial = 0;\n this.getTSTHex = function (g, f) {\n var i = b(g, f);\n this.params.econtent.content.messageImprint = {\n alg: f,\n hash: i\n };\n this.params.econtent.content.serial = {\n \"int\": this.serial++\n };\n var h = Math.floor(Math.random() * 1000000000);\n this.params.econtent.content.nonce = {\n \"int\": h\n };\n var j = new a.TimeStampToken(this.params);\n return j.getContentInfoEncodedHex();\n };\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.tsp.SimpleTSAAdapter, KJUR.asn1.tsp.AbstractTSAAdapter);\nKJUR.asn1.tsp.FixedTSAAdapter = function (e) {\n var d = KJUR,\n c = d.asn1,\n a = c.tsp,\n b = d.crypto.Util.hashHex;\n a.FixedTSAAdapter.superclass.constructor.call(this);\n this.params = null;\n this.getTSTHex = function (g, f) {\n var h = b(g, f);\n this.params.econtent.content.messageImprint = {\n alg: f,\n hash: h\n };\n var i = new a.TimeStampToken(this.params);\n return i.getContentInfoEncodedHex();\n };\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.tsp.FixedTSAAdapter, KJUR.asn1.tsp.AbstractTSAAdapter);\nKJUR.asn1.tsp.TSPUtil = new function () {}();\nKJUR.asn1.tsp.TSPUtil.newTimeStampToken = function (a) {\n return new KJUR.asn1.tsp.TimeStampToken(a);\n};\nKJUR.asn1.tsp.TSPUtil.parseTimeStampReq = function (a) {\n var b = new KJUR.asn1.tsp.TSPParser();\n return b.getTimeStampReq(a);\n};\nKJUR.asn1.tsp.TSPUtil.parseMessageImprint = function (a) {\n var b = new KJUR.asn1.tsp.TSPParser();\n return b.getMessageImprint(a);\n};\nKJUR.asn1.tsp.TSPParser = function () {\n var e = Error,\n a = X509,\n f = new a(),\n k = ASN1HEX,\n g = k.getV,\n b = k.getTLV,\n d = k.getIdxbyList,\n c = k.getTLVbyListEx,\n i = k.getChildIdx;\n var j = [\"granted\", \"grantedWithMods\", \"rejection\", \"waiting\", \"revocationWarning\", \"revocationNotification\"];\n var h = {\n 0: \"badAlg\",\n 2: \"badRequest\",\n 5: \"badDataFormat\",\n 14: \"timeNotAvailable\",\n 15: \"unacceptedPolicy\",\n 16: \"unacceptedExtension\",\n 17: \"addInfoNotAvailable\",\n 25: \"systemFailure\"\n };\n this.getResponse = function (n) {\n var l = i(n, 0);\n if (l.length == 1) {\n return this.getPKIStatusInfo(b(n, l[0]));\n } else {\n if (l.length > 1) {\n var o = this.getPKIStatusInfo(b(n, l[0]));\n var m = b(n, l[1]);\n var p = this.getToken(m);\n p.statusinfo = o;\n return p;\n }\n }\n };\n this.getToken = function (m) {\n var l = new KJUR.asn1.cms.CMSParser();\n var n = l.getCMSSignedData(m);\n this.setTSTInfo(n);\n return n;\n };\n this.setTSTInfo = function (l) {\n var o = l.econtent;\n if (o.type == \"tstinfo\") {\n var n = o.content.hex;\n var m = this.getTSTInfo(n);\n o.content = m;\n }\n };\n this.getTSTInfo = function (r) {\n var x = {};\n var s = i(r, 0);\n var p = g(r, s[1]);\n x.policy = hextooid(p);\n var o = b(r, s[2]);\n x.messageImprint = this.getMessageImprint(o);\n var u = g(r, s[3]);\n x.serial = {\n hex: u\n };\n var y = g(r, s[4]);\n x.genTime = {\n str: hextoutf8(y)\n };\n var q = 0;\n if (s.length > 5 && r.substr(s[5], 2) == \"30\") {\n var v = b(r, s[5]);\n x.accuracy = this.getAccuracy(v);\n q++;\n }\n if (s.length > 5 + q && r.substr(s[5 + q], 2) == \"01\") {\n var z = g(r, s[5 + q]);\n if (z == \"ff\") {\n x.ordering = true;\n }\n q++;\n }\n if (s.length > 5 + q && r.substr(s[5 + q], 2) == \"02\") {\n var n = g(r, s[5 + q]);\n x.nonce = {\n hex: n\n };\n q++;\n }\n if (s.length > 5 + q && r.substr(s[5 + q], 2) == \"a0\") {\n var m = b(r, s[5 + q]);\n m = \"30\" + m.substr(2);\n pGeneralNames = f.getGeneralNames(m);\n var t = pGeneralNames[0].dn;\n x.tsa = t;\n q++;\n }\n if (s.length > 5 + q && r.substr(s[5 + q], 2) == \"a1\") {\n var l = b(r, s[5 + q]);\n l = \"30\" + l.substr(2);\n var w = f.getExtParamArray(l);\n x.ext = w;\n q++;\n }\n return x;\n };\n this.getAccuracy = function (q) {\n var r = {};\n var o = i(q, 0);\n for (var p = 0; p < o.length; p++) {\n var m = q.substr(o[p], 2);\n var l = g(q, o[p]);\n var n = parseInt(l, 16);\n if (m == \"02\") {\n r.seconds = n;\n } else {\n if (m == \"80\") {\n r.millis = n;\n } else {\n if (m == \"81\") {\n r.micros = n;\n }\n }\n }\n }\n return r;\n };\n this.getMessageImprint = function (n) {\n if (n.substr(0, 2) != \"30\") {\n throw new Error(\"head of messageImprint hex shall be x30\");\n }\n var s = {};\n var l = i(n, 0);\n var t = d(n, 0, [0, 0]);\n var o = g(n, t);\n var p = k.hextooidstr(o);\n var r = KJUR.asn1.x509.OID.oid2name(p);\n if (r == \"\") {\n throw new Error(\"hashAlg name undefined: \" + p);\n }\n var m = r;\n var q = d(n, 0, [1]);\n s.alg = m;\n s.hash = g(n, q);\n return s;\n };\n this.getPKIStatusInfo = function (o) {\n var t = {};\n var r = i(o, 0);\n var n = 0;\n try {\n var l = g(o, r[0]);\n var p = parseInt(l, 16);\n t.status = j[p];\n } catch (s) {}\n if (r.length > 1 && o.substr(r[1], 2) == \"30\") {\n var m = b(o, r[1]);\n t.statusstr = this.getPKIFreeText(m);\n n++;\n }\n if (r.length > n && o.substr(r[1 + n], 2) == \"03\") {\n var q = b(o, r[1 + n]);\n t.failinfo = this.getPKIFailureInfo(q);\n }\n return t;\n };\n this.getPKIFreeText = function (n) {\n var o = [];\n var l = i(n, 0);\n for (var m = 0; m < l.length; m++) {\n o.push(k.getString(n, l[m]));\n }\n return o;\n };\n this.getPKIFailureInfo = function (l) {\n var m = k.getInt(l, 0);\n if (h[m] != undefined) {\n return h[m];\n } else {\n return m;\n }\n };\n this.getTimeStampReq = function (q) {\n var p = {};\n p.certreq = false;\n var s = i(q, 0);\n if (s.length < 2) {\n throw new Error(\"TimeStampReq must have at least 2 items\");\n }\n var n = b(q, s[1]);\n p.messageImprint = KJUR.asn1.tsp.TSPUtil.parseMessageImprint(n);\n for (var o = 2; o < s.length; o++) {\n var m = s[o];\n var l = q.substr(m, 2);\n if (l == \"06\") {\n var r = g(q, m);\n p.policy = k.hextooidstr(r);\n }\n if (l == \"02\") {\n p.nonce = g(q, m);\n }\n if (l == \"01\") {\n p.certreq = true;\n }\n }\n return p;\n };\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nif (typeof KJUR.asn1.cades == \"undefined\" || !KJUR.asn1.cades) {\n KJUR.asn1.cades = {};\n}\nKJUR.asn1.cades.SignaturePolicyIdentifier = function (e) {\n var c = KJUR,\n b = c.asn1,\n a = b.cades,\n d = a.SignaturePolicyId;\n a.SignaturePolicyIdentifier.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.16.2.15\";\n this.params = null;\n this.getValueArray = function () {\n return [new d(this.params)];\n };\n this.setByParam = function (f) {\n this.params = f;\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cades.SignaturePolicyIdentifier, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cades.SignaturePolicyId = function (e) {\n var a = KJUR,\n g = a.asn1,\n f = g.DERSequence,\n i = g.DERObjectIdentifier,\n d = g.x509,\n j = d.AlgorithmIdentifier,\n c = g.cades,\n h = c.SignaturePolicyId,\n b = c.OtherHashAlgAndValue;\n h.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var m = this.params;\n var k = [];\n k.push(new i(m.oid));\n k.push(new b(m));\n var l = new f({\n array: k\n });\n return l.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (k) {\n this.params = k;\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cades.SignaturePolicyId, KJUR.asn1.ASN1Object);\nKJUR.asn1.cades.OtherHashAlgAndValue = function (e) {\n var h = Error,\n a = KJUR,\n g = a.asn1,\n f = g.DERSequence,\n i = g.DEROctetString,\n d = g.x509,\n j = d.AlgorithmIdentifier,\n c = g.cades,\n b = c.OtherHashAlgAndValue;\n b.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var o = this.params;\n if (o.alg == undefined) {\n throw new h(\"property 'alg' not specified\");\n }\n if (o.hash == undefined && o.cert == undefined) {\n throw new h(\"property 'hash' nor 'cert' not specified\");\n }\n var m = null;\n if (o.hash != undefined) {\n m = o.hash;\n } else {\n if (o.cert != undefined) {\n if (typeof o.cert != \"string\") {\n throw new h(\"cert not string\");\n }\n var n = o.cert;\n if (o.cert.indexOf(\"-----BEGIN\") != -1) {\n n = pemtohex(o.cert);\n }\n m = KJUR.crypto.Util.hashHex(n, o.alg);\n }\n }\n var k = [];\n k.push(new j({\n name: o.alg\n }));\n k.push(new i({\n hex: m\n }));\n var l = new f({\n array: k\n });\n return l.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cades.OtherHashAlgAndValue, KJUR.asn1.ASN1Object);\nKJUR.asn1.cades.OtherHashValue = function (g) {\n KJUR.asn1.cades.OtherHashValue.superclass.constructor.call(this);\n var d = Error,\n c = KJUR,\n f = c.lang.String.isHex,\n b = c.asn1,\n e = b.DEROctetString,\n a = c.crypto.Util.hashHex;\n this.params = null;\n this.tohex = function () {\n var j = this.params;\n if (j.hash == undefined && j.cert == undefined) {\n throw new d(\"hash or cert not specified\");\n }\n var h = null;\n if (j.hash != undefined) {\n h = j.hash;\n } else {\n if (j.cert != undefined) {\n if (typeof j.cert != \"string\") {\n throw new d(\"cert not string\");\n }\n var i = j.cert;\n if (j.cert.indexOf(\"-----BEGIN\") != -1) {\n i = pemtohex(j.cert);\n }\n h = KJUR.crypto.Util.hashHex(i, \"sha1\");\n }\n }\n return new e({\n hex: h\n }).tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cades.OtherHashValue, KJUR.asn1.ASN1Object);\nKJUR.asn1.cades.SignatureTimeStamp = function (h) {\n var d = Error,\n c = KJUR,\n f = c.lang.String.isHex,\n b = c.asn1,\n e = b.ASN1Object,\n g = b.x509,\n a = b.cades;\n a.SignatureTimeStamp.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.16.2.14\";\n this.params = null;\n this.getValueArray = function () {\n var l = this.params;\n if (l.tst != undefined) {\n if (f(l.tst)) {\n var j = new e();\n j.hTLV = l.tst;\n return [j];\n } else {\n if (l.tst instanceof e) {\n return [l.tst];\n } else {\n throw new d(\"params.tst has wrong value\");\n }\n }\n } else {\n if (l.res != undefined) {\n var k = l.res;\n if (k instanceof e) {\n k = k.tohex();\n }\n if (typeof k != \"string\" || !f(k)) {\n throw new d(\"params.res has wrong value\");\n }\n var i = ASN1HEX.getTLVbyList(k, 0, [1]);\n var j = new e();\n j.hTLV = l.tst;\n return [j];\n }\n }\n };\n if (h != null) {\n this.setByParam(h);\n }\n};\nextendClass(KJUR.asn1.cades.SignatureTimeStamp, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cades.CompleteCertificateRefs = function (h) {\n var f = Error,\n e = KJUR,\n d = e.asn1,\n b = d.DERSequence,\n c = d.cades,\n a = c.OtherCertID,\n g = e.lang.String.isHex;\n c.CompleteCertificateRefs.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.16.2.21\";\n this.params = null;\n this.getValueArray = function () {\n var o = this.params;\n var k = [];\n for (var m = 0; m < o.array.length; m++) {\n var n = o.array[m];\n if (typeof n == \"string\") {\n if (n.indexOf(\"-----BEGIN\") != -1) {\n n = {\n cert: n\n };\n } else {\n if (g(n)) {\n n = {\n hash: n\n };\n } else {\n throw new f(\"unsupported value: \" + n);\n }\n }\n }\n if (o.alg != undefined && n.alg == undefined) {\n n.alg = o.alg;\n }\n if (o.hasis != undefined && n.hasis == undefined) {\n n.hasis = o.hasis;\n }\n var j = new a(n);\n k.push(j);\n }\n var l = new b({\n array: k\n });\n return [l];\n };\n if (h != undefined) {\n this.setByParam(h);\n }\n};\nextendClass(KJUR.asn1.cades.CompleteCertificateRefs, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cades.OtherCertID = function (e) {\n var a = KJUR,\n h = a.asn1,\n f = h.DERSequence,\n i = h.cms,\n g = i.IssuerSerial,\n c = h.cades,\n d = c.OtherHashValue,\n b = c.OtherHashAlgAndValue;\n c.OtherCertID.superclass.constructor.call(this);\n this.params = e;\n this.tohex = function () {\n var n = this.params;\n if (typeof n == \"string\") {\n if (n.indexOf(\"-----BEGIN\") != -1) {\n n = {\n cert: n\n };\n } else {\n if (_isHex(n)) {\n n = {\n hash: n\n };\n }\n }\n }\n var j = [];\n var m = null;\n if (n.alg != undefined) {\n m = new b(n);\n } else {\n m = new d(n);\n }\n j.push(m);\n if (n.cert != undefined && n.hasis == true || n.issuer != undefined && n.serial != undefined) {\n var l = new g(n);\n j.push(l);\n }\n var k = new f({\n array: j\n });\n return k.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cades.OtherCertID, KJUR.asn1.ASN1Object);\nKJUR.asn1.cades.OtherHash = function (g) {\n var i = Error,\n a = KJUR,\n h = a.asn1,\n j = h.cms,\n c = h.cades,\n b = c.OtherHashAlgAndValue,\n e = c.OtherHashValue,\n d = a.crypto.Util.hashHex,\n f = a.lang.String.isHex;\n c.OtherHash.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var l = this.params;\n if (typeof l == \"string\") {\n if (l.indexOf(\"-----BEGIN\") != -1) {\n l = {\n cert: l\n };\n } else {\n if (f(l)) {\n l = {\n hash: l\n };\n }\n }\n }\n var k = null;\n if (l.alg != undefined) {\n k = new b(l);\n } else {\n k = new e(l);\n }\n return k.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cades.OtherHash, KJUR.asn1.ASN1Object);\nKJUR.asn1.cades.CAdESUtil = new function () {}();\nKJUR.asn1.cades.CAdESUtil.parseSignedDataForAddingUnsigned = function (a) {\n var c = new KJUR.asn1.cms.CMSParser();\n var b = c.getCMSSignedData(a);\n return b;\n};\nKJUR.asn1.cades.CAdESUtil.parseSignerInfoForAddingUnsigned = function (g, q, c) {\n var p = ASN1HEX,\n s = p.getChildIdx,\n a = p.getTLV,\n l = p.getV,\n v = KJUR,\n h = v.asn1,\n n = h.ASN1Object,\n j = h.cms,\n k = j.AttributeList,\n w = j.SignerInfo;\n var o = {};\n var t = s(g, q);\n if (t.length != 6) {\n throw \"not supported items for SignerInfo (!=6)\";\n }\n var d = t.shift();\n o.version = a(g, d);\n var e = t.shift();\n o.si = a(g, e);\n var m = t.shift();\n o.digalg = a(g, m);\n var f = t.shift();\n o.sattrs = a(g, f);\n var i = t.shift();\n o.sigalg = a(g, i);\n var b = t.shift();\n o.sig = a(g, b);\n o.sigval = l(g, b);\n var u = null;\n o.obj = new w();\n u = new n();\n u.hTLV = o.version;\n o.obj.dCMSVersion = u;\n u = new n();\n u.hTLV = o.si;\n o.obj.dSignerIdentifier = u;\n u = new n();\n u.hTLV = o.digalg;\n o.obj.dDigestAlgorithm = u;\n u = new n();\n u.hTLV = o.sattrs;\n o.obj.dSignedAttrs = u;\n u = new n();\n u.hTLV = o.sigalg;\n o.obj.dSigAlg = u;\n u = new n();\n u.hTLV = o.sig;\n o.obj.dSig = u;\n o.obj.dUnsignedAttrs = new k();\n return o;\n};\nif (typeof KJUR.asn1.csr == \"undefined\" || !KJUR.asn1.csr) {\n KJUR.asn1.csr = {};\n}\nKJUR.asn1.csr.CertificationRequest = function (g) {\n var d = KJUR,\n c = d.asn1,\n e = c.DERBitString,\n b = c.DERSequence,\n a = c.csr,\n f = c.x509,\n h = a.CertificationRequestInfo;\n a.CertificationRequest.superclass.constructor.call(this);\n this.setByParam = function (i) {\n this.params = i;\n };\n this.sign = function () {\n var j = new h(this.params).tohex();\n var k = new KJUR.crypto.Signature({\n alg: this.params.sigalg\n });\n k.init(this.params.sbjprvkey);\n k.updateHex(j);\n var i = k.sign();\n this.params.sighex = i;\n };\n this.getPEM = function () {\n return hextopem(this.tohex(), \"CERTIFICATE REQUEST\");\n };\n this.tohex = function () {\n var l = this.params;\n var j = new KJUR.asn1.csr.CertificationRequestInfo(this.params);\n var m = new KJUR.asn1.x509.AlgorithmIdentifier({\n name: l.sigalg\n });\n if (l.sighex == undefined && l.sbjprvkey != undefined) {\n this.sign();\n }\n if (l.sighex == undefined) {\n throw new Error(\"sighex or sbjprvkey parameter not defined\");\n }\n var k = new e({\n hex: \"00\" + l.sighex\n });\n var i = new b({\n array: [j, m, k]\n });\n return i.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g !== undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.csr.CertificationRequest, KJUR.asn1.ASN1Object);\nKJUR.asn1.csr.CertificationRequestInfo = function (f) {\n var b = KJUR,\n j = b.asn1,\n c = j.DERBitString,\n g = j.DERSequence,\n i = j.DERInteger,\n p = j.DERUTF8String,\n d = j.DERTaggedObject,\n h = j.ASN1Util.newObject,\n n = j.csr,\n e = j.x509,\n a = e.X500Name,\n l = e.Extensions,\n o = e.SubjectPublicKeyInfo,\n k = n.AttributeList;\n n.CertificationRequestInfo.superclass.constructor.call(this);\n this.params = null;\n this.setByParam = function (q) {\n if (q != undefined) {\n this.params = q;\n }\n };\n this.tohex = function () {\n var v = this.params;\n var r = [];\n r.push(new i({\n \"int\": 0\n }));\n r.push(new a(v.subject));\n r.push(new o(KEYUTIL.getKey(v.sbjpubkey)));\n if (v.attrs != undefined) {\n var u = m(v.attrs);\n var t = h({\n tag: {\n tage: \"a0\",\n obj: u\n }\n });\n r.push(t);\n } else {\n if (v.extreq != undefined) {\n var q = new l(v.extreq);\n var t = h({\n tag: {\n tage: \"a0\",\n obj: {\n seq: [{\n oid: \"1.2.840.113549.1.9.14\"\n }, {\n set: [q]\n }]\n }\n }\n });\n r.push(t);\n } else {\n r.push(new d({\n tag: \"a0\",\n explicit: false,\n obj: new p({\n str: \"\"\n })\n }));\n }\n }\n var s = new g({\n array: r\n });\n return s.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n function m(s) {\n var w = Error,\n v = KJUR.asn1.x509.Extensions;\n var y = [];\n for (var u = 0; u < s.length; u++) {\n var r = s[u];\n var x = r.attr;\n if (x == \"extensionRequest\") {\n var t = new v(r.ext);\n var q = {\n seq: [{\n oid: \"1.2.840.113549.1.9.14\"\n }, {\n set: [t]\n }]\n };\n y.push(q);\n } else {\n if (x == \"unstructuredName\") {\n var q = {\n seq: [{\n oid: \"1.2.840.113549.1.9.2\"\n }, {\n set: r.names\n }]\n };\n y.push(q);\n } else {\n if (x == \"challengePassword\") {\n var q = {\n seq: [{\n oid: \"1.2.840.113549.1.9.7\"\n }, {\n set: [{\n utf8str: r.password\n }]\n }]\n };\n y.push(q);\n } else {\n throw new w(\"unknown CSR attribute\");\n }\n }\n }\n }\n return {\n set: y\n };\n }\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.csr.CertificationRequestInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.csr.AttributeList = function (b) {\n function a(c) {}\n};\nextendClass(KJUR.asn1.csr.AttributeList, KJUR.asn1.ASN1Object);\nKJUR.asn1.csr.CSRUtil = new function () {}();\nKJUR.asn1.csr.CSRUtil.newCSRPEM = function (e) {\n var b = KEYUTIL,\n a = KJUR.asn1.csr;\n var c = new a.CertificationRequest(e);\n var d = c.getPEM();\n return d;\n};\nKJUR.asn1.csr.CSRUtil.getParam = function (d, a) {\n var m = ASN1HEX,\n i = m.getV,\n j = m.getIdxbyList,\n b = m.getTLVbyList,\n o = m.getTLVbyListEx,\n n = m.getVbyListEx;\n var l = function (u) {\n var t = j(u, 0, [0, 3, 0, 0], \"06\");\n if (i(u, t) != \"2a864886f70d01090e\") {\n return null;\n }\n return b(u, 0, [0, 3, 0, 1, 0], \"30\");\n };\n var g = {};\n if (d.indexOf(\"-----BEGIN CERTIFICATE REQUEST\") == -1) {\n throw new Error(\"argument is not PEM file\");\n }\n var e = pemtohex(d, \"CERTIFICATE REQUEST\");\n if (a) {\n g.tbs = b(e, 0, [0]);\n }\n try {\n var p = o(e, 0, [0, 1]);\n if (p == \"3000\") {\n g.subject = {};\n } else {\n var f = new X509();\n g.subject = f.getX500Name(p);\n }\n } catch (q) {}\n var k = o(e, 0, [0, 2]);\n var r = KEYUTIL.getKey(k, null, \"pkcs8pub\");\n g.sbjpubkey = KEYUTIL.getPEM(r, \"PKCS8PUB\");\n var c = l(e);\n var f = new X509();\n if (c != null) {\n g.extreq = f.getExtParamArray(c);\n }\n try {\n var h = o(e, 0, [1], \"30\");\n var f = new X509();\n g.sigalg = f.getAlgorithmIdentifierName(h);\n } catch (q) {}\n try {\n var s = n(e, 0, [2]);\n g.sighex = s;\n } catch (q) {}\n return g;\n};\nKJUR.asn1.csr.CSRUtil.verifySignature = function (b) {\n try {\n var c = null;\n if (typeof b == \"string\" && b.indexOf(\"-----BEGIN CERTIFICATE REQUEST\") != -1) {\n c = KJUR.asn1.csr.CSRUtil.getParam(b, true);\n } else {\n if (typeof b == \"object\" && b.sbjpubkey != undefined && b.sigalg != undefined && b.sighex != undefined && b.tbs != undefined) {\n c = b;\n }\n }\n if (c == null) {\n return false;\n }\n var d = new KJUR.crypto.Signature({\n alg: c.sigalg\n });\n d.init(c.sbjpubkey);\n d.updateHex(c.tbs);\n return d.verify(c.sighex);\n } catch (a) {\n alert(a);\n return false;\n }\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nif (typeof KJUR.asn1.ocsp == \"undefined\" || !KJUR.asn1.ocsp) {\n KJUR.asn1.ocsp = {};\n}\nKJUR.asn1.ocsp.DEFAULT_HASH = \"sha1\";\nKJUR.asn1.ocsp.OCSPResponse = function (e) {\n KJUR.asn1.ocsp.OCSPResponse.superclass.constructor.call(this);\n var a = KJUR.asn1.DEREnumerated,\n b = KJUR.asn1.ASN1Util.newObject,\n c = KJUR.asn1.ocsp.ResponseBytes;\n var d = [\"successful\", \"malformedRequest\", \"internalError\", \"tryLater\", \"_not_used_\", \"sigRequired\", \"unauthorized\"];\n this.params = null;\n this._getStatusCode = function () {\n var f = this.params.resstatus;\n if (typeof f == \"number\") {\n return f;\n }\n if (typeof f != \"string\") {\n return -1;\n }\n return d.indexOf(f);\n };\n this.setByParam = function (f) {\n this.params = f;\n };\n this.tohex = function () {\n var h = this.params;\n var g = this._getStatusCode();\n if (g == -1) {\n throw new Error(\"responseStatus not supported: \" + h.resstatus);\n }\n if (g != 0) {\n return b({\n seq: [{\n \"enum\": {\n \"int\": g\n }\n }]\n }).tohex();\n }\n var f = new c(h);\n return b({\n seq: [{\n \"enum\": {\n \"int\": 0\n }\n }, {\n tag: {\n tag: \"a0\",\n explicit: true,\n obj: f\n }\n }]\n }).tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.ocsp.OCSPResponse, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.ResponseBytes = function (e) {\n KJUR.asn1.ocsp.ResponseBytes.superclass.constructor.call(this);\n var b = KJUR.asn1,\n a = b.DERSequence,\n f = b.DERObjectIdentifier,\n c = b.DEROctetString,\n d = b.ocsp.BasicOCSPResponse;\n this.params = null;\n this.setByParam = function (g) {\n this.params = g;\n };\n this.tohex = function () {\n var j = this.params;\n if (j.restype != \"ocspBasic\") {\n throw new Error(\"not supported responseType: \" + j.restype);\n }\n var i = new d(j);\n var g = [];\n g.push(new f({\n name: \"ocspBasic\"\n }));\n g.push(new c({\n hex: i.tohex()\n }));\n var h = new a({\n array: g\n });\n return h.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.ocsp.ResponseBytes, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.BasicOCSPResponse = function (d) {\n KJUR.asn1.ocsp.BasicOCSPResponse.superclass.constructor.call(this);\n var i = Error,\n g = KJUR.asn1,\n j = g.ASN1Object,\n e = g.DERSequence,\n f = g.DERGeneralizedTime,\n c = g.DERTaggedObject,\n b = g.DERBitString,\n h = g.x509.Extensions,\n k = g.x509.AlgorithmIdentifier,\n l = g.ocsp,\n a = l.ResponderID;\n _SingleResponseList = l.SingleResponseList, _ResponseData = l.ResponseData;\n this.params = null;\n this.setByParam = function (m) {\n this.params = m;\n };\n this.sign = function () {\n var o = this.params;\n var m = o.tbsresp.tohex();\n var n = new KJUR.crypto.Signature({\n alg: o.sigalg\n });\n n.init(o.reskey);\n n.updateHex(m);\n o.sighex = n.sign();\n };\n this.tohex = function () {\n var t = this.params;\n if (t.tbsresp == undefined) {\n t.tbsresp = new _ResponseData(t);\n }\n if (t.sighex == undefined && t.reskey != undefined) {\n this.sign();\n }\n var n = [];\n n.push(t.tbsresp);\n n.push(new k({\n name: t.sigalg\n }));\n n.push(new b({\n hex: \"00\" + t.sighex\n }));\n if (t.certs != undefined && t.certs.length != undefined) {\n var m = [];\n for (var q = 0; q < t.certs.length; q++) {\n var s = t.certs[q];\n var r = null;\n if (ASN1HEX.isASN1HEX(s)) {\n r = s;\n } else {\n if (s.match(/-----BEGIN/)) {\n r = pemtohex(s);\n } else {\n throw new i(\"certs[\" + q + \"] not hex or PEM\");\n }\n }\n m.push(new j({\n tlv: r\n }));\n }\n var p = new e({\n array: m\n });\n n.push(new c({\n tag: \"a0\",\n explicit: true,\n obj: p\n }));\n }\n var o = new e({\n array: n\n });\n return o.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d !== undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.ocsp.BasicOCSPResponse, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.ResponseData = function (c) {\n KJUR.asn1.ocsp.ResponseData.superclass.constructor.call(this);\n var h = Error,\n f = KJUR.asn1,\n d = f.DERSequence,\n e = f.DERGeneralizedTime,\n b = f.DERTaggedObject,\n g = f.x509.Extensions,\n i = f.ocsp,\n a = i.ResponderID;\n _SingleResponseList = i.SingleResponseList;\n this.params = null;\n this.tohex = function () {\n var m = this.params;\n if (m.respid != undefined) {\n new h(\"respid not specified\");\n }\n if (m.prodat != undefined) {\n new h(\"prodat not specified\");\n }\n if (m.array != undefined) {\n new h(\"array not specified\");\n }\n var j = [];\n j.push(new a(m.respid));\n j.push(new e(m.prodat));\n j.push(new _SingleResponseList(m.array));\n if (m.ext != undefined) {\n var l = new g(m.ext);\n j.push(new b({\n tag: \"a1\",\n explicit: true,\n obj: l\n }));\n }\n var k = new d({\n array: j\n });\n return k.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (j) {\n this.params = j;\n };\n if (c !== undefined) {\n this.setByParam(c);\n }\n};\nextendClass(KJUR.asn1.ocsp.ResponseData, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.ResponderID = function (g) {\n KJUR.asn1.ocsp.ResponderID.superclass.constructor.call(this);\n var d = KJUR,\n c = d.asn1,\n b = c.ASN1Util.newObject,\n f = c.x509.X500Name,\n e = d.lang.String.isHex,\n a = Error;\n this.params = null;\n this.tohex = function () {\n var m = this.params;\n if (m.key != undefined) {\n var l = null;\n if (typeof m.key == \"string\") {\n if (e(m.key)) {\n l = m.key;\n }\n if (m.key.match(/-----BEGIN CERTIFICATE/)) {\n var h = new X509(m.key);\n var k = h.getExtSubjectKeyIdentifier();\n if (k != null) {\n l = k.kid.hex;\n }\n }\n } else {\n if (m.key instanceof X509) {\n var k = m.key.getExtSubjectKeyIdentifier();\n if (k != null) {\n l = k.kid.hex;\n }\n }\n }\n if (l == null) {\n throw new a(\"wrong key member value\");\n }\n var j = b({\n tag: {\n tag: \"a2\",\n explicit: true,\n obj: {\n octstr: {\n hex: l\n }\n }\n }\n });\n return j.tohex();\n } else {\n if (m.name != undefined) {\n var i = null;\n if (typeof m.name == \"string\" && m.name.match(/-----BEGIN CERTIFICATE/)) {\n var h = new X509(m.name);\n i = h.getSubject();\n } else {\n if (m.name instanceof X509) {\n i = m.name.getSubject();\n } else {\n if (typeof m.name == \"object\" && (m.name.array != undefined || m.name.str != undefined)) {\n i = m.name;\n }\n }\n }\n if (i == null) {\n throw new a(\"wrong name member value\");\n }\n var j = b({\n tag: {\n tag: \"a1\",\n explicit: true,\n obj: new f(i)\n }\n });\n return j.tohex();\n }\n }\n throw new a(\"key or name not specified\");\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (h) {\n this.params = h;\n };\n if (g !== undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.ocsp.ResponderID, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.SingleResponseList = function (d) {\n KJUR.asn1.ocsp.SingleResponseList.superclass.constructor.call(this);\n var c = KJUR.asn1,\n b = c.DERSequence,\n a = c.ocsp.SingleResponse;\n this.params = null;\n this.tohex = function () {\n var h = this.params;\n if (typeof h != \"object\" || h.length == undefined) {\n throw new Error(\"params not specified properly\");\n }\n var e = [];\n for (var g = 0; g < h.length; g++) {\n e.push(new a(h[g]));\n }\n var f = new b({\n array: e\n });\n return f.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (e) {\n this.params = e;\n };\n if (d !== undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.ocsp.SingleResponseList, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.SingleResponse = function (e) {\n var k = Error,\n a = KJUR,\n i = a.asn1,\n f = i.DERSequence,\n g = i.DERGeneralizedTime,\n b = i.DERTaggedObject,\n l = i.ocsp,\n h = l.CertID,\n c = l.CertStatus,\n d = i.x509,\n j = d.Extensions;\n l.SingleResponse.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var q = this.params;\n var n = [];\n if (q.certid == undefined) {\n throw new k(\"certid unspecified\");\n }\n if (q.status == undefined) {\n throw new k(\"status unspecified\");\n }\n if (q.thisupdate == undefined) {\n throw new k(\"thisupdate unspecified\");\n }\n n.push(new h(q.certid));\n n.push(new c(q.status));\n n.push(new g(q.thisupdate));\n if (q.nextupdate != undefined) {\n var m = new g(q.nextupdate);\n n.push(new b({\n tag: \"a0\",\n explicit: true,\n obj: m\n }));\n }\n if (q.ext != undefined) {\n var p = new j(q.ext);\n n.push(new b({\n tag: \"a1\",\n explicit: true,\n obj: p\n }));\n }\n var o = new f({\n array: n\n });\n return o.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (m) {\n this.params = m;\n };\n if (e !== undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.ocsp.SingleResponse, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.CertID = function (e) {\n var b = KJUR,\n i = b.asn1,\n l = i.DEROctetString,\n h = i.DERInteger,\n f = i.DERSequence,\n d = i.x509,\n m = d.AlgorithmIdentifier,\n n = i.ocsp,\n k = n.DEFAULT_HASH,\n g = b.crypto,\n c = g.Util.hashHex,\n a = X509,\n o = ASN1HEX,\n j = o.getVbyList;\n n.CertID.superclass.constructor.call(this);\n this.DEFAULT_HASH = \"sha1\";\n this.params = null;\n this.setByValue = function (s, r, p, q) {\n if (q == undefined) {\n q = this.DEFAULT_HASH;\n }\n this.params = {\n alg: q,\n issname: s,\n isskey: r,\n sbjsn: p\n };\n };\n this.setByCert = function (p, q, r) {\n if (r == undefined) {\n r = this.DEFAULT_HASH;\n }\n this.params = {\n alg: r,\n issuerCert: p,\n subjectCert: q\n };\n };\n this.getParamByCerts = function (y, x, t) {\n if (t == undefined) {\n t = this.DEFAULT_HASH;\n }\n var q = new a(y);\n var v = new a(x);\n var s = c(q.getSubjectHex(), t);\n var u = q.getPublicKeyHex();\n var p = c(j(u, 0, [1], \"03\", true), t);\n var w = v.getSerialNumberHex();\n var r = {\n alg: t,\n issname: s,\n isskey: p,\n sbjsn: w\n };\n return r;\n };\n this.tohex = function () {\n if (typeof this.params != \"object\") {\n throw new Error(\"params not set\");\n }\n var s = this.params;\n var u, r, y, q;\n if (s.alg == undefined) {\n q = this.DEFAULT_HASH;\n } else {\n q = s.alg;\n }\n if (s.issuerCert != undefined && s.subjectCert != undefined) {\n var t = this.getParamByCerts(s.issuerCert, s.subjectCert, q);\n u = t.issname;\n r = t.isskey;\n y = t.sbjsn;\n } else {\n if (s.issname != undefined && s.isskey != undefined && s.sbjsn != undefined) {\n u = s.issname;\n r = s.isskey;\n y = s.sbjsn;\n } else {\n throw new Error(\"required param members not defined\");\n }\n }\n var A = new m({\n name: q\n });\n var v = new l({\n hex: u\n });\n var x = new l({\n hex: r\n });\n var w = new h({\n hex: y\n });\n var z = new f({\n array: [A, v, x, w]\n });\n this.hTLV = z.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.ocsp.CertID, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.CertStatus = function (a) {\n KJUR.asn1.ocsp.CertStatus.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var d = this.params;\n if (d.status == \"good\") {\n return \"8000\";\n }\n if (d.status == \"unknown\") {\n return \"8200\";\n }\n if (d.status == \"revoked\") {\n var c = [{\n gentime: {\n str: d.time\n }\n }];\n if (d.reason != undefined) {\n c.push({\n tag: {\n tag: \"a0\",\n explicit: true,\n obj: {\n \"enum\": {\n \"int\": d.reason\n }\n }\n }\n });\n }\n var b = {\n tag: \"a1\",\n explicit: false,\n obj: {\n seq: c\n }\n };\n return KJUR.asn1.ASN1Util.newObject({\n tag: b\n }).tohex();\n }\n throw new Error(\"bad status\");\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (b) {\n this.params = b;\n };\n if (a !== undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.ocsp.CertStatus, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.Request = function (f) {\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n d = b.ocsp;\n d.Request.superclass.constructor.call(this);\n this.dReqCert = null;\n this.dExt = null;\n this.tohex = function () {\n var g = [];\n if (this.dReqCert === null) {\n throw \"reqCert not set\";\n }\n g.push(this.dReqCert);\n var h = new a({\n array: g\n });\n this.hTLV = h.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (typeof f !== \"undefined\") {\n var e = new d.CertID(f);\n this.dReqCert = e;\n }\n};\nextendClass(KJUR.asn1.ocsp.Request, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.TBSRequest = function (e) {\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n d = b.ocsp;\n d.TBSRequest.superclass.constructor.call(this);\n this.version = 0;\n this.dRequestorName = null;\n this.dRequestList = [];\n this.dRequestExt = null;\n this.setRequestListByParam = function (h) {\n var f = [];\n for (var g = 0; g < h.length; g++) {\n var j = new d.Request(h[0]);\n f.push(j);\n }\n this.dRequestList = f;\n };\n this.tohex = function () {\n var f = [];\n if (this.version !== 0) {\n throw \"not supported version: \" + this.version;\n }\n if (this.dRequestorName !== null) {\n throw \"requestorName not supported\";\n }\n var h = new a({\n array: this.dRequestList\n });\n f.push(h);\n if (this.dRequestExt !== null) {\n throw \"requestExtensions not supported\";\n }\n var g = new a({\n array: f\n });\n this.hTLV = g.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n if (e.reqList !== undefined) {\n this.setRequestListByParam(e.reqList);\n }\n }\n};\nextendClass(KJUR.asn1.ocsp.TBSRequest, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.OCSPRequest = function (f) {\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n d = b.ocsp;\n d.OCSPRequest.superclass.constructor.call(this);\n this.dTbsRequest = null;\n this.dOptionalSignature = null;\n this.tohex = function () {\n var g = [];\n if (this.dTbsRequest !== null) {\n g.push(this.dTbsRequest);\n } else {\n throw \"tbsRequest not set\";\n }\n if (this.dOptionalSignature !== null) {\n throw \"optionalSignature not supported\";\n }\n var h = new a({\n array: g\n });\n this.hTLV = h.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n if (f.reqList !== undefined) {\n var e = new d.TBSRequest(f);\n this.dTbsRequest = e;\n }\n }\n};\nextendClass(KJUR.asn1.ocsp.OCSPRequest, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.OCSPUtil = {};\nKJUR.asn1.ocsp.OCSPUtil.getRequestHex = function (a, b, h) {\n var d = KJUR,\n c = d.asn1,\n e = c.ocsp;\n if (h === undefined) {\n h = e.DEFAULT_HASH;\n }\n var g = {\n alg: h,\n issuerCert: a,\n subjectCert: b\n };\n var f = new e.OCSPRequest({\n reqList: [g]\n });\n return f.tohex();\n};\nKJUR.asn1.ocsp.OCSPUtil.getOCSPResponseInfo = function (b) {\n var m = ASN1HEX,\n c = m.getVbyList,\n k = m.getVbyListEx,\n e = m.getIdxbyList,\n d = m.getIdxbyListEx,\n g = m.getV;\n var n = {};\n try {\n var j = k(b, 0, [0], \"0a\");\n n.responseStatus = parseInt(j, 16);\n } catch (f) {}\n if (n.responseStatus !== 0) {\n return n;\n }\n try {\n var i = e(b, 0, [1, 0, 1, 0, 0, 2, 0, 1]);\n if (b.substr(i, 2) === \"80\") {\n n.certStatus = \"good\";\n } else {\n if (b.substr(i, 2) === \"a1\") {\n n.certStatus = \"revoked\";\n n.revocationTime = hextoutf8(c(b, i, [0]));\n } else {\n if (b.substr(i, 2) === \"82\") {\n n.certStatus = \"unknown\";\n }\n }\n }\n } catch (f) {}\n try {\n var a = e(b, 0, [1, 0, 1, 0, 0, 2, 0, 2]);\n n.thisUpdate = hextoutf8(g(b, a));\n } catch (f) {}\n try {\n var l = e(b, 0, [1, 0, 1, 0, 0, 2, 0, 3]);\n if (b.substr(l, 2) === \"a0\") {\n n.nextUpdate = hextoutf8(c(b, l, [0]));\n }\n } catch (f) {}\n return n;\n};\nKJUR.asn1.ocsp.OCSPParser = function () {\n var g = Error,\n a = X509,\n h = new a(),\n l = ASN1HEX,\n i = l.getV,\n b = l.getTLV,\n f = l.getIdxbyList,\n e = l.getVbyList,\n c = l.getTLVbyList,\n k = l.getVbyListEx,\n d = l.getTLVbyListEx,\n j = l.getChildIdx;\n this.getOCSPRequest = function (o) {\n var n = j(o, 0);\n if (n.length != 1 && n.length != 2) {\n throw new g(\"wrong number elements: \" + n.length);\n }\n var m = this.getTBSRequest(b(o, n[0]));\n return m;\n };\n this.getTBSRequest = function (o) {\n var m = {};\n var n = d(o, 0, [0], \"30\");\n m.array = this.getRequestList(n);\n var p = d(o, 0, [\"[2]\", 0], \"30\");\n if (p != null) {\n m.ext = h.getExtParamArray(p);\n }\n return m;\n };\n this.getRequestList = function (p) {\n var m = [];\n var n = j(p, 0);\n for (var o = 0; o < n.length; o++) {\n var p = b(p, n[o]);\n m.push(this.getRequest(p));\n }\n return m;\n };\n this.getRequest = function (n) {\n var m = j(n, 0);\n if (m.length != 1 && m.length != 2) {\n throw new g(\"wrong number elements: \" + m.length);\n }\n var p = this.getCertID(b(n, m[0]));\n if (m.length == 2) {\n var o = f(n, 0, [1, 0]);\n p.ext = h.getExtParamArray(b(n, o));\n }\n return p;\n };\n this.getCertID = function (p) {\n var o = j(p, 0);\n if (o.length != 4) {\n throw new g(\"wrong number elements: \" + o.length);\n }\n var n = new a();\n var m = {};\n m.alg = n.getAlgorithmIdentifierName(b(p, o[0]));\n m.issname = i(p, o[1]);\n m.isskey = i(p, o[2]);\n m.sbjsn = i(p, o[3]);\n return m;\n };\n this.getOCSPResponse = function (r) {\n var o = j(r, 0);\n var m;\n var q = i(r, o[0]);\n var p = parseInt(q);\n if (o.length == 1) {\n return {\n resstatus: p\n };\n }\n var n = c(r, 0, [1, 0]);\n m = this.getResponseBytes(n);\n m.resstatus = p;\n return m;\n };\n this.getResponseBytes = function (p) {\n var o = j(p, 0);\n var n;\n var q = c(p, 0, [1, 0]);\n n = this.getBasicOCSPResponse(q);\n var m = i(p, o[0]);\n n.restype = KJUR.asn1.x509.OID.oid2name(hextooid(m));\n return n;\n };\n this.getBasicOCSPResponse = function (q) {\n var t = j(q, 0);\n var v;\n v = this.getResponseData(b(q, t[0]));\n var u = new X509();\n v.alg = u.getAlgorithmIdentifierName(b(q, t[1]));\n var n = i(q, t[2]);\n v.sighex = n.substr(2);\n var m = k(q, 0, [\"[0]\"]);\n if (m != null) {\n var r = j(m, 0);\n var o = [];\n for (var p = 0; p < r.length; p++) {\n var s = b(m, r[p]);\n o.push(s);\n }\n v.certs = o;\n }\n return v;\n };\n this.getResponseData = function (q) {\n var p = j(q, 0);\n var r = p.length;\n var o = {};\n var n = 0;\n if (q.substr(p[0], 2) == \"a0\") {\n n++;\n }\n o.respid = this.getResponderID(b(q, p[n++]));\n var t = i(q, p[n++]);\n o.prodat = hextoutf8(t);\n o.array = this.getSingleResponseList(b(q, p[n++]));\n if (q.substr(p[r - 1], 2) == \"a1\") {\n var s = c(q, p[r - 1], [0]);\n var m = new X509();\n o.ext = m.getExtParamArray(s);\n }\n return o;\n };\n this.getResponderID = function (o) {\n var n = {};\n if (o.substr(0, 2) == \"a2\") {\n var p = e(o, 0, [0]);\n n.key = p;\n }\n if (o.substr(0, 2) == \"a1\") {\n var q = c(o, 0, [0]);\n var m = new X509();\n n.name = m.getX500Name(q);\n }\n return n;\n };\n this.getSingleResponseList = function (q) {\n var n = j(q, 0);\n var m = [];\n for (var o = 0; o < n.length; o++) {\n var r = this.getSingleResponse(b(q, n[o]));\n m.push(r);\n }\n return m;\n };\n this.getSingleResponse = function (p) {\n var t = j(p, 0);\n var v = {};\n var r = this.getCertID(b(p, t[0]));\n v.certid = r;\n var u = this.getCertStatus(b(p, t[1]));\n v.status = u;\n if (p.substr(t[2], 2) == \"18\") {\n var q = i(p, t[2]);\n v.thisupdate = hextoutf8(q);\n }\n for (var o = 3; o < t.length; o++) {\n if (p.substr(t[o], 2) == \"a0\") {\n var m = e(p, t[o], [0], \"18\");\n v.nextupdate = hextoutf8(m);\n }\n if (p.substr(t[o], 2) == \"a1\") {\n var s = new X509();\n var n = c(p, 0, [o, 0]);\n v.ext = s.getExtParamArray(n);\n }\n }\n return v;\n };\n this.getCertStatus = function (p) {\n var m = {};\n if (p == \"8000\") {\n return {\n status: \"good\"\n };\n }\n if (p == \"8200\") {\n return {\n status: \"unknown\"\n };\n }\n if (p.substr(0, 2) == \"a1\") {\n m.status = \"revoked\";\n var o = e(p, 0, [0]);\n var n = hextoutf8(o);\n m.time = n;\n }\n return m;\n };\n};\nvar KJUR;\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.lang == \"undefined\" || !KJUR.lang) {\n KJUR.lang = {};\n}\nKJUR.lang.String = function () {};\nfunction Base64x() {}\nfunction stoBA(d) {\n var b = new Array();\n for (var c = 0; c < d.length; c++) {\n b[c] = d.charCodeAt(c);\n }\n return b;\n}\nfunction BAtos(b) {\n var d = \"\";\n for (var c = 0; c < b.length; c++) {\n d = d + String.fromCharCode(b[c]);\n }\n return d;\n}\nfunction BAtohex(b) {\n var e = \"\";\n for (var d = 0; d < b.length; d++) {\n var c = b[d].toString(16);\n if (c.length == 1) {\n c = \"0\" + c;\n }\n e = e + c;\n }\n return e;\n}\nfunction stohex(a) {\n return BAtohex(stoBA(a));\n}\nfunction stob64(a) {\n return hex2b64(stohex(a));\n}\nfunction stob64u(a) {\n return b64tob64u(hex2b64(stohex(a)));\n}\nfunction b64utos(a) {\n return BAtos(b64toBA(b64utob64(a)));\n}\nfunction b64tob64u(a) {\n a = a.replace(/\\=/g, \"\");\n a = a.replace(/\\+/g, \"-\");\n a = a.replace(/\\//g, \"_\");\n return a;\n}\nfunction b64utob64(a) {\n if (a.length % 4 == 2) {\n a = a + \"==\";\n } else {\n if (a.length % 4 == 3) {\n a = a + \"=\";\n }\n }\n a = a.replace(/-/g, \"+\");\n a = a.replace(/_/g, \"/\");\n return a;\n}\nfunction hextob64u(a) {\n if (a.length % 2 == 1) {\n a = \"0\" + a;\n }\n return b64tob64u(hex2b64(a));\n}\nfunction b64utohex(a) {\n return b64tohex(b64utob64(a));\n}\nvar utf8tob64u, b64utoutf8;\nif (typeof Buffer === \"function\") {\n utf8tob64u = function (a) {\n return b64tob64u(Buffer.from(a, \"utf8\").toString(\"base64\"));\n };\n b64utoutf8 = function (a) {\n return Buffer.from(b64utob64(a), \"base64\").toString(\"utf8\");\n };\n} else {\n utf8tob64u = function (a) {\n return hextob64u(uricmptohex(encodeURIComponentAll(a)));\n };\n b64utoutf8 = function (a) {\n return decodeURIComponent(hextouricmp(b64utohex(a)));\n };\n}\nfunction utf8tob64(a) {\n return hex2b64(uricmptohex(encodeURIComponentAll(a)));\n}\nfunction b64toutf8(a) {\n return decodeURIComponent(hextouricmp(b64tohex(a)));\n}\nfunction utf8tohex(a) {\n return uricmptohex(encodeURIComponentAll(a)).toLowerCase();\n}\nfunction hextoutf8(b) {\n try {\n return decodeURIComponent(hextouricmp(b));\n } catch (a) {\n return null;\n }\n}\nfunction iso88591hextoutf8(a) {\n return hextoutf8(iso88591hextoutf8hex(a));\n}\nfunction utf8toiso88591hex(a) {\n return utf8hextoiso88591hex(utf8tohex(a));\n}\nfunction iso88591hextoutf8hex(e) {\n var c = e.match(/.{1,2}/g);\n var b = [];\n for (var d = 0; d < c.length; d++) {\n var f = parseInt(c[d], 16);\n if (161 <= f && f <= 191) {\n b.push(\"c2\");\n b.push(c[d]);\n } else {\n if (192 <= f && f <= 255) {\n b.push(\"c3\");\n b.push((f - 64).toString(16));\n } else {\n b.push(c[d]);\n }\n }\n }\n return b.join(\"\");\n}\nfunction utf8hextoiso88591hex(f) {\n var c = f.match(/.{1,2}/g);\n var b = [];\n for (var e = 0; e < c.length; e++) {\n if (c[e] == \"c2\") {\n e++;\n b.push(c[e]);\n } else {\n if (c[e] == \"c3\") {\n e++;\n var d = c[e];\n var g = parseInt(c[e], 16) + 64;\n b.push(g.toString(16));\n } else {\n b.push(c[e]);\n }\n }\n }\n return b.join(\"\");\n}\nfunction hextorstr(c) {\n var b = \"\";\n for (var a = 0; a < c.length - 1; a += 2) {\n b += String.fromCharCode(parseInt(c.substr(a, 2), 16));\n }\n return b;\n}\nfunction rstrtohex(c) {\n var a = \"\";\n for (var b = 0; b < c.length; b++) {\n a += (\"0\" + c.charCodeAt(b).toString(16)).slice(-2);\n }\n return a;\n}\nfunction hextob64(a) {\n return hex2b64(a);\n}\nfunction hextob64nl(a) {\n return foldnl(hextob64(a), 64);\n}\nfunction foldnl(a, b) {\n a = a.replace(new RegExp(\"(.{\" + b + \"})\", \"g\"), \"$1\\r\\n\");\n a = a.replace(/\\s+$/, \"\");\n return a;\n}\nfunction b64nltohex(b) {\n var a = b.replace(/[^0-9A-Za-z\\/+=]*/g, \"\");\n var c = b64tohex(a);\n return c;\n}\nfunction b64topem(b, a) {\n return \"-----BEGIN \" + a + \"-----\\r\\n\" + foldnl(b, 64) + \"\\r\\n-----END \" + a + \"-----\\r\\n\";\n}\nfunction hextopem(a, b) {\n return \"-----BEGIN \" + b + \"-----\\r\\n\" + foldnl(hextob64(a), 64) + \"\\r\\n-----END \" + b + \"-----\\r\\n\";\n}\nfunction pemtohex(a, b) {\n if (a.indexOf(\"-----BEGIN \") == -1) {\n throw new Error(\"can't find PEM header\");\n }\n if (b !== undefined) {\n a = a.replace(new RegExp(\"^[^]*-----BEGIN \" + b + \"-----\"), \"\");\n a = a.replace(new RegExp(\"-----END \" + b + \"-----[^]*$\"), \"\");\n } else {\n a = a.replace(/^[^]*-----BEGIN [^-]+-----/, \"\");\n a = a.replace(/-----END [^-]+-----[^]*$/, \"\");\n }\n return b64nltohex(a);\n}\nfunction pemtob64(a) {\n if (a.indexOf(\"-----BEGIN \") == -1 || a.indexOf(\"-----END \") == -1) {\n return null;\n }\n a = a.replace(/^[\\s\\S]*?-----BEGIN [^-]+-----/m, \"\");\n a = a.replace(/-----END [\\s\\S]+$/m, \"\");\n a = a.replace(/\\s+/g, \"\");\n return a.match(/^[0-9a-zA-Z+/=]+$/) ? a : null;\n}\nfunction hextoArrayBuffer(d) {\n if (d.length % 2 != 0) {\n throw \"input is not even length\";\n }\n if (d.match(/^[0-9A-Fa-f]+$/) == null) {\n throw \"input is not hexadecimal\";\n }\n var b = new ArrayBuffer(d.length / 2);\n var a = new DataView(b);\n for (var c = 0; c < d.length / 2; c++) {\n a.setUint8(c, parseInt(d.substr(c * 2, 2), 16));\n }\n return b;\n}\nfunction ArrayBuffertohex(b) {\n var d = \"\";\n var a = new DataView(b);\n for (var c = 0; c < b.byteLength; c++) {\n d += (\"00\" + a.getUint8(c).toString(16)).slice(-2);\n }\n return d;\n}\nfunction zulutomsec(n) {\n var l, j, m, e, f, i, b, k;\n var a, h, g, c;\n n = timetogen(n);\n c = n.match(/^(\\d{4})(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(|\\.\\d+)Z$/);\n if (c) {\n l = parseInt(c[1]);\n j = parseInt(c[2]) - 1;\n m = parseInt(c[3]);\n e = parseInt(c[4]);\n f = parseInt(c[5]);\n i = parseInt(c[6]);\n b = 0;\n h = c[7];\n if (h !== \"\") {\n g = (h.substr(1) + \"00\").substr(0, 3);\n b = parseInt(g);\n }\n return Date.UTC(l, j, m, e, f, i, b);\n }\n throw new Error(\"unsupported zulu format: \" + n);\n}\nfunction msectozulu(b) {\n var h = new Date(b),\n i = (\"0000\" + h.getUTCFullYear()).slice(-4),\n c = (\"00\" + (h.getUTCMonth() + 1)).slice(-2),\n j = (\"00\" + h.getUTCDate()).slice(-2),\n e = (\"00\" + h.getUTCHours()).slice(-2),\n f = (\"00\" + h.getUTCMinutes()).slice(-2),\n g = (\"00\" + h.getUTCSeconds()).slice(-2),\n a = (\"000\" + h.getUTCMilliseconds()).slice(-3);\n a = a.replace(/0+$/, \"\");\n a = a != \"\" ? \".\" + a : a;\n return i + c + j + e + f + g + a + \"Z\";\n}\nfunction zulutosec(a) {\n return Math.round(zulutomsec(a) / 1000);\n}\nfunction zulutodate(a) {\n return new Date(zulutomsec(a));\n}\nfunction datetozulu(g, e, f) {\n var b;\n var a = g.getUTCFullYear();\n if (e) {\n if (a < 1950 || 2049 < a) {\n throw \"not proper year for UTCTime: \" + a;\n }\n b = (\"\" + a).slice(-2);\n } else {\n b = (\"000\" + a).slice(-4);\n }\n b += (\"0\" + (g.getUTCMonth() + 1)).slice(-2);\n b += (\"0\" + g.getUTCDate()).slice(-2);\n b += (\"0\" + g.getUTCHours()).slice(-2);\n b += (\"0\" + g.getUTCMinutes()).slice(-2);\n b += (\"0\" + g.getUTCSeconds()).slice(-2);\n if (f) {\n var c = g.getUTCMilliseconds();\n if (c !== 0) {\n c = (\"00\" + c).slice(-3);\n c = c.replace(/0+$/g, \"\");\n b += \".\" + c;\n }\n }\n b += \"Z\";\n return b;\n}\nfunction timetogen(a) {\n if (a.match(/^[0-9]{12}Z$/) || a.match(/^[0-9]{12}[.][0-9]*Z$/)) {\n return a.match(/^[0-4]/) ? \"20\" + a : \"19\" + a;\n }\n return a;\n}\nfunction uricmptohex(a) {\n return a.replace(/%/g, \"\");\n}\nfunction hextouricmp(a) {\n return a.replace(/(..)/g, \"%$1\");\n}\nfunction ipv6tohex(g) {\n var b = \"malformed IPv6 address\";\n if (!g.match(/^[0-9A-Fa-f:]+$/)) {\n throw b;\n }\n g = g.toLowerCase();\n var d = g.split(\":\").length - 1;\n if (d < 2) {\n throw b;\n }\n var e = \":\".repeat(7 - d + 2);\n g = g.replace(\"::\", e);\n var c = g.split(\":\");\n if (c.length != 8) {\n throw b;\n }\n for (var f = 0; f < 8; f++) {\n c[f] = (\"0000\" + c[f]).slice(-4);\n }\n return c.join(\"\");\n}\nfunction hextoipv6(d) {\n if (!d.match(/^[0-9A-Fa-f]{32}$/)) {\n throw new Error(\"malformed IPv6 address: \" + d);\n }\n d = d.toLowerCase();\n var b = d.match(/.{1,4}/g);\n b = b.map(function (a) {\n return a.replace(/^0+/, \"\");\n });\n b = b.map(function (a) {\n return a == \"\" ? \"0\" : a;\n });\n d = \":\" + b.join(\":\") + \":\";\n var c = d.match(/:(0:){2,}/g);\n if (c == null) {\n return d.slice(1, -1);\n }\n var e = c.sort().slice(-1)[0];\n d = d.replace(e.substr(0, e.length - 1), \":\");\n if (d.substr(0, 2) != \"::\") {\n d = d.substr(1);\n }\n if (d.substr(-2, 2) != \"::\") {\n d = d.substr(0, d.length - 1);\n }\n return d;\n}\nfunction hextoip(b) {\n var c = new Error(\"malformed hex value\");\n if (!b.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/)) {\n throw c;\n }\n if (b.length == 8) {\n var d;\n try {\n d = parseInt(b.substr(0, 2), 16) + \".\" + parseInt(b.substr(2, 2), 16) + \".\" + parseInt(b.substr(4, 2), 16) + \".\" + parseInt(b.substr(6, 2), 16);\n return d;\n } catch (a) {\n throw c;\n }\n } else {\n if (b.length == 16) {\n try {\n return hextoip(b.substr(0, 8)) + \"/\" + ipprefixlen(b.substr(8));\n } catch (a) {\n throw c;\n }\n } else {\n if (b.length == 32) {\n return hextoipv6(b);\n } else {\n if (b.length == 64) {\n try {\n return hextoipv6(b.substr(0, 32)) + \"/\" + ipprefixlen(b.substr(32));\n } catch (a) {\n throw c;\n }\n return;\n } else {\n return b;\n }\n }\n }\n }\n}\nfunction ipprefixlen(c) {\n var d = new Error(\"malformed mask\");\n var a;\n try {\n a = new BigInteger(c, 16).toString(2);\n } catch (b) {\n throw d;\n }\n if (!a.match(/^1*0*$/)) {\n throw d;\n }\n return a.replace(/0+$/, \"\").length;\n}\nfunction iptohex(g) {\n var j = new Error(\"malformed IP address\");\n g = g.toLowerCase(g);\n if (!g.match(/^[0-9a-f.:/]+$/)) {\n throw j;\n }\n if (g.match(/^[0-9.]+$/)) {\n var b = g.split(\".\");\n if (b.length !== 4) {\n throw j;\n }\n var h = \"\";\n try {\n for (var f = 0; f < 4; f++) {\n var k = parseInt(b[f]);\n h += (\"0\" + k.toString(16)).slice(-2);\n }\n return h;\n } catch (e) {\n throw j;\n }\n } else {\n if (g.match(/^[0-9.]+\\/[0-9]+$/)) {\n var c = g.split(\"/\");\n return iptohex(c[0]) + ipnetmask(parseInt(c[1]), 32);\n } else {\n if (g.match(/^[0-9a-f:]+$/) && g.indexOf(\":\") !== -1) {\n return ipv6tohex(g);\n } else {\n if (g.match(/^[0-9a-f:]+\\/[0-9]+$/) && g.indexOf(\":\") !== -1) {\n var c = g.split(\"/\");\n return ipv6tohex(c[0]) + ipnetmask(parseInt(c[1]), 128);\n } else {\n throw j;\n }\n }\n }\n }\n}\nfunction ipnetmask(d, c) {\n if (c == 32 && d == 0) {\n return \"00000000\";\n }\n if (c == 128 && d == 0) {\n return \"00000000000000000000000000000000\";\n }\n var a = Array(d + 1).join(\"1\") + Array(c - d + 1).join(\"0\");\n return new BigInteger(a, 2).toString(16);\n}\nfunction ucs2hextoutf8(d) {\n function e(f) {\n var h = parseInt(f.substr(0, 2), 16);\n var a = parseInt(f.substr(2), 16);\n if (h == 0 & a < 128) {\n return String.fromCharCode(a);\n }\n if (h < 8) {\n var j = 192 | (h & 7) << 3 | (a & 192) >> 6;\n var i = 128 | a & 63;\n return hextoutf8(j.toString(16) + i.toString(16));\n }\n var j = 224 | (h & 240) >> 4;\n var i = 128 | (h & 15) << 2 | (a & 192) >> 6;\n var g = 128 | a & 63;\n return hextoutf8(j.toString(16) + i.toString(16) + g.toString(16));\n }\n var c = d.match(/.{4}/g);\n var b = c.map(e);\n return b.join(\"\");\n}\nfunction encodeURIComponentAll(a) {\n var d = encodeURIComponent(a);\n var b = \"\";\n for (var c = 0; c < d.length; c++) {\n if (d[c] == \"%\") {\n b = b + d.substr(c, 3);\n c = c + 2;\n } else {\n b = b + \"%\" + stohex(d[c]);\n }\n }\n return b;\n}\nfunction newline_toUnix(a) {\n a = a.replace(/\\r\\n/mg, \"\\n\");\n return a;\n}\nfunction newline_toDos(a) {\n a = a.replace(/\\r\\n/mg, \"\\n\");\n a = a.replace(/\\n/mg, \"\\r\\n\");\n return a;\n}\nKJUR.lang.String.isInteger = function (a) {\n if (a.match(/^[0-9]+$/)) {\n return true;\n } else {\n if (a.match(/^-[0-9]+$/)) {\n return true;\n } else {\n return false;\n }\n }\n};\nKJUR.lang.String.isHex = function (a) {\n return ishex(a);\n};\nfunction ishex(a) {\n if (a.length % 2 == 0 && (a.match(/^[0-9a-f]+$/) || a.match(/^[0-9A-F]+$/))) {\n return true;\n } else {\n return false;\n }\n}\nKJUR.lang.String.isBase64 = function (a) {\n a = a.replace(/\\s+/g, \"\");\n if (a.match(/^[0-9A-Za-z+\\/]+={0,3}$/) && a.length % 4 == 0) {\n return true;\n } else {\n return false;\n }\n};\nKJUR.lang.String.isBase64URL = function (a) {\n if (a.match(/[+/=]/)) {\n return false;\n }\n a = b64utob64(a);\n return KJUR.lang.String.isBase64(a);\n};\nfunction isBase64URLDot(a) {\n if (a.match(/^[0-9A-Za-z-_.]+$/)) {\n return true;\n }\n return false;\n}\nKJUR.lang.String.isIntegerArray = function (a) {\n a = a.replace(/\\s+/g, \"\");\n if (a.match(/^\\[[0-9,]+\\]$/)) {\n return true;\n } else {\n return false;\n }\n};\nKJUR.lang.String.isPrintable = function (a) {\n if (a.match(/^[0-9A-Za-z '()+,-./:=?]*$/) !== null) {\n return true;\n }\n return false;\n};\nKJUR.lang.String.isIA5 = function (a) {\n if (a.match(/^[\\x20-\\x21\\x23-\\x7f]*$/) !== null) {\n return true;\n }\n return false;\n};\nKJUR.lang.String.isMail = function (a) {\n if (a.match(/^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}\\.[A-Za-z0-9]{1,}$/) !== null) {\n return true;\n }\n return false;\n};\nfunction hextoposhex(a) {\n if (a.length % 2 == 1) {\n return \"0\" + a;\n }\n if (a.substr(0, 1) > \"7\") {\n return \"00\" + a;\n }\n return a;\n}\nfunction intarystrtohex(b) {\n b = b.replace(/^\\s*\\[\\s*/, \"\");\n b = b.replace(/\\s*\\]\\s*$/, \"\");\n b = b.replace(/\\s*/g, \"\");\n try {\n var c = b.split(/,/).map(function (g, e, h) {\n var f = parseInt(g);\n if (f < 0 || 255 < f) {\n throw \"integer not in range 0-255\";\n }\n var d = (\"00\" + f.toString(16)).slice(-2);\n return d;\n }).join(\"\");\n return c;\n } catch (a) {\n throw \"malformed integer array string: \" + a;\n }\n}\nvar strdiffidx = function (c, a) {\n var d = c.length;\n if (c.length > a.length) {\n d = a.length;\n }\n for (var b = 0; b < d; b++) {\n if (c.charCodeAt(b) != a.charCodeAt(b)) {\n return b;\n }\n }\n if (c.length != a.length) {\n return d;\n }\n return -1;\n};\nfunction oidtohex(g) {\n var f = function (a) {\n var l = a.toString(16);\n if (l.length == 1) {\n l = \"0\" + l;\n }\n return l;\n };\n var e = function (p) {\n var o = \"\";\n var l = parseInt(p, 10);\n var a = l.toString(2);\n var m = 7 - a.length % 7;\n if (m == 7) {\n m = 0;\n }\n var r = \"\";\n for (var n = 0; n < m; n++) {\n r += \"0\";\n }\n a = r + a;\n for (var n = 0; n < a.length - 1; n += 7) {\n var q = a.substr(n, 7);\n if (n != a.length - 7) {\n q = \"1\" + q;\n }\n o += f(parseInt(q, 2));\n }\n return o;\n };\n try {\n if (!g.match(/^[0-9.]+$/)) {\n return null;\n }\n var j = \"\";\n var b = g.split(\".\");\n var k = parseInt(b[0], 10) * 40 + parseInt(b[1], 10);\n j += f(k);\n b.splice(0, 2);\n for (var d = 0; d < b.length; d++) {\n j += e(b[d]);\n }\n return j;\n } catch (c) {\n return null;\n }\n}\nfunction hextooid(g) {\n if (!ishex(g)) {\n return null;\n }\n try {\n var m = [];\n var p = g.substr(0, 2);\n var e = parseInt(p, 16);\n m[0] = new String(Math.floor(e / 40));\n m[1] = new String(e % 40);\n var n = g.substr(2);\n var l = [];\n for (var f = 0; f < n.length / 2; f++) {\n l.push(parseInt(n.substr(f * 2, 2), 16));\n }\n var k = [];\n var d = \"\";\n for (var f = 0; f < l.length; f++) {\n if (l[f] & 128) {\n d = d + strpad((l[f] & 127).toString(2), 7);\n } else {\n d = d + strpad((l[f] & 127).toString(2), 7);\n k.push(new String(parseInt(d, 2)));\n d = \"\";\n }\n }\n var o = m.join(\".\");\n if (k.length > 0) {\n o = o + \".\" + k.join(\".\");\n }\n return o;\n } catch (j) {\n return null;\n }\n}\nfunction inttohex(b) {\n var a = new BigInteger(String(b), 10);\n return twoscompl(a);\n}\nfunction twoscompl(b) {\n var g = b.toString(16);\n if (g.substr(0, 1) != \"-\") {\n if (g.length % 2 == 1) {\n g = \"0\" + g;\n } else {\n if (!g.match(/^[0-7]/)) {\n g = \"00\" + g;\n }\n }\n return g;\n }\n var a = g.substr(1);\n var f = a.length;\n if (f % 2 == 1) {\n f += 1;\n } else {\n if (!g.match(/^[0-7]/)) {\n f += 2;\n }\n }\n var j = \"\";\n for (var e = 0; e < f; e++) {\n j += \"f\";\n }\n var d = new BigInteger(j, 16);\n var c = d.xor(b).add(BigInteger.ONE);\n g = c.toString(16).replace(/^-/, \"\");\n return g;\n}\nvar strpad = function (c, b, a) {\n if (a == undefined) {\n a = \"0\";\n }\n if (c.length >= b) {\n return c;\n }\n return new Array(b - c.length + 1).join(a) + c;\n};\nfunction bitstrtoint(e) {\n if (e.length % 2 != 0) {\n return -1;\n }\n e = e.toLowerCase();\n if (e.match(/^[0-9a-f]+$/) == null) {\n return -1;\n }\n try {\n var a = e.substr(0, 2);\n if (a == \"00\") {\n return parseInt(e.substr(2), 16);\n }\n var b = parseInt(a, 16);\n if (b > 7) {\n return -1;\n }\n var g = e.substr(2);\n var d = parseInt(g, 16).toString(2);\n if (d == \"0\") {\n d = \"00000000\";\n }\n d = d.slice(0, 0 - b);\n var f = parseInt(d, 2);\n if (f == NaN) {\n return -1;\n }\n return f;\n } catch (c) {\n return -1;\n }\n}\nfunction inttobitstr(e) {\n if (typeof e != \"number\") {\n return null;\n }\n if (e < 0) {\n return null;\n }\n var c = Number(e).toString(2);\n var b = 8 - c.length % 8;\n if (b == 8) {\n b = 0;\n }\n c = c + strpad(\"\", b, \"0\");\n var d = parseInt(c, 2).toString(16);\n if (d.length % 2 == 1) {\n d = \"0\" + d;\n }\n var a = \"0\" + b;\n return a + d;\n}\nfunction bitstrtobinstr(g) {\n if (typeof g != \"string\") {\n return null;\n }\n if (g.length % 2 != 0) {\n return null;\n }\n if (!g.match(/^[0-9a-f]+$/)) {\n return null;\n }\n try {\n var c = parseInt(g.substr(0, 2), 16);\n if (c < 0 || 7 < c) {\n return null;\n }\n var j = g.substr(2);\n var f = \"\";\n for (var e = 0; e < j.length; e += 2) {\n var b = j.substr(e, 2);\n var a = parseInt(b, 16).toString(2);\n a = (\"0000000\" + a).slice(-8);\n f += a;\n }\n return f.substr(0, f.length - c);\n } catch (d) {\n return null;\n }\n}\nfunction binstrtobitstr(b) {\n if (typeof b != \"string\") {\n return null;\n }\n if (b.match(/^[01]+$/) == null) {\n return null;\n }\n try {\n var c = parseInt(b, 2);\n return inttobitstr(c);\n } catch (a) {\n return null;\n }\n}\nfunction namearraytobinstr(e, g) {\n var f = 0;\n for (var a = 0; a < e.length; a++) {\n f |= 1 << g[e[a]];\n }\n var b = f.toString(2);\n var c = \"\";\n for (var a = b.length - 1; a >= 0; a--) {\n c += b[a];\n }\n return c;\n}\nfunction aryval(e, c, d) {\n if (typeof e != \"object\") {\n return undefined;\n }\n var c = String(c).split(\".\");\n for (var b = 0; b < c.length && e; b++) {\n var a = c[b];\n if (a.match(/^[0-9]+$/)) {\n a = parseInt(a);\n }\n e = e[a];\n }\n return e || e === false ? e : d;\n}\nfunction extendClass(c, a) {\n var b = function () {};\n b.prototype = a.prototype;\n c.prototype = new b();\n c.prototype.constructor = c;\n c.superclass = a.prototype;\n if (a.prototype.constructor == Object.prototype.constructor) {\n a.prototype.constructor = a;\n }\n}\n;\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.crypto == \"undefined\" || !KJUR.crypto) {\n KJUR.crypto = {};\n}\nKJUR.crypto.Util = new function () {\n this.DIGESTINFOHEAD = {\n sha1: \"3021300906052b0e03021a05000414\",\n sha224: \"302d300d06096086480165030402040500041c\",\n sha256: \"3031300d060960864801650304020105000420\",\n sha384: \"3041300d060960864801650304020205000430\",\n sha512: \"3051300d060960864801650304020305000440\",\n md2: \"3020300c06082a864886f70d020205000410\",\n md5: \"3020300c06082a864886f70d020505000410\",\n ripemd160: \"3021300906052b2403020105000414\"\n };\n this.DEFAULTPROVIDER = {\n md5: \"cryptojs\",\n sha1: \"cryptojs\",\n sha224: \"cryptojs\",\n sha256: \"cryptojs\",\n sha384: \"cryptojs\",\n sha512: \"cryptojs\",\n ripemd160: \"cryptojs\",\n hmacmd5: \"cryptojs\",\n hmacsha1: \"cryptojs\",\n hmacsha224: \"cryptojs\",\n hmacsha256: \"cryptojs\",\n hmacsha384: \"cryptojs\",\n hmacsha512: \"cryptojs\",\n hmacripemd160: \"cryptojs\",\n MD5withRSA: \"cryptojs/jsrsa\",\n SHA1withRSA: \"cryptojs/jsrsa\",\n SHA224withRSA: \"cryptojs/jsrsa\",\n SHA256withRSA: \"cryptojs/jsrsa\",\n SHA384withRSA: \"cryptojs/jsrsa\",\n SHA512withRSA: \"cryptojs/jsrsa\",\n RIPEMD160withRSA: \"cryptojs/jsrsa\",\n MD5withECDSA: \"cryptojs/jsrsa\",\n SHA1withECDSA: \"cryptojs/jsrsa\",\n SHA224withECDSA: \"cryptojs/jsrsa\",\n SHA256withECDSA: \"cryptojs/jsrsa\",\n SHA384withECDSA: \"cryptojs/jsrsa\",\n SHA512withECDSA: \"cryptojs/jsrsa\",\n RIPEMD160withECDSA: \"cryptojs/jsrsa\",\n SHA1withDSA: \"cryptojs/jsrsa\",\n SHA224withDSA: \"cryptojs/jsrsa\",\n SHA256withDSA: \"cryptojs/jsrsa\",\n MD5withRSAandMGF1: \"cryptojs/jsrsa\",\n SHAwithRSAandMGF1: \"cryptojs/jsrsa\",\n SHA1withRSAandMGF1: \"cryptojs/jsrsa\",\n SHA224withRSAandMGF1: \"cryptojs/jsrsa\",\n SHA256withRSAandMGF1: \"cryptojs/jsrsa\",\n SHA384withRSAandMGF1: \"cryptojs/jsrsa\",\n SHA512withRSAandMGF1: \"cryptojs/jsrsa\",\n RIPEMD160withRSAandMGF1: \"cryptojs/jsrsa\"\n };\n this.CRYPTOJSMESSAGEDIGESTNAME = {\n md5: CryptoJS.algo.MD5,\n sha1: CryptoJS.algo.SHA1,\n sha224: CryptoJS.algo.SHA224,\n sha256: CryptoJS.algo.SHA256,\n sha384: CryptoJS.algo.SHA384,\n sha512: CryptoJS.algo.SHA512,\n ripemd160: CryptoJS.algo.RIPEMD160\n };\n this.getDigestInfoHex = function (a, b) {\n if (typeof this.DIGESTINFOHEAD[b] == \"undefined\") {\n throw \"alg not supported in Util.DIGESTINFOHEAD: \" + b;\n }\n return this.DIGESTINFOHEAD[b] + a;\n };\n this.getPaddedDigestInfoHex = function (h, a, j) {\n var c = this.getDigestInfoHex(h, a);\n var d = j / 4;\n if (c.length + 22 > d) {\n throw \"key is too short for SigAlg: keylen=\" + j + \",\" + a;\n }\n var b = \"0001\";\n var k = \"00\" + c;\n var g = \"\";\n var l = d - b.length - k.length;\n for (var f = 0; f < l; f += 2) {\n g += \"ff\";\n }\n var e = b + g + k;\n return e;\n };\n this.hashString = function (a, c) {\n var b = new KJUR.crypto.MessageDigest({\n alg: c\n });\n return b.digestString(a);\n };\n this.hashHex = function (b, c) {\n var a = new KJUR.crypto.MessageDigest({\n alg: c\n });\n return a.digestHex(b);\n };\n this.sha1 = function (a) {\n return this.hashString(a, \"sha1\");\n };\n this.sha256 = function (a) {\n return this.hashString(a, \"sha256\");\n };\n this.sha256Hex = function (a) {\n return this.hashHex(a, \"sha256\");\n };\n this.sha512 = function (a) {\n return this.hashString(a, \"sha512\");\n };\n this.sha512Hex = function (a) {\n return this.hashHex(a, \"sha512\");\n };\n this.isKey = function (a) {\n if (a instanceof RSAKey || a instanceof KJUR.crypto.DSA || a instanceof KJUR.crypto.ECDSA) {\n return true;\n } else {\n return false;\n }\n };\n}();\nKJUR.crypto.Util.md5 = function (a) {\n var b = new KJUR.crypto.MessageDigest({\n alg: \"md5\",\n prov: \"cryptojs\"\n });\n return b.digestString(a);\n};\nKJUR.crypto.Util.ripemd160 = function (a) {\n var b = new KJUR.crypto.MessageDigest({\n alg: \"ripemd160\",\n prov: \"cryptojs\"\n });\n return b.digestString(a);\n};\nKJUR.crypto.Util.SECURERANDOMGEN = new SecureRandom();\nKJUR.crypto.Util.getRandomHexOfNbytes = function (b) {\n var a = new Array(b);\n KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(a);\n return BAtohex(a);\n};\nKJUR.crypto.Util.getRandomBigIntegerOfNbytes = function (a) {\n return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbytes(a), 16);\n};\nKJUR.crypto.Util.getRandomHexOfNbits = function (d) {\n var c = d % 8;\n var a = (d - c) / 8;\n var b = new Array(a + 1);\n KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(b);\n b[0] = (255 << c & 255 ^ 255) & b[0];\n return BAtohex(b);\n};\nKJUR.crypto.Util.getRandomBigIntegerOfNbits = function (a) {\n return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbits(a), 16);\n};\nKJUR.crypto.Util.getRandomBigIntegerZeroToMax = function (b) {\n var a = b.bitLength();\n while (1) {\n var c = KJUR.crypto.Util.getRandomBigIntegerOfNbits(a);\n if (b.compareTo(c) != -1) {\n return c;\n }\n }\n};\nKJUR.crypto.Util.getRandomBigIntegerMinToMax = function (e, b) {\n var c = e.compareTo(b);\n if (c == 1) {\n throw \"biMin is greater than biMax\";\n }\n if (c == 0) {\n return e;\n }\n var a = b.subtract(e);\n var d = KJUR.crypto.Util.getRandomBigIntegerZeroToMax(a);\n return d.add(e);\n};\nKJUR.crypto.MessageDigest = function (c) {\n var b = null;\n var a = null;\n var d = null;\n this.setAlgAndProvider = function (g, f) {\n g = KJUR.crypto.MessageDigest.getCanonicalAlgName(g);\n if (g !== null && f === undefined) {\n f = KJUR.crypto.Util.DEFAULTPROVIDER[g];\n }\n if (\":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:\".indexOf(g) != -1 && f == \"cryptojs\") {\n try {\n this.md = KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g].create();\n } catch (e) {\n throw \"setAlgAndProvider hash alg set fail alg=\" + g + \"/\" + e;\n }\n this.updateString = function (h) {\n this.md.update(h);\n };\n this.updateHex = function (h) {\n var i = CryptoJS.enc.Hex.parse(h);\n this.md.update(i);\n };\n this.digest = function () {\n var h = this.md.finalize();\n return h.toString(CryptoJS.enc.Hex);\n };\n this.digestString = function (h) {\n this.updateString(h);\n return this.digest();\n };\n this.digestHex = function (h) {\n this.updateHex(h);\n return this.digest();\n };\n }\n if (\":sha256:\".indexOf(g) != -1 && f == \"sjcl\") {\n try {\n this.md = new sjcl.hash.sha256();\n } catch (e) {\n throw \"setAlgAndProvider hash alg set fail alg=\" + g + \"/\" + e;\n }\n this.updateString = function (h) {\n this.md.update(h);\n };\n this.updateHex = function (i) {\n var h = sjcl.codec.hex.toBits(i);\n this.md.update(h);\n };\n this.digest = function () {\n var h = this.md.finalize();\n return sjcl.codec.hex.fromBits(h);\n };\n this.digestString = function (h) {\n this.updateString(h);\n return this.digest();\n };\n this.digestHex = function (h) {\n this.updateHex(h);\n return this.digest();\n };\n }\n };\n this.updateString = function (e) {\n throw \"updateString(str) not supported for this alg/prov: \" + this.algName + \"/\" + this.provName;\n };\n this.updateHex = function (e) {\n throw \"updateHex(hex) not supported for this alg/prov: \" + this.algName + \"/\" + this.provName;\n };\n this.digest = function () {\n throw \"digest() not supported for this alg/prov: \" + this.algName + \"/\" + this.provName;\n };\n this.digestString = function (e) {\n throw \"digestString(str) not supported for this alg/prov: \" + this.algName + \"/\" + this.provName;\n };\n this.digestHex = function (e) {\n throw \"digestHex(hex) not supported for this alg/prov: \" + this.algName + \"/\" + this.provName;\n };\n if (c !== undefined) {\n if (c.alg !== undefined) {\n this.algName = c.alg;\n if (c.prov === undefined) {\n this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName];\n }\n this.setAlgAndProvider(this.algName, this.provName);\n }\n }\n};\nKJUR.crypto.MessageDigest.getCanonicalAlgName = function (a) {\n if (typeof a === \"string\") {\n a = a.toLowerCase();\n a = a.replace(/-/, \"\");\n }\n return a;\n};\nKJUR.crypto.MessageDigest.getHashLength = function (c) {\n var b = KJUR.crypto.MessageDigest;\n var a = b.getCanonicalAlgName(c);\n if (b.HASHLENGTH[a] === undefined) {\n throw \"not supported algorithm: \" + c;\n }\n return b.HASHLENGTH[a];\n};\nKJUR.crypto.MessageDigest.HASHLENGTH = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n ripemd160: 20\n};\nKJUR.crypto.Mac = function (d) {\n var f = null;\n var c = null;\n var a = null;\n var e = null;\n var b = null;\n this.setAlgAndProvider = function (k, i) {\n k = k.toLowerCase();\n if (k == null) {\n k = \"hmacsha1\";\n }\n k = k.toLowerCase();\n if (k.substr(0, 4) != \"hmac\") {\n throw \"setAlgAndProvider unsupported HMAC alg: \" + k;\n }\n if (i === undefined) {\n i = KJUR.crypto.Util.DEFAULTPROVIDER[k];\n }\n this.algProv = k + \"/\" + i;\n var g = k.substr(4);\n if (\":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:\".indexOf(g) != -1 && i == \"cryptojs\") {\n try {\n var j = KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g];\n this.mac = CryptoJS.algo.HMAC.create(j, this.pass);\n } catch (h) {\n throw \"setAlgAndProvider hash alg set fail hashAlg=\" + g + \"/\" + h;\n }\n this.updateString = function (l) {\n this.mac.update(l);\n };\n this.updateHex = function (l) {\n var m = CryptoJS.enc.Hex.parse(l);\n this.mac.update(m);\n };\n this.doFinal = function () {\n var l = this.mac.finalize();\n return l.toString(CryptoJS.enc.Hex);\n };\n this.doFinalString = function (l) {\n this.updateString(l);\n return this.doFinal();\n };\n this.doFinalHex = function (l) {\n this.updateHex(l);\n return this.doFinal();\n };\n }\n };\n this.updateString = function (g) {\n throw \"updateString(str) not supported for this alg/prov: \" + this.algProv;\n };\n this.updateHex = function (g) {\n throw \"updateHex(hex) not supported for this alg/prov: \" + this.algProv;\n };\n this.doFinal = function () {\n throw \"digest() not supported for this alg/prov: \" + this.algProv;\n };\n this.doFinalString = function (g) {\n throw \"digestString(str) not supported for this alg/prov: \" + this.algProv;\n };\n this.doFinalHex = function (g) {\n throw \"digestHex(hex) not supported for this alg/prov: \" + this.algProv;\n };\n this.setPassword = function (h) {\n if (typeof h == \"string\") {\n var g = h;\n if (h.length % 2 == 1 || !h.match(/^[0-9A-Fa-f]+$/)) {\n g = rstrtohex(h);\n }\n this.pass = CryptoJS.enc.Hex.parse(g);\n return;\n }\n if (typeof h != \"object\") {\n throw \"KJUR.crypto.Mac unsupported password type: \" + h;\n }\n var g = null;\n if (h.hex !== undefined) {\n if (h.hex.length % 2 != 0 || !h.hex.match(/^[0-9A-Fa-f]+$/)) {\n throw \"Mac: wrong hex password: \" + h.hex;\n }\n g = h.hex;\n }\n if (h.utf8 !== undefined) {\n g = utf8tohex(h.utf8);\n }\n if (h.rstr !== undefined) {\n g = rstrtohex(h.rstr);\n }\n if (h.b64 !== undefined) {\n g = b64tohex(h.b64);\n }\n if (h.b64u !== undefined) {\n g = b64utohex(h.b64u);\n }\n if (g == null) {\n throw \"KJUR.crypto.Mac unsupported password type: \" + h;\n }\n this.pass = CryptoJS.enc.Hex.parse(g);\n };\n if (d !== undefined) {\n if (d.pass !== undefined) {\n this.setPassword(d.pass);\n }\n if (d.alg !== undefined) {\n this.algName = d.alg;\n if (d.prov === undefined) {\n this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName];\n }\n this.setAlgAndProvider(this.algName, this.provName);\n }\n }\n};\nKJUR.crypto.Signature = function (o) {\n var q = null;\n var n = null;\n var r = null;\n var c = null;\n var l = null;\n var d = null;\n var k = null;\n var h = null;\n var p = null;\n var e = null;\n var b = -1;\n var g = null;\n var j = null;\n var a = null;\n var i = null;\n var f = null;\n this._setAlgNames = function () {\n var s = this.algName.match(/^(.+)with(.+)$/);\n if (s) {\n this.mdAlgName = s[1].toLowerCase();\n this.pubkeyAlgName = s[2].toLowerCase();\n if (this.pubkeyAlgName == \"rsaandmgf1\" && this.mdAlgName == \"sha\") {\n this.mdAlgName = \"sha1\";\n }\n }\n };\n this._zeroPaddingOfSignature = function (x, w) {\n var v = \"\";\n var t = w / 4 - x.length;\n for (var u = 0; u < t; u++) {\n v = v + \"0\";\n }\n return v + x;\n };\n this.setAlgAndProvider = function (u, t) {\n this._setAlgNames();\n if (t != \"cryptojs/jsrsa\") {\n throw new Error(\"provider not supported: \" + t);\n }\n if (\":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:\".indexOf(this.mdAlgName) != -1) {\n try {\n this.md = new KJUR.crypto.MessageDigest({\n alg: this.mdAlgName\n });\n } catch (s) {\n throw new Error(\"setAlgAndProvider hash alg set fail alg=\" + this.mdAlgName + \"/\" + s);\n }\n this.init = function (w, x) {\n var y = null;\n try {\n if (x === undefined) {\n y = KEYUTIL.getKey(w);\n } else {\n y = KEYUTIL.getKey(w, x);\n }\n } catch (v) {\n throw \"init failed:\" + v;\n }\n if (y.isPrivate === true) {\n this.prvKey = y;\n this.state = \"SIGN\";\n } else {\n if (y.isPublic === true) {\n this.pubKey = y;\n this.state = \"VERIFY\";\n } else {\n throw \"init failed.:\" + y;\n }\n }\n };\n this.updateString = function (v) {\n this.md.updateString(v);\n };\n this.updateHex = function (v) {\n this.md.updateHex(v);\n };\n this.sign = function () {\n this.sHashHex = this.md.digest();\n if (this.prvKey === undefined && this.ecprvhex !== undefined && this.eccurvename !== undefined && KJUR.crypto.ECDSA !== undefined) {\n this.prvKey = new KJUR.crypto.ECDSA({\n curve: this.eccurvename,\n prv: this.ecprvhex\n });\n }\n if (this.prvKey instanceof RSAKey && this.pubkeyAlgName === \"rsaandmgf1\") {\n this.hSign = this.prvKey.signWithMessageHashPSS(this.sHashHex, this.mdAlgName, this.pssSaltLen);\n } else {\n if (this.prvKey instanceof RSAKey && this.pubkeyAlgName === \"rsa\") {\n this.hSign = this.prvKey.signWithMessageHash(this.sHashHex, this.mdAlgName);\n } else {\n if (this.prvKey instanceof KJUR.crypto.ECDSA) {\n this.hSign = this.prvKey.signWithMessageHash(this.sHashHex);\n } else {\n if (this.prvKey instanceof KJUR.crypto.DSA) {\n this.hSign = this.prvKey.signWithMessageHash(this.sHashHex);\n } else {\n throw \"Signature: unsupported private key alg: \" + this.pubkeyAlgName;\n }\n }\n }\n }\n return this.hSign;\n };\n this.signString = function (v) {\n this.updateString(v);\n return this.sign();\n };\n this.signHex = function (v) {\n this.updateHex(v);\n return this.sign();\n };\n this.verify = function (v) {\n this.sHashHex = this.md.digest();\n if (this.pubKey === undefined && this.ecpubhex !== undefined && this.eccurvename !== undefined && KJUR.crypto.ECDSA !== undefined) {\n this.pubKey = new KJUR.crypto.ECDSA({\n curve: this.eccurvename,\n pub: this.ecpubhex\n });\n }\n if (this.pubKey instanceof RSAKey && this.pubkeyAlgName === \"rsaandmgf1\") {\n return this.pubKey.verifyWithMessageHashPSS(this.sHashHex, v, this.mdAlgName, this.pssSaltLen);\n } else {\n if (this.pubKey instanceof RSAKey && this.pubkeyAlgName === \"rsa\") {\n return this.pubKey.verifyWithMessageHash(this.sHashHex, v);\n } else {\n if (KJUR.crypto.ECDSA !== undefined && this.pubKey instanceof KJUR.crypto.ECDSA) {\n return this.pubKey.verifyWithMessageHash(this.sHashHex, v);\n } else {\n if (KJUR.crypto.DSA !== undefined && this.pubKey instanceof KJUR.crypto.DSA) {\n return this.pubKey.verifyWithMessageHash(this.sHashHex, v);\n } else {\n throw \"Signature: unsupported public key alg: \" + this.pubkeyAlgName;\n }\n }\n }\n }\n };\n }\n };\n this.init = function (s, t) {\n throw \"init(key, pass) not supported for this alg:prov=\" + this.algProvName;\n };\n this.updateString = function (s) {\n throw \"updateString(str) not supported for this alg:prov=\" + this.algProvName;\n };\n this.updateHex = function (s) {\n throw \"updateHex(hex) not supported for this alg:prov=\" + this.algProvName;\n };\n this.sign = function () {\n throw \"sign() not supported for this alg:prov=\" + this.algProvName;\n };\n this.signString = function (s) {\n throw \"digestString(str) not supported for this alg:prov=\" + this.algProvName;\n };\n this.signHex = function (s) {\n throw \"digestHex(hex) not supported for this alg:prov=\" + this.algProvName;\n };\n this.verify = function (s) {\n throw \"verify(hSigVal) not supported for this alg:prov=\" + this.algProvName;\n };\n this.initParams = o;\n if (o !== undefined) {\n if (o.alg !== undefined) {\n this.algName = o.alg;\n if (o.prov === undefined) {\n this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName];\n } else {\n this.provName = o.prov;\n }\n this.algProvName = this.algName + \":\" + this.provName;\n this.setAlgAndProvider(this.algName, this.provName);\n this._setAlgNames();\n }\n if (o.psssaltlen !== undefined) {\n this.pssSaltLen = o.psssaltlen;\n }\n if (o.prvkeypem !== undefined) {\n if (o.prvkeypas !== undefined) {\n throw \"both prvkeypem and prvkeypas parameters not supported\";\n } else {\n try {\n var q = KEYUTIL.getKey(o.prvkeypem);\n this.init(q);\n } catch (m) {\n throw \"fatal error to load pem private key: \" + m;\n }\n }\n }\n }\n};\nKJUR.crypto.Cipher = function (a) {};\nKJUR.crypto.Cipher.encrypt = function (j, i, b, c) {\n if (aryval(c, \"enclag\") != undefined) {\n b = c.encalg;\n }\n if (typeof b == \"string\" && b.substr(-4) == \"-CBC\") {\n var g = i;\n var e = j;\n if (aryval(c, \"key\") != undefined) {\n g = c.key;\n }\n if (aryval(c, \"enc\") != undefined) {\n hEnc = c.enc;\n }\n var h = CryptoJS.enc.Hex.parse(g);\n var a = CryptoJS.enc.Hex.parse(e);\n var f = CryptoJS.enc.Hex.parse(c.iv);\n var d;\n if (b == \"des-EDE3-CBC\") {\n d = CryptoJS.TripleDES.encrypt(a, h, {\n iv: f\n });\n } else {\n if (b == \"aes128-CBC\" || b == \"aes256-CBC\") {\n d = CryptoJS.AES.encrypt(a, h, {\n iv: f\n });\n } else {\n throw new Error(\"unsupported algorithm: \" + b);\n }\n }\n return d + \"\";\n } else {\n throw new Error(\"Cipher.encrypt: unsupported key or algorithm\");\n }\n};\nKJUR.crypto.Cipher.decrypt = function (c, j, a, b) {\n if (aryval(b, \"enclag\") != undefined) {\n a = b.encalg;\n }\n if (typeof a == \"string\" && a.substr(-4) == \"-CBC\") {\n var h = j;\n var e = c;\n if (aryval(b, \"key\") != undefined) {\n h = b.key;\n }\n if (aryval(b, \"enc\") != undefined) {\n e = b.enc;\n }\n var i = CryptoJS.enc.Hex.parse(h);\n var f = CryptoJS.enc.Hex.parse(e);\n var g = CryptoJS.enc.Hex.parse(b.iv);\n var d;\n if (a == \"des-EDE3-CBC\") {\n d = CryptoJS.TripleDES.decrypt({\n ciphertext: f\n }, i, {\n iv: g\n });\n } else {\n if (a == \"aes128-CBC\" || a == \"aes256-CBC\") {\n d = CryptoJS.AES.decrypt({\n ciphertext: f\n }, i, {\n iv: g\n });\n } else {\n throw new Error(\"unsupported algorithm: \" + a);\n }\n }\n return CryptoJS.enc.Hex.stringify(d);\n } else {\n throw new Error(\"Cipher.decrypt: unsupported key or algorithm\");\n }\n};\nKJUR.crypto.OID = new function () {\n this.oidhex2name = {\n \"2a864886f70d010101\": \"rsaEncryption\",\n \"2a8648ce3d0201\": \"ecPublicKey\",\n \"2a8648ce380401\": \"dsa\",\n \"2a8648ce3d030107\": \"secp256r1\",\n \"2b8104001f\": \"secp192k1\",\n \"2b81040021\": \"secp224r1\",\n \"2b8104000a\": \"secp256k1\",\n \"2b81040022\": \"secp384r1\",\n \"2b81040023\": \"secp521r1\",\n \"2a8648ce380403\": \"SHA1withDSA\",\n \"608648016503040301\": \"SHA224withDSA\",\n \"608648016503040302\": \"SHA256withDSA\"\n };\n}();\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.crypto == \"undefined\" || !KJUR.crypto) {\n KJUR.crypto = {};\n}\nKJUR.crypto.ECDSA = function (e) {\n var g = \"secp256r1\";\n var p = null;\n var b = null;\n var i = null;\n var j = Error,\n f = BigInteger,\n h = ECPointFp,\n m = KJUR.crypto.ECDSA,\n c = KJUR.crypto.ECParameterDB,\n d = m.getName,\n q = ASN1HEX,\n n = q.getVbyListEx,\n k = q.isASN1HEX;\n var a = new SecureRandom();\n var o = null;\n this.type = \"EC\";\n this.isPrivate = false;\n this.isPublic = false;\n function l(x, t, w, s) {\n var r = Math.max(t.bitLength(), s.bitLength());\n var y = x.add2D(w);\n var v = x.curve.getInfinity();\n for (var u = r - 1; u >= 0; --u) {\n v = v.twice2D();\n v.z = f.ONE;\n if (t.testBit(u)) {\n if (s.testBit(u)) {\n v = v.add2D(y);\n } else {\n v = v.add2D(x);\n }\n } else {\n if (s.testBit(u)) {\n v = v.add2D(w);\n }\n }\n }\n return v;\n }\n this.getBigRandom = function (r) {\n return new f(r.bitLength(), a).mod(r.subtract(f.ONE)).add(f.ONE);\n };\n this.setNamedCurve = function (r) {\n this.ecparams = c.getByName(r);\n this.prvKeyHex = null;\n this.pubKeyHex = null;\n this.curveName = r;\n };\n this.setPrivateKeyHex = function (r) {\n this.isPrivate = true;\n this.prvKeyHex = r;\n };\n this.setPublicKeyHex = function (r) {\n this.isPublic = true;\n this.pubKeyHex = r;\n };\n this.getPublicKeyXYHex = function () {\n var t = this.pubKeyHex;\n if (t.substr(0, 2) !== \"04\") {\n throw \"this method supports uncompressed format(04) only\";\n }\n var s = this.ecparams.keycharlen;\n if (t.length !== 2 + s * 2) {\n throw \"malformed public key hex length\";\n }\n var r = {};\n r.x = t.substr(2, s);\n r.y = t.substr(2 + s);\n return r;\n };\n this.getShortNISTPCurveName = function () {\n var r = this.curveName;\n if (r === \"secp256r1\" || r === \"NIST P-256\" || r === \"P-256\" || r === \"prime256v1\") {\n return \"P-256\";\n }\n if (r === \"secp384r1\" || r === \"NIST P-384\" || r === \"P-384\") {\n return \"P-384\";\n }\n if (r === \"secp521r1\" || r === \"NIST P-521\" || r === \"P-521\") {\n return \"P-521\";\n }\n return null;\n };\n this.generateKeyPairHex = function () {\n var s = this.ecparams.n;\n var u = this.getBigRandom(s);\n var r = this.ecparams.keycharlen;\n var t = (\"0000000000\" + u.toString(16)).slice(-r);\n this.setPrivateKeyHex(t);\n var v = this.generatePublicKeyHex();\n return {\n ecprvhex: t,\n ecpubhex: v\n };\n };\n this.generatePublicKeyHex = function () {\n var u = new f(this.prvKeyHex, 16);\n var w = this.ecparams.G.multiply(u);\n var t = w.getX().toBigInteger();\n var s = w.getY().toBigInteger();\n var r = this.ecparams.keycharlen;\n var y = (\"0000000000\" + t.toString(16)).slice(-r);\n var v = (\"0000000000\" + s.toString(16)).slice(-r);\n var x = \"04\" + y + v;\n this.setPublicKeyHex(x);\n return x;\n };\n this.signWithMessageHash = function (r) {\n return this.signHex(r, this.prvKeyHex);\n };\n this.signHex = function (x, u) {\n var A = new f(u, 16);\n var v = this.ecparams.n;\n var z = new f(x.substring(0, this.ecparams.keycharlen), 16);\n do {\n var w = this.getBigRandom(v);\n var B = this.ecparams.G;\n var y = B.multiply(w);\n var t = y.getX().toBigInteger().mod(v);\n } while (t.compareTo(f.ZERO) <= 0);\n var C = w.modInverse(v).multiply(z.add(A.multiply(t))).mod(v);\n return m.biRSSigToASN1Sig(t, C);\n };\n this.sign = function (w, B) {\n var z = B;\n var u = this.ecparams.n;\n var y = f.fromByteArrayUnsigned(w);\n do {\n var v = this.getBigRandom(u);\n var A = this.ecparams.G;\n var x = A.multiply(v);\n var t = x.getX().toBigInteger().mod(u);\n } while (t.compareTo(BigInteger.ZERO) <= 0);\n var C = v.modInverse(u).multiply(y.add(z.multiply(t))).mod(u);\n return this.serializeSig(t, C);\n };\n this.verifyWithMessageHash = function (s, r) {\n return this.verifyHex(s, r, this.pubKeyHex);\n };\n this.verifyHex = function (v, y, u) {\n try {\n var t, B;\n var w = m.parseSigHex(y);\n t = w.r;\n B = w.s;\n var x = h.decodeFromHex(this.ecparams.curve, u);\n var z = new f(v.substring(0, this.ecparams.keycharlen), 16);\n return this.verifyRaw(z, t, B, x);\n } catch (A) {\n return false;\n }\n };\n this.verify = function (z, A, u) {\n var w, t;\n if (Bitcoin.Util.isArray(A)) {\n var y = this.parseSig(A);\n w = y.r;\n t = y.s;\n } else {\n if (\"object\" === typeof A && A.r && A.s) {\n w = A.r;\n t = A.s;\n } else {\n throw \"Invalid value for signature\";\n }\n }\n var v;\n if (u instanceof ECPointFp) {\n v = u;\n } else {\n if (Bitcoin.Util.isArray(u)) {\n v = h.decodeFrom(this.ecparams.curve, u);\n } else {\n throw \"Invalid format for pubkey value, must be byte array or ECPointFp\";\n }\n }\n var x = f.fromByteArrayUnsigned(z);\n return this.verifyRaw(x, w, t, v);\n };\n this.verifyRaw = function (z, t, E, y) {\n var x = this.ecparams.n;\n var D = this.ecparams.G;\n if (t.compareTo(f.ONE) < 0 || t.compareTo(x) >= 0) {\n return false;\n }\n if (E.compareTo(f.ONE) < 0 || E.compareTo(x) >= 0) {\n return false;\n }\n var A = E.modInverse(x);\n var w = z.multiply(A).mod(x);\n var u = t.multiply(A).mod(x);\n var B = D.multiply(w).add(y.multiply(u));\n var C = B.getX().toBigInteger().mod(x);\n return C.equals(t);\n };\n this.serializeSig = function (v, u) {\n var w = v.toByteArraySigned();\n var t = u.toByteArraySigned();\n var x = [];\n x.push(2);\n x.push(w.length);\n x = x.concat(w);\n x.push(2);\n x.push(t.length);\n x = x.concat(t);\n x.unshift(x.length);\n x.unshift(48);\n return x;\n };\n this.parseSig = function (y) {\n var x;\n if (y[0] != 48) {\n throw new Error(\"Signature not a valid DERSequence\");\n }\n x = 2;\n if (y[x] != 2) {\n throw new Error(\"First element in signature must be a DERInteger\");\n }\n var w = y.slice(x + 2, x + 2 + y[x + 1]);\n x += 2 + y[x + 1];\n if (y[x] != 2) {\n throw new Error(\"Second element in signature must be a DERInteger\");\n }\n var t = y.slice(x + 2, x + 2 + y[x + 1]);\n x += 2 + y[x + 1];\n var v = f.fromByteArrayUnsigned(w);\n var u = f.fromByteArrayUnsigned(t);\n return {\n r: v,\n s: u\n };\n };\n this.parseSigCompact = function (w) {\n if (w.length !== 65) {\n throw \"Signature has the wrong length\";\n }\n var t = w[0] - 27;\n if (t < 0 || t > 7) {\n throw \"Invalid signature type\";\n }\n var x = this.ecparams.n;\n var v = f.fromByteArrayUnsigned(w.slice(1, 33)).mod(x);\n var u = f.fromByteArrayUnsigned(w.slice(33, 65)).mod(x);\n return {\n r: v,\n s: u,\n i: t\n };\n };\n this.readPKCS5PrvKeyHex = function (u) {\n if (k(u) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n var r, t, v;\n try {\n r = n(u, 0, [\"[0]\", 0], \"06\");\n t = n(u, 0, [1], \"04\");\n try {\n v = n(u, 0, [\"[1]\", 0], \"03\");\n } catch (s) {}\n } catch (s) {\n throw new Error(\"malformed PKCS#1/5 plain ECC private key\");\n }\n this.curveName = d(r);\n if (this.curveName === undefined) {\n throw \"unsupported curve name\";\n }\n this.setNamedCurve(this.curveName);\n this.setPublicKeyHex(v);\n this.setPrivateKeyHex(t);\n this.isPublic = false;\n };\n this.readPKCS8PrvKeyHex = function (v) {\n if (k(v) === false) {\n throw new j(\"not ASN.1 hex string\");\n }\n var t, r, u, w;\n try {\n t = n(v, 0, [1, 0], \"06\");\n r = n(v, 0, [1, 1], \"06\");\n u = n(v, 0, [2, 0, 1], \"04\");\n try {\n w = n(v, 0, [2, 0, \"[1]\", 0], \"03\");\n } catch (s) {}\n } catch (s) {\n throw new j(\"malformed PKCS#8 plain ECC private key\");\n }\n this.curveName = d(r);\n if (this.curveName === undefined) {\n throw new j(\"unsupported curve name\");\n }\n this.setNamedCurve(this.curveName);\n this.setPublicKeyHex(w);\n this.setPrivateKeyHex(u);\n this.isPublic = false;\n };\n this.readPKCS8PubKeyHex = function (u) {\n if (k(u) === false) {\n throw new j(\"not ASN.1 hex string\");\n }\n var t, r, v;\n try {\n t = n(u, 0, [0, 0], \"06\");\n r = n(u, 0, [0, 1], \"06\");\n v = n(u, 0, [1], \"03\");\n } catch (s) {\n throw new j(\"malformed PKCS#8 ECC public key\");\n }\n this.curveName = d(r);\n if (this.curveName === null) {\n throw new j(\"unsupported curve name\");\n }\n this.setNamedCurve(this.curveName);\n this.setPublicKeyHex(v);\n };\n this.readCertPubKeyHex = function (t, v) {\n if (k(t) === false) {\n throw new j(\"not ASN.1 hex string\");\n }\n var r, u;\n try {\n r = n(t, 0, [0, 5, 0, 1], \"06\");\n u = n(t, 0, [0, 5, 1], \"03\");\n } catch (s) {\n throw new j(\"malformed X.509 certificate ECC public key\");\n }\n this.curveName = d(r);\n if (this.curveName === null) {\n throw new j(\"unsupported curve name\");\n }\n this.setNamedCurve(this.curveName);\n this.setPublicKeyHex(u);\n };\n if (e !== undefined) {\n if (e.curve !== undefined) {\n this.curveName = e.curve;\n }\n }\n if (this.curveName === undefined) {\n this.curveName = g;\n }\n this.setNamedCurve(this.curveName);\n if (e !== undefined) {\n if (e.prv !== undefined) {\n this.setPrivateKeyHex(e.prv);\n }\n if (e.pub !== undefined) {\n this.setPublicKeyHex(e.pub);\n }\n }\n};\nKJUR.crypto.ECDSA.parseSigHex = function (a) {\n var b = KJUR.crypto.ECDSA.parseSigHexInHexRS(a);\n var d = new BigInteger(b.r, 16);\n var c = new BigInteger(b.s, 16);\n return {\n r: d,\n s: c\n };\n};\nKJUR.crypto.ECDSA.parseSigHexInHexRS = function (f) {\n var j = ASN1HEX,\n i = j.getChildIdx,\n g = j.getV;\n j.checkStrictDER(f, 0);\n if (f.substr(0, 2) != \"30\") {\n throw new Error(\"signature is not a ASN.1 sequence\");\n }\n var h = i(f, 0);\n if (h.length != 2) {\n throw new Error(\"signature shall have two elements\");\n }\n var e = h[0];\n var d = h[1];\n if (f.substr(e, 2) != \"02\") {\n throw new Error(\"1st item not ASN.1 integer\");\n }\n if (f.substr(d, 2) != \"02\") {\n throw new Error(\"2nd item not ASN.1 integer\");\n }\n var c = g(f, e);\n var b = g(f, d);\n return {\n r: c,\n s: b\n };\n};\nKJUR.crypto.ECDSA.asn1SigToConcatSig = function (d) {\n var e = KJUR.crypto.ECDSA.parseSigHexInHexRS(d);\n var b = e.r;\n var a = e.s;\n if (b.length >= 130 && b.length <= 134) {\n if (b.length % 2 != 0) {\n throw Error(\"unknown ECDSA sig r length error\");\n }\n if (a.length % 2 != 0) {\n throw Error(\"unknown ECDSA sig s length error\");\n }\n if (b.substr(0, 2) == \"00\") {\n b = b.substr(2);\n }\n if (a.substr(0, 2) == \"00\") {\n a = a.substr(2);\n }\n var c = Math.max(b.length, a.length);\n b = (\"000000\" + b).slice(-c);\n a = (\"000000\" + a).slice(-c);\n return b + a;\n }\n if (b.substr(0, 2) == \"00\" && b.length % 32 == 2) {\n b = b.substr(2);\n }\n if (a.substr(0, 2) == \"00\" && a.length % 32 == 2) {\n a = a.substr(2);\n }\n if (b.length % 32 == 30) {\n b = \"00\" + b;\n }\n if (a.length % 32 == 30) {\n a = \"00\" + a;\n }\n if (b.length % 32 != 0) {\n throw Error(\"unknown ECDSA sig r length error\");\n }\n if (a.length % 32 != 0) {\n throw Error(\"unknown ECDSA sig s length error\");\n }\n return b + a;\n};\nKJUR.crypto.ECDSA.concatSigToASN1Sig = function (a) {\n if (a.length % 4 != 0) {\n throw Error(\"unknown ECDSA concatinated r-s sig length error\");\n }\n var c = a.substr(0, a.length / 2);\n var b = a.substr(a.length / 2);\n return KJUR.crypto.ECDSA.hexRSSigToASN1Sig(c, b);\n};\nKJUR.crypto.ECDSA.hexRSSigToASN1Sig = function (b, a) {\n var d = new BigInteger(b, 16);\n var c = new BigInteger(a, 16);\n return KJUR.crypto.ECDSA.biRSSigToASN1Sig(d, c);\n};\nKJUR.crypto.ECDSA.biRSSigToASN1Sig = function (f, d) {\n var c = KJUR.asn1;\n var b = new c.DERInteger({\n bigint: f\n });\n var a = new c.DERInteger({\n bigint: d\n });\n var e = new c.DERSequence({\n array: [b, a]\n });\n return e.tohex();\n};\nKJUR.crypto.ECDSA.getName = function (a) {\n if (a === \"2b8104001f\") {\n return \"secp192k1\";\n }\n if (a === \"2a8648ce3d030107\") {\n return \"secp256r1\";\n }\n if (a === \"2b8104000a\") {\n return \"secp256k1\";\n }\n if (a === \"2b81040021\") {\n return \"secp224r1\";\n }\n if (a === \"2b81040022\") {\n return \"secp384r1\";\n }\n if (a === \"2b81040023\") {\n return \"secp521r1\";\n }\n if (\"|secp256r1|NIST P-256|P-256|prime256v1|\".indexOf(a) !== -1) {\n return \"secp256r1\";\n }\n if (\"|secp256k1|\".indexOf(a) !== -1) {\n return \"secp256k1\";\n }\n if (\"|secp224r1|NIST P-224|P-224|\".indexOf(a) !== -1) {\n return \"secp224r1\";\n }\n if (\"|secp384r1|NIST P-384|P-384|\".indexOf(a) !== -1) {\n return \"secp384r1\";\n }\n if (\"|secp521r1|NIST P-521|P-521|\".indexOf(a) !== -1) {\n return \"secp521r1\";\n }\n return null;\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.crypto == \"undefined\" || !KJUR.crypto) {\n KJUR.crypto = {};\n}\nKJUR.crypto.ECParameterDB = new function () {\n var b = {};\n var c = {};\n function a(d) {\n return new BigInteger(d, 16);\n }\n this.getByName = function (e) {\n var d = e;\n if (typeof c[d] != \"undefined\") {\n d = c[e];\n }\n if (typeof b[d] != \"undefined\") {\n return b[d];\n }\n throw \"unregistered EC curve name: \" + d;\n };\n this.regist = function (A, l, o, g, m, e, j, f, k, u, d, x) {\n b[A] = {};\n var s = a(o);\n var z = a(g);\n var y = a(m);\n var t = a(e);\n var w = a(j);\n var r = new ECCurveFp(s, z, y);\n var q = r.decodePointHex(\"04\" + f + k);\n b[A][\"name\"] = A;\n b[A][\"keylen\"] = l;\n b[A][\"keycharlen\"] = Math.ceil(l / 8) * 2;\n b[A][\"curve\"] = r;\n b[A][\"G\"] = q;\n b[A][\"n\"] = t;\n b[A][\"h\"] = w;\n b[A][\"oid\"] = d;\n b[A][\"info\"] = x;\n for (var v = 0; v < u.length; v++) {\n c[u[v]] = A;\n }\n };\n}();\nKJUR.crypto.ECParameterDB.regist(\"secp128r1\", 128, \"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF\", \"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC\", \"E87579C11079F43DD824993C2CEE5ED3\", \"FFFFFFFE0000000075A30D1B9038A115\", \"1\", \"161FF7528B899B2D0C28607CA52C5B86\", \"CF5AC8395BAFEB13C02DA292DDED7A83\", [], \"\", \"secp128r1 : SECG curve over a 128 bit prime field\");\nKJUR.crypto.ECParameterDB.regist(\"secp160k1\", 160, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73\", \"0\", \"7\", \"0100000000000000000001B8FA16DFAB9ACA16B6B3\", \"1\", \"3B4C382CE37AA192A4019E763036F4F5DD4D7EBB\", \"938CF935318FDCED6BC28286531733C3F03C4FEE\", [], \"\", \"secp160k1 : SECG curve over a 160 bit prime field\");\nKJUR.crypto.ECParameterDB.regist(\"secp160r1\", 160, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC\", \"1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45\", \"0100000000000000000001F4C8F927AED3CA752257\", \"1\", \"4A96B5688EF573284664698968C38BB913CBFC82\", \"23A628553168947D59DCC912042351377AC5FB32\", [], \"\", \"secp160r1 : SECG curve over a 160 bit prime field\");\nKJUR.crypto.ECParameterDB.regist(\"secp192k1\", 192, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37\", \"0\", \"3\", \"FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D\", \"1\", \"DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D\", \"9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D\", []);\nKJUR.crypto.ECParameterDB.regist(\"secp192r1\", 192, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC\", \"64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1\", \"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831\", \"1\", \"188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012\", \"07192B95FFC8DA78631011ED6B24CDD573F977A11E794811\", []);\nKJUR.crypto.ECParameterDB.regist(\"secp224r1\", 224, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE\", \"B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D\", \"1\", \"B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21\", \"BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34\", []);\nKJUR.crypto.ECParameterDB.regist(\"secp256k1\", 256, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F\", \"0\", \"7\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\", \"1\", \"79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798\", \"483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8\", []);\nKJUR.crypto.ECParameterDB.regist(\"secp256r1\", 256, \"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF\", \"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC\", \"5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B\", \"FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551\", \"1\", \"6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296\", \"4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5\", [\"NIST P-256\", \"P-256\", \"prime256v1\"]);\nKJUR.crypto.ECParameterDB.regist(\"secp384r1\", 384, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC\", \"B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973\", \"1\", \"AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7\", \"3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f\", [\"NIST P-384\", \"P-384\"]);\nKJUR.crypto.ECParameterDB.regist(\"secp521r1\", 521, \"1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\", \"1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC\", \"051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00\", \"1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409\", \"1\", \"00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66\", \"011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650\", [\"NIST P-521\", \"P-521\"]);\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.crypto == \"undefined\" || !KJUR.crypto) {\n KJUR.crypto = {};\n}\nKJUR.crypto.DSA = function () {\n var b = ASN1HEX,\n e = b.getVbyList,\n d = b.getVbyListEx,\n a = b.isASN1HEX,\n c = BigInteger;\n this.p = null;\n this.q = null;\n this.g = null;\n this.y = null;\n this.x = null;\n this.type = \"DSA\";\n this.isPrivate = false;\n this.isPublic = false;\n this.setPrivate = function (j, i, h, k, f) {\n this.isPrivate = true;\n this.p = j;\n this.q = i;\n this.g = h;\n this.y = k;\n this.x = f;\n };\n this.setPrivateHex = function (i, g, k, n, o) {\n var h, f, j, l, m;\n h = new BigInteger(i, 16);\n f = new BigInteger(g, 16);\n j = new BigInteger(k, 16);\n if (typeof n === \"string\" && n.length > 1) {\n l = new BigInteger(n, 16);\n } else {\n l = null;\n }\n m = new BigInteger(o, 16);\n this.setPrivate(h, f, j, l, m);\n };\n this.setPublic = function (i, h, f, j) {\n this.isPublic = true;\n this.p = i;\n this.q = h;\n this.g = f;\n this.y = j;\n this.x = null;\n };\n this.setPublicHex = function (k, j, i, l) {\n var g, f, m, h;\n g = new BigInteger(k, 16);\n f = new BigInteger(j, 16);\n m = new BigInteger(i, 16);\n h = new BigInteger(l, 16);\n this.setPublic(g, f, m, h);\n };\n this.signWithMessageHash = function (j) {\n var i = this.p;\n var h = this.q;\n var m = this.g;\n var o = this.y;\n var t = this.x;\n var l = KJUR.crypto.Util.getRandomBigIntegerMinToMax(BigInteger.ONE.add(BigInteger.ONE), h.subtract(BigInteger.ONE));\n var u = j.substr(0, h.bitLength() / 4);\n var n = new BigInteger(u, 16);\n var f = m.modPow(l, i).mod(h);\n var w = l.modInverse(h).multiply(n.add(t.multiply(f))).mod(h);\n var v = KJUR.asn1.ASN1Util.jsonToASN1HEX({\n seq: [{\n \"int\": {\n bigint: f\n }\n }, {\n \"int\": {\n bigint: w\n }\n }]\n });\n return v;\n };\n this.verifyWithMessageHash = function (m, l) {\n var j = this.p;\n var h = this.q;\n var o = this.g;\n var u = this.y;\n var n = this.parseASN1Signature(l);\n var f = n[0];\n var C = n[1];\n var B = m.substr(0, h.bitLength() / 4);\n var t = new BigInteger(B, 16);\n if (BigInteger.ZERO.compareTo(f) > 0 || f.compareTo(h) > 0) {\n throw \"invalid DSA signature\";\n }\n if (BigInteger.ZERO.compareTo(C) >= 0 || C.compareTo(h) > 0) {\n throw \"invalid DSA signature\";\n }\n var x = C.modInverse(h);\n var k = t.multiply(x).mod(h);\n var i = f.multiply(x).mod(h);\n var A = o.modPow(k, j).multiply(u.modPow(i, j)).mod(j).mod(h);\n return A.compareTo(f) == 0;\n };\n this.parseASN1Signature = function (f) {\n try {\n var i = new c(d(f, 0, [0], \"02\"), 16);\n var h = new c(d(f, 0, [1], \"02\"), 16);\n return [i, h];\n } catch (g) {\n throw new Error(\"malformed ASN.1 DSA signature\");\n }\n };\n this.readPKCS5PrvKeyHex = function (j) {\n var k, i, g, l, m;\n if (a(j) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n try {\n k = d(j, 0, [1], \"02\");\n i = d(j, 0, [2], \"02\");\n g = d(j, 0, [3], \"02\");\n l = d(j, 0, [4], \"02\");\n m = d(j, 0, [5], \"02\");\n } catch (f) {\n throw new Error(\"malformed PKCS#1/5 plain DSA private key\");\n }\n this.setPrivateHex(k, i, g, l, m);\n };\n this.readPKCS8PrvKeyHex = function (j) {\n var k, i, g, l;\n if (a(j) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n try {\n k = d(j, 0, [1, 1, 0], \"02\");\n i = d(j, 0, [1, 1, 1], \"02\");\n g = d(j, 0, [1, 1, 2], \"02\");\n l = d(j, 0, [2, 0], \"02\");\n } catch (f) {\n throw new Error(\"malformed PKCS#8 plain DSA private key\");\n }\n this.setPrivateHex(k, i, g, null, l);\n };\n this.readPKCS8PubKeyHex = function (j) {\n var k, i, g, l;\n if (a(j) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n try {\n k = d(j, 0, [0, 1, 0], \"02\");\n i = d(j, 0, [0, 1, 1], \"02\");\n g = d(j, 0, [0, 1, 2], \"02\");\n l = d(j, 0, [1, 0], \"02\");\n } catch (f) {\n throw new Error(\"malformed PKCS#8 DSA public key\");\n }\n this.setPublicHex(k, i, g, l);\n };\n this.readCertPubKeyHex = function (j, m) {\n var k, i, g, l;\n if (a(j) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n try {\n k = d(j, 0, [0, 5, 0, 1, 0], \"02\");\n i = d(j, 0, [0, 5, 0, 1, 1], \"02\");\n g = d(j, 0, [0, 5, 0, 1, 2], \"02\");\n l = d(j, 0, [0, 5, 1, 0], \"02\");\n } catch (f) {\n throw new Error(\"malformed X.509 certificate DSA public key\");\n }\n this.setPublicHex(k, i, g, l);\n };\n};\nvar KEYUTIL = function () {\n var d = function (p, r, q) {\n return k(CryptoJS.AES, p, r, q);\n };\n var e = function (p, r, q) {\n return k(CryptoJS.TripleDES, p, r, q);\n };\n var a = function (p, r, q) {\n return k(CryptoJS.DES, p, r, q);\n };\n var k = function (s, x, u, q) {\n var r = CryptoJS.enc.Hex.parse(x);\n var w = CryptoJS.enc.Hex.parse(u);\n var p = CryptoJS.enc.Hex.parse(q);\n var t = {};\n t.key = w;\n t.iv = p;\n t.ciphertext = r;\n var v = s.decrypt(t, w, {\n iv: p\n });\n return CryptoJS.enc.Hex.stringify(v);\n };\n var l = function (p, r, q) {\n return g(CryptoJS.AES, p, r, q);\n };\n var o = function (p, r, q) {\n return g(CryptoJS.TripleDES, p, r, q);\n };\n var f = function (p, r, q) {\n return g(CryptoJS.DES, p, r, q);\n };\n var g = function (t, y, v, q) {\n var s = CryptoJS.enc.Hex.parse(y);\n var x = CryptoJS.enc.Hex.parse(v);\n var p = CryptoJS.enc.Hex.parse(q);\n var w = t.encrypt(s, x, {\n iv: p\n });\n var r = CryptoJS.enc.Hex.parse(w.toString());\n var u = CryptoJS.enc.Base64.stringify(r);\n return u;\n };\n var i = {\n \"AES-256-CBC\": {\n proc: d,\n eproc: l,\n keylen: 32,\n ivlen: 16\n },\n \"AES-192-CBC\": {\n proc: d,\n eproc: l,\n keylen: 24,\n ivlen: 16\n },\n \"AES-128-CBC\": {\n proc: d,\n eproc: l,\n keylen: 16,\n ivlen: 16\n },\n \"DES-EDE3-CBC\": {\n proc: e,\n eproc: o,\n keylen: 24,\n ivlen: 8\n },\n \"DES-CBC\": {\n proc: a,\n eproc: f,\n keylen: 8,\n ivlen: 8\n }\n };\n var c = function (p) {\n return i[p][\"proc\"];\n };\n var m = function (p) {\n var r = CryptoJS.lib.WordArray.random(p);\n var q = CryptoJS.enc.Hex.stringify(r);\n return q;\n };\n var n = function (v) {\n var w = {};\n var q = v.match(new RegExp(\"DEK-Info: ([^,]+),([0-9A-Fa-f]+)\", \"m\"));\n if (q) {\n w.cipher = q[1];\n w.ivsalt = q[2];\n }\n var p = v.match(new RegExp(\"-----BEGIN ([A-Z]+) PRIVATE KEY-----\"));\n if (p) {\n w.type = p[1];\n }\n var u = -1;\n var x = 0;\n if (v.indexOf(\"\\r\\n\\r\\n\") != -1) {\n u = v.indexOf(\"\\r\\n\\r\\n\");\n x = 2;\n }\n if (v.indexOf(\"\\n\\n\") != -1) {\n u = v.indexOf(\"\\n\\n\");\n x = 1;\n }\n var t = v.indexOf(\"-----END\");\n if (u != -1 && t != -1) {\n var r = v.substring(u + x * 2, t - x);\n r = r.replace(/\\s+/g, \"\");\n w.data = r;\n }\n return w;\n };\n var j = function (q, y, p) {\n var v = p.substring(0, 16);\n var t = CryptoJS.enc.Hex.parse(v);\n var r = CryptoJS.enc.Utf8.parse(y);\n var u = i[q][\"keylen\"] + i[q][\"ivlen\"];\n var x = \"\";\n var w = null;\n for (;;) {\n var s = CryptoJS.algo.MD5.create();\n if (w != null) {\n s.update(w);\n }\n s.update(r);\n s.update(t);\n w = s.finalize();\n x = x + CryptoJS.enc.Hex.stringify(w);\n if (x.length >= u * 2) {\n break;\n }\n }\n var z = {};\n z.keyhex = x.substr(0, i[q][\"keylen\"] * 2);\n z.ivhex = x.substr(i[q][\"keylen\"] * 2, i[q][\"ivlen\"] * 2);\n return z;\n };\n var b = function (p, v, r, w) {\n var s = CryptoJS.enc.Base64.parse(p);\n var q = CryptoJS.enc.Hex.stringify(s);\n var u = i[v][\"proc\"];\n var t = u(q, r, w);\n return t;\n };\n var h = function (p, s, q, u) {\n var r = i[s][\"eproc\"];\n var t = r(p, q, u);\n return t;\n };\n return {\n version: \"1.0.0\",\n parsePKCS5PEM: function (p) {\n return n(p);\n },\n getKeyAndUnusedIvByPasscodeAndIvsalt: function (q, p, r) {\n return j(q, p, r);\n },\n decryptKeyB64: function (p, r, q, s) {\n return b(p, r, q, s);\n },\n getDecryptedKeyHex: function (y, x) {\n var q = n(y);\n var t = q.type;\n var r = q.cipher;\n var p = q.ivsalt;\n var s = q.data;\n var w = j(r, x, p);\n var v = w.keyhex;\n var u = b(s, r, v, p);\n return u;\n },\n getEncryptedPKCS5PEMFromPrvKeyHex: function (x, s, A, t, r) {\n var p = \"\";\n if (typeof t == \"undefined\" || t == null) {\n t = \"AES-256-CBC\";\n }\n if (typeof i[t] == \"undefined\") {\n throw new Error(\"KEYUTIL unsupported algorithm: \" + t);\n }\n if (typeof r == \"undefined\" || r == null) {\n var v = i[t][\"ivlen\"];\n var u = m(v);\n r = u.toUpperCase();\n }\n var z = j(t, A, r);\n var y = z.keyhex;\n var w = h(s, t, y, r);\n var q = w.replace(/(.{64})/g, \"$1\\r\\n\");\n var p = \"-----BEGIN \" + x + \" PRIVATE KEY-----\\r\\n\";\n p += \"Proc-Type: 4,ENCRYPTED\\r\\n\";\n p += \"DEK-Info: \" + t + \",\" + r + \"\\r\\n\";\n p += \"\\r\\n\";\n p += q;\n p += \"\\r\\n-----END \" + x + \" PRIVATE KEY-----\\r\\n\";\n return p;\n },\n getEncryptedPKCS8PEM: function (r, p, s) {\n var q = this.getEncryptedPKCS8Hex(r, p, s);\n return hextopem(q, \"ENCRYPTED PRIVATE KEY\");\n },\n getEncryptedPKCS8Hex: function (r, p, t) {\n var q;\n if (t == undefined || t == null) {\n q = {};\n } else {\n q = JSON.parse(JSON.stringify(t));\n }\n q.plain = r;\n this.initPBES2Param(q);\n this.encryptPBES2Param(q, p);\n var s = this.generatePBES2ASN1Param(q);\n return KJUR.asn1.ASN1Util.newObject(s).tohex();\n },\n initPBES2Param: function (p) {\n if (aryval(p, \"encalg\") == undefined) {\n p.encalg = \"aes256-CBC\";\n }\n if (aryval(p, \"iter\") == undefined) {\n p.iter = 2048;\n }\n if (aryval(p, \"prf\") == undefined) {\n p.prf = \"hmacWithSHA256\";\n }\n if (aryval(p, \"salt\") == undefined) {\n p.salt = CryptoJS.enc.Hex.stringify(CryptoJS.lib.WordArray.random(8));\n }\n if (aryval(p, \"enciv\") == undefined) {\n var q;\n if (p.encalg == \"des-EDE3-CBC\") {\n q = 8;\n }\n if (p.encalg == \"aes128-CBC\") {\n q = 16;\n }\n if (p.encalg == \"aes256-CBC\") {\n q = 16;\n }\n p.enciv = CryptoJS.enc.Hex.stringify(CryptoJS.lib.WordArray.random(q));\n }\n },\n encryptPBES2Param: function (p, q) {\n var t = KEYUTIL.getDKFromPBES2Param(p, q);\n try {\n var s = KJUR.crypto.Cipher.encrypt(p.plain, t, p.encalg, {\n iv: p.enciv\n });\n } catch (r) {\n throw new Error(\"encrypt error: \" + p.plain + \" \" + t + \" \" + p.encalg + \" \" + p.enciv);\n }\n p.enc = s;\n },\n generatePBES2ASN1Param: function (p) {\n var q = {\n seq: [{\n seq: [{\n oid: \"pkcs5PBES2\"\n }, {\n seq: [{\n seq: [{\n oid: \"pkcs5PBKDF2\"\n }, {\n seq: [{\n octstr: {\n hex: p.salt\n }\n }, {\n \"int\": {\n hex: inttohex(p.iter)\n }\n }]\n }]\n }, {\n seq: [{\n oid: p.encalg\n }, {\n octstr: {\n hex: p.enciv\n }\n }]\n }]\n }]\n }, {\n octstr: {\n hex: p.enc\n }\n }]\n };\n if (p.prf != \"hmacWithSHA1\") {\n q.seq[0].seq[1].seq[0].seq[1].seq.push({\n seq: [{\n oid: p.prf\n }, {\n \"null\": \"\"\n }]\n });\n }\n return q;\n },\n parseHexOfEncryptedPKCS8: function (y) {\n var B = ASN1HEX;\n var z = B.getChildIdx;\n var w = B.getV;\n var t = {};\n var r = z(y, 0);\n if (r.length != 2) {\n throw new Error(\"malformed format: SEQUENCE(0).items != 2: \" + r.length);\n }\n t.ciphertext = w(y, r[1]);\n var A = z(y, r[0]);\n if (A.length != 2) {\n throw new Error(\"malformed format: SEQUENCE(0.0).items != 2: \" + A.length);\n }\n if (w(y, A[0]) != \"2a864886f70d01050d\") {\n throw new Error(\"this only supports pkcs5PBES2\");\n }\n var p = z(y, A[1]);\n if (A.length != 2) {\n throw new Error(\"malformed format: SEQUENCE(0.0.1).items != 2: \" + p.length);\n }\n var q = z(y, p[1]);\n if (q.length != 2) {\n throw new Error(\"malformed format: SEQUENCE(0.0.1.1).items != 2: \" + q.length);\n }\n if (w(y, q[0]) != \"2a864886f70d0307\") {\n throw \"this only supports TripleDES\";\n }\n t.encryptionSchemeAlg = \"TripleDES\";\n t.encryptionSchemeIV = w(y, q[1]);\n var s = z(y, p[0]);\n if (s.length != 2) {\n throw new Error(\"malformed format: SEQUENCE(0.0.1.0).items != 2: \" + s.length);\n }\n if (w(y, s[0]) != \"2a864886f70d01050c\") {\n throw new Error(\"this only supports pkcs5PBKDF2\");\n }\n var x = z(y, s[1]);\n if (x.length < 2) {\n throw new Error(\"malformed format: SEQUENCE(0.0.1.0.1).items < 2: \" + x.length);\n }\n t.pbkdf2Salt = w(y, x[0]);\n var u = w(y, x[1]);\n try {\n t.pbkdf2Iter = parseInt(u, 16);\n } catch (v) {\n throw new Error(\"malformed format pbkdf2Iter: \" + u);\n }\n return t;\n },\n getPBKDF2KeyHexFromParam: function (u, p) {\n var t = CryptoJS.enc.Hex.parse(u.pbkdf2Salt);\n var q = u.pbkdf2Iter;\n var s = CryptoJS.PBKDF2(p, t, {\n keySize: 192 / 32,\n iterations: q\n });\n var r = CryptoJS.enc.Hex.stringify(s);\n return r;\n },\n _getPlainPKCS8HexFromEncryptedPKCS8PEM: function (x, y) {\n var r = pemtohex(x, \"ENCRYPTED PRIVATE KEY\");\n var p = this.parseHexOfEncryptedPKCS8(r);\n var u = KEYUTIL.getPBKDF2KeyHexFromParam(p, y);\n var v = {};\n v.ciphertext = CryptoJS.enc.Hex.parse(p.ciphertext);\n var t = CryptoJS.enc.Hex.parse(u);\n var s = CryptoJS.enc.Hex.parse(p.encryptionSchemeIV);\n var w = CryptoJS.TripleDES.decrypt(v, t, {\n iv: s\n });\n var q = CryptoJS.enc.Hex.stringify(w);\n return q;\n },\n parsePBES2: function (z) {\n var v = ASN1HEX.parse(z);\n if (aryval(v, \"seq.0.seq.0.oid\") != \"pkcs5PBES2\" || aryval(v, \"seq.0.seq.1.seq.0.seq.0.oid\") != \"pkcs5PBKDF2\") {\n throw new Error(\"not pkcs5PBES2 and pkcs5PBKDF2 used\");\n }\n var y = aryval(v, \"seq.0.seq.1.seq.0.seq.1.seq\");\n if (y == undefined) {\n throw new Error(\"PBKDF2 parameter not found\");\n }\n var t = aryval(y, \"0.octstr.hex\");\n var p = aryval(y, \"1.int.hex\");\n var q = aryval(y, \"2.seq.0.oid\", \"hmacWithSHA1\");\n var x = -1;\n try {\n x = parseInt(p, 16);\n } catch (w) {\n throw new Error(\"iter not proper value\");\n }\n var u = aryval(v, \"seq.0.seq.1.seq.1.seq.0.oid\");\n var s = aryval(v, \"seq.0.seq.1.seq.1.seq.1.octstr.hex\");\n var r = aryval(v, \"seq.1.octstr.hex\");\n if (u == undefined || s == undefined || r == undefined) {\n throw new Error(\"encalg, enciv or enc is undefined\");\n }\n var A = {\n salt: t,\n iter: x,\n prf: q,\n encalg: u,\n enciv: s,\n enc: r\n };\n return A;\n },\n getDKFromPBES2Param: function (p, w) {\n var x = {\n hmacWithSHA1: CryptoJS.algo.SHA1,\n hmacWithSHA224: CryptoJS.algo.SHA224,\n hmacWithSHA256: CryptoJS.algo.SHA256,\n hmacWithSHA384: CryptoJS.algo.SHA384,\n hmacWithSHA512: CryptoJS.algo.SHA512\n };\n var q = {\n \"des-EDE3-CBC\": 192 / 32,\n \"aes128-CBC\": 128 / 32,\n \"aes256-CBC\": 256 / 32\n };\n var y = x[p.prf];\n if (y == undefined) {\n throw new Error(\"unsupported prf\");\n }\n var r = q[p.encalg];\n if (r == undefined) {\n throw new Error(\"unsupported encalg\");\n }\n var s = CryptoJS.enc.Hex.parse(p.salt);\n var u = p.iter;\n try {\n var v = CryptoJS.PBKDF2(w, s, {\n keySize: r,\n iterations: u,\n hasher: y\n });\n return CryptoJS.enc.Hex.stringify(v);\n } catch (t) {\n throw new Error(\"PBKDF2 error: \" + t + \" \" + JSON.stringify(p) + \" \" + w);\n }\n },\n getPlainHexFromEncryptedPKCS8PEM: function (t, q) {\n if (t.indexOf(\"BEGIN ENCRYPTED PRIVATE KEY\") == -1) {\n throw new Error(\"not Encrypted PKCS#8 PEM string\");\n }\n var u = pemtohex(t);\n var p;\n try {\n p = KEYUTIL.parsePBES2(u);\n } catch (r) {\n throw new Error(\"malformed PBES2 format: \" + r.message);\n }\n var s = KEYUTIL.getDKFromPBES2Param(p, q);\n return KJUR.crypto.Cipher.decrypt(p.enc, s, p.encalg, {\n iv: p.enciv\n });\n },\n getKeyFromEncryptedPKCS8PEM: function (s, q) {\n var p = this.getPlainHexFromEncryptedPKCS8PEM(s, q);\n var r = this.getKeyFromPlainPrivatePKCS8Hex(p);\n return r;\n },\n parsePlainPrivatePKCS8Hex: function (s) {\n var v = ASN1HEX;\n var u = v.getChildIdx;\n var t = v.getV;\n var q = {};\n q.algparam = null;\n if (s.substr(0, 2) != \"30\") {\n throw new Error(\"malformed plain PKCS8 private key(code:001)\");\n }\n var r = u(s, 0);\n if (r.length < 3) {\n throw new Error(\"malformed plain PKCS8 private key(code:002)\");\n }\n if (s.substr(r[1], 2) != \"30\") {\n throw new Error(\"malformed PKCS8 private key(code:003)\");\n }\n var p = u(s, r[1]);\n if (p.length != 2) {\n throw new Error(\"malformed PKCS8 private key(code:004)\");\n }\n if (s.substr(p[0], 2) != \"06\") {\n throw new Error(\"malformed PKCS8 private key(code:005)\");\n }\n q.algoid = t(s, p[0]);\n if (s.substr(p[1], 2) == \"06\") {\n q.algparam = t(s, p[1]);\n }\n if (s.substr(r[2], 2) != \"04\") {\n throw new Error(\"malformed PKCS8 private key(code:006)\");\n }\n q.keyidx = v.getVidx(s, r[2]);\n return q;\n },\n getKeyFromPlainPrivatePKCS8PEM: function (q) {\n var p = pemtohex(q, \"PRIVATE KEY\");\n var r = this.getKeyFromPlainPrivatePKCS8Hex(p);\n return r;\n },\n getKeyFromPlainPrivatePKCS8Hex: function (p) {\n var q = this.parsePlainPrivatePKCS8Hex(p);\n var r;\n if (q.algoid == \"2a864886f70d010101\") {\n r = new RSAKey();\n } else {\n if (q.algoid == \"2a8648ce380401\") {\n r = new KJUR.crypto.DSA();\n } else {\n if (q.algoid == \"2a8648ce3d0201\") {\n r = new KJUR.crypto.ECDSA();\n } else {\n throw new Error(\"unsupported private key algorithm\");\n }\n }\n }\n r.readPKCS8PrvKeyHex(p);\n return r;\n },\n _getKeyFromPublicPKCS8Hex: function (q) {\n var p;\n var r = ASN1HEX.getVbyList(q, 0, [0, 0], \"06\");\n if (r === \"2a864886f70d010101\") {\n p = new RSAKey();\n } else {\n if (r === \"2a8648ce380401\") {\n p = new KJUR.crypto.DSA();\n } else {\n if (r === \"2a8648ce3d0201\") {\n p = new KJUR.crypto.ECDSA();\n } else {\n throw new Error(\"unsupported PKCS#8 public key hex\");\n }\n }\n }\n p.readPKCS8PubKeyHex(q);\n return p;\n },\n parsePublicRawRSAKeyHex: function (r) {\n var u = ASN1HEX;\n var t = u.getChildIdx;\n var s = u.getV;\n var p = {};\n if (r.substr(0, 2) != \"30\") {\n throw new Error(\"malformed RSA key(code:001)\");\n }\n var q = t(r, 0);\n if (q.length != 2) {\n throw new Error(\"malformed RSA key(code:002)\");\n }\n if (r.substr(q[0], 2) != \"02\") {\n throw new Error(\"malformed RSA key(code:003)\");\n }\n p.n = s(r, q[0]);\n if (r.substr(q[1], 2) != \"02\") {\n throw new Error(\"malformed RSA key(code:004)\");\n }\n p.e = s(r, q[1]);\n return p;\n },\n parsePublicPKCS8Hex: function (t) {\n var v = ASN1HEX;\n var u = v.getChildIdx;\n var s = v.getV;\n var q = {};\n q.algparam = null;\n var r = u(t, 0);\n if (r.length != 2) {\n throw new Error(\"outer DERSequence shall have 2 elements: \" + r.length);\n }\n var w = r[0];\n if (t.substr(w, 2) != \"30\") {\n throw new Error(\"malformed PKCS8 public key(code:001)\");\n }\n var p = u(t, w);\n if (p.length != 2) {\n throw new Error(\"malformed PKCS8 public key(code:002)\");\n }\n if (t.substr(p[0], 2) != \"06\") {\n throw new Error(\"malformed PKCS8 public key(code:003)\");\n }\n q.algoid = s(t, p[0]);\n if (t.substr(p[1], 2) == \"06\") {\n q.algparam = s(t, p[1]);\n } else {\n if (t.substr(p[1], 2) == \"30\") {\n q.algparam = {};\n q.algparam.p = v.getVbyList(t, p[1], [0], \"02\");\n q.algparam.q = v.getVbyList(t, p[1], [1], \"02\");\n q.algparam.g = v.getVbyList(t, p[1], [2], \"02\");\n }\n }\n if (t.substr(r[1], 2) != \"03\") {\n throw new Error(\"malformed PKCS8 public key(code:004)\");\n }\n q.key = s(t, r[1]).substr(2);\n return q;\n }\n };\n}();\nKEYUTIL.getKey = function (l, k, n) {\n var G = ASN1HEX,\n L = G.getChildIdx,\n v = G.getV,\n d = G.getVbyList,\n c = KJUR.crypto,\n i = c.ECDSA,\n C = c.DSA,\n w = RSAKey,\n M = pemtohex,\n F = KEYUTIL;\n if (typeof w != \"undefined\" && l instanceof w) {\n return l;\n }\n if (typeof i != \"undefined\" && l instanceof i) {\n return l;\n }\n if (typeof C != \"undefined\" && l instanceof C) {\n return l;\n }\n if (l.curve !== undefined && l.xy !== undefined && l.d === undefined) {\n return new i({\n pub: l.xy,\n curve: l.curve\n });\n }\n if (l.curve !== undefined && l.d !== undefined) {\n return new i({\n prv: l.d,\n curve: l.curve\n });\n }\n if (l.kty === undefined && l.n !== undefined && l.e !== undefined && l.d === undefined) {\n var P = new w();\n P.setPublic(l.n, l.e);\n return P;\n }\n if (l.kty === undefined && l.n !== undefined && l.e !== undefined && l.d !== undefined && l.p !== undefined && l.q !== undefined && l.dp !== undefined && l.dq !== undefined && l.co !== undefined && l.qi === undefined) {\n var P = new w();\n P.setPrivateEx(l.n, l.e, l.d, l.p, l.q, l.dp, l.dq, l.co);\n return P;\n }\n if (l.kty === undefined && l.n !== undefined && l.e !== undefined && l.d !== undefined && l.p === undefined) {\n var P = new w();\n P.setPrivate(l.n, l.e, l.d);\n return P;\n }\n if (l.p !== undefined && l.q !== undefined && l.g !== undefined && l.y !== undefined && l.x === undefined) {\n var P = new C();\n P.setPublic(l.p, l.q, l.g, l.y);\n return P;\n }\n if (l.p !== undefined && l.q !== undefined && l.g !== undefined && l.y !== undefined && l.x !== undefined) {\n var P = new C();\n P.setPrivate(l.p, l.q, l.g, l.y, l.x);\n return P;\n }\n if (l.kty === \"RSA\" && l.n !== undefined && l.e !== undefined && l.d === undefined) {\n var P = new w();\n P.setPublic(b64utohex(l.n), b64utohex(l.e));\n return P;\n }\n if (l.kty === \"RSA\" && l.n !== undefined && l.e !== undefined && l.d !== undefined && l.p !== undefined && l.q !== undefined && l.dp !== undefined && l.dq !== undefined && l.qi !== undefined) {\n var P = new w();\n P.setPrivateEx(b64utohex(l.n), b64utohex(l.e), b64utohex(l.d), b64utohex(l.p), b64utohex(l.q), b64utohex(l.dp), b64utohex(l.dq), b64utohex(l.qi));\n return P;\n }\n if (l.kty === \"RSA\" && l.n !== undefined && l.e !== undefined && l.d !== undefined) {\n var P = new w();\n P.setPrivate(b64utohex(l.n), b64utohex(l.e), b64utohex(l.d));\n return P;\n }\n if (l.kty === \"EC\" && l.crv !== undefined && l.x !== undefined && l.y !== undefined && l.d === undefined) {\n var j = new i({\n curve: l.crv\n });\n var t = j.ecparams.keycharlen;\n var B = (\"0000000000\" + b64utohex(l.x)).slice(-t);\n var z = (\"0000000000\" + b64utohex(l.y)).slice(-t);\n var u = \"04\" + B + z;\n j.setPublicKeyHex(u);\n return j;\n }\n if (l.kty === \"EC\" && l.crv !== undefined && l.x !== undefined && l.y !== undefined && l.d !== undefined) {\n var j = new i({\n curve: l.crv\n });\n var t = j.ecparams.keycharlen;\n var B = (\"0000000000\" + b64utohex(l.x)).slice(-t);\n var z = (\"0000000000\" + b64utohex(l.y)).slice(-t);\n var u = \"04\" + B + z;\n var b = (\"0000000000\" + b64utohex(l.d)).slice(-t);\n j.setPublicKeyHex(u);\n j.setPrivateKeyHex(b);\n return j;\n }\n if (n === \"pkcs5prv\") {\n var J = l,\n G = ASN1HEX,\n N,\n P;\n N = L(J, 0);\n if (N.length === 9) {\n P = new w();\n P.readPKCS5PrvKeyHex(J);\n } else {\n if (N.length === 6) {\n P = new C();\n P.readPKCS5PrvKeyHex(J);\n } else {\n if (N.length > 2 && J.substr(N[1], 2) === \"04\") {\n P = new i();\n P.readPKCS5PrvKeyHex(J);\n } else {\n throw new Error(\"unsupported PKCS#1/5 hexadecimal key\");\n }\n }\n }\n return P;\n }\n if (n === \"pkcs8prv\") {\n var P = F.getKeyFromPlainPrivatePKCS8Hex(l);\n return P;\n }\n if (n === \"pkcs8pub\") {\n return F._getKeyFromPublicPKCS8Hex(l);\n }\n if (n === \"x509pub\") {\n return X509.getPublicKeyFromCertHex(l);\n }\n if (l.indexOf(\"-END CERTIFICATE-\", 0) != -1 || l.indexOf(\"-END X509 CERTIFICATE-\", 0) != -1 || l.indexOf(\"-END TRUSTED CERTIFICATE-\", 0) != -1) {\n return X509.getPublicKeyFromCertPEM(l);\n }\n if (l.indexOf(\"-END PUBLIC KEY-\") != -1) {\n var O = pemtohex(l, \"PUBLIC KEY\");\n return F._getKeyFromPublicPKCS8Hex(O);\n }\n if (l.indexOf(\"-END RSA PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") == -1) {\n var m = M(l, \"RSA PRIVATE KEY\");\n return F.getKey(m, null, \"pkcs5prv\");\n }\n if (l.indexOf(\"-END DSA PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") == -1) {\n var I = M(l, \"DSA PRIVATE KEY\");\n var E = d(I, 0, [1], \"02\");\n var D = d(I, 0, [2], \"02\");\n var K = d(I, 0, [3], \"02\");\n var r = d(I, 0, [4], \"02\");\n var s = d(I, 0, [5], \"02\");\n var P = new C();\n P.setPrivate(new BigInteger(E, 16), new BigInteger(D, 16), new BigInteger(K, 16), new BigInteger(r, 16), new BigInteger(s, 16));\n return P;\n }\n if (l.indexOf(\"-END EC PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") == -1) {\n var m = M(l, \"EC PRIVATE KEY\");\n return F.getKey(m, null, \"pkcs5prv\");\n }\n if (l.indexOf(\"-END PRIVATE KEY-\") != -1) {\n return F.getKeyFromPlainPrivatePKCS8PEM(l);\n }\n if (l.indexOf(\"-END RSA PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") != -1) {\n var o = F.getDecryptedKeyHex(l, k);\n var H = new RSAKey();\n H.readPKCS5PrvKeyHex(o);\n return H;\n }\n if (l.indexOf(\"-END EC PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") != -1) {\n var I = F.getDecryptedKeyHex(l, k);\n var P = d(I, 0, [1], \"04\");\n var f = d(I, 0, [2, 0], \"06\");\n var A = d(I, 0, [3, 0], \"03\").substr(2);\n var e = \"\";\n if (KJUR.crypto.OID.oidhex2name[f] !== undefined) {\n e = KJUR.crypto.OID.oidhex2name[f];\n } else {\n throw new Error(\"undefined OID(hex) in KJUR.crypto.OID: \" + f);\n }\n var j = new i({\n curve: e\n });\n j.setPublicKeyHex(A);\n j.setPrivateKeyHex(P);\n j.isPublic = false;\n return j;\n }\n if (l.indexOf(\"-END DSA PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") != -1) {\n var I = F.getDecryptedKeyHex(l, k);\n var E = d(I, 0, [1], \"02\");\n var D = d(I, 0, [2], \"02\");\n var K = d(I, 0, [3], \"02\");\n var r = d(I, 0, [4], \"02\");\n var s = d(I, 0, [5], \"02\");\n var P = new C();\n P.setPrivate(new BigInteger(E, 16), new BigInteger(D, 16), new BigInteger(K, 16), new BigInteger(r, 16), new BigInteger(s, 16));\n return P;\n }\n if (l.indexOf(\"-END ENCRYPTED PRIVATE KEY-\") != -1) {\n return F.getKeyFromEncryptedPKCS8PEM(l, k);\n }\n throw new Error(\"not supported argument\");\n};\nKEYUTIL.generateKeypair = function (a, c) {\n if (a == \"RSA\") {\n var b = c;\n var h = new RSAKey();\n h.generate(b, \"10001\");\n h.isPrivate = true;\n h.isPublic = true;\n var f = new RSAKey();\n var e = h.n.toString(16);\n var i = h.e.toString(16);\n f.setPublic(e, i);\n f.isPrivate = false;\n f.isPublic = true;\n var k = {};\n k.prvKeyObj = h;\n k.pubKeyObj = f;\n return k;\n } else {\n if (a == \"EC\") {\n var d = c;\n var g = new KJUR.crypto.ECDSA({\n curve: d\n });\n var j = g.generateKeyPairHex();\n var h = new KJUR.crypto.ECDSA({\n curve: d\n });\n h.setPublicKeyHex(j.ecpubhex);\n h.setPrivateKeyHex(j.ecprvhex);\n h.isPrivate = true;\n h.isPublic = false;\n var f = new KJUR.crypto.ECDSA({\n curve: d\n });\n f.setPublicKeyHex(j.ecpubhex);\n f.isPrivate = false;\n f.isPublic = true;\n var k = {};\n k.prvKeyObj = h;\n k.pubKeyObj = f;\n return k;\n } else {\n throw new Error(\"unknown algorithm: \" + a);\n }\n }\n};\nKEYUTIL.getPEM = function (b, C, x, m, p, j) {\n var E = KJUR,\n k = E.asn1,\n y = k.DERObjectIdentifier,\n e = k.DERInteger,\n l = k.ASN1Util.newObject,\n a = k.x509,\n B = a.SubjectPublicKeyInfo,\n d = E.crypto,\n t = d.DSA,\n q = d.ECDSA,\n n = RSAKey;\n function z(s) {\n var G = l({\n seq: [{\n \"int\": 0\n }, {\n \"int\": {\n bigint: s.n\n }\n }, {\n \"int\": s.e\n }, {\n \"int\": {\n bigint: s.d\n }\n }, {\n \"int\": {\n bigint: s.p\n }\n }, {\n \"int\": {\n bigint: s.q\n }\n }, {\n \"int\": {\n bigint: s.dmp1\n }\n }, {\n \"int\": {\n bigint: s.dmq1\n }\n }, {\n \"int\": {\n bigint: s.coeff\n }\n }]\n });\n return G;\n }\n function A(G) {\n var s = l({\n seq: [{\n \"int\": 1\n }, {\n octstr: {\n hex: G.prvKeyHex\n }\n }, {\n tag: [\"a0\", true, {\n oid: {\n name: G.curveName\n }\n }]\n }, {\n tag: [\"a1\", true, {\n bitstr: {\n hex: \"00\" + G.pubKeyHex\n }\n }]\n }]\n });\n return s;\n }\n function w(s) {\n var G = l({\n seq: [{\n \"int\": 0\n }, {\n \"int\": {\n bigint: s.p\n }\n }, {\n \"int\": {\n bigint: s.q\n }\n }, {\n \"int\": {\n bigint: s.g\n }\n }, {\n \"int\": {\n bigint: s.y\n }\n }, {\n \"int\": {\n bigint: s.x\n }\n }]\n });\n return G;\n }\n if ((n !== undefined && b instanceof n || t !== undefined && b instanceof t || q !== undefined && b instanceof q) && b.isPublic == true && (C === undefined || C == \"PKCS8PUB\")) {\n var D = new B(b);\n var v = D.tohex();\n return hextopem(v, \"PUBLIC KEY\");\n }\n if (C == \"PKCS1PRV\" && n !== undefined && b instanceof n && (x === undefined || x == null) && b.isPrivate == true) {\n var D = z(b);\n var v = D.tohex();\n return hextopem(v, \"RSA PRIVATE KEY\");\n }\n if (C == \"PKCS1PRV\" && q !== undefined && b instanceof q && (x === undefined || x == null) && b.isPrivate == true) {\n var i = new y({\n name: b.curveName\n });\n var u = i.tohex();\n var h = A(b);\n var r = h.tohex();\n var o = \"\";\n o += hextopem(u, \"EC PARAMETERS\");\n o += hextopem(r, \"EC PRIVATE KEY\");\n return o;\n }\n if (C == \"PKCS1PRV\" && t !== undefined && b instanceof t && (x === undefined || x == null) && b.isPrivate == true) {\n var D = w(b);\n var v = D.tohex();\n return hextopem(v, \"DSA PRIVATE KEY\");\n }\n if (C == \"PKCS5PRV\" && n !== undefined && b instanceof n && x !== undefined && x != null && b.isPrivate == true) {\n var D = z(b);\n var v = D.tohex();\n if (m === undefined) {\n m = \"DES-EDE3-CBC\";\n }\n return this.getEncryptedPKCS5PEMFromPrvKeyHex(\"RSA\", v, x, m, j);\n }\n if (C == \"PKCS5PRV\" && q !== undefined && b instanceof q && x !== undefined && x != null && b.isPrivate == true) {\n var D = A(b);\n var v = D.tohex();\n if (m === undefined) {\n m = \"DES-EDE3-CBC\";\n }\n return this.getEncryptedPKCS5PEMFromPrvKeyHex(\"EC\", v, x, m, j);\n }\n if (C == \"PKCS5PRV\" && t !== undefined && b instanceof t && x !== undefined && x != null && b.isPrivate == true) {\n var D = w(b);\n var v = D.tohex();\n if (m === undefined) {\n m = \"DES-EDE3-CBC\";\n }\n return this.getEncryptedPKCS5PEMFromPrvKeyHex(\"DSA\", v, x, m, j);\n }\n var f = function (G, H) {\n if (typeof H == \"string\") {\n return KEYUTIL.getEncryptedPKCS8PEM(G, H);\n } else {\n if (typeof H == \"object\" && aryval(H, \"passcode\") != undefined) {\n var I = JSON.parse(JSON.stringify(H));\n var s = I.passcode;\n delete I.passcode;\n return KEYUTIL.getEncryptedPKCS8PEM(G, s, I);\n }\n }\n };\n if (C == \"PKCS8PRV\" && n != undefined && b instanceof n && b.isPrivate == true) {\n var g = z(b);\n var c = g.tohex();\n var D = l({\n seq: [{\n \"int\": 0\n }, {\n seq: [{\n oid: {\n name: \"rsaEncryption\"\n }\n }, {\n \"null\": true\n }]\n }, {\n octstr: {\n hex: c\n }\n }]\n });\n var v = D.tohex();\n if (x === undefined || x == null) {\n return hextopem(v, \"PRIVATE KEY\");\n } else {\n return f(v, x);\n }\n }\n if (C == \"PKCS8PRV\" && q !== undefined && b instanceof q && b.isPrivate == true) {\n var F = {\n seq: [{\n \"int\": 1\n }, {\n octstr: {\n hex: b.prvKeyHex\n }\n }]\n };\n if (typeof b.pubKeyHex == \"string\") {\n F.seq.push({\n tag: [\"a1\", true, {\n bitstr: {\n hex: \"00\" + b.pubKeyHex\n }\n }]\n });\n }\n var g = new l(F);\n var c = g.tohex();\n var D = l({\n seq: [{\n \"int\": 0\n }, {\n seq: [{\n oid: {\n name: \"ecPublicKey\"\n }\n }, {\n oid: {\n name: b.curveName\n }\n }]\n }, {\n octstr: {\n hex: c\n }\n }]\n });\n var v = D.tohex();\n if (x === undefined || x == null) {\n return hextopem(v, \"PRIVATE KEY\");\n } else {\n return f(v, x);\n }\n }\n if (C == \"PKCS8PRV\" && t !== undefined && b instanceof t && b.isPrivate == true) {\n var g = new e({\n bigint: b.x\n });\n var c = g.tohex();\n var D = l({\n seq: [{\n \"int\": 0\n }, {\n seq: [{\n oid: {\n name: \"dsa\"\n }\n }, {\n seq: [{\n \"int\": {\n bigint: b.p\n }\n }, {\n \"int\": {\n bigint: b.q\n }\n }, {\n \"int\": {\n bigint: b.g\n }\n }]\n }]\n }, {\n octstr: {\n hex: c\n }\n }]\n });\n var v = D.tohex();\n if (x === undefined || x == null) {\n return hextopem(v, \"PRIVATE KEY\");\n } else {\n return f(v, x);\n }\n }\n throw new Error(\"unsupported object nor format\");\n};\nKEYUTIL.getKeyFromCSRPEM = function (b) {\n var a = pemtohex(b, \"CERTIFICATE REQUEST\");\n var c = KEYUTIL.getKeyFromCSRHex(a);\n return c;\n};\nKEYUTIL.getKeyFromCSRHex = function (a) {\n var c = KEYUTIL.parseCSRHex(a);\n var b = KEYUTIL.getKey(c.p8pubkeyhex, null, \"pkcs8pub\");\n return b;\n};\nKEYUTIL.parseCSRHex = function (d) {\n var i = ASN1HEX;\n var f = i.getChildIdx;\n var c = i.getTLV;\n var b = {};\n var g = d;\n if (g.substr(0, 2) != \"30\") {\n throw new Error(\"malformed CSR(code:001)\");\n }\n var e = f(g, 0);\n if (e.length < 1) {\n throw new Error(\"malformed CSR(code:002)\");\n }\n if (g.substr(e[0], 2) != \"30\") {\n throw new Error(\"malformed CSR(code:003)\");\n }\n var a = f(g, e[0]);\n if (a.length < 3) {\n throw new Error(\"malformed CSR(code:004)\");\n }\n b.p8pubkeyhex = c(g, a[2]);\n return b;\n};\nKEYUTIL.getKeyID = function (f) {\n var c = KEYUTIL;\n var e = ASN1HEX;\n if (typeof f === \"string\" && f.indexOf(\"BEGIN \") != -1) {\n f = c.getKey(f);\n }\n var d = pemtohex(c.getPEM(f));\n var b = e.getIdxbyList(d, 0, [1]);\n var a = e.getV(d, b).substring(2);\n return KJUR.crypto.Util.hashHex(a, \"sha1\");\n};\nKEYUTIL.getJWK = function (d, h, g, b, f) {\n var i;\n var k = {};\n var e;\n var c = KJUR.crypto.Util.hashHex;\n if (typeof d == \"string\") {\n i = KEYUTIL.getKey(d);\n if (d.indexOf(\"CERTIFICATE\") != -1) {\n e = pemtohex(d);\n }\n } else {\n if (typeof d == \"object\") {\n if (d instanceof X509) {\n i = d.getPublicKey();\n e = d.hex;\n } else {\n i = d;\n }\n } else {\n throw new Error(\"unsupported keyinfo type\");\n }\n }\n if (i instanceof RSAKey && i.isPrivate) {\n k.kty = \"RSA\";\n k.n = hextob64u(i.n.toString(16));\n k.e = hextob64u(i.e.toString(16));\n k.d = hextob64u(i.d.toString(16));\n k.p = hextob64u(i.p.toString(16));\n k.q = hextob64u(i.q.toString(16));\n k.dp = hextob64u(i.dmp1.toString(16));\n k.dq = hextob64u(i.dmq1.toString(16));\n k.qi = hextob64u(i.coeff.toString(16));\n } else {\n if (i instanceof RSAKey && i.isPublic) {\n k.kty = \"RSA\";\n k.n = hextob64u(i.n.toString(16));\n k.e = hextob64u(i.e.toString(16));\n } else {\n if (i instanceof KJUR.crypto.ECDSA && i.isPrivate) {\n var a = i.getShortNISTPCurveName();\n if (a !== \"P-256\" && a !== \"P-384\" && a !== \"P-521\") {\n throw new Error(\"unsupported curve name for JWT: \" + a);\n }\n var j = i.getPublicKeyXYHex();\n k.kty = \"EC\";\n k.crv = a;\n k.x = hextob64u(j.x);\n k.y = hextob64u(j.y);\n k.d = hextob64u(i.prvKeyHex);\n } else {\n if (i instanceof KJUR.crypto.ECDSA && i.isPublic) {\n var a = i.getShortNISTPCurveName();\n if (a !== \"P-256\" && a !== \"P-384\" && a !== \"P-521\") {\n throw new Error(\"unsupported curve name for JWT: \" + a);\n }\n var j = i.getPublicKeyXYHex();\n k.kty = \"EC\";\n k.crv = a;\n k.x = hextob64u(j.x);\n k.y = hextob64u(j.y);\n }\n }\n }\n }\n if (k.kty == undefined) {\n throw new Error(\"unsupported keyinfo\");\n }\n if (!i.isPrivate && h != true) {\n k.kid = KJUR.jws.JWS.getJWKthumbprint(k);\n }\n if (e != undefined && g != true) {\n k.x5c = [hex2b64(e)];\n }\n if (e != undefined && b != true) {\n k.x5t = b64tob64u(hex2b64(c(e, \"sha1\")));\n }\n if (e != undefined && f != true) {\n k[\"x5t#S256\"] = b64tob64u(hex2b64(c(e, \"sha256\")));\n }\n return k;\n};\nKEYUTIL.getJWKFromKey = function (a) {\n return KEYUTIL.getJWK(a, true, true, true, true);\n};\nRSAKey.getPosArrayOfChildrenFromHex = function (a) {\n return ASN1HEX.getChildIdx(a, 0);\n};\nRSAKey.getHexValueArrayOfChildrenFromHex = function (f) {\n var n = ASN1HEX;\n var i = n.getV;\n var k = RSAKey.getPosArrayOfChildrenFromHex(f);\n var e = i(f, k[0]);\n var j = i(f, k[1]);\n var b = i(f, k[2]);\n var c = i(f, k[3]);\n var h = i(f, k[4]);\n var g = i(f, k[5]);\n var m = i(f, k[6]);\n var l = i(f, k[7]);\n var d = i(f, k[8]);\n var k = new Array();\n k.push(e, j, b, c, h, g, m, l, d);\n return k;\n};\nRSAKey.prototype.readPrivateKeyFromPEMString = function (d) {\n var c = pemtohex(d);\n var b = RSAKey.getHexValueArrayOfChildrenFromHex(c);\n this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8]);\n};\nRSAKey.prototype.readPKCS5PrvKeyHex = function (c) {\n var b = RSAKey.getHexValueArrayOfChildrenFromHex(c);\n this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8]);\n};\nRSAKey.prototype.readPKCS8PrvKeyHex = function (e) {\n var c, i, k, b, a, f, d, j;\n var m = ASN1HEX;\n var l = m.getVbyListEx;\n if (m.isASN1HEX(e) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n try {\n c = l(e, 0, [2, 0, 1], \"02\");\n i = l(e, 0, [2, 0, 2], \"02\");\n k = l(e, 0, [2, 0, 3], \"02\");\n b = l(e, 0, [2, 0, 4], \"02\");\n a = l(e, 0, [2, 0, 5], \"02\");\n f = l(e, 0, [2, 0, 6], \"02\");\n d = l(e, 0, [2, 0, 7], \"02\");\n j = l(e, 0, [2, 0, 8], \"02\");\n } catch (g) {\n throw new Error(\"malformed PKCS#8 plain RSA private key\");\n }\n this.setPrivateEx(c, i, k, b, a, f, d, j);\n};\nRSAKey.prototype.readPKCS5PubKeyHex = function (c) {\n var e = ASN1HEX;\n var b = e.getV;\n if (e.isASN1HEX(c) === false) {\n throw new Error(\"keyHex is not ASN.1 hex string\");\n }\n var a = e.getChildIdx(c, 0);\n if (a.length !== 2 || c.substr(a[0], 2) !== \"02\" || c.substr(a[1], 2) !== \"02\") {\n throw new Error(\"wrong hex for PKCS#5 public key\");\n }\n var f = b(c, a[0]);\n var d = b(c, a[1]);\n this.setPublic(f, d);\n};\nRSAKey.prototype.readPKCS8PubKeyHex = function (b) {\n var c = ASN1HEX;\n if (c.isASN1HEX(b) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n if (c.getTLVbyListEx(b, 0, [0, 0]) !== \"06092a864886f70d010101\") {\n throw new Error(\"not PKCS8 RSA public key\");\n }\n var a = c.getTLVbyListEx(b, 0, [1, 0]);\n this.readPKCS5PubKeyHex(a);\n};\nRSAKey.prototype.readCertPubKeyHex = function (b, d) {\n var a, c;\n a = new X509();\n a.readCertHex(b);\n c = a.getPublicKeyHex();\n this.readPKCS8PubKeyHex(c);\n};\nvar _RE_HEXDECONLY = new RegExp(\"[^0-9a-f]\", \"gi\");\nfunction _rsasign_getHexPaddedDigestInfoForString(d, e, a) {\n var b = function (f) {\n return KJUR.crypto.Util.hashString(f, a);\n };\n var c = b(d);\n return KJUR.crypto.Util.getPaddedDigestInfoHex(c, a, e);\n}\nfunction _zeroPaddingOfSignature(e, d) {\n var c = \"\";\n var a = d / 4 - e.length;\n for (var b = 0; b < a; b++) {\n c = c + \"0\";\n }\n return c + e;\n}\nRSAKey.prototype.sign = function (d, a) {\n var b = function (e) {\n return KJUR.crypto.Util.hashString(e, a);\n };\n var c = b(d);\n return this.signWithMessageHash(c, a);\n};\nRSAKey.prototype.signWithMessageHash = function (e, c) {\n var f = KJUR.crypto.Util.getPaddedDigestInfoHex(e, c, this.n.bitLength());\n var b = parseBigInt(f, 16);\n var d = this.doPrivate(b);\n var a = d.toString(16);\n return _zeroPaddingOfSignature(a, this.n.bitLength());\n};\nfunction pss_mgf1_str(c, a, e) {\n var b = \"\",\n d = 0;\n while (b.length < a) {\n b += hextorstr(e(rstrtohex(c + String.fromCharCode.apply(String, [(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255]))));\n d += 1;\n }\n return b;\n}\nRSAKey.prototype.signPSS = function (e, a, d) {\n var c = function (f) {\n return KJUR.crypto.Util.hashHex(f, a);\n };\n var b = c(rstrtohex(e));\n if (d === undefined) {\n d = -1;\n }\n return this.signWithMessageHashPSS(b, a, d);\n};\nRSAKey.prototype.signWithMessageHashPSS = function (l, a, k) {\n var b = hextorstr(l);\n var g = b.length;\n var m = this.n.bitLength() - 1;\n var c = Math.ceil(m / 8);\n var d;\n var o = function (i) {\n return KJUR.crypto.Util.hashHex(i, a);\n };\n if (k === -1 || k === undefined) {\n k = g;\n } else {\n if (k === -2) {\n k = c - g - 2;\n } else {\n if (k < -2) {\n throw new Error(\"invalid salt length\");\n }\n }\n }\n if (c < g + k + 2) {\n throw new Error(\"data too long\");\n }\n var f = \"\";\n if (k > 0) {\n f = new Array(k);\n new SecureRandom().nextBytes(f);\n f = String.fromCharCode.apply(String, f);\n }\n var n = hextorstr(o(rstrtohex(\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\" + b + f)));\n var j = [];\n for (d = 0; d < c - k - g - 2; d += 1) {\n j[d] = 0;\n }\n var e = String.fromCharCode.apply(String, j) + \"\\x01\" + f;\n var h = pss_mgf1_str(n, e.length, o);\n var q = [];\n for (d = 0; d < e.length; d += 1) {\n q[d] = e.charCodeAt(d) ^ h.charCodeAt(d);\n }\n var p = 65280 >> 8 * c - m & 255;\n q[0] &= ~p;\n for (d = 0; d < g; d++) {\n q.push(n.charCodeAt(d));\n }\n q.push(188);\n return _zeroPaddingOfSignature(this.doPrivate(new BigInteger(q)).toString(16), this.n.bitLength());\n};\nfunction _rsasign_getDecryptSignatureBI(a, d, c) {\n var b = new RSAKey();\n b.setPublic(d, c);\n var e = b.doPublic(a);\n return e;\n}\nfunction _rsasign_getHexDigestInfoFromSig(a, c, b) {\n var e = _rsasign_getDecryptSignatureBI(a, c, b);\n var d = e.toString(16).replace(/^1f+00/, \"\");\n return d;\n}\nfunction _rsasign_getAlgNameAndHashFromHexDisgestInfo(f) {\n for (var e in KJUR.crypto.Util.DIGESTINFOHEAD) {\n var d = KJUR.crypto.Util.DIGESTINFOHEAD[e];\n var b = d.length;\n if (f.substring(0, b) == d) {\n var c = [e, f.substring(b)];\n return c;\n }\n }\n return [];\n}\nRSAKey.prototype.verify = function (f, l) {\n l = l.toLowerCase();\n if (l.match(/^[0-9a-f]+$/) == null) {\n return false;\n }\n var b = parseBigInt(l, 16);\n var k = this.n.bitLength();\n if (b.bitLength() > k) {\n return false;\n }\n var j = this.doPublic(b);\n var i = j.toString(16);\n if (i.length + 3 != k / 4) {\n return false;\n }\n var e = i.replace(/^1f+00/, \"\");\n var g = _rsasign_getAlgNameAndHashFromHexDisgestInfo(e);\n if (g.length == 0) {\n return false;\n }\n var d = g[0];\n var h = g[1];\n var a = function (m) {\n return KJUR.crypto.Util.hashString(m, d);\n };\n var c = a(f);\n return h == c;\n};\nRSAKey.prototype.verifyWithMessageHash = function (e, a) {\n if (a.length != Math.ceil(this.n.bitLength() / 4)) {\n return false;\n }\n var b = parseBigInt(a, 16);\n if (b.bitLength() > this.n.bitLength()) {\n return 0;\n }\n var h = this.doPublic(b);\n var g = h.toString(16).replace(/^1f+00/, \"\");\n var c = _rsasign_getAlgNameAndHashFromHexDisgestInfo(g);\n if (c.length == 0) {\n return false;\n }\n var d = c[0];\n var f = c[1];\n return f == e;\n};\nRSAKey.prototype.verifyPSS = function (c, b, a, f) {\n var e = function (g) {\n return KJUR.crypto.Util.hashHex(g, a);\n };\n var d = e(rstrtohex(c));\n if (f === undefined) {\n f = -1;\n }\n return this.verifyWithMessageHashPSS(d, b, a, f);\n};\nRSAKey.prototype.verifyWithMessageHashPSS = function (f, s, l, c) {\n if (s.length != Math.ceil(this.n.bitLength() / 4)) {\n return false;\n }\n var k = new BigInteger(s, 16);\n var r = function (i) {\n return KJUR.crypto.Util.hashHex(i, l);\n };\n var j = hextorstr(f);\n var h = j.length;\n var g = this.n.bitLength() - 1;\n var m = Math.ceil(g / 8);\n var q;\n if (c === -1 || c === undefined) {\n c = h;\n } else {\n if (c === -2) {\n c = m - h - 2;\n } else {\n if (c < -2) {\n throw new Error(\"invalid salt length\");\n }\n }\n }\n if (m < h + c + 2) {\n throw new Error(\"data too long\");\n }\n var a = this.doPublic(k).toByteArray();\n for (q = 0; q < a.length; q += 1) {\n a[q] &= 255;\n }\n while (a.length < m) {\n a.unshift(0);\n }\n if (a[m - 1] !== 188) {\n throw new Error(\"encoded message does not end in 0xbc\");\n }\n a = String.fromCharCode.apply(String, a);\n var d = a.substr(0, m - h - 1);\n var e = a.substr(d.length, h);\n var p = 65280 >> 8 * m - g & 255;\n if ((d.charCodeAt(0) & p) !== 0) {\n throw new Error(\"bits beyond keysize not zero\");\n }\n var n = pss_mgf1_str(e, d.length, r);\n var o = [];\n for (q = 0; q < d.length; q += 1) {\n o[q] = d.charCodeAt(q) ^ n.charCodeAt(q);\n }\n o[0] &= ~p;\n var b = m - h - c - 2;\n for (q = 0; q < b; q += 1) {\n if (o[q] !== 0) {\n throw new Error(\"leftmost octets not zero\");\n }\n }\n if (o[b] !== 1) {\n throw new Error(\"0x01 marker not found\");\n }\n return e === hextorstr(r(rstrtohex(\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\" + j + String.fromCharCode.apply(String, o.slice(-c)))));\n};\nRSAKey.SALT_LEN_HLEN = -1;\nRSAKey.SALT_LEN_MAX = -2;\nRSAKey.SALT_LEN_RECOVER = -2;\nfunction X509(v) {\n var o = ASN1HEX,\n s = o.getChildIdx,\n k = o.getV,\n y = o.dump,\n j = o.parse,\n b = o.getTLV,\n c = o.getVbyList,\n p = o.getVbyListEx,\n a = o.getTLVbyList,\n q = o.getTLVbyListEx,\n l = o.getIdxbyList,\n f = o.getIdxbyListEx,\n n = o.getVidx,\n x = o.getInt,\n u = o.oidname,\n r = o.hextooidstr,\n d = X509,\n w = pemtohex,\n g,\n m = Error;\n try {\n g = KJUR.asn1.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV;\n } catch (t) {}\n this.HEX2STAG = {\n \"0c\": \"utf8\",\n \"13\": \"prn\",\n \"16\": \"ia5\",\n \"1a\": \"vis\",\n \"1e\": \"bmp\"\n };\n this.hex = null;\n this.version = 0;\n this.foffset = 0;\n this.aExtInfo = null;\n this.getVersion = function () {\n if (this.hex === null || this.version !== 0) {\n return this.version;\n }\n var A = a(this.hex, 0, [0, 0]);\n if (A.substr(0, 2) == \"a0\") {\n var B = a(A, 0, [0]);\n var z = x(B, 0);\n if (z < 0 || 2 < z) {\n throw new Error(\"malformed version field\");\n }\n this.version = z + 1;\n return this.version;\n } else {\n this.version = 1;\n this.foffset = -1;\n return 1;\n }\n };\n this.getSerialNumberHex = function () {\n return p(this.hex, 0, [0, 0], \"02\");\n };\n this.getSignatureAlgorithmField = function () {\n var z = q(this.hex, 0, [0, 1]);\n return this.getAlgorithmIdentifierName(z);\n };\n this.getAlgorithmIdentifierName = function (z) {\n for (var A in g) {\n if (z === g[A]) {\n return A;\n }\n }\n return u(p(z, 0, [0], \"06\"));\n };\n this.getIssuer = function (A, z) {\n return this.getX500Name(this.getIssuerHex(), A, z);\n };\n this.getIssuerHex = function () {\n return a(this.hex, 0, [0, 3 + this.foffset], \"30\");\n };\n this.getIssuerString = function () {\n var z = this.getIssuer();\n return z.str;\n };\n this.getSubject = function (A, z) {\n return this.getX500Name(this.getSubjectHex(), A, z);\n };\n this.getSubjectHex = function () {\n return a(this.hex, 0, [0, 5 + this.foffset], \"30\");\n };\n this.getSubjectString = function () {\n var z = this.getSubject();\n return z.str;\n };\n this.getNotBefore = function () {\n var z = c(this.hex, 0, [0, 4 + this.foffset, 0]);\n z = z.replace(/(..)/g, \"%$1\");\n z = decodeURIComponent(z);\n return z;\n };\n this.getNotAfter = function () {\n var z = c(this.hex, 0, [0, 4 + this.foffset, 1]);\n z = z.replace(/(..)/g, \"%$1\");\n z = decodeURIComponent(z);\n return z;\n };\n this.getPublicKeyHex = function () {\n return this.getSPKI();\n };\n this.getSPKI = function () {\n return a(this.hex, 0, [0, 6 + this.foffset], \"30\");\n };\n this.getSPKIValue = function () {\n var z = this.getSPKI();\n if (z == null) {\n return null;\n }\n return c(z, 0, [1], \"03\", true);\n };\n this.getPublicKeyIdx = function () {\n return l(this.hex, 0, [0, 6 + this.foffset], \"30\");\n };\n this.getPublicKeyContentIdx = function () {\n var z = this.getPublicKeyIdx();\n return l(this.hex, z, [1, 0], \"30\");\n };\n this.getPublicKey = function () {\n return KEYUTIL.getKey(this.getPublicKeyHex(), null, \"pkcs8pub\");\n };\n this.getSignatureAlgorithmName = function () {\n var z = a(this.hex, 0, [1], \"30\");\n return this.getAlgorithmIdentifierName(z);\n };\n this.getSignatureValueHex = function () {\n return c(this.hex, 0, [2], \"03\", true);\n };\n this.verifySignature = function (B) {\n var C = this.getSignatureAlgorithmField();\n var z = this.getSignatureValueHex();\n var A = a(this.hex, 0, [0], \"30\");\n var D = new KJUR.crypto.Signature({\n alg: C\n });\n D.init(B);\n D.updateHex(A);\n return D.verify(z);\n };\n this.parseExt = function (I) {\n var B, z, D;\n if (I === undefined) {\n D = this.hex;\n if (this.version !== 3) {\n return -1;\n }\n B = l(D, 0, [0, 7, 0], \"30\");\n z = s(D, B);\n } else {\n D = pemtohex(I);\n var E = l(D, 0, [0, 3, 0, 0], \"06\");\n if (k(D, E) != \"2a864886f70d01090e\") {\n this.aExtInfo = new Array();\n return;\n }\n B = l(D, 0, [0, 3, 0, 1, 0], \"30\");\n z = s(D, B);\n this.hex = D;\n }\n this.aExtInfo = new Array();\n for (var C = 0; C < z.length; C++) {\n var G = {};\n G.critical = false;\n var F = s(D, z[C]);\n var A = 0;\n if (F.length === 3) {\n G.critical = true;\n A = 1;\n }\n G.oid = o.hextooidstr(c(D, z[C], [0], \"06\"));\n var H = l(D, z[C], [1 + A]);\n G.vidx = n(D, H);\n this.aExtInfo.push(G);\n }\n };\n this.getExtInfo = function (B) {\n var z = this.aExtInfo;\n var C = B;\n if (!B.match(/^[0-9.]+$/)) {\n C = KJUR.asn1.x509.OID.name2oid(B);\n }\n if (C === \"\") {\n return undefined;\n }\n for (var A = 0; A < z.length; A++) {\n if (z[A].oid === C) {\n return z[A];\n }\n }\n return undefined;\n };\n this.getCriticalExtV = function (C, z, B) {\n if (z != undefined) {\n return [z, B];\n }\n var A = this.getExtInfo(C);\n if (A == undefined) {\n return [null, null];\n }\n return [b(this.hex, A.vidx), A.critical];\n };\n this.getExtBasicConstraints = function (A, E) {\n if (A === undefined && E === undefined) {\n var C = this.getExtInfo(\"basicConstraints\");\n if (C === undefined) {\n return undefined;\n }\n A = b(this.hex, C.vidx);\n E = C.critical;\n }\n var z = {\n extname: \"basicConstraints\"\n };\n if (E) {\n z.critical = true;\n }\n if (A === \"3000\") {\n return z;\n }\n if (A === \"30030101ff\") {\n z.cA = true;\n return z;\n }\n if (A.substr(0, 12) === \"30060101ff02\") {\n var D = k(A, 10);\n var B = parseInt(D, 16);\n z.cA = true;\n z.pathLen = B;\n return z;\n }\n throw new Error(\"hExtV parse error: \" + A);\n };\n this.getExtNameConstraints = function (I, G) {\n var A = this.getCriticalExtV(\"nameConstraints\", I, G);\n I = A[0];\n G = A[1];\n if (I == null) {\n return undefined;\n }\n var K = {\n extname: \"nameConstraints\"\n };\n if (G) {\n K.critical = true;\n }\n var F = s(I, 0);\n for (var D = 0; D < F.length; D++) {\n var E = [];\n var B = s(I, F[D]);\n for (var C = 0; C < B.length; C++) {\n var H = b(I, B[C]);\n var z = this.getGeneralSubtree(H);\n E.push(z);\n }\n var J = I.substr(F[D], 2);\n if (J == \"a0\") {\n K.permit = E;\n } else {\n if (J == \"a1\") {\n K.exclude = E;\n }\n }\n }\n return K;\n };\n this.getGeneralSubtree = function (F) {\n var D = s(F, 0);\n var C = D.length;\n if (C < 1 || 2 < C) {\n throw new Error(\"wrong num elements\");\n }\n var B = this.getGeneralName(b(F, D[0]));\n for (var E = 1; E < C; E++) {\n var A = F.substr(D[E], 2);\n var z = k(F, D[E]);\n var G = parseInt(z, 16);\n if (A == \"80\") {\n B.min = G;\n }\n if (A == \"81\") {\n B.max = G;\n }\n }\n return B;\n };\n this.getExtKeyUsage = function (A, C) {\n var B = this.getCriticalExtV(\"keyUsage\", A, C);\n A = B[0];\n C = B[1];\n if (A == null) {\n return undefined;\n }\n var z = {\n extname: \"keyUsage\"\n };\n if (C) {\n z.critical = true;\n }\n z.names = this.getExtKeyUsageString(A).split(\",\");\n return z;\n };\n this.getExtKeyUsageBin = function (A) {\n if (A === undefined) {\n var B = this.getExtInfo(\"keyUsage\");\n if (B === undefined) {\n return \"\";\n }\n A = b(this.hex, B.vidx);\n }\n if (A.length != 8 && A.length != 10) {\n throw new Error(\"malformed key usage value: \" + A);\n }\n var z = \"000000000000000\" + parseInt(A.substr(6), 16).toString(2);\n if (A.length == 8) {\n z = z.slice(-8);\n }\n if (A.length == 10) {\n z = z.slice(-16);\n }\n z = z.replace(/0+$/, \"\");\n if (z == \"\") {\n z = \"0\";\n }\n return z;\n };\n this.getExtKeyUsageString = function (B) {\n var C = this.getExtKeyUsageBin(B);\n var z = new Array();\n for (var A = 0; A < C.length; A++) {\n if (C.substr(A, 1) == \"1\") {\n z.push(X509.KEYUSAGE_NAME[A]);\n }\n }\n return z.join(\",\");\n };\n this.getExtSubjectKeyIdentifier = function (B, D) {\n if (B === undefined && D === undefined) {\n var C = this.getExtInfo(\"subjectKeyIdentifier\");\n if (C === undefined) {\n return undefined;\n }\n B = b(this.hex, C.vidx);\n D = C.critical;\n }\n var z = {\n extname: \"subjectKeyIdentifier\"\n };\n if (D) {\n z.critical = true;\n }\n var A = k(B, 0);\n z.kid = {\n hex: A\n };\n return z;\n };\n this.getExtAuthorityKeyIdentifier = function (F, D) {\n if (F === undefined && D === undefined) {\n var z = this.getExtInfo(\"authorityKeyIdentifier\");\n if (z === undefined) {\n return undefined;\n }\n F = b(this.hex, z.vidx);\n D = z.critical;\n }\n var G = {\n extname: \"authorityKeyIdentifier\"\n };\n if (D) {\n G.critical = true;\n }\n var E = s(F, 0);\n for (var A = 0; A < E.length; A++) {\n var H = F.substr(E[A], 2);\n if (H === \"80\") {\n G.kid = {\n hex: k(F, E[A])\n };\n }\n if (H === \"a1\") {\n var C = b(F, E[A]);\n var B = this.getGeneralNames(C);\n G.issuer = B[0][\"dn\"];\n }\n if (H === \"82\") {\n G.sn = {\n hex: k(F, E[A])\n };\n }\n }\n return G;\n };\n this.getExtExtKeyUsage = function (C, E) {\n if (C === undefined && E === undefined) {\n var D = this.getExtInfo(\"extKeyUsage\");\n if (D === undefined) {\n return undefined;\n }\n C = b(this.hex, D.vidx);\n E = D.critical;\n }\n var z = {\n extname: \"extKeyUsage\",\n array: []\n };\n if (E) {\n z.critical = true;\n }\n var A = s(C, 0);\n for (var B = 0; B < A.length; B++) {\n z.array.push(u(k(C, A[B])));\n }\n return z;\n };\n this.getExtExtKeyUsageName = function () {\n var D = this.getExtInfo(\"extKeyUsage\");\n if (D === undefined) {\n return D;\n }\n var z = new Array();\n var C = b(this.hex, D.vidx);\n if (C === \"\") {\n return z;\n }\n var A = s(C, 0);\n for (var B = 0; B < A.length; B++) {\n z.push(u(k(C, A[B])));\n }\n return z;\n };\n this.getExtSubjectAltName = function (A, C) {\n if (A === undefined && C === undefined) {\n var B = this.getExtInfo(\"subjectAltName\");\n if (B === undefined) {\n return undefined;\n }\n A = b(this.hex, B.vidx);\n C = B.critical;\n }\n var z = {\n extname: \"subjectAltName\",\n array: []\n };\n if (C) {\n z.critical = true;\n }\n z.array = this.getGeneralNames(A);\n return z;\n };\n this.getExtIssuerAltName = function (A, C) {\n if (A === undefined && C === undefined) {\n var B = this.getExtInfo(\"issuerAltName\");\n if (B === undefined) {\n return undefined;\n }\n A = b(this.hex, B.vidx);\n C = B.critical;\n }\n var z = {\n extname: \"issuerAltName\",\n array: []\n };\n if (C) {\n z.critical = true;\n }\n z.array = this.getGeneralNames(A);\n return z;\n };\n this.getGeneralNames = function (D) {\n var B = s(D, 0);\n var z = [];\n for (var C = 0; C < B.length; C++) {\n var A = this.getGeneralName(b(D, B[C]));\n if (A !== undefined) {\n z.push(A);\n }\n }\n return z;\n };\n this.getGeneralName = function (A) {\n var z = A.substr(0, 2);\n var C = k(A, 0);\n var B = hextorstr(C);\n if (z == \"81\") {\n return {\n rfc822: B\n };\n }\n if (z == \"82\") {\n return {\n dns: B\n };\n }\n if (z == \"86\") {\n return {\n uri: B\n };\n }\n if (z == \"87\") {\n return {\n ip: hextoip(C)\n };\n }\n if (z == \"a4\") {\n return {\n dn: this.getX500Name(C)\n };\n }\n if (z == \"a0\") {\n return {\n other: this.getOtherName(A)\n };\n }\n return undefined;\n };\n this.getExtSubjectAltName2 = function () {\n var D, G, F;\n var E = this.getExtInfo(\"subjectAltName\");\n if (E === undefined) {\n return E;\n }\n var z = new Array();\n var C = b(this.hex, E.vidx);\n var A = s(C, 0);\n for (var B = 0; B < A.length; B++) {\n F = C.substr(A[B], 2);\n D = k(C, A[B]);\n if (F === \"81\") {\n G = hextoutf8(D);\n z.push([\"MAIL\", G]);\n }\n if (F === \"82\") {\n G = hextoutf8(D);\n z.push([\"DNS\", G]);\n }\n if (F === \"84\") {\n G = X509.hex2dn(D, 0);\n z.push([\"DN\", G]);\n }\n if (F === \"86\") {\n G = hextoutf8(D);\n z.push([\"URI\", G]);\n }\n if (F === \"87\") {\n G = hextoip(D);\n z.push([\"IP\", G]);\n }\n }\n return z;\n };\n this.getExtCRLDistributionPoints = function (D, F) {\n if (D === undefined && F === undefined) {\n var E = this.getExtInfo(\"cRLDistributionPoints\");\n if (E === undefined) {\n return undefined;\n }\n D = b(this.hex, E.vidx);\n F = E.critical;\n }\n var A = {\n extname: \"cRLDistributionPoints\",\n array: []\n };\n if (F) {\n A.critical = true;\n }\n var B = s(D, 0);\n for (var C = 0; C < B.length; C++) {\n var z = b(D, B[C]);\n A.array.push(this.getDistributionPoint(z));\n }\n return A;\n };\n this.getDistributionPoint = function (E) {\n var B = {};\n var C = s(E, 0);\n for (var D = 0; D < C.length; D++) {\n var A = E.substr(C[D], 2);\n var z = b(E, C[D]);\n if (A == \"a0\") {\n B.dpname = this.getDistributionPointName(z);\n }\n }\n return B;\n };\n this.getDistributionPointName = function (E) {\n var B = {};\n var C = s(E, 0);\n for (var D = 0; D < C.length; D++) {\n var A = E.substr(C[D], 2);\n var z = b(E, C[D]);\n if (A == \"a0\") {\n B.full = this.getGeneralNames(z);\n }\n }\n return B;\n };\n this.getExtCRLDistributionPointsURI = function () {\n var D = this.getExtCRLDistributionPoints();\n if (D == undefined) {\n return D;\n }\n var A = D.array;\n var z = [];\n for (var C = 0; C < A.length; C++) {\n try {\n if (A[C].dpname.full[0].uri != undefined) {\n z.push(A[C].dpname.full[0].uri);\n }\n } catch (B) {}\n }\n return z;\n };\n this.getExtAIAInfo = function () {\n var D = this.getExtInfo(\"authorityInfoAccess\");\n if (D === undefined) {\n return D;\n }\n var z = {\n ocsp: [],\n caissuer: []\n };\n var A = s(this.hex, D.vidx);\n for (var B = 0; B < A.length; B++) {\n var E = c(this.hex, A[B], [0], \"06\");\n var C = c(this.hex, A[B], [1], \"86\");\n if (E === \"2b06010505073001\") {\n z.ocsp.push(hextoutf8(C));\n }\n if (E === \"2b06010505073002\") {\n z.caissuer.push(hextoutf8(C));\n }\n }\n return z;\n };\n this.getExtAuthorityInfoAccess = function (G, E) {\n if (G === undefined && E === undefined) {\n var z = this.getExtInfo(\"authorityInfoAccess\");\n if (z === undefined) {\n return undefined;\n }\n G = b(this.hex, z.vidx);\n E = z.critical;\n }\n var H = {\n extname: \"authorityInfoAccess\",\n array: []\n };\n if (E) {\n H.critical = true;\n }\n var F = s(G, 0);\n for (var A = 0; A < F.length; A++) {\n var D = p(G, F[A], [0], \"06\");\n var B = c(G, F[A], [1], \"86\");\n var C = hextoutf8(B);\n if (D == \"2b06010505073001\") {\n H.array.push({\n ocsp: C\n });\n } else {\n if (D == \"2b06010505073002\") {\n H.array.push({\n caissuer: C\n });\n } else {\n throw new Error(\"unknown method: \" + D);\n }\n }\n }\n return H;\n };\n this.getExtCertificatePolicies = function (D, G) {\n if (D === undefined && G === undefined) {\n var F = this.getExtInfo(\"certificatePolicies\");\n if (F === undefined) {\n return undefined;\n }\n D = b(this.hex, F.vidx);\n G = F.critical;\n }\n var z = {\n extname: \"certificatePolicies\",\n array: []\n };\n if (G) {\n z.critical = true;\n }\n var A = s(D, 0);\n for (var B = 0; B < A.length; B++) {\n var E = b(D, A[B]);\n var C = this.getPolicyInformation(E);\n z.array.push(C);\n }\n return z;\n };\n this.getPolicyInformation = function (D) {\n var z = {};\n var F = c(D, 0, [0], \"06\");\n z.policyoid = u(F);\n var G = f(D, 0, [1], \"30\");\n if (G != -1) {\n z.array = [];\n var A = s(D, G);\n for (var B = 0; B < A.length; B++) {\n var E = b(D, A[B]);\n var C = this.getPolicyQualifierInfo(E);\n z.array.push(C);\n }\n }\n return z;\n };\n this.getOtherName = function (B) {\n var z = {};\n var A = s(B, 0);\n var D = c(B, A[0], [], \"06\");\n var C = c(B, A[1], []);\n z.oid = u(D);\n z.value = j(C);\n return z;\n };\n this.getPolicyQualifierInfo = function (A) {\n var z = {};\n var B = c(A, 0, [0], \"06\");\n if (B === \"2b06010505070201\") {\n var D = p(A, 0, [1], \"16\");\n z.cps = hextorstr(D);\n } else {\n if (B === \"2b06010505070202\") {\n var C = a(A, 0, [1], \"30\");\n z.unotice = this.getUserNotice(C);\n }\n }\n return z;\n };\n this.getUserNotice = function (B) {\n var D = null;\n var z = {};\n try {\n D = o.parse(B);\n var C = this._asn1ToUnotice(D);\n return C;\n } catch (A) {\n return undefined;\n }\n };\n this._asn1ToUnotice = function (E) {\n try {\n var z = {};\n var A = aryval(E, \"seq\");\n for (var C = 0; C < A.length; C++) {\n var D = this._asn1ToNoticeRef(A[C]);\n if (D != undefined) {\n z.noticeref = D;\n }\n var F = this.asn1ToDisplayText(A[C]);\n if (F != undefined) {\n z.exptext = F;\n }\n }\n if (Object.keys(z).length > 0) {\n return z;\n }\n return undefined;\n } catch (B) {\n return undefined;\n }\n };\n this._asn1ToNoticeRef = function (F) {\n try {\n var A = {};\n var B = aryval(F, \"seq\");\n for (var D = 0; D < B.length; D++) {\n var E = this._asn1ToNoticeNum(B[D]);\n if (E != undefined) {\n A.noticenum = E;\n }\n var z = this.asn1ToDisplayText(B[D]);\n if (z != undefined) {\n A.org = z;\n }\n }\n if (Object.keys(A).length > 0) {\n return A;\n }\n return undefined;\n } catch (C) {\n return undefined;\n }\n };\n this._asn1ToNoticeNum = function (E) {\n try {\n var A = aryval(E, \"seq\");\n var z = [];\n for (var C = 0; C < A.length; C++) {\n var D = A[C];\n z.push(parseInt(aryval(D, \"int.hex\"), 16));\n }\n return z;\n } catch (B) {\n return undefined;\n }\n };\n this.getDisplayText = function (A) {\n var B = {\n \"0c\": \"utf8\",\n \"16\": \"ia5\",\n \"1a\": \"vis\",\n \"1e\": \"bmp\"\n };\n var z = {};\n z.type = B[A.substr(0, 2)];\n z.str = hextorstr(k(A, 0));\n return z;\n };\n this.asn1ToDisplayText = function (z) {\n if (z.utf8str != undefined) {\n return {\n type: \"utf8\",\n str: z.utf8str.str\n };\n }\n if (z.ia5str != undefined) {\n return {\n type: \"ia5\",\n str: z.ia5str.str\n };\n }\n if (z.visstr != undefined) {\n return {\n type: \"vis\",\n str: z.visstr.str\n };\n }\n if (z.bmpstr != undefined) {\n return {\n type: \"bmp\",\n str: z.bmpstr.str\n };\n }\n if (z.prnstr != undefined) {\n return {\n type: \"prn\",\n str: z.prnstr.str\n };\n }\n return undefined;\n };\n this.getExtPolicyMappings = function (G, E) {\n var z = this.getCriticalExtV(\"policyMappings\", G, E);\n G = z[0];\n E = z[1];\n if (G == null) {\n return undefined;\n }\n var I = {\n extname: \"policyMappings\"\n };\n if (E) {\n I.critical = true;\n }\n try {\n var A = j(G);\n var B = A.seq;\n var F = [];\n for (var C = 0; C < B.length; C++) {\n var H = B[C].seq;\n F.push([H[0].oid, H[1].oid]);\n }\n I.array = F;\n } catch (D) {\n throw new m(\"malformed policyMappings\");\n }\n return I;\n };\n this.getExtPolicyConstraints = function (G, D) {\n var z = this.getCriticalExtV(\"policyConstraints\", G, D);\n G = z[0];\n D = z[1];\n if (G == null) {\n return undefined;\n }\n var H = {\n extname: \"policyConstraints\"\n };\n if (D) {\n H.critical = true;\n }\n var A = j(G);\n try {\n var F = A.seq;\n for (var B = 0; B < F.length; B++) {\n var E = F[B].tag;\n if (E.explicit != false) {\n continue;\n }\n if (E.tag == \"80\") {\n H.reqexp = parseInt(E.hex, 16);\n }\n if (E.tag == \"81\") {\n H.inhibit = parseInt(E.hex, 16);\n }\n }\n } catch (C) {\n return new m(\"malformed policyConstraints value\");\n }\n return H;\n };\n this.getExtInhibitAnyPolicy = function (A, D) {\n var C = this.getCriticalExtV(\"inhibitAnyPolicy\", A, D);\n A = C[0];\n D = C[1];\n if (A == null) {\n return undefined;\n }\n var z = {\n extname: \"inhibitAnyPolicy\"\n };\n if (D) {\n z.critical = true;\n }\n var B = x(A, 0);\n if (B == -1) {\n return new m(\"wrong value\");\n }\n z.skip = B;\n return z;\n };\n this.getExtCRLNumber = function (A, B) {\n var z = {\n extname: \"cRLNumber\"\n };\n if (B) {\n z.critical = true;\n }\n if (A.substr(0, 2) == \"02\") {\n z.num = {\n hex: k(A, 0)\n };\n return z;\n }\n throw new m(\"hExtV parse error: \" + A);\n };\n this.getExtCRLReason = function (A, B) {\n var z = {\n extname: \"cRLReason\"\n };\n if (B) {\n z.critical = true;\n }\n if (A.substr(0, 2) == \"0a\") {\n z.code = parseInt(k(A, 0), 16);\n return z;\n }\n throw new Error(\"hExtV parse error: \" + A);\n };\n this.getExtOcspNonce = function (A, C) {\n var z = {\n extname: \"ocspNonce\"\n };\n if (C) {\n z.critical = true;\n }\n var B = k(A, 0);\n z.hex = B;\n return z;\n };\n this.getExtOcspNoCheck = function (A, B) {\n var z = {\n extname: \"ocspNoCheck\"\n };\n if (B) {\n z.critical = true;\n }\n return z;\n };\n this.getExtAdobeTimeStamp = function (C, F) {\n if (C === undefined && F === undefined) {\n var E = this.getExtInfo(\"adobeTimeStamp\");\n if (E === undefined) {\n return undefined;\n }\n C = b(this.hex, E.vidx);\n F = E.critical;\n }\n var z = {\n extname: \"adobeTimeStamp\"\n };\n if (F) {\n z.critical = true;\n }\n var B = s(C, 0);\n if (B.length > 1) {\n var G = b(C, B[1]);\n var A = this.getGeneralName(G);\n if (A.uri != undefined) {\n z.uri = A.uri;\n }\n }\n if (B.length > 2) {\n var D = b(C, B[2]);\n if (D == \"0101ff\") {\n z.reqauth = true;\n }\n if (D == \"010100\") {\n z.reqauth = false;\n }\n }\n return z;\n };\n this.getExtSubjectDirectoryAttributes = function (I, H) {\n if (I === undefined && H === undefined) {\n var B = this.getExtInfo(\"subjectDirectoryAttributes\");\n if (B === undefined) {\n return undefined;\n }\n I = b(this.hex, B.vidx);\n H = B.critical;\n }\n var J = {\n extname: \"subjectDirectoryAttributes\"\n };\n if (H) {\n J.critical = true;\n }\n try {\n var z = j(I);\n var D = [];\n for (var E = 0; E < z.seq.length; E++) {\n var A = z.seq[E];\n var C = aryval(A, \"seq.0.oid\");\n var F = aryval(A, \"seq.1.set\");\n if (C == undefined || F == undefined) {\n throw \"error\";\n }\n D.push({\n attr: C,\n array: F\n });\n }\n J.array = D;\n return J;\n } catch (G) {\n throw new Error(\"malformed subjectDirectoryAttributes extension value\");\n }\n };\n var e = function (E) {\n var z = {};\n try {\n var B = E.seq[0].oid;\n var D = KJUR.asn1.x509.OID.name2oid(B);\n z.type = KJUR.asn1.x509.OID.oid2atype(D);\n var A = E.seq[1];\n if (A.utf8str != undefined) {\n z.ds = \"utf8\";\n z.value = A.utf8str.str;\n } else {\n if (A.numstr != undefined) {\n z.ds = \"num\";\n z.value = A.numstr.str;\n } else {\n if (A.telstr != undefined) {\n z.ds = \"tel\";\n z.value = A.telstr.str;\n } else {\n if (A.prnstr != undefined) {\n z.ds = \"prn\";\n z.value = A.prnstr.str;\n } else {\n if (A.ia5str != undefined) {\n z.ds = \"ia5\";\n z.value = A.ia5str.str;\n } else {\n if (A.visstr != undefined) {\n z.ds = \"vis\";\n z.value = A.visstr.str;\n } else {\n if (A.bmpstr != undefined) {\n z.ds = \"bmp\";\n z.value = A.bmpstr.str;\n } else {\n throw \"error\";\n }\n }\n }\n }\n }\n }\n }\n return z;\n } catch (C) {\n throw new Erorr(\"improper ASN.1 parsed AttrTypeAndValue\");\n }\n };\n var i = function (A) {\n try {\n return A.set.map(function (B) {\n return e(B);\n });\n } catch (z) {\n throw new Error(\"improper ASN.1 parsed RDN: \" + z);\n }\n };\n var h = function (A) {\n try {\n return A.seq.map(function (B) {\n return i(B);\n });\n } catch (z) {\n throw new Error(\"improper ASN.1 parsed X500Name: \" + z);\n }\n };\n this.getX500NameRule = function (z) {\n var G = true;\n var K = true;\n var J = false;\n var A = \"\";\n var D = \"\";\n var M = null;\n var H = [];\n for (var C = 0; C < z.length; C++) {\n var E = z[C];\n for (var B = 0; B < E.length; B++) {\n H.push(E[B]);\n }\n }\n for (var C = 0; C < H.length; C++) {\n var L = H[C];\n var N = L.ds;\n var I = L.value;\n var F = L.type;\n A += \":\" + N;\n if (N != \"prn\" && N != \"utf8\" && N != \"ia5\") {\n return \"mixed\";\n }\n if (N == \"ia5\") {\n if (F != \"CN\") {\n return \"mixed\";\n } else {\n if (!KJUR.lang.String.isMail(I)) {\n return \"mixed\";\n } else {\n continue;\n }\n }\n }\n if (F == \"C\") {\n if (N == \"prn\") {\n continue;\n } else {\n return \"mixed\";\n }\n }\n D += \":\" + N;\n if (M == null) {\n M = N;\n } else {\n if (M !== N) {\n return \"mixed\";\n }\n }\n }\n if (M == null) {\n return \"prn\";\n } else {\n return M;\n }\n };\n this.getAttrTypeAndValue = function (z) {\n var A = j(z);\n return e(A);\n };\n this.getRDN = function (z) {\n var A = j(z);\n return i(A);\n };\n this.getX500NameArray = function (z) {\n var A = j(z);\n return h(A);\n };\n this.getX500Name = function (C, E, D) {\n var A = this.getX500NameArray(C);\n var B = this.dnarraytostr(A);\n var z = {\n str: B\n };\n z.array = A;\n if (D == true) {\n z.hex = C;\n }\n if (E == true) {\n z.canon = this.c14nRDNArray(A);\n }\n return z;\n };\n this.readCertPEM = function (z) {\n this.readCertHex(w(z));\n };\n this.readCertHex = function (z) {\n this.hex = z;\n this.getVersion();\n try {\n l(this.hex, 0, [0, 7], \"a3\");\n this.parseExt();\n } catch (A) {}\n };\n this.getParam = function (A) {\n var z = {};\n if (A == undefined) {\n A = {};\n }\n z.version = this.getVersion();\n z.serial = {\n hex: this.getSerialNumberHex()\n };\n z.sigalg = this.getSignatureAlgorithmField();\n z.issuer = this.getIssuer(A.dncanon, A.dnhex);\n z.notbefore = this.getNotBefore();\n z.notafter = this.getNotAfter();\n z.subject = this.getSubject(A.dncanon, A.dnhex);\n z.sbjpubkey = hextopem(this.getPublicKeyHex(), \"PUBLIC KEY\");\n if (this.aExtInfo != undefined && this.aExtInfo.length > 0) {\n z.ext = this.getExtParamArray();\n }\n z.sighex = this.getSignatureValueHex();\n if (A.tbshex == true) {\n z.tbshex = a(this.hex, 0, [0]);\n }\n if (A.nodnarray == true) {\n delete z.issuer.array;\n delete z.subject.array;\n }\n return z;\n };\n this.getExtParamArray = function (A) {\n if (A == undefined) {\n var C = f(this.hex, 0, [0, \"[3]\"]);\n if (C != -1) {\n A = q(this.hex, 0, [0, \"[3]\", 0], \"30\");\n }\n }\n var z = [];\n var B = s(A, 0);\n for (var D = 0; D < B.length; D++) {\n var F = b(A, B[D]);\n var E = this.getExtParam(F);\n if (E != null) {\n z.push(E);\n }\n }\n return z;\n };\n this.getExtParam = function (A) {\n var I = {};\n var C = s(A, 0);\n var E = C.length;\n if (E != 2 && E != 3) {\n throw new Error(\"wrong number elements in Extension: \" + E + \" \" + A);\n }\n var B = r(c(A, 0, [0], \"06\"));\n var G = false;\n if (E == 3 && a(A, 0, [1]) == \"0101ff\") {\n G = true;\n }\n var H = a(A, 0, [E - 1, 0]);\n var F = undefined;\n if (B == \"2.5.29.14\") {\n F = this.getExtSubjectKeyIdentifier(H, G);\n } else {\n if (B == \"2.5.29.15\") {\n F = this.getExtKeyUsage(H, G);\n } else {\n if (B == \"2.5.29.17\") {\n F = this.getExtSubjectAltName(H, G);\n } else {\n if (B == \"2.5.29.18\") {\n F = this.getExtIssuerAltName(H, G);\n } else {\n if (B == \"2.5.29.19\") {\n F = this.getExtBasicConstraints(H, G);\n } else {\n if (B == \"2.5.29.30\") {\n F = this.getExtNameConstraints(H, G);\n } else {\n if (B == \"2.5.29.31\") {\n F = this.getExtCRLDistributionPoints(H, G);\n } else {\n if (B == \"2.5.29.32\") {\n F = this.getExtCertificatePolicies(H, G);\n } else {\n if (B == \"2.5.29.33\") {\n F = this.getExtPolicyMappings(H, G);\n } else {\n if (B == \"2.5.29.35\") {\n F = this.getExtAuthorityKeyIdentifier(H, G);\n } else {\n if (B == \"2.5.29.36\") {\n F = this.getExtPolicyConstraints(H, G);\n } else {\n if (B == \"2.5.29.37\") {\n F = this.getExtExtKeyUsage(H, G);\n } else {\n if (B == \"2.5.29.54\") {\n F = this.getExtInhibitAnyPolicy(H, G);\n } else {\n if (B == \"1.3.6.1.5.5.7.1.1\") {\n F = this.getExtAuthorityInfoAccess(H, G);\n } else {\n if (B == \"2.5.29.20\") {\n F = this.getExtCRLNumber(H, G);\n } else {\n if (B == \"2.5.29.21\") {\n F = this.getExtCRLReason(H, G);\n } else {\n if (B == \"2.5.29.9\") {\n F = this.getExtSubjectDirectoryAttributes(H, G);\n } else {\n if (B == \"1.3.6.1.5.5.7.48.1.2\") {\n F = this.getExtOcspNonce(H, G);\n } else {\n if (B == \"1.3.6.1.5.5.7.48.1.5\") {\n F = this.getExtOcspNoCheck(H, G);\n } else {\n if (B == \"1.2.840.113583.1.1.9.1\") {\n F = this.getExtAdobeTimeStamp(H, G);\n } else {\n if (X509.EXT_PARSER[B] != undefined) {\n F = X509.EXT_PARSER[B](B, G, H);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (F != undefined) {\n return F;\n }\n var z = {\n extname: B,\n extn: H\n };\n try {\n z.extn = j(H);\n } catch (D) {}\n if (G) {\n z.critical = true;\n }\n return z;\n };\n this.findExt = function (A, B) {\n for (var z = 0; z < A.length; z++) {\n if (A[z].extname == B) {\n return A[z];\n }\n }\n return null;\n };\n this.updateExtCDPFullURI = function (D, z) {\n var C = this.findExt(D, \"cRLDistributionPoints\");\n if (C == null) {\n return;\n }\n if (C.array == undefined) {\n return;\n }\n var F = C.array;\n for (var B = 0; B < F.length; B++) {\n if (F[B].dpname == undefined) {\n continue;\n }\n if (F[B].dpname.full == undefined) {\n continue;\n }\n var G = F[B].dpname.full;\n for (var A = 0; A < G.length; A++) {\n var E = G[B];\n if (E.uri == undefined) {\n continue;\n }\n E.uri = z;\n }\n }\n };\n this.updateExtAIAOCSP = function (D, A) {\n var C = this.findExt(D, \"authorityInfoAccess\");\n if (C == null) {\n return;\n }\n if (C.array == undefined) {\n return;\n }\n var z = C.array;\n for (var B = 0; B < z.length; B++) {\n if (z[B].ocsp != undefined) {\n z[B].ocsp = A;\n }\n }\n };\n this.updateExtAIACAIssuer = function (D, A) {\n var C = this.findExt(D, \"authorityInfoAccess\");\n if (C == null) {\n return;\n }\n if (C.array == undefined) {\n return;\n }\n var z = C.array;\n for (var B = 0; B < z.length; B++) {\n if (z[B].caissuer != undefined) {\n z[B].caissuer = A;\n }\n }\n };\n this.dnarraytostr = function (B) {\n function z(C) {\n return C.map(function (D) {\n return A(D).replace(/\\+/, \"\\\\+\");\n }).join(\"+\");\n }\n function A(C) {\n return C.type + \"=\" + C.value;\n }\n return \"/\" + B.map(function (C) {\n return z(C).replace(/\\//, \"\\\\/\");\n }).join(\"/\");\n };\n this.setCanonicalizedDN = function (A) {\n var C;\n if (A.str != undefined && A.array == undefined) {\n var B = new KJUR.asn1.x509.X500Name({\n str: A.str\n });\n var z = B.tohex();\n C = this.getX500NameArray(z);\n } else {\n C = A.array;\n }\n if (A.canon == undefined) {\n A.canon = this.c14nRDNArray(C);\n }\n };\n this.c14nRDNArray = function (G) {\n var A = [];\n for (var C = 0; C < G.length; C++) {\n var E = G[C];\n var z = [];\n for (var B = 0; B < E.length; B++) {\n var D = E[B];\n var F = D.value;\n F = F.replace(/^\\s*/, \"\");\n F = F.replace(/\\s*$/, \"\");\n F = F.replace(/\\s+/g, \" \");\n F = F.toLowerCase();\n z.push(D.type.toLowerCase() + \"=\" + F);\n }\n A.push(z.join(\"+\"));\n }\n return \"/\" + A.join(\"/\");\n };\n this.getInfo = function () {\n var A = function (W) {\n var ac = \"\";\n var U = \" \";\n var Y = \"\\n\";\n var Z = W.array;\n for (var X = 0; X < Z.length; X++) {\n var V = Z[X];\n if (V.dn != undefined) {\n ac += U + \"dn: \" + V.dn.str + Y;\n }\n if (V.ip != undefined) {\n ac += U + \"ip: \" + V.ip + Y;\n }\n if (V.rfc822 != undefined) {\n ac += U + \"rfc822: \" + V.rfc822 + Y;\n }\n if (V.dns != undefined) {\n ac += U + \"dns: \" + V.dns + Y;\n }\n if (V.uri != undefined) {\n ac += U + \"uri: \" + V.uri + Y;\n }\n if (V.other != undefined) {\n var ab = V.other.oid;\n var aa = JSON.stringify(V.other.value).replace(/\\\"/g, \"\");\n ac += U + \"other: \" + ab + \"=\" + aa + Y;\n }\n }\n ac = ac.replace(/\\n$/, \"\");\n return ac;\n };\n var H = function (aa) {\n var Y = \"\";\n var U = aa.array;\n for (var X = 0; X < U.length; X++) {\n var Z = U[X];\n Y += \" policy oid: \" + Z.policyoid + \"\\n\";\n if (Z.array === undefined) {\n continue;\n }\n for (var W = 0; W < Z.array.length; W++) {\n var V = Z.array[W];\n if (V.cps !== undefined) {\n Y += \" cps: \" + V.cps + \"\\n\";\n }\n }\n }\n return Y;\n };\n var K = function (Y) {\n var X = \"\";\n var U = Y.array;\n for (var W = 0; W < U.length; W++) {\n var Z = U[W];\n try {\n if (Z.dpname.full[0].uri !== undefined) {\n X += \" \" + Z.dpname.full[0].uri + \"\\n\";\n }\n } catch (V) {}\n try {\n if (Z.dname.full[0].dn.hex !== undefined) {\n X += \" \" + X509.hex2dn(Z.dpname.full[0].dn.hex) + \"\\n\";\n }\n } catch (V) {}\n }\n return X;\n };\n var I = function (Y) {\n var X = \"\";\n var U = Y.array;\n for (var V = 0; V < U.length; V++) {\n var W = U[V];\n if (W.caissuer !== undefined) {\n X += \" caissuer: \" + W.caissuer + \"\\n\";\n }\n if (W.ocsp !== undefined) {\n X += \" ocsp: \" + W.ocsp + \"\\n\";\n }\n }\n return X;\n };\n var B = X509;\n var M, L, T;\n M = \"Basic Fields\\n\";\n M += \" serial number: \" + this.getSerialNumberHex() + \"\\n\";\n M += \" signature algorithm: \" + this.getSignatureAlgorithmField() + \"\\n\";\n M += \" issuer: \" + this.getIssuerString() + \"\\n\";\n M += \" notBefore: \" + this.getNotBefore() + \"\\n\";\n M += \" notAfter: \" + this.getNotAfter() + \"\\n\";\n M += \" subject: \" + this.getSubjectString() + \"\\n\";\n M += \" subject public key info: \\n\";\n L = this.getPublicKey();\n M += \" key algorithm: \" + L.type + \"\\n\";\n if (L.type === \"RSA\") {\n M += \" n=\" + hextoposhex(L.n.toString(16)).substr(0, 16) + \"...\\n\";\n M += \" e=\" + hextoposhex(L.e.toString(16)) + \"\\n\";\n }\n T = this.aExtInfo;\n if (T !== undefined && T !== null) {\n M += \"X509v3 Extensions:\\n\";\n for (var P = 0; P < T.length; P++) {\n var R = T[P];\n var z = KJUR.asn1.x509.OID.oid2name(R.oid);\n if (z === \"\") {\n z = R.oid;\n }\n var O = \"\";\n if (R.critical === true) {\n O = \"CRITICAL\";\n }\n M += \" \" + z + \" \" + O + \":\\n\";\n if (z === \"basicConstraints\") {\n var C = this.getExtBasicConstraints();\n if (C.cA === undefined) {\n M += \" {}\\n\";\n } else {\n M += \" cA=true\";\n if (C.pathLen !== undefined) {\n M += \", pathLen=\" + C.pathLen;\n }\n M += \"\\n\";\n }\n } else {\n if (z == \"policyMappings\") {\n var S = this.getExtPolicyMappings().array;\n var G = S.map(function (U) {\n var V = U;\n return V[0] + \":\" + V[1];\n }).join(\", \");\n M += \" \" + G + \"\\n\";\n } else {\n if (z == \"policyConstraints\") {\n var N = this.getExtPolicyConstraints();\n M += \" \";\n if (N.reqexp != undefined) {\n M += \" reqexp=\" + N.reqexp;\n }\n if (N.inhibit != undefined) {\n M += \" inhibit=\" + N.inhibit;\n }\n M += \"\\n\";\n } else {\n if (z == \"inhibitAnyPolicy\") {\n var N = this.getExtInhibitAnyPolicy();\n M += \" skip=\" + N.skip + \"\\n\";\n } else {\n if (z == \"keyUsage\") {\n M += \" \" + this.getExtKeyUsageString() + \"\\n\";\n } else {\n if (z == \"subjectKeyIdentifier\") {\n M += \" \" + this.getExtSubjectKeyIdentifier().kid.hex + \"\\n\";\n } else {\n if (z == \"authorityKeyIdentifier\") {\n var D = this.getExtAuthorityKeyIdentifier();\n if (D.kid !== undefined) {\n M += \" kid=\" + D.kid.hex + \"\\n\";\n }\n } else {\n if (z == \"extKeyUsage\") {\n var Q = this.getExtExtKeyUsage().array;\n M += \" \" + Q.join(\", \") + \"\\n\";\n } else {\n if (z == \"subjectAltName\") {\n var E = A(this.getExtSubjectAltName());\n M += E + \"\\n\";\n } else {\n if (z == \"cRLDistributionPoints\") {\n var J = this.getExtCRLDistributionPoints();\n M += K(J);\n } else {\n if (z == \"authorityInfoAccess\") {\n var F = this.getExtAuthorityInfoAccess();\n M += I(F);\n } else {\n if (z == \"certificatePolicies\") {\n M += H(this.getExtCertificatePolicies());\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n M += \"signature algorithm: \" + this.getSignatureAlgorithmName() + \"\\n\";\n M += \"signature: \" + this.getSignatureValueHex().substr(0, 16) + \"...\\n\";\n return M;\n };\n if (typeof v == \"string\") {\n if (v.indexOf(\"-----BEGIN\") != -1) {\n this.readCertPEM(v);\n } else {\n if (KJUR.lang.String.isHex(v)) {\n this.readCertHex(v);\n }\n }\n }\n}\nX509.EXT_PARSER = {};\nX509.registExtParser = function (b, a) {\n X509.EXT_PARSER[b] = a;\n};\nX509.hex2dn = function (e, b) {\n if (b === undefined) {\n b = 0;\n }\n var a = new X509();\n var c = ASN1HEX.getTLV(e, b);\n var d = a.getX500Name(e);\n return d.str;\n};\nX509.hex2rdn = function (f, b) {\n if (b === undefined) {\n b = 0;\n }\n if (f.substr(b, 2) !== \"31\") {\n throw new Error(\"malformed RDN\");\n }\n var c = new Array();\n var d = ASN1HEX.getChildIdx(f, b);\n for (var e = 0; e < d.length; e++) {\n c.push(X509.hex2attrTypeValue(f, d[e]));\n }\n c = c.map(function (a) {\n return a.replace(\"+\", \"\\\\+\");\n });\n return c.join(\"+\");\n};\nX509.hex2attrTypeValue = function (d, i) {\n var j = ASN1HEX;\n var h = j.getV;\n if (i === undefined) {\n i = 0;\n }\n if (d.substr(i, 2) !== \"30\") {\n throw new Error(\"malformed attribute type and value\");\n }\n var g = j.getChildIdx(d, i);\n if (g.length !== 2 || d.substr(g[0], 2) !== \"06\") {\n \"malformed attribute type and value\";\n }\n var b = h(d, g[0]);\n var f = KJUR.asn1.ASN1Util.oidHexToInt(b);\n var e = KJUR.asn1.x509.OID.oid2atype(f);\n var a = h(d, g[1]);\n var c = hextorstr(a);\n return e + \"=\" + c;\n};\nX509.getPublicKeyFromCertHex = function (b) {\n var a = new X509();\n a.readCertHex(b);\n return a.getPublicKey();\n};\nX509.getPublicKeyFromCertPEM = function (b) {\n var a = new X509();\n a.readCertPEM(b);\n return a.getPublicKey();\n};\nX509.getPublicKeyInfoPropOfCertPEM = function (c) {\n var e = ASN1HEX;\n var g = e.getVbyList;\n var b = {};\n var a, f, d;\n b.algparam = null;\n a = new X509();\n a.readCertPEM(c);\n f = a.getPublicKeyHex();\n b.keyhex = g(f, 0, [1], \"03\").substr(2);\n b.algoid = g(f, 0, [0, 0], \"06\");\n if (b.algoid === \"2a8648ce3d0201\") {\n b.algparam = g(f, 0, [0, 1], \"06\");\n }\n return b;\n};\nX509.KEYUSAGE_NAME = [\"digitalSignature\", \"nonRepudiation\", \"keyEncipherment\", \"dataEncipherment\", \"keyAgreement\", \"keyCertSign\", \"cRLSign\", \"encipherOnly\", \"decipherOnly\"];\nvar X509CRL = function (e) {\n var a = KJUR,\n f = a.lang.String.isHex,\n m = ASN1HEX,\n k = m.getV,\n b = m.getTLV,\n h = m.getVbyList,\n c = m.getTLVbyList,\n d = m.getTLVbyListEx,\n i = m.getIdxbyList,\n g = m.getIdxbyListEx,\n l = m.getChildIdx,\n j = new X509();\n this.hex = null;\n this.posSigAlg = null;\n this.posRevCert = null;\n this.parsed = null;\n this._setPos = function () {\n var o = i(this.hex, 0, [0, 0]);\n var n = this.hex.substr(o, 2);\n if (n == \"02\") {\n this.posSigAlg = 1;\n } else {\n if (n == \"30\") {\n this.posSigAlg = 0;\n } else {\n throw new Error(\"malformed 1st item of TBSCertList: \" + n);\n }\n }\n var s = i(this.hex, 0, [0, this.posSigAlg + 3]);\n var r = this.hex.substr(s, 2);\n if (r == \"17\" || r == \"18\") {\n var q, p;\n q = i(this.hex, 0, [0, this.posSigAlg + 4]);\n this.posRevCert = null;\n if (q != -1) {\n p = this.hex.substr(q, 2);\n if (p == \"30\") {\n this.posRevCert = this.posSigAlg + 4;\n }\n }\n } else {\n if (r == \"30\") {\n this.posRevCert = this.posSigAlg + 3;\n } else {\n if (r == \"a0\") {\n this.posRevCert = null;\n } else {\n throw new Error(\"malformed nextUpdate or revCert tag: \" + r);\n }\n }\n }\n };\n this.getVersion = function () {\n if (this.posSigAlg == 0) {\n return null;\n }\n return parseInt(h(this.hex, 0, [0, 0], \"02\"), 16) + 1;\n };\n this.getSignatureAlgorithmField = function () {\n var n = c(this.hex, 0, [0, this.posSigAlg], \"30\");\n return j.getAlgorithmIdentifierName(n);\n };\n this.getIssuer = function () {\n return j.getX500Name(this.getIssuerHex());\n };\n this.getIssuerHex = function () {\n return c(this.hex, 0, [0, this.posSigAlg + 1], \"30\");\n };\n this.getThisUpdate = function () {\n var n = h(this.hex, 0, [0, this.posSigAlg + 2]);\n return result = hextorstr(n);\n };\n this.getNextUpdate = function () {\n var o = i(this.hex, 0, [0, this.posSigAlg + 3]);\n var n = this.hex.substr(o, 2);\n if (n != \"17\" && n != \"18\") {\n return null;\n }\n return hextorstr(k(this.hex, o));\n };\n this.getRevCertArray = function () {\n if (this.posRevCert == null) {\n return null;\n }\n var o = [];\n var n = i(this.hex, 0, [0, this.posRevCert]);\n var p = l(this.hex, n);\n for (var q = 0; q < p.length; q++) {\n var r = b(this.hex, p[q]);\n o.push(this.getRevCert(r));\n }\n return o;\n };\n this.getRevCert = function (p) {\n var o = {};\n var n = l(p, 0);\n o.sn = {\n hex: h(p, 0, [0], \"02\")\n };\n o.date = hextorstr(h(p, 0, [1]));\n if (n.length == 3) {\n o.ext = j.getExtParamArray(c(p, 0, [2]));\n }\n return o;\n };\n this.findRevCert = function (p) {\n var n = new X509(p);\n var o = n.getSerialNumberHex();\n return this.findRevCertBySN(o);\n };\n this.findRevCertBySN = function (o) {\n if (this.parsed == null) {\n this.getParam();\n }\n if (this.parsed.revcert == null) {\n return null;\n }\n var n = this.parsed.revcert;\n for (var p = 0; p < n.length; p++) {\n if (o == n[p].sn.hex) {\n return n[p];\n }\n }\n return null;\n };\n this.getSignatureValueHex = function () {\n return h(this.hex, 0, [2], \"03\", true);\n };\n this.verifySignature = function (o) {\n var p = this.getSignatureAlgorithmField();\n var n = this.getSignatureValueHex();\n var q = c(this.hex, 0, [0], \"30\");\n var r = new KJUR.crypto.Signature({\n alg: p\n });\n r.init(o);\n r.updateHex(q);\n return r.verify(n);\n };\n this.getParam = function (r) {\n var n = {};\n var p = this.getVersion();\n if (p != null) {\n n.version = p;\n }\n n.sigalg = this.getSignatureAlgorithmField();\n n.issuer = this.getIssuer();\n n.thisupdate = this.getThisUpdate();\n var q = this.getNextUpdate();\n if (q != null) {\n n.nextupdate = q;\n }\n var t = this.getRevCertArray();\n if (t != null) {\n n.revcert = t;\n }\n var s = g(this.hex, 0, [0, \"[0]\"]);\n if (s != -1) {\n var o = d(this.hex, 0, [0, \"[0]\", 0]);\n n.ext = j.getExtParamArray(o);\n }\n n.sighex = this.getSignatureValueHex();\n this.parsed = n;\n if (typeof r == \"object\") {\n if (r.tbshex == true) {\n n.tbshex = c(this.hex, 0, [0]);\n }\n if (r.nodnarray == true) {\n delete n.issuer.array;\n }\n }\n return n;\n };\n if (typeof e == \"string\") {\n if (f(e)) {\n this.hex = e;\n } else {\n if (e.match(/-----BEGIN X509 CRL/)) {\n this.hex = pemtohex(e);\n }\n }\n this._setPos();\n }\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.jws == \"undefined\" || !KJUR.jws) {\n KJUR.jws = {};\n}\nKJUR.jws.JWS = function () {\n var b = KJUR,\n a = b.jws.JWS,\n c = a.isSafeJSONString;\n this.parseJWS = function (g, j) {\n if (this.parsedJWS !== undefined && (j || this.parsedJWS.sigvalH !== undefined)) {\n return;\n }\n var i = g.match(/^([^.]+)\\.([^.]+)\\.([^.]+)$/);\n if (i == null) {\n throw \"JWS signature is not a form of 'Head.Payload.SigValue'.\";\n }\n var k = i[1];\n var e = i[2];\n var l = i[3];\n var n = k + \".\" + e;\n this.parsedJWS = {};\n this.parsedJWS.headB64U = k;\n this.parsedJWS.payloadB64U = e;\n this.parsedJWS.sigvalB64U = l;\n this.parsedJWS.si = n;\n if (!j) {\n var h = b64utohex(l);\n var f = parseBigInt(h, 16);\n this.parsedJWS.sigvalH = h;\n this.parsedJWS.sigvalBI = f;\n }\n var d = b64utoutf8(k);\n var m = b64utoutf8(e);\n this.parsedJWS.headS = d;\n this.parsedJWS.payloadS = m;\n if (!c(d, this.parsedJWS, \"headP\")) {\n throw \"malformed JSON string for JWS Head: \" + d;\n }\n };\n};\nKJUR.jws.JWS.sign = function (j, w, z, A, a) {\n var x = KJUR,\n n = x.jws,\n r = n.JWS,\n h = r.readSafeJSONString,\n q = r.isSafeJSONString,\n d = x.crypto,\n l = d.ECDSA,\n p = d.Mac,\n c = d.Signature,\n u = JSON;\n var t, k, o;\n if (typeof w != \"string\" && typeof w != \"object\") {\n throw \"spHeader must be JSON string or object: \" + w;\n }\n if (typeof w == \"object\") {\n k = w;\n t = u.stringify(k);\n }\n if (typeof w == \"string\") {\n t = w;\n if (!q(t)) {\n throw \"JWS Head is not safe JSON string: \" + t;\n }\n k = h(t);\n }\n o = z;\n if (typeof z == \"object\") {\n o = u.stringify(z);\n }\n if ((j == \"\" || j == null) && k.alg !== undefined) {\n j = k.alg;\n }\n if (j != \"\" && j != null && k.alg === undefined) {\n k.alg = j;\n t = u.stringify(k);\n }\n if (j !== k.alg) {\n throw \"alg and sHeader.alg doesn't match: \" + j + \"!=\" + k.alg;\n }\n var s = null;\n if (r.jwsalg2sigalg[j] === undefined) {\n throw \"unsupported alg name: \" + j;\n } else {\n s = r.jwsalg2sigalg[j];\n }\n var e = utf8tob64u(t);\n var m = utf8tob64u(o);\n var b = e + \".\" + m;\n var y = \"\";\n if (s.substr(0, 4) == \"Hmac\") {\n if (A === undefined) {\n throw \"mac key shall be specified for HS* alg\";\n }\n var i = new p({\n alg: s,\n prov: \"cryptojs\",\n pass: A\n });\n i.updateString(b);\n y = i.doFinal();\n } else {\n if (s.indexOf(\"withECDSA\") != -1) {\n var f = new c({\n alg: s\n });\n f.init(A, a);\n f.updateString(b);\n var g = f.sign();\n y = KJUR.crypto.ECDSA.asn1SigToConcatSig(g);\n } else {\n if (s != \"none\") {\n var f = new c({\n alg: s\n });\n f.init(A, a);\n f.updateString(b);\n y = f.sign();\n }\n }\n }\n var v = hextob64u(y);\n return b + \".\" + v;\n};\nKJUR.jws.JWS.verify = function (w, B, n) {\n var x = KJUR,\n q = x.jws,\n t = q.JWS,\n i = t.readSafeJSONString,\n e = x.crypto,\n p = e.ECDSA,\n s = e.Mac,\n d = e.Signature,\n m;\n if (typeof RSAKey !== undefined) {\n m = RSAKey;\n }\n if (!isBase64URLDot(w)) {\n return false;\n }\n var y = w.split(\".\");\n if (y.length !== 3) {\n return false;\n }\n var f = y[0];\n var r = y[1];\n var c = f + \".\" + r;\n var A = b64utohex(y[2]);\n var l = i(b64utoutf8(y[0]));\n var k = null;\n var z = null;\n if (l.alg === undefined) {\n throw \"algorithm not specified in header\";\n } else {\n k = l.alg;\n z = k.substr(0, 2);\n }\n if (n != null && Object.prototype.toString.call(n) === \"[object Array]\" && n.length > 0) {\n var b = \":\" + n.join(\":\") + \":\";\n if (b.indexOf(\":\" + k + \":\") == -1) {\n throw \"algorithm '\" + k + \"' not accepted in the list\";\n }\n }\n if (k != \"none\" && B === null) {\n throw \"key shall be specified to verify.\";\n }\n if (typeof B == \"string\" && B.indexOf(\"-----BEGIN \") != -1) {\n B = KEYUTIL.getKey(B);\n }\n if (z == \"RS\" || z == \"PS\") {\n if (!(B instanceof m)) {\n throw \"key shall be a RSAKey obj for RS* and PS* algs\";\n }\n }\n if (z == \"ES\") {\n if (!(B instanceof p)) {\n throw \"key shall be a ECDSA obj for ES* algs\";\n }\n }\n if (k == \"none\") {}\n var u = null;\n if (t.jwsalg2sigalg[l.alg] === undefined) {\n throw \"unsupported alg name: \" + k;\n } else {\n u = t.jwsalg2sigalg[k];\n }\n if (u == \"none\") {\n throw \"not supported\";\n } else {\n if (u.substr(0, 4) == \"Hmac\") {\n var o = null;\n if (B === undefined) {\n throw \"hexadecimal key shall be specified for HMAC\";\n }\n var j = new s({\n alg: u,\n pass: B\n });\n j.updateString(c);\n o = j.doFinal();\n return A == o;\n } else {\n if (u.indexOf(\"withECDSA\") != -1) {\n var h = null;\n try {\n h = p.concatSigToASN1Sig(A);\n } catch (v) {\n return false;\n }\n var g = new d({\n alg: u\n });\n g.init(B);\n g.updateString(c);\n return g.verify(h);\n } else {\n var g = new d({\n alg: u\n });\n g.init(B);\n g.updateString(c);\n return g.verify(A);\n }\n }\n }\n};\nKJUR.jws.JWS.parse = function (g) {\n var c = g.split(\".\");\n var b = {};\n var f, e, d;\n if (c.length != 2 && c.length != 3) {\n throw \"malformed sJWS: wrong number of '.' splitted elements\";\n }\n f = c[0];\n e = c[1];\n if (c.length == 3) {\n d = c[2];\n }\n b.headerObj = KJUR.jws.JWS.readSafeJSONString(b64utoutf8(f));\n b.payloadObj = KJUR.jws.JWS.readSafeJSONString(b64utoutf8(e));\n b.headerPP = JSON.stringify(b.headerObj, null, \" \");\n if (b.payloadObj == null) {\n b.payloadPP = b64utoutf8(e);\n } else {\n b.payloadPP = JSON.stringify(b.payloadObj, null, \" \");\n }\n if (d !== undefined) {\n b.sigHex = b64utohex(d);\n }\n return b;\n};\nKJUR.jws.JWS.verifyJWT = function (e, l, r) {\n var d = KJUR,\n j = d.jws,\n o = j.JWS,\n n = o.readSafeJSONString,\n p = o.inArray,\n f = o.includedArray;\n if (!isBase64URLDot(e)) {\n return false;\n }\n var k = e.split(\".\");\n if (k.length != 3) {\n return false;\n }\n var c = k[0];\n var i = k[1];\n var q = c + \".\" + i;\n var m = b64utohex(k[2]);\n var h = n(b64utoutf8(c));\n var g = n(b64utoutf8(i));\n if (h.alg === undefined) {\n return false;\n }\n if (r.alg === undefined) {\n throw \"acceptField.alg shall be specified\";\n }\n if (!p(h.alg, r.alg)) {\n return false;\n }\n if (g.iss !== undefined && typeof r.iss === \"object\") {\n if (!p(g.iss, r.iss)) {\n return false;\n }\n }\n if (g.sub !== undefined && typeof r.sub === \"object\") {\n if (!p(g.sub, r.sub)) {\n return false;\n }\n }\n if (g.aud !== undefined && typeof r.aud === \"object\") {\n if (typeof g.aud == \"string\") {\n if (!p(g.aud, r.aud)) {\n return false;\n }\n } else {\n if (typeof g.aud == \"object\") {\n if (!f(g.aud, r.aud)) {\n return false;\n }\n }\n }\n }\n var b = j.IntDate.getNow();\n if (r.verifyAt !== undefined && typeof r.verifyAt === \"number\") {\n b = r.verifyAt;\n }\n if (r.gracePeriod === undefined || typeof r.gracePeriod !== \"number\") {\n r.gracePeriod = 0;\n }\n if (g.exp !== undefined && typeof g.exp == \"number\") {\n if (g.exp + r.gracePeriod < b) {\n return false;\n }\n }\n if (g.nbf !== undefined && typeof g.nbf == \"number\") {\n if (b < g.nbf - r.gracePeriod) {\n return false;\n }\n }\n if (g.iat !== undefined && typeof g.iat == \"number\") {\n if (b < g.iat - r.gracePeriod) {\n return false;\n }\n }\n if (g.jti !== undefined && r.jti !== undefined) {\n if (g.jti !== r.jti) {\n return false;\n }\n }\n if (!o.verify(e, l, r.alg)) {\n return false;\n }\n return true;\n};\nKJUR.jws.JWS.includedArray = function (b, a) {\n var c = KJUR.jws.JWS.inArray;\n if (b === null) {\n return false;\n }\n if (typeof b !== \"object\") {\n return false;\n }\n if (typeof b.length !== \"number\") {\n return false;\n }\n for (var d = 0; d < b.length; d++) {\n if (!c(b[d], a)) {\n return false;\n }\n }\n return true;\n};\nKJUR.jws.JWS.inArray = function (d, b) {\n if (b === null) {\n return false;\n }\n if (typeof b !== \"object\") {\n return false;\n }\n if (typeof b.length !== \"number\") {\n return false;\n }\n for (var c = 0; c < b.length; c++) {\n if (b[c] == d) {\n return true;\n }\n }\n return false;\n};\nKJUR.jws.JWS.jwsalg2sigalg = {\n HS256: \"HmacSHA256\",\n HS384: \"HmacSHA384\",\n HS512: \"HmacSHA512\",\n RS256: \"SHA256withRSA\",\n RS384: \"SHA384withRSA\",\n RS512: \"SHA512withRSA\",\n ES256: \"SHA256withECDSA\",\n ES384: \"SHA384withECDSA\",\n ES512: \"SHA512withECDSA\",\n PS256: \"SHA256withRSAandMGF1\",\n PS384: \"SHA384withRSAandMGF1\",\n PS512: \"SHA512withRSAandMGF1\",\n none: \"none\"\n};\nKJUR.jws.JWS.isSafeJSONString = function (c, b, d) {\n var e = null;\n try {\n e = jsonParse(c);\n if (typeof e != \"object\") {\n return 0;\n }\n if (e.constructor === Array) {\n return 0;\n }\n if (b) {\n b[d] = e;\n }\n return 1;\n } catch (a) {\n return 0;\n }\n};\nKJUR.jws.JWS.readSafeJSONString = function (b) {\n var c = null;\n try {\n c = jsonParse(b);\n if (typeof c != \"object\") {\n return null;\n }\n if (c.constructor === Array) {\n return null;\n }\n return c;\n } catch (a) {\n return null;\n }\n};\nKJUR.jws.JWS.getEncodedSignatureValueFromJWS = function (b) {\n var a = b.match(/^[^.]+\\.[^.]+\\.([^.]+)$/);\n if (a == null) {\n throw \"JWS signature is not a form of 'Head.Payload.SigValue'.\";\n }\n return a[1];\n};\nKJUR.jws.JWS.getJWKthumbprint = function (d) {\n if (d.kty !== \"RSA\" && d.kty !== \"EC\" && d.kty !== \"oct\") {\n throw \"unsupported algorithm for JWK Thumprint\";\n }\n var a = \"{\";\n if (d.kty === \"RSA\") {\n if (typeof d.n != \"string\" || typeof d.e != \"string\") {\n throw \"wrong n and e value for RSA key\";\n }\n a += '\"e\":\"' + d.e + '\",';\n a += '\"kty\":\"' + d.kty + '\",';\n a += '\"n\":\"' + d.n + '\"}';\n } else {\n if (d.kty === \"EC\") {\n if (typeof d.crv != \"string\" || typeof d.x != \"string\" || typeof d.y != \"string\") {\n throw \"wrong crv, x and y value for EC key\";\n }\n a += '\"crv\":\"' + d.crv + '\",';\n a += '\"kty\":\"' + d.kty + '\",';\n a += '\"x\":\"' + d.x + '\",';\n a += '\"y\":\"' + d.y + '\"}';\n } else {\n if (d.kty === \"oct\") {\n if (typeof d.k != \"string\") {\n throw \"wrong k value for oct(symmetric) key\";\n }\n a += '\"kty\":\"' + d.kty + '\",';\n a += '\"k\":\"' + d.k + '\"}';\n }\n }\n }\n var b = rstrtohex(a);\n var c = KJUR.crypto.Util.hashHex(b, \"sha256\");\n var e = hextob64u(c);\n return e;\n};\nKJUR.jws.IntDate = {};\nKJUR.jws.IntDate.get = function (c) {\n var b = KJUR.jws.IntDate,\n d = b.getNow,\n a = b.getZulu;\n if (c == \"now\") {\n return d();\n } else {\n if (c == \"now + 1hour\") {\n return d() + 60 * 60;\n } else {\n if (c == \"now + 1day\") {\n return d() + 60 * 60 * 24;\n } else {\n if (c == \"now + 1month\") {\n return d() + 60 * 60 * 24 * 30;\n } else {\n if (c == \"now + 1year\") {\n return d() + 60 * 60 * 24 * 365;\n } else {\n if (c.match(/Z$/)) {\n return a(c);\n } else {\n if (c.match(/^[0-9]+$/)) {\n return parseInt(c);\n }\n }\n }\n }\n }\n }\n }\n throw \"unsupported format: \" + c;\n};\nKJUR.jws.IntDate.getZulu = function (a) {\n return zulutosec(a);\n};\nKJUR.jws.IntDate.getNow = function () {\n var a = ~~(new Date() / 1000);\n return a;\n};\nKJUR.jws.IntDate.intDate2UTCString = function (a) {\n var b = new Date(a * 1000);\n return b.toUTCString();\n};\nKJUR.jws.IntDate.intDate2Zulu = function (e) {\n var i = new Date(e * 1000),\n h = (\"0000\" + i.getUTCFullYear()).slice(-4),\n g = (\"00\" + (i.getUTCMonth() + 1)).slice(-2),\n b = (\"00\" + i.getUTCDate()).slice(-2),\n a = (\"00\" + i.getUTCHours()).slice(-2),\n c = (\"00\" + i.getUTCMinutes()).slice(-2),\n f = (\"00\" + i.getUTCSeconds()).slice(-2);\n return h + g + b + a + c + f + \"Z\";\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.jws == \"undefined\" || !KJUR.jws) {\n KJUR.jws = {};\n}\nKJUR.jws.JWSJS = function () {\n var c = KJUR,\n b = c.jws,\n a = b.JWS,\n d = a.readSafeJSONString;\n this.aHeader = [];\n this.sPayload = \"\";\n this.aSignature = [];\n this.init = function () {\n this.aHeader = [];\n this.sPayload = undefined;\n this.aSignature = [];\n };\n this.initWithJWS = function (f) {\n this.init();\n var e = f.split(\".\");\n if (e.length != 3) {\n throw \"malformed input JWS\";\n }\n this.aHeader.push(e[0]);\n this.sPayload = e[1];\n this.aSignature.push(e[2]);\n };\n this.addSignature = function (e, h, m, k) {\n if (this.sPayload === undefined || this.sPayload === null) {\n throw \"there's no JSON-JS signature to add.\";\n }\n var l = this.aHeader.length;\n if (this.aHeader.length != this.aSignature.length) {\n throw \"aHeader.length != aSignature.length\";\n }\n try {\n var f = KJUR.jws.JWS.sign(e, h, this.sPayload, m, k);\n var j = f.split(\".\");\n var n = j[0];\n var g = j[2];\n this.aHeader.push(j[0]);\n this.aSignature.push(j[2]);\n } catch (i) {\n if (this.aHeader.length > l) {\n this.aHeader.pop();\n }\n if (this.aSignature.length > l) {\n this.aSignature.pop();\n }\n throw \"addSignature failed: \" + i;\n }\n };\n this.verifyAll = function (h) {\n if (this.aHeader.length !== h.length || this.aSignature.length !== h.length) {\n return false;\n }\n for (var g = 0; g < h.length; g++) {\n var f = h[g];\n if (f.length !== 2) {\n return false;\n }\n var e = this.verifyNth(g, f[0], f[1]);\n if (e === false) {\n return false;\n }\n }\n return true;\n };\n this.verifyNth = function (f, j, g) {\n if (this.aHeader.length <= f || this.aSignature.length <= f) {\n return false;\n }\n var h = this.aHeader[f];\n var k = this.aSignature[f];\n var l = h + \".\" + this.sPayload + \".\" + k;\n var e = false;\n try {\n e = a.verify(l, j, g);\n } catch (i) {\n return false;\n }\n return e;\n };\n this.readJWSJS = function (g) {\n if (typeof g === \"string\") {\n var f = d(g);\n if (f == null) {\n throw \"argument is not safe JSON object string\";\n }\n this.aHeader = f.headers;\n this.sPayload = f.payload;\n this.aSignature = f.signatures;\n } else {\n try {\n if (g.headers.length > 0) {\n this.aHeader = g.headers;\n } else {\n throw \"malformed header\";\n }\n if (typeof g.payload === \"string\") {\n this.sPayload = g.payload;\n } else {\n throw \"malformed signatures\";\n }\n if (g.signatures.length > 0) {\n this.aSignature = g.signatures;\n } else {\n throw \"malformed signatures\";\n }\n } catch (e) {\n throw \"malformed JWS-JS JSON object: \" + e;\n }\n }\n };\n this.getJSON = function () {\n return {\n headers: this.aHeader,\n payload: this.sPayload,\n signatures: this.aSignature\n };\n };\n this.isEmpty = function () {\n if (this.aHeader.length == 0) {\n return 1;\n }\n return 0;\n };\n};\nexports.SecureRandom = SecureRandom;\nexports.rng_seed_time = rng_seed_time;\nexports.BigInteger = BigInteger;\nexports.RSAKey = RSAKey;\nexports.ECDSA = KJUR.crypto.ECDSA;\nexports.DSA = KJUR.crypto.DSA;\nexports.Signature = KJUR.crypto.Signature;\nexports.MessageDigest = KJUR.crypto.MessageDigest;\nexports.Mac = KJUR.crypto.Mac;\n//exports.Cipher = KJUR.crypto.Cipher;\nexports.KEYUTIL = KEYUTIL;\nexports.ASN1HEX = ASN1HEX;\nexports.X509 = X509;\nexports.X509CRL = X509CRL;\nexports.CryptoJS = CryptoJS;\n\n// ext/base64.js\nexports.b64tohex = b64tohex;\nexports.b64toBA = b64toBA;\n\n// ext/ec*.js\nexports.ECFieldElementFp = ECFieldElementFp;\nexports.ECPointFp = ECPointFp;\nexports.ECCurveFp = ECCurveFp;\n\n// base64x.js\nexports.stoBA = stoBA;\nexports.BAtos = BAtos;\nexports.BAtohex = BAtohex;\nexports.stohex = stohex;\nexports.stob64 = stob64;\nexports.stob64u = stob64u;\nexports.b64utos = b64utos;\nexports.b64tob64u = b64tob64u;\nexports.b64utob64 = b64utob64;\nexports.hex2b64 = hex2b64;\nexports.hextob64u = hextob64u;\nexports.b64utohex = b64utohex;\nexports.utf8tob64u = utf8tob64u;\nexports.b64utoutf8 = b64utoutf8;\nexports.utf8tob64 = utf8tob64;\nexports.b64toutf8 = b64toutf8;\nexports.utf8tohex = utf8tohex;\nexports.hextoutf8 = hextoutf8;\nexports.hextorstr = hextorstr;\nexports.rstrtohex = rstrtohex;\nexports.hextob64 = hextob64;\nexports.hextob64nl = hextob64nl;\nexports.b64nltohex = b64nltohex;\nexports.hextopem = hextopem;\nexports.pemtohex = pemtohex;\nexports.hextoArrayBuffer = hextoArrayBuffer;\nexports.ArrayBuffertohex = ArrayBuffertohex;\nexports.zulutomsec = zulutomsec;\nexports.msectozulu = msectozulu;\nexports.zulutosec = zulutosec;\nexports.zulutodate = zulutodate;\nexports.datetozulu = datetozulu;\nexports.uricmptohex = uricmptohex;\nexports.hextouricmp = hextouricmp;\nexports.ipv6tohex = ipv6tohex;\nexports.hextoipv6 = hextoipv6;\nexports.hextoip = hextoip;\nexports.iptohex = iptohex;\nexports.ucs2hextoutf8 = ucs2hextoutf8;\nexports.encodeURIComponentAll = encodeURIComponentAll;\nexports.newline_toUnix = newline_toUnix;\nexports.newline_toDos = newline_toDos;\nexports.hextoposhex = hextoposhex;\nexports.intarystrtohex = intarystrtohex;\nexports.strdiffidx = strdiffidx;\nexports.oidtohex = oidtohex;\nexports.hextooid = hextooid;\nexports.strpad = strpad;\nexports.bitstrtoint = bitstrtoint;\nexports.inttobitstr = inttobitstr;\nexports.bitstrtobinstr = bitstrtobinstr;\nexports.binstrtobitstr = binstrtobitstr;\nexports.isBase64URLDot = isBase64URLDot;\nexports.namearraytobinstr = namearraytobinstr;\nexports.extendClass = extendClass;\nexports.foldnl = foldnl;\nexports.b64topem = b64topem;\nexports.pemtob64 = pemtob64;\nexports.timeogen = timetogen;\nexports.aryval = aryval;\nexports.inttohex = inttohex;\nexports.twoscompl = twoscompl;\n\n// name spaces\nexports.KJUR = KJUR;\nexports.crypto = KJUR.crypto;\nexports.asn1 = KJUR.asn1;\nexports.jws = KJUR.jws;\nexports.lang = KJUR.lang;\nexports.VERSION = VERSION;\nexports.VERSION_FULL = VERSION_FULL;","import { environment } from \"@e-tenant-hub/environments\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ndeclare let require: any;\r\n\r\nexport class AppConfig {\r\n\tapiRoot = \"\";\r\n\tauthApiRoot = \"\";\r\n\tappCompanyName = \"\";\r\n\tappDisplayName = \"\";\r\n\tappName = \"\";\r\n\tappVersion = \"\";\r\n\tappVersionBuild = \"\";\r\n\tappVersionName = \"\";\r\n\tauthority = \"\";\r\n\tclientId = \"\";\r\n\tclientSecret = \"\";\r\n\tenableAdminSolicitationReading = false;\r\n\tenableIntegrationMode = false;\r\n\thostHub = \"\";\r\n\tproduction = false;\r\n\tsumUpAffiliateKey = \"\";\r\n\tsumUpCallbackPath = \"\";\r\n\tsumUpSchemeUrl = \"\";\r\n\tsystemPayPaymentUrl = \"\";\r\n\tuseRopcFlow = false;\r\n\tuserSessionNbMinutes = 1440;\r\n\r\n\tconstructor(init?: Partial) {\r\n\t\tObject.assign(this, init);\r\n\t}\r\n\r\n\tstatic createAppConfigFromEnvironment(): AppConfig {\r\n\t\treturn new AppConfig({\r\n\t\t\tapiRoot: environment.apiRoot,\r\n\t\t\tauthApiRoot: environment.authApiRoot,\r\n\t\t\tappDisplayName: environment.appDisplayName,\r\n\t\t\tappName: environment.appName,\r\n\t\t\tappVersion: environment.appVersion,\r\n\t\t\tappVersionBuild: require(\"../../../../../../package.json\").version,\r\n\t\t\tappVersionName: environment.appVersionName,\r\n\t\t\tauthority: environment.authority,\r\n\t\t\tclientId: environment.clientId,\r\n\t\t\tclientSecret: environment.clientSecret,\r\n\t\t\tenableAdminSolicitationReading: JSON.parse(environment.enableAdminSolicitationReading),\r\n\t\t\tenableIntegrationMode: JSON.parse(environment.enableIntegrationMode),\r\n\t\t\thostHub: environment.hostHub,\r\n\t\t\tproduction: environment.production,\r\n\t\t\tsumUpAffiliateKey: environment.sumUpAffiliateKey,\r\n\t\t\tsumUpCallbackPath: environment.sumUpCallbackPath,\r\n\t\t\tsumUpSchemeUrl: environment.sumUpSchemeUrl,\r\n\t\t\tsystemPayPaymentUrl: environment.systemPayPaymentUrl,\r\n\t\t\tuseRopcFlow: JSON.parse(environment.useRopcFlow),\r\n\t\t\tuserSessionNbMinutes: JSON.parse(environment.userSessionNbMinutes),\r\n\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, of, tap } from \"rxjs\";\r\nimport { AppConfig } from \"../types/app-config\";\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class AppConfigService {\r\n\tappConfig!: AppConfig;\r\n\r\n\tinitAppConfig(): Observable {\r\n\t\treturn of(AppConfig.createAppConfigFromEnvironment()).pipe(\r\n\t\t\ttap((iniAppConfig: AppConfig) => (this.appConfig = iniAppConfig))\r\n\t\t);\r\n\t}\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { APP_INITIALIZER, InjectionToken, NgModule, inject } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { AppConfigService } from \"./services/app-config-service.service\";\r\nimport { AppConfig } from \"./types/app-config\";\r\n\r\nexport const APP_CONFIG = new InjectionToken(\"APP_CONFIG\");\r\n\r\nconst initializeConfigFn =\r\n\t(configService: AppConfigService): (() => Observable) =>\r\n\t() =>\r\n\t\tconfigService.initAppConfig();\r\n\r\n@NgModule({\r\n\timports: [CommonModule],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: APP_INITIALIZER,\r\n\t\t\tuseFactory: initializeConfigFn,\r\n\t\t\tmulti: true,\r\n\t\t\tdeps: [AppConfigService],\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: APP_CONFIG,\r\n\t\t\tuseFactory: () => inject(AppConfigService).appConfig,\r\n\t\t\tdeps: [AppConfigService],\r\n\t\t},\r\n\t],\r\n})\r\nexport class ConfigModule {}\r\n","/**\n * @license Angular v18.1.1\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { assertInInjectionContext, inject, DestroyRef, ɵRuntimeError, ɵgetOutputDestroyRef, Injector, effect, untracked, assertNotInReactiveContext, signal, computed } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * Operator which completes the Observable when the calling context (component, directive, service,\n * etc) is destroyed.\n *\n * @param destroyRef optionally, the `DestroyRef` representing the current context. This can be\n * passed explicitly to use `takeUntilDestroyed` outside of an [injection\n * context](guide/di/dependency-injection-context). Otherwise, the current `DestroyRef` is injected.\n *\n * @developerPreview\n */\nfunction takeUntilDestroyed(destroyRef) {\n if (!destroyRef) {\n assertInInjectionContext(takeUntilDestroyed);\n destroyRef = inject(DestroyRef);\n }\n const destroyed$ = new Observable(observer => {\n const unregisterFn = destroyRef.onDestroy(observer.next.bind(observer));\n return unregisterFn;\n });\n return source => {\n return source.pipe(takeUntil(destroyed$));\n };\n}\n\n/**\n * Implementation of `OutputRef` that emits values from\n * an RxJS observable source.\n *\n * @internal\n */\nclass OutputFromObservableRef {\n constructor(source) {\n this.source = source;\n this.destroyed = false;\n this.destroyRef = inject(DestroyRef);\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n });\n }\n subscribe(callbackFn) {\n if (this.destroyed) {\n throw new ɵRuntimeError(953 /* ɵRuntimeErrorCode.OUTPUT_REF_DESTROYED */, ngDevMode && 'Unexpected subscription to destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.');\n }\n // Stop yielding more values when the directive/component is already destroyed.\n const subscription = this.source.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: value => callbackFn(value)\n });\n return {\n unsubscribe: () => subscription.unsubscribe()\n };\n }\n}\n/**\n * Declares an Angular output that is using an RxJS observable as a source\n * for events dispatched to parent subscribers.\n *\n * The behavior for an observable as source is defined as followed:\n * 1. New values are forwarded to the Angular output (next notifications).\n * 2. Errors notifications are not handled by Angular. You need to handle these manually.\n * For example by using `catchError`.\n * 3. Completion notifications stop the output from emitting new values.\n *\n * @usageNotes\n * Initialize an output in your directive by declaring a\n * class field and initializing it with the `outputFromObservable()` function.\n *\n * ```ts\n * @Directive({..})\n * export class MyDir {\n * nameChange$ = ;\n * nameChange = outputFromObservable(this.nameChange$);\n * }\n * ```\n *\n * @developerPreview\n */\nfunction outputFromObservable(observable, opts) {\n ngDevMode && assertInInjectionContext(outputFromObservable);\n return new OutputFromObservableRef(observable);\n}\n\n/**\n * Converts an Angular output declared via `output()` or `outputFromObservable()`\n * to an observable.\n *\n * You can subscribe to the output via `Observable.subscribe` then.\n *\n * @developerPreview\n */\nfunction outputToObservable(ref) {\n const destroyRef = ɵgetOutputDestroyRef(ref);\n return new Observable(observer => {\n // Complete the observable upon directive/component destroy.\n // Note: May be `undefined` if an `EventEmitter` is declared outside\n // of an injection context.\n destroyRef?.onDestroy(() => observer.complete());\n const subscription = ref.subscribe(v => observer.next(v));\n return () => subscription.unsubscribe();\n });\n}\n\n/**\n * Exposes the value of an Angular `Signal` as an RxJS `Observable`.\n *\n * The signal's value will be propagated into the `Observable`'s subscribers using an `effect`.\n *\n * `toObservable` must be called in an injection context unless an injector is provided via options.\n *\n * @developerPreview\n */\nfunction toObservable(source, options) {\n !options?.injector && assertInInjectionContext(toObservable);\n const injector = options?.injector ?? inject(Injector);\n const subject = new ReplaySubject(1);\n const watcher = effect(() => {\n let value;\n try {\n value = source();\n } catch (err) {\n untracked(() => subject.error(err));\n return;\n }\n untracked(() => subject.next(value));\n }, {\n injector,\n manualCleanup: true\n });\n injector.get(DestroyRef).onDestroy(() => {\n watcher.destroy();\n subject.complete();\n });\n return subject.asObservable();\n}\n\n/**\n * Get the current value of an `Observable` as a reactive `Signal`.\n *\n * `toSignal` returns a `Signal` which provides synchronous reactive access to values produced\n * by the given `Observable`, by subscribing to that `Observable`. The returned `Signal` will always\n * have the most recent value emitted by the subscription, and will throw an error if the\n * `Observable` errors.\n *\n * With `requireSync` set to `true`, `toSignal` will assert that the `Observable` produces a value\n * immediately upon subscription. No `initialValue` is needed in this case, and the returned signal\n * does not include an `undefined` type.\n *\n * By default, the subscription will be automatically cleaned up when the current [injection\n * context](guide/di/dependency-injection-context) is destroyed. For example, when `toSignal` is\n * called during the construction of a component, the subscription will be cleaned up when the\n * component is destroyed. If an injection context is not available, an explicit `Injector` can be\n * passed instead.\n *\n * If the subscription should persist until the `Observable` itself completes, the `manualCleanup`\n * option can be specified instead, which disables the automatic subscription teardown. No injection\n * context is needed in this configuration as well.\n *\n * @developerPreview\n */\nfunction toSignal(source, options) {\n ngDevMode && assertNotInReactiveContext(toSignal, 'Invoking `toSignal` causes new subscriptions every time. ' + 'Consider moving `toSignal` outside of the reactive context and read the signal value where needed.');\n const requiresCleanup = !options?.manualCleanup;\n requiresCleanup && !options?.injector && assertInInjectionContext(toSignal);\n const cleanupRef = requiresCleanup ? options?.injector?.get(DestroyRef) ?? inject(DestroyRef) : null;\n const equal = makeToSignalEqual(options?.equal);\n // Note: T is the Observable value type, and U is the initial value type. They don't have to be\n // the same - the returned signal gives values of type `T`.\n let state;\n if (options?.requireSync) {\n // Initially the signal is in a `NoValue` state.\n state = signal({\n kind: 0 /* StateKind.NoValue */\n }, {\n equal\n });\n } else {\n // If an initial value was passed, use it. Otherwise, use `undefined` as the initial value.\n state = signal({\n kind: 1 /* StateKind.Value */,\n value: options?.initialValue\n }, {\n equal\n });\n }\n // Note: This code cannot run inside a reactive context (see assertion above). If we'd support\n // this, we would subscribe to the observable outside of the current reactive context, avoiding\n // that side-effect signal reads/writes are attribute to the current consumer. The current\n // consumer only needs to be notified when the `state` signal changes through the observable\n // subscription. Additional context (related to async pipe):\n // https://github.com/angular/angular/pull/50522.\n const sub = source.subscribe({\n next: value => state.set({\n kind: 1 /* StateKind.Value */,\n value\n }),\n error: error => {\n if (options?.rejectErrors) {\n // Kick the error back to RxJS. It will be caught and rethrown in a macrotask, which causes\n // the error to end up as an uncaught exception.\n throw error;\n }\n state.set({\n kind: 2 /* StateKind.Error */,\n error\n });\n }\n // Completion of the Observable is meaningless to the signal. Signals don't have a concept of\n // \"complete\".\n });\n if (ngDevMode && options?.requireSync && state().kind === 0 /* StateKind.NoValue */) {\n throw new ɵRuntimeError(601 /* ɵRuntimeErrorCode.REQUIRE_SYNC_WITHOUT_SYNC_EMIT */, '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n }\n // Unsubscribe when the current context is destroyed, if requested.\n cleanupRef?.onDestroy(sub.unsubscribe.bind(sub));\n // The actual returned signal is a `computed` of the `State` signal, which maps the various states\n // to either values or errors.\n return computed(() => {\n const current = state();\n switch (current.kind) {\n case 1 /* StateKind.Value */:\n return current.value;\n case 2 /* StateKind.Error */:\n throw current.error;\n case 0 /* StateKind.NoValue */:\n // This shouldn't really happen because the error is thrown on creation.\n // TODO(alxhub): use a RuntimeError when we finalize the error semantics\n throw new ɵRuntimeError(601 /* ɵRuntimeErrorCode.REQUIRE_SYNC_WITHOUT_SYNC_EMIT */, '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n }\n }, {\n equal: options?.equal\n });\n}\nfunction makeToSignalEqual(userEquality = Object.is) {\n return (a, b) => a.kind === 1 /* StateKind.Value */ && b.kind === 1 /* StateKind.Value */ && userEquality(a.value, b.value);\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { outputFromObservable, outputToObservable, takeUntilDestroyed, toObservable, toSignal };\n","export class Roles {\r\n\tstatic readonly admin: string = \"admin\";\r\n\tstatic readonly legalPerson: string = \"legal-person\";\r\n\tstatic readonly naturalPerson: string = \"natural-person\";\r\n}\r\n","import * as i0 from '@angular/core';\nimport { Injectable, Optional, Inject, makeEnvironmentProviders, NgModule, InjectionToken } from '@angular/core';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i1 from '@angular/common/http';\nimport { HttpHeaders, HttpParams, HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { Subject, of, from, race, throwError, combineLatest, merge } from 'rxjs';\nimport { filter, tap, debounceTime, delay, map, switchMap, first, catchError, take, mergeMap, timeout } from 'rxjs/operators';\n\n/**\n * A validation handler that isn't validating nothing.\n * Can be used to skip validation (at your own risk).\n */\nclass NullValidationHandler {\n validateSignature(validationParams) {\n return Promise.resolve(null);\n }\n validateAtHash(validationParams) {\n return Promise.resolve(true);\n }\n}\nclass OAuthModuleConfig {}\nclass OAuthResourceServerConfig {}\nclass DateTimeProvider {}\nlet SystemDateTimeProvider = /*#__PURE__*/(() => {\n class SystemDateTimeProvider extends DateTimeProvider {\n now() {\n return Date.now();\n }\n new() {\n return new Date();\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵSystemDateTimeProvider_BaseFactory;\n return function SystemDateTimeProvider_Factory(t) {\n return (ɵSystemDateTimeProvider_BaseFactory || (ɵSystemDateTimeProvider_BaseFactory = i0.ɵɵgetInheritedFactory(SystemDateTimeProvider)))(t || SystemDateTimeProvider);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SystemDateTimeProvider,\n factory: SystemDateTimeProvider.ɵfac\n });\n }\n }\n return SystemDateTimeProvider;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nclass LoginOptions {\n constructor() {\n /**\n * Set this to true to disable the nonce\n * check which is used to avoid\n * replay attacks.\n * This flag should never be true in\n * production environments.\n */\n this.disableNonceCheck = false;\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n this.preventClearHashAfterLogin = false;\n }\n}\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nclass OAuthLogger {}\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nclass OAuthStorage {}\nlet MemoryStorage = /*#__PURE__*/(() => {\n class MemoryStorage {\n constructor() {\n this.data = new Map();\n }\n getItem(key) {\n return this.data.get(key);\n }\n removeItem(key) {\n this.data.delete(key);\n }\n setItem(key, data) {\n this.data.set(key, data);\n }\n static {\n this.ɵfac = function MemoryStorage_Factory(t) {\n return new (t || MemoryStorage)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MemoryStorage,\n factory: MemoryStorage.ɵfac\n });\n }\n }\n return MemoryStorage;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nclass ReceivedTokens {}\nclass OAuthEvent {\n constructor(type) {\n this.type = type;\n }\n}\nclass OAuthSuccessEvent extends OAuthEvent {\n constructor(type, info = null) {\n super(type);\n this.info = info;\n }\n}\nclass OAuthInfoEvent extends OAuthEvent {\n constructor(type, info = null) {\n super(type);\n this.info = info;\n }\n}\nclass OAuthErrorEvent extends OAuthEvent {\n constructor(type, reason, params = null) {\n super(type);\n this.reason = reason;\n this.params = params;\n }\n}\n\n// see: https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_.22Unicode_Problem.22\nfunction b64DecodeUnicode(str) {\n const base64 = str.replace(/-/g, '+').replace(/_/g, '/');\n return decodeURIComponent(atob(base64).split('').map(function (c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n}\nfunction base64UrlEncode(str) {\n const base64 = btoa(str);\n return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n}\nclass AuthConfig {\n constructor(json) {\n /**\n * The client's id as registered with the auth server\n */\n this.clientId = '';\n /**\n * The client's redirectUri as registered with the auth server\n */\n this.redirectUri = '';\n /**\n * An optional second redirectUri where the auth server\n * redirects the user to after logging out.\n */\n this.postLogoutRedirectUri = '';\n /**\n * Defines whether to use 'redirectUri' as a replacement\n * of 'postLogoutRedirectUri' if the latter is not set.\n */\n this.redirectUriAsPostLogoutRedirectUriFallback = true;\n /**\n * The auth server's endpoint that allows to log\n * the user in when using implicit flow.\n */\n this.loginUrl = '';\n /**\n * The requested scopes\n */\n this.scope = 'openid profile';\n this.resource = '';\n this.rngUrl = '';\n /**\n * Defines whether to use OpenId Connect during\n * implicit flow.\n */\n this.oidc = true;\n /**\n * Defines whether to request an access token during\n * implicit flow.\n */\n this.requestAccessToken = true;\n this.options = null;\n /**\n * The issuer's uri.\n */\n this.issuer = '';\n /**\n * The logout url.\n */\n this.logoutUrl = '';\n /**\n * Defines whether to clear the hash fragment after logging in.\n */\n this.clearHashAfterLogin = true;\n /**\n * Url of the token endpoint as defined by OpenId Connect and OAuth 2.\n */\n this.tokenEndpoint = null;\n /**\n * Url of the revocation endpoint as defined by OpenId Connect and OAuth 2.\n */\n this.revocationEndpoint = null;\n /**\n * Names of known parameters sent out in the TokenResponse. https://tools.ietf.org/html/rfc6749#section-5.1\n */\n this.customTokenParameters = [];\n /**\n * Url of the userinfo endpoint as defined by OpenId Connect.\n */\n this.userinfoEndpoint = null;\n this.responseType = '';\n /**\n * Defines whether additional debug information should\n * be shown at the console. Note that in certain browsers\n * the verbosity of the console needs to be explicitly set\n * to include Debug level messages.\n */\n this.showDebugInformation = false;\n /**\n * The redirect uri used when doing silent refresh.\n */\n this.silentRefreshRedirectUri = '';\n this.silentRefreshMessagePrefix = '';\n /**\n * Set this to true to display the iframe used for\n * silent refresh for debugging.\n */\n this.silentRefreshShowIFrame = false;\n /**\n * Timeout for silent refresh.\n * @internal\n * @deprecated use silentRefreshTimeout\n */\n this.siletRefreshTimeout = 1000 * 20;\n /**\n * Timeout for silent refresh.\n */\n this.silentRefreshTimeout = 1000 * 20;\n /**\n * Some auth servers don't allow using password flow\n * w/o a client secret while the standards do not\n * demand for it. In this case, you can set a password\n * here. As this password is exposed to the public\n * it does not bring additional security and is therefore\n * as good as using no password.\n */\n this.dummyClientSecret = '';\n /**\n * Defines whether https is required.\n * The default value is remoteOnly which only allows\n * http for localhost, while every other domains need\n * to be used with https.\n */\n this.requireHttps = 'remoteOnly';\n /**\n * Defines whether every url provided by the discovery\n * document has to start with the issuer's url.\n */\n this.strictDiscoveryDocumentValidation = true;\n /**\n * JSON Web Key Set (https://tools.ietf.org/html/rfc7517)\n * with keys used to validate received id_tokens.\n * This is taken out of the disovery document. Can be set manually too.\n */\n this.jwks = null;\n /**\n * Map with additional query parameter that are appended to\n * the request when initializing implicit flow.\n */\n this.customQueryParams = null;\n this.silentRefreshIFrameName = 'angular-oauth-oidc-silent-refresh-iframe';\n /**\n * Defines when the token_timeout event should be raised.\n * If you set this to the default value 0.75, the event\n * is triggered after 75% of the token's life time.\n */\n this.timeoutFactor = 0.75;\n /**\n * If true, the lib will try to check whether the user\n * is still logged in on a regular basis as described\n * in http://openid.net/specs/openid-connect-session-1_0.html#ChangeNotification\n */\n this.sessionChecksEnabled = false;\n /**\n * Interval in msec for checking the session\n * according to http://openid.net/specs/openid-connect-session-1_0.html#ChangeNotification\n */\n this.sessionCheckIntervall = 3 * 1000;\n /**\n * Url for the iframe used for session checks\n */\n this.sessionCheckIFrameUrl = null;\n /**\n * Name of the iframe to use for session checks\n */\n this.sessionCheckIFrameName = 'angular-oauth-oidc-check-session-iframe';\n /**\n * This property has been introduced to disable at_hash checks\n * and is indented for Identity Provider that does not deliver\n * an at_hash EVEN THOUGH its recommended by the OIDC specs.\n * Of course, when disabling these checks then we are bypassing\n * a security check which means we are more vulnerable.\n */\n this.disableAtHashCheck = false;\n /**\n * Defines wether to check the subject of a refreshed token after silent refresh.\n * Normally, it should be the same as before.\n */\n this.skipSubjectCheck = false;\n this.useIdTokenHintForSilentRefresh = false;\n /**\n * Defined whether to skip the validation of the issuer in the discovery document.\n * Normally, the discovey document's url starts with the url of the issuer.\n */\n this.skipIssuerCheck = false;\n /**\n * final state sent to issuer is built as follows:\n * state = nonce + nonceStateSeparator + additional state\n * Default separator is ';' (encoded %3B).\n * In rare cases, this character might be forbidden or inconvenient to use by the issuer so it can be customized.\n */\n this.nonceStateSeparator = ';';\n /**\n * Set this to true to use HTTP BASIC auth for AJAX calls\n */\n this.useHttpBasicAuth = false;\n /**\n * Decreases the Expiration time of tokens by this number of seconds\n */\n this.decreaseExpirationBySec = 0;\n /**\n * The interceptors waits this time span if there is no token\n */\n this.waitForTokenInMsec = 0;\n /**\n * Code Flow is by defauld used together with PKCI which is also higly recommented.\n * You can disbale it here by setting this flag to true.\n * https://tools.ietf.org/html/rfc7636#section-1.1\n */\n this.disablePKCE = false;\n /**\n * Set this to true to preserve the requested route including query parameters after code flow login.\n * This setting enables deep linking for the code flow.\n */\n this.preserveRequestedRoute = false;\n /**\n * Allows to disable the timer for the id_token used\n * for token refresh\n */\n this.disableIdTokenTimer = false;\n /**\n * Blocks other origins requesting a silent refresh\n */\n this.checkOrigin = false;\n /**\n * This property allows you to override the method that is used to open the login url,\n * allowing a way for implementations to specify their own method of routing to new\n * urls.\n */\n this.openUri = uri => {\n location.href = uri;\n };\n if (json) {\n Object.assign(this, json);\n }\n }\n}\n\n/**\n * This custom encoder allows charactes like +, % and / to be used in passwords\n */\nclass WebHttpUrlEncodingCodec {\n encodeKey(k) {\n return encodeURIComponent(k);\n }\n encodeValue(v) {\n return encodeURIComponent(v);\n }\n decodeKey(k) {\n return decodeURIComponent(k);\n }\n decodeValue(v) {\n return decodeURIComponent(v);\n }\n}\n\n/**\n * Interface for Handlers that are hooked in to\n * validate tokens.\n */\nclass ValidationHandler {}\n/**\n * This abstract implementation of ValidationHandler already implements\n * the method validateAtHash. However, to make use of it,\n * you have to override the method calcHash.\n */\nclass AbstractValidationHandler {\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n async validateAtHash(params) {\n const hashAlg = this.inferHashAlgorithm(params.idTokenHeader);\n const tokenHash = await this.calcHash(params.accessToken, hashAlg); // sha256(accessToken, { asString: true });\n const leftMostHalf = tokenHash.substr(0, tokenHash.length / 2);\n const atHash = base64UrlEncode(leftMostHalf);\n const claimsAtHash = params.idTokenClaims['at_hash'].replace(/=/g, '');\n if (atHash !== claimsAtHash) {\n console.error('exptected at_hash: ' + atHash);\n console.error('actual at_hash: ' + claimsAtHash);\n }\n return atHash === claimsAtHash;\n }\n /**\n * Infers the name of the hash algorithm to use\n * from the alg field of an id_token.\n *\n * @param jwtHeader the id_token's parsed header\n */\n inferHashAlgorithm(jwtHeader) {\n const alg = jwtHeader['alg'];\n if (!alg.match(/^.S[0-9]{3}$/)) {\n throw new Error('Algorithm not supported: ' + alg);\n }\n return 'sha-' + alg.substr(2);\n }\n}\nlet UrlHelperService = /*#__PURE__*/(() => {\n class UrlHelperService {\n getHashFragmentParams(customHashFragment) {\n let hash = customHashFragment || window.location.hash;\n hash = decodeURIComponent(hash);\n if (hash.indexOf('#') !== 0) {\n return {};\n }\n const questionMarkPosition = hash.indexOf('?');\n if (questionMarkPosition > -1) {\n hash = hash.substr(questionMarkPosition + 1);\n } else {\n hash = hash.substr(1);\n }\n return this.parseQueryString(hash);\n }\n parseQueryString(queryString) {\n const data = {};\n let pair, separatorIndex, escapedKey, escapedValue, key, value;\n if (queryString === null) {\n return data;\n }\n const pairs = queryString.split('&');\n for (let i = 0; i < pairs.length; i++) {\n pair = pairs[i];\n separatorIndex = pair.indexOf('=');\n if (separatorIndex === -1) {\n escapedKey = pair;\n escapedValue = null;\n } else {\n escapedKey = pair.substr(0, separatorIndex);\n escapedValue = pair.substr(separatorIndex + 1);\n }\n key = decodeURIComponent(escapedKey);\n value = decodeURIComponent(escapedValue);\n if (key.substr(0, 1) === '/') {\n key = key.substr(1);\n }\n data[key] = value;\n }\n return data;\n }\n static {\n this.ɵfac = function UrlHelperService_Factory(t) {\n return new (t || UrlHelperService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: UrlHelperService,\n factory: UrlHelperService.ɵfac\n });\n }\n }\n return UrlHelperService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Credits: https://github.com/dchest/fast-sha256-js/tree/master/src\n// We add this lib directly b/c the published version of fast-sha256-js\n// is commonjs and hence leads to a warning about tree-shakability emitted\n// by the Angular CLI\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\nconst digestLength = 32;\nconst blockSize = 64;\n// SHA-256 constants\nconst K = new Uint32Array([0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]);\nfunction hashBlocks(w, v, p, pos, len) {\n let a, b, c, d, e, f, g, h, u, i, j, t1, t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (p[j] & 0xff) << 24 | (p[j + 1] & 0xff) << 16 | (p[j + 2] & 0xff) << 8 | p[j + 3] & 0xff;\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << 32 - 17) ^ (u >>> 19 | u << 32 - 19) ^ u >>> 10;\n u = w[i - 15];\n t2 = (u >>> 7 | u << 32 - 7) ^ (u >>> 18 | u << 32 - 18) ^ u >>> 3;\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((e >>> 6 | e << 32 - 6) ^ (e >>> 11 | e << 32 - 11) ^ (e >>> 25 | e << 32 - 25)) + (e & f ^ ~e & g) | 0) + (h + (K[i] + w[i] | 0) | 0) | 0;\n t2 = ((a >>> 2 | a << 32 - 2) ^ (a >>> 13 | a << 32 - 13) ^ (a >>> 22 | a << 32 - 22)) + (a & b ^ a & c ^ b & c) | 0;\n h = g;\n g = f;\n f = e;\n e = d + t1 | 0;\n d = c;\n c = b;\n b = a;\n a = t1 + t2 | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nclass Hash {\n constructor() {\n this.digestLength = digestLength;\n this.blockSize = blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n reset() {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n }\n // Cleans internal buffers and re-initializes hash state.\n clean() {\n for (let i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (let i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n }\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n update(data, dataLength = data.length) {\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n }\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n finish(out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = bytesHashed / 0x20000000 | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = bytesHashed % 64 < 56 ? 64 : 128;\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = bitLenHi >>> 24 & 0xff;\n this.buffer[padLength - 7] = bitLenHi >>> 16 & 0xff;\n this.buffer[padLength - 6] = bitLenHi >>> 8 & 0xff;\n this.buffer[padLength - 5] = bitLenHi >>> 0 & 0xff;\n this.buffer[padLength - 4] = bitLenLo >>> 24 & 0xff;\n this.buffer[padLength - 3] = bitLenLo >>> 16 & 0xff;\n this.buffer[padLength - 2] = bitLenLo >>> 8 & 0xff;\n this.buffer[padLength - 1] = bitLenLo >>> 0 & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = this.state[i] >>> 24 & 0xff;\n out[i * 4 + 1] = this.state[i] >>> 16 & 0xff;\n out[i * 4 + 2] = this.state[i] >>> 8 & 0xff;\n out[i * 4 + 3] = this.state[i] >>> 0 & 0xff;\n }\n return this;\n }\n // Returns the final hash digest.\n digest() {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n }\n // Internal function for use in HMAC for optimization.\n _saveState(out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n }\n // Internal function for use in HMAC for optimization.\n _restoreState(from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n }\n}\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nclass HMAC {\n constructor(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n new Hash().update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n reset() {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n }\n // Cleans HMAC state.\n clean() {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n }\n // Updates state with provided data.\n update(data) {\n this.inner.update(data);\n return this;\n }\n // Finalizes HMAC and puts the result in out.\n finish(out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n }\n // Returns message authentication code.\n digest() {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n }\n}\n// Returns SHA256 hash of data.\nfunction hash(data) {\n const h = new Hash().update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n const h = new HMAC(key).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0];\n if (num === 0) {\n throw new Error('hkdf: cannot expand more');\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nfunction hkdf(key, salt = hkdfSalt, info, length = 32) {\n const counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm);\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength);\n let bufpos = buffer.length;\n const out = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n const prf = new HMAC(password);\n const len = prf.digestLength;\n const ctr = new Uint8Array(4);\n const t = new Uint8Array(len);\n const u = new Uint8Array(len);\n const dk = new Uint8Array(dkLen);\n for (let i = 0; i * len < dkLen; i++) {\n const c = i + 1;\n ctr[0] = c >>> 24 & 0xff;\n ctr[1] = c >>> 16 & 0xff;\n ctr[2] = c >>> 8 & 0xff;\n ctr[3] = c >>> 0 & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (let j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (let j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (let j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (let i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (let i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\n\n/**\n * Abstraction for crypto algorithms\n */\nclass HashHandler {}\nfunction decodeUTF8(s) {\n if (typeof s !== 'string') throw new TypeError('expected string');\n const d = s,\n b = new Uint8Array(d.length);\n for (let i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n return b;\n}\nfunction encodeUTF8(arr) {\n const s = [];\n for (let i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i]));\n return s.join('');\n}\nlet DefaultHashHandler = /*#__PURE__*/(() => {\n class DefaultHashHandler {\n async calcHash(valueToHash, algorithm) {\n // const encoder = new TextEncoder();\n // const hashArray = await window.crypto.subtle.digest(algorithm, data);\n // const data = encoder.encode(valueToHash);\n // const fhash = fsha256(valueToHash);\n const candHash = encodeUTF8(hash(decodeUTF8(valueToHash)));\n // const hashArray = (sha256 as any).array(valueToHash);\n // // const hashString = this.toHashString(hashArray);\n // const hashString = this.toHashString2(hashArray);\n // console.debug('hash orig - cand', candHash, hashString);\n // alert(1);\n return candHash;\n }\n toHashString2(byteArray) {\n let result = '';\n for (const e of byteArray) {\n result += String.fromCharCode(e);\n }\n return result;\n }\n toHashString(buffer) {\n const byteArray = new Uint8Array(buffer);\n let result = '';\n for (const e of byteArray) {\n result += String.fromCharCode(e);\n }\n return result;\n }\n static {\n this.ɵfac = function DefaultHashHandler_Factory(t) {\n return new (t || DefaultHashHandler)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DefaultHashHandler,\n factory: DefaultHashHandler.ɵfac\n });\n }\n }\n return DefaultHashHandler;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Service for logging in and logging out with\n * OIDC and OAuth2. Supports implicit flow and\n * password flow.\n */\nlet OAuthService = /*#__PURE__*/(() => {\n class OAuthService extends AuthConfig {\n constructor(ngZone, http, storage, tokenValidationHandler, config, urlHelper, logger, crypto, document, dateTimeService) {\n super();\n this.ngZone = ngZone;\n this.http = http;\n this.config = config;\n this.urlHelper = urlHelper;\n this.logger = logger;\n this.crypto = crypto;\n this.dateTimeService = dateTimeService;\n /**\n * @internal\n * Deprecated: use property events instead\n */\n this.discoveryDocumentLoaded = false;\n /**\n * The received (passed around) state, when logging\n * in with implicit flow.\n */\n this.state = '';\n this.eventsSubject = new Subject();\n this.discoveryDocumentLoadedSubject = new Subject();\n this.grantTypesSupported = [];\n this.inImplicitFlow = false;\n this.saveNoncesInLocalStorage = false;\n this.debug('angular-oauth2-oidc v10');\n // See https://github.com/manfredsteyer/angular-oauth2-oidc/issues/773 for why this is needed\n this.document = document;\n if (!config) {\n config = {};\n }\n this.discoveryDocumentLoaded$ = this.discoveryDocumentLoadedSubject.asObservable();\n this.events = this.eventsSubject.asObservable();\n if (tokenValidationHandler) {\n this.tokenValidationHandler = tokenValidationHandler;\n }\n if (config) {\n this.configure(config);\n }\n try {\n if (storage) {\n this.setStorage(storage);\n } else if (typeof sessionStorage !== 'undefined') {\n this.setStorage(sessionStorage);\n }\n } catch (e) {\n console.error('No OAuthStorage provided and cannot access default (sessionStorage).' + 'Consider providing a custom OAuthStorage implementation in your module.', e);\n }\n // in IE, sessionStorage does not always survive a redirect\n if (this.checkLocalStorageAccessable()) {\n const ua = window?.navigator?.userAgent;\n const msie = ua?.includes('MSIE ') || ua?.includes('Trident');\n if (msie) {\n this.saveNoncesInLocalStorage = true;\n }\n }\n this.setupRefreshTimer();\n }\n checkLocalStorageAccessable() {\n if (typeof window === 'undefined') return false;\n const test = 'test';\n try {\n if (typeof window['localStorage'] === 'undefined') return false;\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n /**\n * Use this method to configure the service\n * @param config the configuration\n */\n configure(config) {\n // For the sake of downward compatibility with\n // original configuration API\n Object.assign(this, new AuthConfig(), config);\n this.config = Object.assign({}, new AuthConfig(), config);\n if (this.sessionChecksEnabled) {\n this.setupSessionCheck();\n }\n this.configChanged();\n }\n configChanged() {\n this.setupRefreshTimer();\n }\n restartSessionChecksIfStillLoggedIn() {\n if (this.hasValidIdToken()) {\n this.initSessionCheck();\n }\n }\n restartRefreshTimerIfStillLoggedIn() {\n this.setupExpirationTimers();\n }\n setupSessionCheck() {\n this.events.pipe(filter(e => e.type === 'token_received')).subscribe(() => {\n this.initSessionCheck();\n });\n }\n /**\n * Will setup up silent refreshing for when the token is\n * about to expire. When the user is logged out via this.logOut method, the\n * silent refreshing will pause and not refresh the tokens until the user is\n * logged back in via receiving a new token.\n * @param params Additional parameter to pass\n * @param listenTo Setup automatic refresh of a specific token type\n */\n setupAutomaticSilentRefresh(params = {}, listenTo, noPrompt = true) {\n let shouldRunSilentRefresh = true;\n this.clearAutomaticRefreshTimer();\n this.automaticRefreshSubscription = this.events.pipe(tap(e => {\n if (e.type === 'token_received') {\n shouldRunSilentRefresh = true;\n } else if (e.type === 'logout') {\n shouldRunSilentRefresh = false;\n }\n }), filter(e => e.type === 'token_expires' && (listenTo == null || listenTo === 'any' || e.info === listenTo)), debounceTime(1000)).subscribe(() => {\n if (shouldRunSilentRefresh) {\n // this.silentRefresh(params, noPrompt).catch(_ => {\n this.refreshInternal(params, noPrompt).catch(() => {\n this.debug('Automatic silent refresh did not work');\n });\n }\n });\n this.restartRefreshTimerIfStillLoggedIn();\n }\n refreshInternal(params, noPrompt) {\n if (!this.useSilentRefresh && this.responseType === 'code') {\n return this.refreshToken();\n } else {\n return this.silentRefresh(params, noPrompt);\n }\n }\n /**\n * Convenience method that first calls `loadDiscoveryDocument(...)` and\n * directly chains using the `then(...)` part of the promise to call\n * the `tryLogin(...)` method.\n *\n * @param options LoginOptions to pass through to `tryLogin(...)`\n */\n loadDiscoveryDocumentAndTryLogin(options = null) {\n return this.loadDiscoveryDocument().then(() => {\n return this.tryLogin(options);\n });\n }\n /**\n * Convenience method that first calls `loadDiscoveryDocumentAndTryLogin(...)`\n * and if then chains to `initLoginFlow()`, but only if there is no valid\n * IdToken or no valid AccessToken.\n *\n * @param options LoginOptions to pass through to `tryLogin(...)`\n */\n loadDiscoveryDocumentAndLogin(options = null) {\n options = options || {};\n return this.loadDiscoveryDocumentAndTryLogin(options).then(() => {\n if (!this.hasValidIdToken() || !this.hasValidAccessToken()) {\n const state = typeof options.state === 'string' ? options.state : '';\n this.initLoginFlow(state);\n return false;\n } else {\n return true;\n }\n });\n }\n debug(...args) {\n if (this.showDebugInformation) {\n this.logger.debug(...args);\n }\n }\n validateUrlFromDiscoveryDocument(url) {\n const errors = [];\n const httpsCheck = this.validateUrlForHttps(url);\n const issuerCheck = this.validateUrlAgainstIssuer(url);\n if (!httpsCheck) {\n errors.push('https for all urls required. Also for urls received by discovery.');\n }\n if (!issuerCheck) {\n errors.push('Every url in discovery document has to start with the issuer url.' + 'Also see property strictDiscoveryDocumentValidation.');\n }\n return errors;\n }\n validateUrlForHttps(url) {\n if (!url) {\n return true;\n }\n const lcUrl = url.toLowerCase();\n if (this.requireHttps === false) {\n return true;\n }\n if ((lcUrl.match(/^http:\\/\\/localhost($|[:/])/) || lcUrl.match(/^http:\\/\\/localhost($|[:/])/)) && this.requireHttps === 'remoteOnly') {\n return true;\n }\n return lcUrl.startsWith('https://');\n }\n assertUrlNotNullAndCorrectProtocol(url, description) {\n if (!url) {\n throw new Error(`'${description}' should not be null`);\n }\n if (!this.validateUrlForHttps(url)) {\n throw new Error(`'${description}' must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).`);\n }\n }\n validateUrlAgainstIssuer(url) {\n if (!this.strictDiscoveryDocumentValidation) {\n return true;\n }\n if (!url) {\n return true;\n }\n return url.toLowerCase().startsWith(this.issuer.toLowerCase());\n }\n setupRefreshTimer() {\n if (typeof window === 'undefined') {\n this.debug('timer not supported on this plattform');\n return;\n }\n if (this.hasValidIdToken() || this.hasValidAccessToken()) {\n this.clearAccessTokenTimer();\n this.clearIdTokenTimer();\n this.setupExpirationTimers();\n }\n if (this.tokenReceivedSubscription) this.tokenReceivedSubscription.unsubscribe();\n this.tokenReceivedSubscription = this.events.pipe(filter(e => e.type === 'token_received')).subscribe(() => {\n this.clearAccessTokenTimer();\n this.clearIdTokenTimer();\n this.setupExpirationTimers();\n });\n }\n setupExpirationTimers() {\n if (this.hasValidAccessToken()) {\n this.setupAccessTokenTimer();\n }\n if (!this.disableIdTokenTimer && this.hasValidIdToken()) {\n this.setupIdTokenTimer();\n }\n }\n setupAccessTokenTimer() {\n const expiration = this.getAccessTokenExpiration();\n const storedAt = this.getAccessTokenStoredAt();\n const timeout = this.calcTimeout(storedAt, expiration);\n this.ngZone.runOutsideAngular(() => {\n this.accessTokenTimeoutSubscription = of(new OAuthInfoEvent('token_expires', 'access_token')).pipe(delay(timeout)).subscribe(e => {\n this.ngZone.run(() => {\n this.eventsSubject.next(e);\n });\n });\n });\n }\n setupIdTokenTimer() {\n const expiration = this.getIdTokenExpiration();\n const storedAt = this.getIdTokenStoredAt();\n const timeout = this.calcTimeout(storedAt, expiration);\n this.ngZone.runOutsideAngular(() => {\n this.idTokenTimeoutSubscription = of(new OAuthInfoEvent('token_expires', 'id_token')).pipe(delay(timeout)).subscribe(e => {\n this.ngZone.run(() => {\n this.eventsSubject.next(e);\n });\n });\n });\n }\n /**\n * Stops timers for automatic refresh.\n * To restart it, call setupAutomaticSilentRefresh again.\n */\n stopAutomaticRefresh() {\n this.clearAccessTokenTimer();\n this.clearIdTokenTimer();\n this.clearAutomaticRefreshTimer();\n }\n clearAccessTokenTimer() {\n if (this.accessTokenTimeoutSubscription) {\n this.accessTokenTimeoutSubscription.unsubscribe();\n }\n }\n clearIdTokenTimer() {\n if (this.idTokenTimeoutSubscription) {\n this.idTokenTimeoutSubscription.unsubscribe();\n }\n }\n clearAutomaticRefreshTimer() {\n if (this.automaticRefreshSubscription) {\n this.automaticRefreshSubscription.unsubscribe();\n }\n }\n calcTimeout(storedAt, expiration) {\n const now = this.dateTimeService.now();\n const delta = (expiration - storedAt) * this.timeoutFactor - (now - storedAt);\n const duration = Math.max(0, delta);\n const maxTimeoutValue = 2147483647;\n return duration > maxTimeoutValue ? maxTimeoutValue : duration;\n }\n /**\n * DEPRECATED. Use a provider for OAuthStorage instead:\n *\n * { provide: OAuthStorage, useFactory: oAuthStorageFactory }\n * export function oAuthStorageFactory(): OAuthStorage { return localStorage; }\n * Sets a custom storage used to store the received\n * tokens on client side. By default, the browser's\n * sessionStorage is used.\n * @ignore\n *\n * @param storage\n */\n setStorage(storage) {\n this._storage = storage;\n this.configChanged();\n }\n /**\n * Loads the discovery document to configure most\n * properties of this service. The url of the discovery\n * document is infered from the issuer's url according\n * to the OpenId Connect spec. To use another url you\n * can pass it to to optional parameter fullUrl.\n *\n * @param fullUrl\n */\n loadDiscoveryDocument(fullUrl = null) {\n return new Promise((resolve, reject) => {\n if (!fullUrl) {\n fullUrl = this.issuer || '';\n if (!fullUrl.endsWith('/')) {\n fullUrl += '/';\n }\n fullUrl += '.well-known/openid-configuration';\n }\n if (!this.validateUrlForHttps(fullUrl)) {\n reject(\"issuer must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).\");\n return;\n }\n this.http.get(fullUrl).subscribe(doc => {\n if (!this.validateDiscoveryDocument(doc)) {\n this.eventsSubject.next(new OAuthErrorEvent('discovery_document_validation_error', null));\n reject('discovery_document_validation_error');\n return;\n }\n this.loginUrl = doc.authorization_endpoint;\n this.logoutUrl = doc.end_session_endpoint || this.logoutUrl;\n this.grantTypesSupported = doc.grant_types_supported;\n this.issuer = doc.issuer;\n this.tokenEndpoint = doc.token_endpoint;\n this.userinfoEndpoint = doc.userinfo_endpoint || this.userinfoEndpoint;\n this.jwksUri = doc.jwks_uri;\n this.sessionCheckIFrameUrl = doc.check_session_iframe || this.sessionCheckIFrameUrl;\n this.discoveryDocumentLoaded = true;\n this.discoveryDocumentLoadedSubject.next(doc);\n this.revocationEndpoint = doc.revocation_endpoint || this.revocationEndpoint;\n if (this.sessionChecksEnabled) {\n this.restartSessionChecksIfStillLoggedIn();\n }\n this.loadJwks().then(jwks => {\n const result = {\n discoveryDocument: doc,\n jwks: jwks\n };\n const event = new OAuthSuccessEvent('discovery_document_loaded', result);\n this.eventsSubject.next(event);\n resolve(event);\n return;\n }).catch(err => {\n this.eventsSubject.next(new OAuthErrorEvent('discovery_document_load_error', err));\n reject(err);\n return;\n });\n }, err => {\n this.logger.error('error loading discovery document', err);\n this.eventsSubject.next(new OAuthErrorEvent('discovery_document_load_error', err));\n reject(err);\n });\n });\n }\n loadJwks() {\n return new Promise((resolve, reject) => {\n if (this.jwksUri) {\n this.http.get(this.jwksUri).subscribe(jwks => {\n this.jwks = jwks;\n // this.eventsSubject.next(\n // new OAuthSuccessEvent('discovery_document_loaded')\n // );\n resolve(jwks);\n }, err => {\n this.logger.error('error loading jwks', err);\n this.eventsSubject.next(new OAuthErrorEvent('jwks_load_error', err));\n reject(err);\n });\n } else {\n resolve(null);\n }\n });\n }\n validateDiscoveryDocument(doc) {\n let errors;\n if (!this.skipIssuerCheck && doc.issuer !== this.issuer) {\n this.logger.error('invalid issuer in discovery document', 'expected: ' + this.issuer, 'current: ' + doc.issuer);\n return false;\n }\n errors = this.validateUrlFromDiscoveryDocument(doc.authorization_endpoint);\n if (errors.length > 0) {\n this.logger.error('error validating authorization_endpoint in discovery document', errors);\n return false;\n }\n errors = this.validateUrlFromDiscoveryDocument(doc.end_session_endpoint);\n if (errors.length > 0) {\n this.logger.error('error validating end_session_endpoint in discovery document', errors);\n return false;\n }\n errors = this.validateUrlFromDiscoveryDocument(doc.token_endpoint);\n if (errors.length > 0) {\n this.logger.error('error validating token_endpoint in discovery document', errors);\n }\n errors = this.validateUrlFromDiscoveryDocument(doc.revocation_endpoint);\n if (errors.length > 0) {\n this.logger.error('error validating revocation_endpoint in discovery document', errors);\n }\n errors = this.validateUrlFromDiscoveryDocument(doc.userinfo_endpoint);\n if (errors.length > 0) {\n this.logger.error('error validating userinfo_endpoint in discovery document', errors);\n return false;\n }\n errors = this.validateUrlFromDiscoveryDocument(doc.jwks_uri);\n if (errors.length > 0) {\n this.logger.error('error validating jwks_uri in discovery document', errors);\n return false;\n }\n if (this.sessionChecksEnabled && !doc.check_session_iframe) {\n this.logger.warn('sessionChecksEnabled is activated but discovery document' + ' does not contain a check_session_iframe field');\n }\n return true;\n }\n /**\n * Uses password flow to exchange userName and password for an\n * access_token. After receiving the access_token, this method\n * uses it to query the userinfo endpoint in order to get information\n * about the user in question.\n *\n * When using this, make sure that the property oidc is set to false.\n * Otherwise stricter validations take place that make this operation\n * fail.\n *\n * @param userName\n * @param password\n * @param headers Optional additional http-headers.\n */\n fetchTokenUsingPasswordFlowAndLoadUserProfile(userName, password, headers = new HttpHeaders()) {\n return this.fetchTokenUsingPasswordFlow(userName, password, headers).then(() => this.loadUserProfile());\n }\n /**\n * Loads the user profile by accessing the user info endpoint defined by OpenId Connect.\n *\n * When using this with OAuth2 password flow, make sure that the property oidc is set to false.\n * Otherwise stricter validations take place that make this operation fail.\n */\n loadUserProfile() {\n if (!this.hasValidAccessToken()) {\n throw new Error('Can not load User Profile without access_token');\n }\n if (!this.validateUrlForHttps(this.userinfoEndpoint)) {\n throw new Error(\"userinfoEndpoint must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).\");\n }\n return new Promise((resolve, reject) => {\n const headers = new HttpHeaders().set('Authorization', 'Bearer ' + this.getAccessToken());\n this.http.get(this.userinfoEndpoint, {\n headers,\n observe: 'response',\n responseType: 'text'\n }).subscribe(response => {\n this.debug('userinfo received', JSON.stringify(response));\n if (response.headers.get('content-type').startsWith('application/json')) {\n let info = JSON.parse(response.body);\n const existingClaims = this.getIdentityClaims() || {};\n if (!this.skipSubjectCheck) {\n if (this.oidc && (!existingClaims['sub'] || info.sub !== existingClaims['sub'])) {\n const err = 'if property oidc is true, the received user-id (sub) has to be the user-id ' + 'of the user that has logged in with oidc.\\n' + 'if you are not using oidc but just oauth2 password flow set oidc to false';\n reject(err);\n return;\n }\n }\n info = Object.assign({}, existingClaims, info);\n this._storage.setItem('id_token_claims_obj', JSON.stringify(info));\n this.eventsSubject.next(new OAuthSuccessEvent('user_profile_loaded'));\n resolve({\n info\n });\n } else {\n this.debug('userinfo is not JSON, treating it as JWE/JWS');\n this.eventsSubject.next(new OAuthSuccessEvent('user_profile_loaded'));\n resolve(JSON.parse(response.body));\n }\n }, err => {\n this.logger.error('error loading user info', err);\n this.eventsSubject.next(new OAuthErrorEvent('user_profile_load_error', err));\n reject(err);\n });\n });\n }\n /**\n * Uses password flow to exchange userName and password for an access_token.\n * @param userName\n * @param password\n * @param headers Optional additional http-headers.\n */\n fetchTokenUsingPasswordFlow(userName, password, headers = new HttpHeaders()) {\n const parameters = {\n username: userName,\n password: password\n };\n return this.fetchTokenUsingGrant('password', parameters, headers);\n }\n /**\n * Uses a custom grant type to retrieve tokens.\n * @param grantType Grant type.\n * @param parameters Parameters to pass.\n * @param headers Optional additional HTTP headers.\n */\n fetchTokenUsingGrant(grantType, parameters, headers = new HttpHeaders()) {\n this.assertUrlNotNullAndCorrectProtocol(this.tokenEndpoint, 'tokenEndpoint');\n /**\n * A `HttpParameterCodec` that uses `encodeURIComponent` and `decodeURIComponent` to\n * serialize and parse URL parameter keys and values.\n *\n * @stable\n */\n let params = new HttpParams({\n encoder: new WebHttpUrlEncodingCodec()\n }).set('grant_type', grantType).set('scope', this.scope);\n if (this.useHttpBasicAuth) {\n const header = btoa(`${this.clientId}:${this.dummyClientSecret}`);\n headers = headers.set('Authorization', 'Basic ' + header);\n }\n if (!this.useHttpBasicAuth) {\n params = params.set('client_id', this.clientId);\n }\n if (!this.useHttpBasicAuth && this.dummyClientSecret) {\n params = params.set('client_secret', this.dummyClientSecret);\n }\n if (this.customQueryParams) {\n for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {\n params = params.set(key, this.customQueryParams[key]);\n }\n }\n // set explicit parameters last, to allow overwriting\n for (const key of Object.keys(parameters)) {\n params = params.set(key, parameters[key]);\n }\n headers = headers.set('Content-Type', 'application/x-www-form-urlencoded');\n return new Promise((resolve, reject) => {\n this.http.post(this.tokenEndpoint, params, {\n headers\n }).subscribe(tokenResponse => {\n this.debug('tokenResponse', tokenResponse);\n this.storeAccessTokenResponse(tokenResponse.access_token, tokenResponse.refresh_token, tokenResponse.expires_in || this.fallbackAccessTokenExpirationTimeInSec, tokenResponse.scope, this.extractRecognizedCustomParameters(tokenResponse));\n if (this.oidc && tokenResponse.id_token) {\n this.processIdToken(tokenResponse.id_token, tokenResponse.access_token).then(result => {\n this.storeIdToken(result);\n resolve(tokenResponse);\n });\n }\n this.eventsSubject.next(new OAuthSuccessEvent('token_received'));\n resolve(tokenResponse);\n }, err => {\n this.logger.error('Error performing ${grantType} flow', err);\n this.eventsSubject.next(new OAuthErrorEvent('token_error', err));\n reject(err);\n });\n });\n }\n /**\n * Refreshes the token using a refresh_token.\n * This does not work for implicit flow, b/c\n * there is no refresh_token in this flow.\n * A solution for this is provided by the\n * method silentRefresh.\n */\n refreshToken() {\n this.assertUrlNotNullAndCorrectProtocol(this.tokenEndpoint, 'tokenEndpoint');\n return new Promise((resolve, reject) => {\n let params = new HttpParams({\n encoder: new WebHttpUrlEncodingCodec()\n }).set('grant_type', 'refresh_token').set('scope', this.scope).set('refresh_token', this._storage.getItem('refresh_token'));\n let headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n if (this.useHttpBasicAuth) {\n const header = btoa(`${this.clientId}:${this.dummyClientSecret}`);\n headers = headers.set('Authorization', 'Basic ' + header);\n }\n if (!this.useHttpBasicAuth) {\n params = params.set('client_id', this.clientId);\n }\n if (!this.useHttpBasicAuth && this.dummyClientSecret) {\n params = params.set('client_secret', this.dummyClientSecret);\n }\n if (this.customQueryParams) {\n for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {\n params = params.set(key, this.customQueryParams[key]);\n }\n }\n this.http.post(this.tokenEndpoint, params, {\n headers\n }).pipe(switchMap(tokenResponse => {\n if (this.oidc && tokenResponse.id_token) {\n return from(this.processIdToken(tokenResponse.id_token, tokenResponse.access_token, true)).pipe(tap(result => this.storeIdToken(result)), map(() => tokenResponse));\n } else {\n return of(tokenResponse);\n }\n })).subscribe(tokenResponse => {\n this.debug('refresh tokenResponse', tokenResponse);\n this.storeAccessTokenResponse(tokenResponse.access_token, tokenResponse.refresh_token, tokenResponse.expires_in || this.fallbackAccessTokenExpirationTimeInSec, tokenResponse.scope, this.extractRecognizedCustomParameters(tokenResponse));\n this.eventsSubject.next(new OAuthSuccessEvent('token_received'));\n this.eventsSubject.next(new OAuthSuccessEvent('token_refreshed'));\n resolve(tokenResponse);\n }, err => {\n this.logger.error('Error refreshing token', err);\n this.eventsSubject.next(new OAuthErrorEvent('token_refresh_error', err));\n reject(err);\n });\n });\n }\n removeSilentRefreshEventListener() {\n if (this.silentRefreshPostMessageEventListener) {\n window.removeEventListener('message', this.silentRefreshPostMessageEventListener);\n this.silentRefreshPostMessageEventListener = null;\n }\n }\n setupSilentRefreshEventListener() {\n this.removeSilentRefreshEventListener();\n this.silentRefreshPostMessageEventListener = e => {\n const message = this.processMessageEventMessage(e);\n if (this.checkOrigin && e.origin !== location.origin) {\n console.error('wrong origin requested silent refresh!');\n }\n this.tryLogin({\n customHashFragment: message,\n preventClearHashAfterLogin: true,\n customRedirectUri: this.silentRefreshRedirectUri || this.redirectUri\n }).catch(err => this.debug('tryLogin during silent refresh failed', err));\n };\n window.addEventListener('message', this.silentRefreshPostMessageEventListener);\n }\n /**\n * Performs a silent refresh for implicit flow.\n * Use this method to get new tokens when/before\n * the existing tokens expire.\n */\n silentRefresh(params = {}, noPrompt = true) {\n const claims = this.getIdentityClaims() || {};\n if (this.useIdTokenHintForSilentRefresh && this.hasValidIdToken()) {\n params['id_token_hint'] = this.getIdToken();\n }\n if (!this.validateUrlForHttps(this.loginUrl)) {\n throw new Error(\"loginUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).\");\n }\n if (typeof this.document === 'undefined') {\n throw new Error('silent refresh is not supported on this platform');\n }\n const existingIframe = this.document.getElementById(this.silentRefreshIFrameName);\n if (existingIframe) {\n this.document.body.removeChild(existingIframe);\n }\n this.silentRefreshSubject = claims['sub'];\n const iframe = this.document.createElement('iframe');\n iframe.id = this.silentRefreshIFrameName;\n this.setupSilentRefreshEventListener();\n const redirectUri = this.silentRefreshRedirectUri || this.redirectUri;\n this.createLoginUrl(null, null, redirectUri, noPrompt, params).then(url => {\n iframe.setAttribute('src', url);\n if (!this.silentRefreshShowIFrame) {\n iframe.style['display'] = 'none';\n }\n this.document.body.appendChild(iframe);\n });\n const errors = this.events.pipe(filter(e => e instanceof OAuthErrorEvent), first());\n const success = this.events.pipe(filter(e => e.type === 'token_received'), first());\n const timeout = of(new OAuthErrorEvent('silent_refresh_timeout', null)).pipe(delay(this.silentRefreshTimeout));\n return race([errors, success, timeout]).pipe(map(e => {\n if (e instanceof OAuthErrorEvent) {\n if (e.type === 'silent_refresh_timeout') {\n this.eventsSubject.next(e);\n } else {\n e = new OAuthErrorEvent('silent_refresh_error', e);\n this.eventsSubject.next(e);\n }\n throw e;\n } else if (e.type === 'token_received') {\n e = new OAuthSuccessEvent('silently_refreshed');\n this.eventsSubject.next(e);\n }\n return e;\n })).toPromise();\n }\n /**\n * This method exists for backwards compatibility.\n * {@link OAuthService#initLoginFlowInPopup} handles both code\n * and implicit flows.\n */\n initImplicitFlowInPopup(options) {\n return this.initLoginFlowInPopup(options);\n }\n initLoginFlowInPopup(options) {\n options = options || {};\n return this.createLoginUrl(null, null, this.silentRefreshRedirectUri, false, {\n display: 'popup'\n }).then(url => {\n return new Promise((resolve, reject) => {\n /**\n * Error handling section\n */\n const checkForPopupClosedInterval = 500;\n let windowRef = null;\n // If we got no window reference we open a window\n // else we are using the window already opened\n if (!options.windowRef) {\n windowRef = window.open(url, 'ngx-oauth2-oidc-login', this.calculatePopupFeatures(options));\n } else if (options.windowRef && !options.windowRef.closed) {\n windowRef = options.windowRef;\n windowRef.location.href = url;\n }\n let checkForPopupClosedTimer;\n const tryLogin = hash => {\n this.tryLogin({\n customHashFragment: hash,\n preventClearHashAfterLogin: true,\n customRedirectUri: this.silentRefreshRedirectUri\n }).then(() => {\n cleanup();\n resolve(true);\n }, err => {\n cleanup();\n reject(err);\n });\n };\n const checkForPopupClosed = () => {\n if (!windowRef || windowRef.closed) {\n cleanup();\n reject(new OAuthErrorEvent('popup_closed', {}));\n }\n };\n if (!windowRef) {\n reject(new OAuthErrorEvent('popup_blocked', {}));\n } else {\n checkForPopupClosedTimer = window.setInterval(checkForPopupClosed, checkForPopupClosedInterval);\n }\n const cleanup = () => {\n window.clearInterval(checkForPopupClosedTimer);\n window.removeEventListener('storage', storageListener);\n window.removeEventListener('message', listener);\n if (windowRef !== null) {\n windowRef.close();\n }\n windowRef = null;\n };\n const listener = e => {\n const message = this.processMessageEventMessage(e);\n if (message && message !== null) {\n window.removeEventListener('storage', storageListener);\n tryLogin(message);\n } else {\n console.log('false event firing');\n }\n };\n const storageListener = event => {\n if (event.key === 'auth_hash') {\n window.removeEventListener('message', listener);\n tryLogin(event.newValue);\n }\n };\n window.addEventListener('message', listener);\n window.addEventListener('storage', storageListener);\n });\n });\n }\n calculatePopupFeatures(options) {\n // Specify an static height and width and calculate centered position\n const height = options.height || 470;\n const width = options.width || 500;\n const left = window.screenLeft + (window.outerWidth - width) / 2;\n const top = window.screenTop + (window.outerHeight - height) / 2;\n return `location=no,toolbar=no,width=${width},height=${height},top=${top},left=${left}`;\n }\n processMessageEventMessage(e) {\n let expectedPrefix = '#';\n if (this.silentRefreshMessagePrefix) {\n expectedPrefix += this.silentRefreshMessagePrefix;\n }\n if (!e || !e.data || typeof e.data !== 'string') {\n return;\n }\n const prefixedMessage = e.data;\n if (!prefixedMessage.startsWith(expectedPrefix)) {\n return;\n }\n return '#' + prefixedMessage.substr(expectedPrefix.length);\n }\n canPerformSessionCheck() {\n if (!this.sessionChecksEnabled) {\n return false;\n }\n if (!this.sessionCheckIFrameUrl) {\n console.warn('sessionChecksEnabled is activated but there is no sessionCheckIFrameUrl');\n return false;\n }\n const sessionState = this.getSessionState();\n if (!sessionState) {\n console.warn('sessionChecksEnabled is activated but there is no session_state');\n return false;\n }\n if (typeof this.document === 'undefined') {\n return false;\n }\n return true;\n }\n setupSessionCheckEventListener() {\n this.removeSessionCheckEventListener();\n this.sessionCheckEventListener = e => {\n const origin = e.origin.toLowerCase();\n const issuer = this.issuer.toLowerCase();\n this.debug('sessionCheckEventListener');\n if (!issuer.startsWith(origin)) {\n this.debug('sessionCheckEventListener', 'wrong origin', origin, 'expected', issuer, 'event', e);\n return;\n }\n // only run in Angular zone if it is 'changed' or 'error'\n switch (e.data) {\n case 'unchanged':\n this.ngZone.run(() => {\n this.handleSessionUnchanged();\n });\n break;\n case 'changed':\n this.ngZone.run(() => {\n this.handleSessionChange();\n });\n break;\n case 'error':\n this.ngZone.run(() => {\n this.handleSessionError();\n });\n break;\n }\n this.debug('got info from session check inframe', e);\n };\n // prevent Angular from refreshing the view on every message (runs in intervals)\n this.ngZone.runOutsideAngular(() => {\n window.addEventListener('message', this.sessionCheckEventListener);\n });\n }\n handleSessionUnchanged() {\n this.debug('session check', 'session unchanged');\n this.eventsSubject.next(new OAuthInfoEvent('session_unchanged'));\n }\n handleSessionChange() {\n this.eventsSubject.next(new OAuthInfoEvent('session_changed'));\n this.stopSessionCheckTimer();\n if (!this.useSilentRefresh && this.responseType === 'code') {\n this.refreshToken().then(() => {\n this.debug('token refresh after session change worked');\n }).catch(() => {\n this.debug('token refresh did not work after session changed');\n this.eventsSubject.next(new OAuthInfoEvent('session_terminated'));\n this.logOut(true);\n });\n } else if (this.silentRefreshRedirectUri) {\n this.silentRefresh().catch(() => this.debug('silent refresh failed after session changed'));\n this.waitForSilentRefreshAfterSessionChange();\n } else {\n this.eventsSubject.next(new OAuthInfoEvent('session_terminated'));\n this.logOut(true);\n }\n }\n waitForSilentRefreshAfterSessionChange() {\n this.events.pipe(filter(e => e.type === 'silently_refreshed' || e.type === 'silent_refresh_timeout' || e.type === 'silent_refresh_error'), first()).subscribe(e => {\n if (e.type !== 'silently_refreshed') {\n this.debug('silent refresh did not work after session changed');\n this.eventsSubject.next(new OAuthInfoEvent('session_terminated'));\n this.logOut(true);\n }\n });\n }\n handleSessionError() {\n this.stopSessionCheckTimer();\n this.eventsSubject.next(new OAuthInfoEvent('session_error'));\n }\n removeSessionCheckEventListener() {\n if (this.sessionCheckEventListener) {\n window.removeEventListener('message', this.sessionCheckEventListener);\n this.sessionCheckEventListener = null;\n }\n }\n initSessionCheck() {\n if (!this.canPerformSessionCheck()) {\n return;\n }\n const existingIframe = this.document.getElementById(this.sessionCheckIFrameName);\n if (existingIframe) {\n this.document.body.removeChild(existingIframe);\n }\n const iframe = this.document.createElement('iframe');\n iframe.id = this.sessionCheckIFrameName;\n this.setupSessionCheckEventListener();\n const url = this.sessionCheckIFrameUrl;\n iframe.setAttribute('src', url);\n iframe.style.display = 'none';\n this.document.body.appendChild(iframe);\n this.startSessionCheckTimer();\n }\n startSessionCheckTimer() {\n this.stopSessionCheckTimer();\n this.ngZone.runOutsideAngular(() => {\n this.sessionCheckTimer = setInterval(this.checkSession.bind(this), this.sessionCheckIntervall);\n });\n }\n stopSessionCheckTimer() {\n if (this.sessionCheckTimer) {\n clearInterval(this.sessionCheckTimer);\n this.sessionCheckTimer = null;\n }\n }\n checkSession() {\n const iframe = this.document.getElementById(this.sessionCheckIFrameName);\n if (!iframe) {\n this.logger.warn('checkSession did not find iframe', this.sessionCheckIFrameName);\n }\n const sessionState = this.getSessionState();\n if (!sessionState) {\n this.stopSessionCheckTimer();\n }\n const message = this.clientId + ' ' + sessionState;\n iframe.contentWindow.postMessage(message, this.issuer);\n }\n async createLoginUrl(state = '', loginHint = '', customRedirectUri = '', noPrompt = false, params = {}) {\n const that = this; // eslint-disable-line @typescript-eslint/no-this-alias\n let redirectUri;\n if (customRedirectUri) {\n redirectUri = customRedirectUri;\n } else {\n redirectUri = this.redirectUri;\n }\n const nonce = await this.createAndSaveNonce();\n if (state) {\n state = nonce + this.config.nonceStateSeparator + encodeURIComponent(state);\n } else {\n state = nonce;\n }\n if (!this.requestAccessToken && !this.oidc) {\n throw new Error('Either requestAccessToken or oidc or both must be true');\n }\n if (this.config.responseType) {\n this.responseType = this.config.responseType;\n } else {\n if (this.oidc && this.requestAccessToken) {\n this.responseType = 'id_token token';\n } else if (this.oidc && !this.requestAccessToken) {\n this.responseType = 'id_token';\n } else {\n this.responseType = 'token';\n }\n }\n const seperationChar = that.loginUrl.indexOf('?') > -1 ? '&' : '?';\n let scope = that.scope;\n if (this.oidc && !scope.match(/(^|\\s)openid($|\\s)/)) {\n scope = 'openid ' + scope;\n }\n let url = that.loginUrl + seperationChar + 'response_type=' + encodeURIComponent(that.responseType) + '&client_id=' + encodeURIComponent(that.clientId) + '&state=' + encodeURIComponent(state) + '&redirect_uri=' + encodeURIComponent(redirectUri) + '&scope=' + encodeURIComponent(scope);\n if (this.responseType.includes('code') && !this.disablePKCE) {\n const [challenge, verifier] = await this.createChallangeVerifierPairForPKCE();\n if (this.saveNoncesInLocalStorage && typeof window['localStorage'] !== 'undefined') {\n localStorage.setItem('PKCE_verifier', verifier);\n } else {\n this._storage.setItem('PKCE_verifier', verifier);\n }\n url += '&code_challenge=' + challenge;\n url += '&code_challenge_method=S256';\n }\n if (loginHint) {\n url += '&login_hint=' + encodeURIComponent(loginHint);\n }\n if (that.resource) {\n url += '&resource=' + encodeURIComponent(that.resource);\n }\n if (that.oidc) {\n url += '&nonce=' + encodeURIComponent(nonce);\n }\n if (noPrompt) {\n url += '&prompt=none';\n }\n for (const key of Object.keys(params)) {\n url += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);\n }\n if (this.customQueryParams) {\n for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {\n url += '&' + key + '=' + encodeURIComponent(this.customQueryParams[key]);\n }\n }\n return url;\n }\n initImplicitFlowInternal(additionalState = '', params = '') {\n if (this.inImplicitFlow) {\n return;\n }\n this.inImplicitFlow = true;\n if (!this.validateUrlForHttps(this.loginUrl)) {\n throw new Error(\"loginUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).\");\n }\n let addParams = {};\n let loginHint = null;\n if (typeof params === 'string') {\n loginHint = params;\n } else if (typeof params === 'object') {\n addParams = params;\n }\n this.createLoginUrl(additionalState, loginHint, null, false, addParams).then(this.config.openUri).catch(error => {\n console.error('Error in initImplicitFlow', error);\n this.inImplicitFlow = false;\n });\n }\n /**\n * Starts the implicit flow and redirects to user to\n * the auth servers' login url.\n *\n * @param additionalState Optional state that is passed around.\n * You'll find this state in the property `state` after `tryLogin` logged in the user.\n * @param params Hash with additional parameter. If it is a string, it is used for the\n * parameter loginHint (for the sake of compatibility with former versions)\n */\n initImplicitFlow(additionalState = '', params = '') {\n if (this.loginUrl !== '') {\n this.initImplicitFlowInternal(additionalState, params);\n } else {\n this.events.pipe(filter(e => e.type === 'discovery_document_loaded')).subscribe(() => this.initImplicitFlowInternal(additionalState, params));\n }\n }\n /**\n * Reset current implicit flow\n *\n * @description This method allows resetting the current implict flow in order to be initialized again.\n */\n resetImplicitFlow() {\n this.inImplicitFlow = false;\n }\n callOnTokenReceivedIfExists(options) {\n const that = this; // eslint-disable-line @typescript-eslint/no-this-alias\n if (options.onTokenReceived) {\n const tokenParams = {\n idClaims: that.getIdentityClaims(),\n idToken: that.getIdToken(),\n accessToken: that.getAccessToken(),\n state: that.state\n };\n options.onTokenReceived(tokenParams);\n }\n }\n storeAccessTokenResponse(accessToken, refreshToken, expiresIn, grantedScopes, customParameters) {\n this._storage.setItem('access_token', accessToken);\n if (grantedScopes && !Array.isArray(grantedScopes)) {\n this._storage.setItem('granted_scopes', JSON.stringify(grantedScopes.split(' ')));\n } else if (grantedScopes && Array.isArray(grantedScopes)) {\n this._storage.setItem('granted_scopes', JSON.stringify(grantedScopes));\n }\n this._storage.setItem('access_token_stored_at', '' + this.dateTimeService.now());\n if (expiresIn) {\n const expiresInMilliSeconds = expiresIn * 1000;\n const now = this.dateTimeService.new();\n const expiresAt = now.getTime() + expiresInMilliSeconds;\n this._storage.setItem('expires_at', '' + expiresAt);\n }\n if (refreshToken) {\n this._storage.setItem('refresh_token', refreshToken);\n }\n if (customParameters) {\n customParameters.forEach((value, key) => {\n this._storage.setItem(key, value);\n });\n }\n }\n /**\n * Delegates to tryLoginImplicitFlow for the sake of competability\n * @param options Optional options.\n */\n tryLogin(options = null) {\n if (this.config.responseType === 'code') {\n return this.tryLoginCodeFlow(options).then(() => true);\n } else {\n return this.tryLoginImplicitFlow(options);\n }\n }\n parseQueryString(queryString) {\n if (!queryString || queryString.length === 0) {\n return {};\n }\n if (queryString.charAt(0) === '?') {\n queryString = queryString.substr(1);\n }\n return this.urlHelper.parseQueryString(queryString);\n }\n async tryLoginCodeFlow(options = null) {\n options = options || {};\n const querySource = options.customHashFragment ? options.customHashFragment.substring(1) : window.location.search;\n const parts = this.getCodePartsFromUrl(querySource);\n const code = parts['code'];\n const state = parts['state'];\n const sessionState = parts['session_state'];\n if (!options.preventClearHashAfterLogin) {\n const href = location.origin + location.pathname + location.search.replace(/code=[^&$]*/, '').replace(/scope=[^&$]*/, '').replace(/state=[^&$]*/, '').replace(/session_state=[^&$]*/, '').replace(/^\\?&/, '?').replace(/&$/, '').replace(/^\\?$/, '').replace(/&+/g, '&').replace(/\\?&/, '?').replace(/\\?$/, '') + location.hash;\n history.replaceState(null, window.name, href);\n }\n const [nonceInState, userState] = this.parseState(state);\n this.state = userState;\n if (parts['error']) {\n this.debug('error trying to login');\n this.handleLoginError(options, parts);\n const err = new OAuthErrorEvent('code_error', {}, parts);\n this.eventsSubject.next(err);\n return Promise.reject(err);\n }\n if (!options.disableNonceCheck) {\n if (!nonceInState) {\n this.saveRequestedRoute();\n return Promise.resolve();\n }\n if (!options.disableOAuth2StateCheck) {\n const success = this.validateNonce(nonceInState);\n if (!success) {\n const event = new OAuthErrorEvent('invalid_nonce_in_state', null);\n this.eventsSubject.next(event);\n return Promise.reject(event);\n }\n }\n }\n this.storeSessionState(sessionState);\n if (code) {\n await this.getTokenFromCode(code, options);\n this.restoreRequestedRoute();\n return Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n saveRequestedRoute() {\n if (this.config.preserveRequestedRoute) {\n this._storage.setItem('requested_route', window.location.pathname + window.location.search);\n }\n }\n restoreRequestedRoute() {\n const requestedRoute = this._storage.getItem('requested_route');\n if (requestedRoute) {\n history.replaceState(null, '', window.location.origin + requestedRoute);\n }\n }\n /**\n * Retrieve the returned auth code from the redirect uri that has been called.\n * If required also check hash, as we could use hash location strategy.\n */\n getCodePartsFromUrl(queryString) {\n if (!queryString || queryString.length === 0) {\n return this.urlHelper.getHashFragmentParams();\n }\n // normalize query string\n if (queryString.charAt(0) === '?') {\n queryString = queryString.substr(1);\n }\n return this.urlHelper.parseQueryString(queryString);\n }\n /**\n * Get token using an intermediate code. Works for the Authorization Code flow.\n */\n getTokenFromCode(code, options) {\n let params = new HttpParams({\n encoder: new WebHttpUrlEncodingCodec()\n }).set('grant_type', 'authorization_code').set('code', code).set('redirect_uri', options.customRedirectUri || this.redirectUri);\n if (!this.disablePKCE) {\n let PKCEVerifier;\n if (this.saveNoncesInLocalStorage && typeof window['localStorage'] !== 'undefined') {\n PKCEVerifier = localStorage.getItem('PKCE_verifier');\n } else {\n PKCEVerifier = this._storage.getItem('PKCE_verifier');\n }\n if (!PKCEVerifier) {\n console.warn('No PKCE verifier found in oauth storage!');\n } else {\n params = params.set('code_verifier', PKCEVerifier);\n }\n }\n return this.fetchAndProcessToken(params, options);\n }\n fetchAndProcessToken(params, options) {\n options = options || {};\n this.assertUrlNotNullAndCorrectProtocol(this.tokenEndpoint, 'tokenEndpoint');\n let headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n if (this.useHttpBasicAuth) {\n const header = btoa(`${this.clientId}:${this.dummyClientSecret}`);\n headers = headers.set('Authorization', 'Basic ' + header);\n }\n if (!this.useHttpBasicAuth) {\n params = params.set('client_id', this.clientId);\n }\n if (!this.useHttpBasicAuth && this.dummyClientSecret) {\n params = params.set('client_secret', this.dummyClientSecret);\n }\n return new Promise((resolve, reject) => {\n if (this.customQueryParams) {\n for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {\n params = params.set(key, this.customQueryParams[key]);\n }\n }\n this.http.post(this.tokenEndpoint, params, {\n headers\n }).subscribe(tokenResponse => {\n this.debug('refresh tokenResponse', tokenResponse);\n this.storeAccessTokenResponse(tokenResponse.access_token, tokenResponse.refresh_token, tokenResponse.expires_in || this.fallbackAccessTokenExpirationTimeInSec, tokenResponse.scope, this.extractRecognizedCustomParameters(tokenResponse));\n if (this.oidc && tokenResponse.id_token) {\n this.processIdToken(tokenResponse.id_token, tokenResponse.access_token, options.disableNonceCheck).then(result => {\n this.storeIdToken(result);\n this.eventsSubject.next(new OAuthSuccessEvent('token_received'));\n this.eventsSubject.next(new OAuthSuccessEvent('token_refreshed'));\n resolve(tokenResponse);\n }).catch(reason => {\n this.eventsSubject.next(new OAuthErrorEvent('token_validation_error', reason));\n console.error('Error validating tokens');\n console.error(reason);\n reject(reason);\n });\n } else {\n this.eventsSubject.next(new OAuthSuccessEvent('token_received'));\n this.eventsSubject.next(new OAuthSuccessEvent('token_refreshed'));\n resolve(tokenResponse);\n }\n }, err => {\n console.error('Error getting token', err);\n this.eventsSubject.next(new OAuthErrorEvent('token_refresh_error', err));\n reject(err);\n });\n });\n }\n /**\n * Checks whether there are tokens in the hash fragment\n * as a result of the implicit flow. These tokens are\n * parsed, validated and used to sign the user in to the\n * current client.\n *\n * @param options Optional options.\n */\n tryLoginImplicitFlow(options = null) {\n options = options || {};\n let parts;\n if (options.customHashFragment) {\n parts = this.urlHelper.getHashFragmentParams(options.customHashFragment);\n } else {\n parts = this.urlHelper.getHashFragmentParams();\n }\n this.debug('parsed url', parts);\n const state = parts['state'];\n const [nonceInState, userState] = this.parseState(state);\n this.state = userState;\n if (parts['error']) {\n this.debug('error trying to login');\n this.handleLoginError(options, parts);\n const err = new OAuthErrorEvent('token_error', {}, parts);\n this.eventsSubject.next(err);\n return Promise.reject(err);\n }\n const accessToken = parts['access_token'];\n const idToken = parts['id_token'];\n const sessionState = parts['session_state'];\n const grantedScopes = parts['scope'];\n if (!this.requestAccessToken && !this.oidc) {\n return Promise.reject('Either requestAccessToken or oidc (or both) must be true.');\n }\n if (this.requestAccessToken && !accessToken) {\n return Promise.resolve(false);\n }\n if (this.requestAccessToken && !options.disableOAuth2StateCheck && !state) {\n return Promise.resolve(false);\n }\n if (this.oidc && !idToken) {\n return Promise.resolve(false);\n }\n if (this.sessionChecksEnabled && !sessionState) {\n this.logger.warn('session checks (Session Status Change Notification) ' + 'were activated in the configuration but the id_token ' + 'does not contain a session_state claim');\n }\n if (this.requestAccessToken && !options.disableNonceCheck) {\n const success = this.validateNonce(nonceInState);\n if (!success) {\n const event = new OAuthErrorEvent('invalid_nonce_in_state', null);\n this.eventsSubject.next(event);\n return Promise.reject(event);\n }\n }\n if (this.requestAccessToken) {\n this.storeAccessTokenResponse(accessToken, null, parts['expires_in'] || this.fallbackAccessTokenExpirationTimeInSec, grantedScopes);\n }\n if (!this.oidc) {\n this.eventsSubject.next(new OAuthSuccessEvent('token_received'));\n if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) {\n this.clearLocationHash();\n }\n this.callOnTokenReceivedIfExists(options);\n return Promise.resolve(true);\n }\n return this.processIdToken(idToken, accessToken, options.disableNonceCheck).then(result => {\n if (options.validationHandler) {\n return options.validationHandler({\n accessToken: accessToken,\n idClaims: result.idTokenClaims,\n idToken: result.idToken,\n state: state\n }).then(() => result);\n }\n return result;\n }).then(result => {\n this.storeIdToken(result);\n this.storeSessionState(sessionState);\n if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) {\n this.clearLocationHash();\n }\n this.eventsSubject.next(new OAuthSuccessEvent('token_received'));\n this.callOnTokenReceivedIfExists(options);\n this.inImplicitFlow = false;\n return true;\n }).catch(reason => {\n this.eventsSubject.next(new OAuthErrorEvent('token_validation_error', reason));\n this.logger.error('Error validating tokens');\n this.logger.error(reason);\n return Promise.reject(reason);\n });\n }\n parseState(state) {\n let nonce = state;\n let userState = '';\n if (state) {\n const idx = state.indexOf(this.config.nonceStateSeparator);\n if (idx > -1) {\n nonce = state.substr(0, idx);\n userState = state.substr(idx + this.config.nonceStateSeparator.length);\n }\n }\n return [nonce, userState];\n }\n validateNonce(nonceInState) {\n let savedNonce;\n if (this.saveNoncesInLocalStorage && typeof window['localStorage'] !== 'undefined') {\n savedNonce = localStorage.getItem('nonce');\n } else {\n savedNonce = this._storage.getItem('nonce');\n }\n if (savedNonce !== nonceInState) {\n const err = 'Validating access_token failed, wrong state/nonce.';\n console.error(err, savedNonce, nonceInState);\n return false;\n }\n return true;\n }\n storeIdToken(idToken) {\n this._storage.setItem('id_token', idToken.idToken);\n this._storage.setItem('id_token_claims_obj', idToken.idTokenClaimsJson);\n this._storage.setItem('id_token_expires_at', '' + idToken.idTokenExpiresAt);\n this._storage.setItem('id_token_stored_at', '' + this.dateTimeService.now());\n }\n storeSessionState(sessionState) {\n this._storage.setItem('session_state', sessionState);\n }\n getSessionState() {\n return this._storage.getItem('session_state');\n }\n handleLoginError(options, parts) {\n if (options.onLoginError) {\n options.onLoginError(parts);\n }\n if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) {\n this.clearLocationHash();\n }\n }\n getClockSkewInMsec(defaultSkewMsc = 600000) {\n if (!this.clockSkewInSec && this.clockSkewInSec !== 0) {\n return defaultSkewMsc;\n }\n return this.clockSkewInSec * 1000;\n }\n /**\n * @ignore\n */\n processIdToken(idToken, accessToken, skipNonceCheck = false) {\n const tokenParts = idToken.split('.');\n const headerBase64 = this.padBase64(tokenParts[0]);\n const headerJson = b64DecodeUnicode(headerBase64);\n const header = JSON.parse(headerJson);\n const claimsBase64 = this.padBase64(tokenParts[1]);\n const claimsJson = b64DecodeUnicode(claimsBase64);\n const claims = JSON.parse(claimsJson);\n let savedNonce;\n if (this.saveNoncesInLocalStorage && typeof window['localStorage'] !== 'undefined') {\n savedNonce = localStorage.getItem('nonce');\n } else {\n savedNonce = this._storage.getItem('nonce');\n }\n if (Array.isArray(claims.aud)) {\n if (claims.aud.every(v => v !== this.clientId)) {\n const err = 'Wrong audience: ' + claims.aud.join(',');\n this.logger.warn(err);\n return Promise.reject(err);\n }\n } else {\n if (claims.aud !== this.clientId) {\n const err = 'Wrong audience: ' + claims.aud;\n this.logger.warn(err);\n return Promise.reject(err);\n }\n }\n if (!claims.sub) {\n const err = 'No sub claim in id_token';\n this.logger.warn(err);\n return Promise.reject(err);\n }\n /* For now, we only check whether the sub against\n * silentRefreshSubject when sessionChecksEnabled is on\n * We will reconsider in a later version to do this\n * in every other case too.\n */\n if (this.sessionChecksEnabled && this.silentRefreshSubject && this.silentRefreshSubject !== claims['sub']) {\n const err = 'After refreshing, we got an id_token for another user (sub). ' + `Expected sub: ${this.silentRefreshSubject}, received sub: ${claims['sub']}`;\n this.logger.warn(err);\n return Promise.reject(err);\n }\n if (!claims.iat) {\n const err = 'No iat claim in id_token';\n this.logger.warn(err);\n return Promise.reject(err);\n }\n if (!this.skipIssuerCheck && claims.iss !== this.issuer) {\n const err = 'Wrong issuer: ' + claims.iss;\n this.logger.warn(err);\n return Promise.reject(err);\n }\n if (!skipNonceCheck && claims.nonce !== savedNonce) {\n const err = 'Wrong nonce: ' + claims.nonce;\n this.logger.warn(err);\n return Promise.reject(err);\n }\n // at_hash is not applicable to authorization code flow\n // addressing https://github.com/manfredsteyer/angular-oauth2-oidc/issues/661\n // i.e. Based on spec the at_hash check is only true for implicit code flow on Ping Federate\n // https://www.pingidentity.com/developer/en/resources/openid-connect-developers-guide.html\n if (Object.prototype.hasOwnProperty.call(this, 'responseType') && (this.responseType === 'code' || this.responseType === 'id_token')) {\n this.disableAtHashCheck = true;\n }\n if (!this.disableAtHashCheck && this.requestAccessToken && !claims['at_hash']) {\n const err = 'An at_hash is needed!';\n this.logger.warn(err);\n return Promise.reject(err);\n }\n const now = this.dateTimeService.now();\n const issuedAtMSec = claims.iat * 1000;\n const expiresAtMSec = claims.exp * 1000;\n const clockSkewInMSec = this.getClockSkewInMsec(); // (this.getClockSkewInMsec() || 600) * 1000;\n if (issuedAtMSec - clockSkewInMSec >= now || expiresAtMSec + clockSkewInMSec - this.decreaseExpirationBySec <= now) {\n const err = 'Token has expired';\n console.error(err);\n console.error({\n now: now,\n issuedAtMSec: issuedAtMSec,\n expiresAtMSec: expiresAtMSec\n });\n return Promise.reject(err);\n }\n const validationParams = {\n accessToken: accessToken,\n idToken: idToken,\n jwks: this.jwks,\n idTokenClaims: claims,\n idTokenHeader: header,\n loadKeys: () => this.loadJwks()\n };\n if (this.disableAtHashCheck) {\n return this.checkSignature(validationParams).then(() => {\n const result = {\n idToken: idToken,\n idTokenClaims: claims,\n idTokenClaimsJson: claimsJson,\n idTokenHeader: header,\n idTokenHeaderJson: headerJson,\n idTokenExpiresAt: expiresAtMSec\n };\n return result;\n });\n }\n return this.checkAtHash(validationParams).then(atHashValid => {\n if (!this.disableAtHashCheck && this.requestAccessToken && !atHashValid) {\n const err = 'Wrong at_hash';\n this.logger.warn(err);\n return Promise.reject(err);\n }\n return this.checkSignature(validationParams).then(() => {\n const atHashCheckEnabled = !this.disableAtHashCheck;\n const result = {\n idToken: idToken,\n idTokenClaims: claims,\n idTokenClaimsJson: claimsJson,\n idTokenHeader: header,\n idTokenHeaderJson: headerJson,\n idTokenExpiresAt: expiresAtMSec\n };\n if (atHashCheckEnabled) {\n return this.checkAtHash(validationParams).then(atHashValid => {\n if (this.requestAccessToken && !atHashValid) {\n const err = 'Wrong at_hash';\n this.logger.warn(err);\n return Promise.reject(err);\n } else {\n return result;\n }\n });\n } else {\n return result;\n }\n });\n });\n }\n /**\n * Returns the received claims about the user.\n */\n getIdentityClaims() {\n const claims = this._storage.getItem('id_token_claims_obj');\n if (!claims) {\n return null;\n }\n return JSON.parse(claims);\n }\n /**\n * Returns the granted scopes from the server.\n */\n getGrantedScopes() {\n const scopes = this._storage.getItem('granted_scopes');\n if (!scopes) {\n return null;\n }\n return JSON.parse(scopes);\n }\n /**\n * Returns the current id_token.\n */\n getIdToken() {\n return this._storage ? this._storage.getItem('id_token') : null;\n }\n padBase64(base64data) {\n while (base64data.length % 4 !== 0) {\n base64data += '=';\n }\n return base64data;\n }\n /**\n * Returns the current access_token.\n */\n getAccessToken() {\n return this._storage ? this._storage.getItem('access_token') : null;\n }\n getRefreshToken() {\n return this._storage ? this._storage.getItem('refresh_token') : null;\n }\n /**\n * Returns the expiration date of the access_token\n * as milliseconds since 1970.\n */\n getAccessTokenExpiration() {\n if (!this._storage.getItem('expires_at')) {\n return null;\n }\n return parseInt(this._storage.getItem('expires_at'), 10);\n }\n getAccessTokenStoredAt() {\n return parseInt(this._storage.getItem('access_token_stored_at'), 10);\n }\n getIdTokenStoredAt() {\n return parseInt(this._storage.getItem('id_token_stored_at'), 10);\n }\n /**\n * Returns the expiration date of the id_token\n * as milliseconds since 1970.\n */\n getIdTokenExpiration() {\n if (!this._storage.getItem('id_token_expires_at')) {\n return null;\n }\n return parseInt(this._storage.getItem('id_token_expires_at'), 10);\n }\n /**\n * Checkes, whether there is a valid access_token.\n */\n hasValidAccessToken() {\n if (this.getAccessToken()) {\n const expiresAt = this._storage.getItem('expires_at');\n const now = this.dateTimeService.new();\n if (expiresAt && parseInt(expiresAt, 10) - this.decreaseExpirationBySec < now.getTime() - this.getClockSkewInMsec()) {\n return false;\n }\n return true;\n }\n return false;\n }\n /**\n * Checks whether there is a valid id_token.\n */\n hasValidIdToken() {\n if (this.getIdToken()) {\n const expiresAt = this._storage.getItem('id_token_expires_at');\n const now = this.dateTimeService.new();\n if (expiresAt && parseInt(expiresAt, 10) - this.decreaseExpirationBySec < now.getTime() - this.getClockSkewInMsec()) {\n return false;\n }\n return true;\n }\n return false;\n }\n /**\n * Retrieve a saved custom property of the TokenReponse object. Only if predefined in authconfig.\n */\n getCustomTokenResponseProperty(requestedProperty) {\n return this._storage && this.config.customTokenParameters && this.config.customTokenParameters.indexOf(requestedProperty) >= 0 && this._storage.getItem(requestedProperty) !== null ? JSON.parse(this._storage.getItem(requestedProperty)) : null;\n }\n /**\n * Returns the auth-header that can be used\n * to transmit the access_token to a service\n */\n authorizationHeader() {\n return 'Bearer ' + this.getAccessToken();\n }\n logOut(customParameters = {}, state = '') {\n let noRedirectToLogoutUrl = false;\n if (typeof customParameters === 'boolean') {\n noRedirectToLogoutUrl = customParameters;\n customParameters = {};\n }\n const id_token = this.getIdToken();\n this._storage.removeItem('access_token');\n this._storage.removeItem('id_token');\n this._storage.removeItem('refresh_token');\n if (this.saveNoncesInLocalStorage) {\n localStorage.removeItem('nonce');\n localStorage.removeItem('PKCE_verifier');\n } else {\n this._storage.removeItem('nonce');\n this._storage.removeItem('PKCE_verifier');\n }\n this._storage.removeItem('expires_at');\n this._storage.removeItem('id_token_claims_obj');\n this._storage.removeItem('id_token_expires_at');\n this._storage.removeItem('id_token_stored_at');\n this._storage.removeItem('access_token_stored_at');\n this._storage.removeItem('granted_scopes');\n this._storage.removeItem('session_state');\n if (this.config.customTokenParameters) {\n this.config.customTokenParameters.forEach(customParam => this._storage.removeItem(customParam));\n }\n this.silentRefreshSubject = null;\n this.eventsSubject.next(new OAuthInfoEvent('logout'));\n if (!this.logoutUrl) {\n return;\n }\n if (noRedirectToLogoutUrl) {\n return;\n }\n // if (!id_token && !this.postLogoutRedirectUri) {\n // return;\n // }\n let logoutUrl;\n if (!this.validateUrlForHttps(this.logoutUrl)) {\n throw new Error(\"logoutUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).\");\n }\n // For backward compatibility\n if (this.logoutUrl.indexOf('{{') > -1) {\n logoutUrl = this.logoutUrl.replace(/\\{\\{id_token\\}\\}/, encodeURIComponent(id_token)).replace(/\\{\\{client_id\\}\\}/, encodeURIComponent(this.clientId));\n } else {\n let params = new HttpParams({\n encoder: new WebHttpUrlEncodingCodec()\n });\n if (id_token) {\n params = params.set('id_token_hint', id_token);\n }\n const postLogoutUrl = this.postLogoutRedirectUri || this.redirectUriAsPostLogoutRedirectUriFallback && this.redirectUri || '';\n if (postLogoutUrl) {\n params = params.set('post_logout_redirect_uri', postLogoutUrl);\n if (state) {\n params = params.set('state', state);\n }\n }\n for (const key in customParameters) {\n params = params.set(key, customParameters[key]);\n }\n logoutUrl = this.logoutUrl + (this.logoutUrl.indexOf('?') > -1 ? '&' : '?') + params.toString();\n }\n this.config.openUri(logoutUrl);\n }\n /**\n * @ignore\n */\n createAndSaveNonce() {\n const that = this; // eslint-disable-line @typescript-eslint/no-this-alias\n return this.createNonce().then(function (nonce) {\n // Use localStorage for nonce if possible\n // localStorage is the only storage who survives a\n // redirect in ALL browsers (also IE)\n // Otherwiese we'd force teams who have to support\n // IE into using localStorage for everything\n if (that.saveNoncesInLocalStorage && typeof window['localStorage'] !== 'undefined') {\n localStorage.setItem('nonce', nonce);\n } else {\n that._storage.setItem('nonce', nonce);\n }\n return nonce;\n });\n }\n /**\n * @ignore\n */\n ngOnDestroy() {\n this.clearAccessTokenTimer();\n this.clearIdTokenTimer();\n this.removeSilentRefreshEventListener();\n const silentRefreshFrame = this.document.getElementById(this.silentRefreshIFrameName);\n if (silentRefreshFrame) {\n silentRefreshFrame.remove();\n }\n this.stopSessionCheckTimer();\n this.removeSessionCheckEventListener();\n const sessionCheckFrame = this.document.getElementById(this.sessionCheckIFrameName);\n if (sessionCheckFrame) {\n sessionCheckFrame.remove();\n }\n }\n createNonce() {\n return new Promise(resolve => {\n if (this.rngUrl) {\n throw new Error('createNonce with rng-web-api has not been implemented so far');\n }\n /*\n * This alphabet is from:\n * https://tools.ietf.org/html/rfc7636#section-4.1\n *\n * [A-Z] / [a-z] / [0-9] / \"-\" / \".\" / \"_\" / \"~\"\n */\n const unreserved = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n let size = 45;\n let id = '';\n const crypto = typeof self === 'undefined' ? null : self.crypto || self['msCrypto'];\n if (crypto) {\n let bytes = new Uint8Array(size);\n crypto.getRandomValues(bytes);\n // Needed for IE\n if (!bytes.map) {\n bytes.map = Array.prototype.map;\n }\n bytes = bytes.map(x => unreserved.charCodeAt(x % unreserved.length));\n id = String.fromCharCode.apply(null, bytes);\n } else {\n while (0 < size--) {\n id += unreserved[Math.random() * unreserved.length | 0];\n }\n }\n resolve(base64UrlEncode(id));\n });\n }\n async checkAtHash(params) {\n if (!this.tokenValidationHandler) {\n this.logger.warn('No tokenValidationHandler configured. Cannot check at_hash.');\n return true;\n }\n return this.tokenValidationHandler.validateAtHash(params);\n }\n checkSignature(params) {\n if (!this.tokenValidationHandler) {\n this.logger.warn('No tokenValidationHandler configured. Cannot check signature.');\n return Promise.resolve(null);\n }\n return this.tokenValidationHandler.validateSignature(params);\n }\n /**\n * Start the implicit flow or the code flow,\n * depending on your configuration.\n */\n initLoginFlow(additionalState = '', params = {}) {\n if (this.responseType === 'code') {\n return this.initCodeFlow(additionalState, params);\n } else {\n return this.initImplicitFlow(additionalState, params);\n }\n }\n /**\n * Starts the authorization code flow and redirects to user to\n * the auth servers login url.\n */\n initCodeFlow(additionalState = '', params = {}) {\n if (this.loginUrl !== '') {\n this.initCodeFlowInternal(additionalState, params);\n } else {\n this.events.pipe(filter(e => e.type === 'discovery_document_loaded')).subscribe(() => this.initCodeFlowInternal(additionalState, params));\n }\n }\n initCodeFlowInternal(additionalState = '', params = {}) {\n if (!this.validateUrlForHttps(this.loginUrl)) {\n throw new Error(\"loginUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).\");\n }\n let addParams = {};\n let loginHint = null;\n if (typeof params === 'string') {\n loginHint = params;\n } else if (typeof params === 'object') {\n addParams = params;\n }\n this.createLoginUrl(additionalState, loginHint, null, false, addParams).then(this.config.openUri).catch(error => {\n console.error('Error in initAuthorizationCodeFlow');\n console.error(error);\n });\n }\n async createChallangeVerifierPairForPKCE() {\n if (!this.crypto) {\n throw new Error('PKCE support for code flow needs a CryptoHander. Did you import the OAuthModule using forRoot() ?');\n }\n const verifier = await this.createNonce();\n const challengeRaw = await this.crypto.calcHash(verifier, 'sha-256');\n const challenge = base64UrlEncode(challengeRaw);\n return [challenge, verifier];\n }\n extractRecognizedCustomParameters(tokenResponse) {\n const foundParameters = new Map();\n if (!this.config.customTokenParameters) {\n return foundParameters;\n }\n this.config.customTokenParameters.forEach(recognizedParameter => {\n if (tokenResponse[recognizedParameter]) {\n foundParameters.set(recognizedParameter, JSON.stringify(tokenResponse[recognizedParameter]));\n }\n });\n return foundParameters;\n }\n /**\n * Revokes the auth token to secure the vulnarability\n * of the token issued allowing the authorization server to clean\n * up any security credentials associated with the authorization\n */\n revokeTokenAndLogout(customParameters = {}, ignoreCorsIssues = false) {\n const revokeEndpoint = this.revocationEndpoint;\n const accessToken = this.getAccessToken();\n const refreshToken = this.getRefreshToken();\n if (!accessToken) {\n return Promise.resolve();\n }\n let params = new HttpParams({\n encoder: new WebHttpUrlEncodingCodec()\n });\n let headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n if (this.useHttpBasicAuth) {\n const header = btoa(`${this.clientId}:${this.dummyClientSecret}`);\n headers = headers.set('Authorization', 'Basic ' + header);\n }\n if (!this.useHttpBasicAuth) {\n params = params.set('client_id', this.clientId);\n }\n if (!this.useHttpBasicAuth && this.dummyClientSecret) {\n params = params.set('client_secret', this.dummyClientSecret);\n }\n if (this.customQueryParams) {\n for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {\n params = params.set(key, this.customQueryParams[key]);\n }\n }\n return new Promise((resolve, reject) => {\n let revokeAccessToken;\n let revokeRefreshToken;\n if (accessToken) {\n const revokationParams = params.set('token', accessToken).set('token_type_hint', 'access_token');\n revokeAccessToken = this.http.post(revokeEndpoint, revokationParams, {\n headers\n });\n } else {\n revokeAccessToken = of(null);\n }\n if (refreshToken) {\n const revokationParams = params.set('token', refreshToken).set('token_type_hint', 'refresh_token');\n revokeRefreshToken = this.http.post(revokeEndpoint, revokationParams, {\n headers\n });\n } else {\n revokeRefreshToken = of(null);\n }\n if (ignoreCorsIssues) {\n revokeAccessToken = revokeAccessToken.pipe(catchError(err => {\n if (err.status === 0) {\n return of(null);\n }\n return throwError(err);\n }));\n revokeRefreshToken = revokeRefreshToken.pipe(catchError(err => {\n if (err.status === 0) {\n return of(null);\n }\n return throwError(err);\n }));\n }\n combineLatest([revokeAccessToken, revokeRefreshToken]).subscribe(res => {\n this.logOut(customParameters);\n resolve(res);\n this.logger.info('Token successfully revoked');\n }, err => {\n this.logger.error('Error revoking token', err);\n this.eventsSubject.next(new OAuthErrorEvent('token_revoke_error', err));\n reject(err);\n });\n });\n }\n /**\n * Clear location.hash if it's present\n */\n clearLocationHash() {\n // Checking for empty hash is necessary for Firefox\n // as setting an empty hash to an empty string adds # to the URL\n if (location.hash != '') {\n location.hash = '';\n }\n }\n static {\n this.ɵfac = function OAuthService_Factory(t) {\n return new (t || OAuthService)(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(OAuthStorage, 8), i0.ɵɵinject(ValidationHandler, 8), i0.ɵɵinject(AuthConfig, 8), i0.ɵɵinject(UrlHelperService), i0.ɵɵinject(OAuthLogger), i0.ɵɵinject(HashHandler, 8), i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(DateTimeProvider));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: OAuthService,\n factory: OAuthService.ɵfac\n });\n }\n }\n return OAuthService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass OAuthResourceServerErrorHandler {}\nclass OAuthNoopResourceServerErrorHandler {\n handleError(err) {\n return throwError(err);\n }\n}\nlet DefaultOAuthInterceptor = /*#__PURE__*/(() => {\n class DefaultOAuthInterceptor {\n constructor(oAuthService, errorHandler, moduleConfig) {\n this.oAuthService = oAuthService;\n this.errorHandler = errorHandler;\n this.moduleConfig = moduleConfig;\n }\n checkUrl(url) {\n if (this.moduleConfig.resourceServer.customUrlValidation) {\n return this.moduleConfig.resourceServer.customUrlValidation(url);\n }\n if (this.moduleConfig.resourceServer.allowedUrls) {\n return !!this.moduleConfig.resourceServer.allowedUrls.find(u => url.toLowerCase().startsWith(u.toLowerCase()));\n }\n return true;\n }\n intercept(req, next) {\n const url = req.url.toLowerCase();\n if (!this.moduleConfig || !this.moduleConfig.resourceServer || !this.checkUrl(url)) {\n return next.handle(req);\n }\n const sendAccessToken = this.moduleConfig.resourceServer.sendAccessToken;\n if (!sendAccessToken) {\n return next.handle(req).pipe(catchError(err => this.errorHandler.handleError(err)));\n }\n return merge(of(this.oAuthService.getAccessToken()).pipe(filter(token => !!token)), this.oAuthService.events.pipe(filter(e => e.type === 'token_received'), timeout(this.oAuthService.waitForTokenInMsec || 0), catchError(() => of(null)),\n // timeout is not an error\n map(() => this.oAuthService.getAccessToken()))).pipe(take(1), mergeMap(token => {\n if (token) {\n const header = 'Bearer ' + token;\n const headers = req.headers.set('Authorization', header);\n req = req.clone({\n headers\n });\n }\n return next.handle(req).pipe(catchError(err => this.errorHandler.handleError(err)));\n }));\n }\n static {\n this.ɵfac = function DefaultOAuthInterceptor_Factory(t) {\n return new (t || DefaultOAuthInterceptor)(i0.ɵɵinject(OAuthService), i0.ɵɵinject(OAuthResourceServerErrorHandler), i0.ɵɵinject(OAuthModuleConfig, 8));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DefaultOAuthInterceptor,\n factory: DefaultOAuthInterceptor.ɵfac\n });\n }\n }\n return DefaultOAuthInterceptor;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction createDefaultLogger() {\n return console;\n}\nfunction createDefaultStorage() {\n return typeof sessionStorage !== 'undefined' ? sessionStorage : new MemoryStorage();\n}\nfunction provideOAuthClient(config = null, validationHandlerClass = NullValidationHandler) {\n return makeEnvironmentProviders([OAuthService, UrlHelperService, {\n provide: OAuthLogger,\n useFactory: createDefaultLogger\n }, {\n provide: OAuthStorage,\n useFactory: createDefaultStorage\n }, {\n provide: ValidationHandler,\n useClass: validationHandlerClass\n }, {\n provide: HashHandler,\n useClass: DefaultHashHandler\n }, {\n provide: OAuthResourceServerErrorHandler,\n useClass: OAuthNoopResourceServerErrorHandler\n }, {\n provide: OAuthModuleConfig,\n useValue: config\n }, {\n provide: HTTP_INTERCEPTORS,\n useClass: DefaultOAuthInterceptor,\n multi: true\n }, {\n provide: DateTimeProvider,\n useClass: SystemDateTimeProvider\n }]);\n}\nlet OAuthModule = /*#__PURE__*/(() => {\n class OAuthModule {\n static forRoot(config = null, validationHandlerClass = NullValidationHandler) {\n return {\n ngModule: OAuthModule,\n providers: [provideOAuthClient(config, validationHandlerClass)]\n };\n }\n static {\n this.ɵfac = function OAuthModule_Factory(t) {\n return new (t || OAuthModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: OAuthModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule]\n });\n }\n }\n return OAuthModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst err = `PLEASE READ THIS CAREFULLY:\n\nBeginning with angular-oauth2-oidc version 9, the JwksValidationHandler\nhas been moved to an library of its own. If you need it for implementing\nOAuth2/OIDC **implicit flow**, please install it using npm:\n\n npm i angular-oauth2-oidc-jwks --save\n\nAfter that, you can import it into your application:\n\n import { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';\n\nPlease note, that this dependency is not needed for the **code flow**,\nwhich is nowadays the **recommented** one for single page applications.\nThis also results in smaller bundle sizes.\n`;\n/**\n * This is just a dummy of the JwksValidationHandler\n * telling the users that the real one has been moved\n * to an library of its own, namely angular-oauth2-oidc-utils\n */\nclass JwksValidationHandler extends NullValidationHandler {\n constructor() {\n super();\n console.error(err);\n }\n}\nconst AUTH_CONFIG = new InjectionToken('AUTH_CONFIG');\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AUTH_CONFIG, AbstractValidationHandler, AuthConfig, DateTimeProvider, DefaultHashHandler, DefaultOAuthInterceptor, HashHandler, JwksValidationHandler, LoginOptions, MemoryStorage, NullValidationHandler, OAuthErrorEvent, OAuthEvent, OAuthInfoEvent, OAuthLogger, OAuthModule, OAuthModuleConfig, OAuthNoopResourceServerErrorHandler, OAuthResourceServerConfig, OAuthResourceServerErrorHandler, OAuthService, OAuthStorage, OAuthSuccessEvent, ReceivedTokens, SystemDateTimeProvider, UrlHelperService, ValidationHandler, provideOAuthClient };\n","import * as rs from 'jsrsasign';\nimport { AbstractValidationHandler } from 'angular-oauth2-oidc';\n\n/**\n * Validates the signature of an id_token against one\n * of the keys of an JSON Web Key Set (jwks).\n *\n * This jwks can be provided by the discovery document.\n */\nclass JwksValidationHandler extends AbstractValidationHandler {\n constructor() {\n super(...arguments);\n /**\n * Allowed algorithms\n */\n this.allowedAlgorithms = ['HS256', 'HS384', 'HS512', 'RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'PS256', 'PS384', 'PS512'];\n /**\n * Time period in seconds the timestamp in the signature can\n * differ from the current time.\n */\n this.gracePeriodInSec = 600;\n }\n validateSignature(params, retry = false) {\n if (!params.idToken) throw new Error('Parameter idToken expected!');\n if (!params.idTokenHeader) throw new Error('Parameter idTokenHandler expected.');\n if (!params.jwks) throw new Error('Parameter jwks expected!');\n if (!params.jwks['keys'] || !Array.isArray(params.jwks['keys']) || params.jwks['keys'].length === 0) {\n throw new Error('Array keys in jwks missing!');\n }\n // console.debug('validateSignature: retry', retry);\n let kid = params.idTokenHeader['kid'];\n let keys = params.jwks['keys'];\n let key;\n let alg = params.idTokenHeader['alg'];\n if (kid) {\n key = keys.find(k => k['kid'] === kid /* && k['use'] === 'sig' */);\n } else {\n let kty = this.alg2kty(alg);\n let matchingKeys = keys.filter(k => k['kty'] === kty && k['use'] === 'sig');\n /*\n if (matchingKeys.length == 0) {\n let error = 'No matching key found.';\n console.error(error);\n return Promise.reject(error);\n }*/\n if (matchingKeys.length > 1) {\n let error = 'More than one matching key found. Please specify a kid in the id_token header.';\n console.error(error);\n return Promise.reject(error);\n } else if (matchingKeys.length === 1) {\n key = matchingKeys[0];\n }\n }\n if (!key && !retry && params.loadKeys) {\n return params.loadKeys().then(loadedKeys => params.jwks = loadedKeys).then(_ => this.validateSignature(params, true));\n }\n if (!key && retry && !kid) {\n let error = 'No matching key found.';\n console.error(error);\n return Promise.reject(error);\n }\n if (!key && retry && kid) {\n let error = 'expected key not found in property jwks. ' + 'This property is most likely loaded with the ' + 'discovery document. ' + 'Expected key id (kid): ' + kid;\n console.error(error);\n return Promise.reject(error);\n }\n let keyObj = rs.KEYUTIL.getKey(key);\n let validationOptions = {\n alg: this.allowedAlgorithms,\n gracePeriod: this.gracePeriodInSec\n };\n let isValid = rs.KJUR.jws.JWS.verifyJWT(params.idToken, keyObj, validationOptions);\n if (isValid) {\n return Promise.resolve();\n } else {\n return Promise.reject('Signature not valid');\n }\n }\n alg2kty(alg) {\n switch (alg.charAt(0)) {\n case 'R':\n return 'RSA';\n case 'E':\n return 'EC';\n default:\n throw new Error('Cannot infer kty from alg: ' + alg);\n }\n }\n calcHash(valueToHash, algorithm) {\n let hashAlg = new rs.KJUR.crypto.MessageDigest({\n alg: algorithm\n });\n let result = hashAlg.digestString(valueToHash);\n let byteArrayAsString = this.toByteArrayAsString(result);\n return Promise.resolve(byteArrayAsString);\n }\n toByteArrayAsString(hexString) {\n let result = '';\n for (let i = 0; i < hexString.length; i += 2) {\n let hexDigit = hexString.charAt(i) + hexString.charAt(i + 1);\n let num = parseInt(hexDigit, 16);\n result += String.fromCharCode(num);\n }\n return result;\n }\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { JwksValidationHandler };\n","import { User } from \"./user\";\r\n\r\nexport class AuthorizationResult {\r\n\tuser!: User;\r\n\tisAuthenticated = false;\r\n\tisIdentityServerConfigured = false;\r\n\tisIdentityServerOnError = false;\r\n\r\n\tconstructor(\r\n\t\tisIdentityServerConfigured: boolean,\r\n\t\tisIdentityServerOnError: boolean,\r\n\t\tisAuthenticated: boolean,\r\n\t\tuser?: User\r\n\t) {\r\n\t\tthis.isIdentityServerConfigured = isIdentityServerConfigured;\r\n\t\tthis.isIdentityServerOnError = isIdentityServerOnError;\r\n\t\tthis.isAuthenticated = isAuthenticated;\r\n\r\n\t\tif (user) this.user = user;\r\n\t}\r\n\r\n\thasRoles(roles: string[]): boolean {\r\n\t\tif (!this.isIdentityServerConfigured || this.isIdentityServerOnError || !this.isAuthenticated || !this.user)\r\n\t\t\treturn false;\r\n\r\n\t\treturn this.user.hasRoles(roles);\r\n\t}\r\n\r\n\tcanAccessAuthorizedContent(): boolean {\r\n\t\tif (!this.isIdentityServerConfigured || this.isIdentityServerOnError || !this.isAuthenticated) return false;\r\n\r\n\t\treturn true;\r\n\t}\r\n}\r\n","// import { CacheKeys } from \"@e-tenant-hub/shared/utils\";\r\n\r\nimport { CacheKeys } from \"@e-tenant-hub/shared/utils\";\r\n\r\nexport class Impersonation {\r\n\tcurrentRentalId = \"\";\r\n\tfamilyName = \"\";\r\n\tgivenName = \"\";\r\n\tisImpersonated = false;\r\n\tisLegalPerson = false;\r\n\tisRegistered = false;\r\n\trentalIds: string[] = [];\r\n\tusername = \"\";\r\n\tthirdPartyId = \"\";\r\n\r\n\tconstructor(init?: Partial) {\r\n\t\tObject.assign(this, init);\r\n\t}\r\n\r\n\tsaveInsideCache(): void {\r\n\t\tconst jsonData = JSON.stringify(this);\r\n\t\tlocalStorage.setItem(CacheKeys.IMPERSONATION, jsonData);\r\n\t}\r\n\r\n\tstatic resetImpersonationInsideCache(): Impersonation {\r\n\t\tconst impersonation = new Impersonation({\r\n\t\t\tcurrentRentalId: \"\",\r\n\t\t\tfamilyName: \"\",\r\n\t\t\tgivenName: \"\",\r\n\t\t\tisImpersonated: false,\r\n\t\t\tisLegalPerson: false,\r\n\t\t\tisRegistered: false,\r\n\t\t\trentalIds: [],\r\n\t\t\tusername: \"\",\r\n\t\t\tthirdPartyId: \"\",\r\n\t\t});\r\n\r\n\t\tconst jsonData = JSON.stringify(impersonation);\r\n\t\tlocalStorage.setItem(CacheKeys.IMPERSONATION, jsonData);\r\n\r\n\t\treturn impersonation;\r\n\t}\r\n\r\n\tstatic retrieveFromCache(): Impersonation {\r\n\t\tconst jsonData = localStorage.getItem(CacheKeys.IMPERSONATION);\r\n\t\tif (jsonData) return JSON.parse(jsonData);\r\n\r\n\t\treturn Impersonation.resetImpersonationInsideCache();\r\n\t}\r\n}\r\n","import { Roles } from \"../constants\";\r\nimport { Impersonation } from \"./impersonation\";\r\n\r\nexport class User {\r\n\tid!: string;\r\n\tprivate _familyName!: string;\r\n\tprivate _givenName!: string;\r\n\tisAuthenticated = false;\r\n\troles!: string[];\r\n\tprivate _username!: string;\r\n\tprivate _currentRentalId!: string;\r\n\tisRegistered!: boolean;\r\n\tprivate _thirdPartyId!: string;\r\n\r\n\tprivate _impersonation!: Impersonation;\r\n\r\n\tconstructor(init?: Partial) {\r\n\t\tthis._impersonation = Impersonation.retrieveFromCache();\r\n\t\tObject.assign(this, init);\r\n\t}\r\n\r\n\t// Getter Setter FamilyName\r\n\tget familyName(): string {\r\n\t\tif (this._impersonation.isImpersonated) return this._impersonation.familyName;\r\n\t\treturn this._familyName;\r\n\t}\r\n\tset familyName(familyName: string) {\r\n\t\tthis._familyName = familyName;\r\n\t}\r\n\t// Getter Setter GivenName\r\n\tget givenName(): string {\r\n\t\tif (this._impersonation.isImpersonated) return this._impersonation.givenName;\r\n\t\treturn this._givenName;\r\n\t}\r\n\tset givenName(givenName: string) {\r\n\t\tthis._givenName = givenName;\r\n\t}\r\n\r\n\t// Getter Setter CurrentRentalId\r\n\tget currentRentalId(): string {\r\n\t\treturn this._impersonation.isImpersonated ? this._impersonation.currentRentalId : this._currentRentalId;\r\n\t}\r\n\r\n\tset currentRentalId(rentalId: string) {\r\n\t\tif (this._impersonation.isImpersonated) {\r\n\t\t\tthis._impersonation.currentRentalId = rentalId;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._currentRentalId = rentalId;\r\n\t}\r\n\r\n\tget rentalIds(): string[] {\r\n\t\treturn this._impersonation.isImpersonated ? this._impersonation.rentalIds : ([] as string[]);\r\n\t}\r\n\r\n\t// Getter Setter ThirdParty\r\n\tget thirdPartyId(): string {\r\n\t\tif (this._impersonation.isImpersonated) return this._impersonation.thirdPartyId;\r\n\t\treturn this._thirdPartyId;\r\n\t}\r\n\r\n\tset thirdPartyId(thirdPartyId: string) {\r\n\t\tthis._thirdPartyId = thirdPartyId;\r\n\t}\r\n\r\n\t// Getter Setter UserName\r\n\tget username(): string {\r\n\t\tif (this._impersonation.isImpersonated) return this._impersonation.username;\r\n\t\treturn this._username;\r\n\t}\r\n\r\n\tset username(userName: string) {\r\n\t\tthis._username = userName;\r\n\t}\r\n\r\n\tget isImpersonated(): boolean {\r\n\t\treturn this._impersonation.isImpersonated;\r\n\t}\r\n\r\n\tget hasAdminRole(): boolean {\r\n\t\treturn this.hasRoles(Roles.admin);\r\n\t}\r\n\r\n\tget isLegalPerson(): boolean {\r\n\t\tif (this._impersonation.isImpersonated) return this._impersonation.isLegalPerson;\r\n\r\n\t\treturn this.hasRoles(Roles.legalPerson);\r\n\t}\r\n\r\n\thasRoles(roles: string[] | string): boolean {\r\n\t\tif (!this.roles) return false;\r\n\r\n\t\tif (typeof roles === \"string\") return this.roles.includes(roles);\r\n\r\n\t\tfor (const role of roles) {\r\n\t\t\tif (this.roles.includes(role)) return true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\timpersonateThirdParty(\r\n\t\tcurrentRentalId: string,\r\n\t\tfamilyName: string,\r\n\t\tgivenName: string,\r\n\t\troles: string[],\r\n\t\tisImpersonate: boolean,\r\n\t\tisRegistered: boolean,\r\n\t\trentalIds: string[],\r\n\t\tuserName: string,\r\n\t\tthirdPartyId: string\r\n\t) {\r\n\t\tconst impersonation = new Impersonation({\r\n\t\t\tcurrentRentalId: currentRentalId,\r\n\t\t\tfamilyName: familyName,\r\n\t\t\tgivenName: givenName,\r\n\t\t\tisImpersonated: isImpersonate,\r\n\t\t\tisLegalPerson: roles.includes(Roles.legalPerson),\r\n\t\t\tisRegistered: isRegistered,\r\n\t\t\trentalIds: rentalIds,\r\n\t\t\tusername: userName,\r\n\t\t\tthirdPartyId: thirdPartyId,\r\n\t\t});\r\n\r\n\t\timpersonation.saveInsideCache();\r\n\r\n\t\tthis._impersonation = impersonation;\r\n\t}\r\n}\r\n","import { AppConfig } from \"@e-tenant-hub/shared/config\";\r\nimport { AuthConfig } from \"angular-oauth2-oidc\";\r\n\r\nexport class CodeFlowAuthConfig extends AuthConfig {\r\n\tconstructor(appConfig: AppConfig, isProduction: boolean) {\r\n\t\tsuper();\r\n\t\tthis.clearHashAfterLogin = false;\r\n\t\tthis.clientId = appConfig.clientId;\r\n\t\tthis.dummyClientSecret = appConfig.clientSecret;\r\n\t\tthis.issuer = `${appConfig.authority}`;\r\n\t\tthis.oidc = true;\r\n\t\tthis.postLogoutRedirectUri = `${window.location.origin}/signout-callback`;\r\n\t\tthis.redirectUri = `${window.location.origin}/signin-callback`;\r\n\t\tthis.redirectUriAsPostLogoutRedirectUriFallback = true;\r\n\t\tthis.responseType = \"code\";\r\n\t\tthis.scope = \"openid profile offline_access etenant.user emh-tenant-api emh-auth-api\";\r\n\t\tthis.sessionChecksEnabled = false;\r\n\t\tthis.showDebugInformation = !isProduction;\r\n\t\tthis.silentRefreshRedirectUri = `${window.location.origin}/silent-refresh.html`;\r\n\t\tthis.useSilentRefresh = true;\r\n\t}\r\n}\r\n","import { AppConfig } from \"@e-tenant-hub/shared/config\";\r\nimport { AuthConfig } from \"angular-oauth2-oidc\";\r\n\r\nexport class ROPCAuthConfig extends AuthConfig {\r\n\tconstructor(appConfig: AppConfig, isProduction: boolean) {\r\n\t\tsuper();\r\n\t\tthis.issuer = `${appConfig.authority}`;\r\n\t\tthis.redirectUri = `${window.location.origin}/signin-callback`;\r\n\t\tthis.oidc = false;\r\n\t\tthis.scope = \"openid emh-tenant-api emh-auth-api offline_access\";\r\n\r\n\t\tthis.clientId = appConfig.clientId;\r\n\t\tthis.dummyClientSecret = appConfig.clientSecret;\r\n\t\tthis.showDebugInformation = !isProduction;\r\n\t}\r\n}\r\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;","import { PreciseDate } from \"@e-tenant-hub/shared/utils\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nexport interface SerializableUserConnection {\r\n\talmostExpirationDate: string;\r\n\tconnectionDate: string;\r\n\texpirationDate: string;\r\n\textensionDate: string | null;\r\n\tuserConnectionId: string;\r\n}\r\n\r\nexport class UserConnection implements SerializableUserConnection {\r\n\tstatic readonly almostExpirationDateNbMinutes = 2;\r\n\r\n\tconstructor(\r\n\t\tpublic almostExpirationDate: string,\r\n\t\tpublic connectionDate: string,\r\n\t\tpublic expirationDate: string,\r\n\t\tpublic extensionDate: string | null,\r\n\t\tpublic userConnectionId: string\r\n\t) {}\r\n\r\n\tisExpired(): boolean {\r\n\t\tif (new PreciseDate(this.expirationDate) <= PreciseDate.current()) return true;\r\n\t\treturn false;\r\n\t}\r\n\r\n\tisAlmostExpired(): boolean {\r\n\t\tif (new PreciseDate(this.almostExpirationDate) <= PreciseDate.current()) return true;\r\n\t\treturn false;\r\n\t}\r\n\r\n\textends(userSessionDurationNbMinutes: number): void {\r\n\t\t// Current date\r\n\t\tconst extensionDate = UserConnection.getCurrentDate();\r\n\r\n\t\tconst expirationDate = UserConnection.getExpirationDate(userSessionDurationNbMinutes);\r\n\t\t// Expiration date - 5 minutes\r\n\t\tconst almostExpirationDate = UserConnection.getAlmostExpirationDate(expirationDate);\r\n\r\n\t\tthis.extensionDate = extensionDate.toISOString();\r\n\t\tthis.expirationDate = expirationDate.toISOString();\r\n\t\tthis.almostExpirationDate = almostExpirationDate.toISOString();\r\n\t}\r\n\r\n\tprivate static getCurrentDate(): PreciseDate {\r\n\t\treturn PreciseDate.current();\r\n\t}\r\n\r\n\tprivate static getExpirationDate(userSessionDurationNbMinutes: number): PreciseDate {\r\n\t\treturn PreciseDate.current().add(userSessionDurationNbMinutes, \"minute\");\r\n\t}\r\n\r\n\tprivate static getAlmostExpirationDate(expirationDate: PreciseDate): PreciseDate {\r\n\t\treturn expirationDate.subtract(UserConnection.almostExpirationDateNbMinutes, \"minute\");\r\n\t}\r\n\r\n\tstatic create(userSessionDurationNbMinutes: number): UserConnection {\r\n\t\t// Current date\r\n\t\tconst connectionDate = UserConnection.getCurrentDate();\r\n\t\t// Current date + 1 day\r\n\t\tconst expirationDate = UserConnection.getExpirationDate(userSessionDurationNbMinutes);\r\n\t\t// Expiration date - 5 minutes\r\n\t\tconst almostExpirationDate = UserConnection.getAlmostExpirationDate(expirationDate);\r\n\r\n\t\treturn new UserConnection(\r\n\t\t\talmostExpirationDate.toISOString(),\r\n\t\t\tconnectionDate.toISOString(),\r\n\t\t\texpirationDate.toISOString(),\r\n\t\t\tnull,\r\n\t\t\tuuidv4()\r\n\t\t);\r\n\t}\r\n\r\n\tstatic deserialize(userConnection: SerializableUserConnection): UserConnection | null {\r\n\t\tif (!userConnection) return null;\r\n\r\n\t\treturn new UserConnection(\r\n\t\t\tuserConnection.almostExpirationDate,\r\n\t\t\tuserConnection.connectionDate,\r\n\t\t\tuserConnection.expirationDate,\r\n\t\t\tuserConnection.extensionDate,\r\n\t\t\tuserConnection.userConnectionId\r\n\t\t);\r\n\t}\r\n\r\n\tstatic serialize(userConnection: UserConnection): SerializableUserConnection {\r\n\t\treturn userConnection;\r\n\t}\r\n}\r\n","import { Injectable, inject } from \"@angular/core\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\nimport { Router } from \"@angular/router\";\r\nimport { environment } from \"@e-tenant-hub/environments\";\r\nimport { AppConfig } from \"@e-tenant-hub/shared/config\";\r\nimport { CacheKeys, CacheStorageService, Logger } from \"@e-tenant-hub/shared/utils\";\r\nimport {\r\n\tAuthConfig,\r\n\tLoginOptions,\r\n\tOAuthErrorEvent,\r\n\tOAuthInfoEvent,\r\n\tOAuthService,\r\n\tOAuthStorage,\r\n\tOAuthSuccessEvent,\r\n} from \"angular-oauth2-oidc\";\r\nimport { JwksValidationHandler } from \"angular-oauth2-oidc-jwks\";\r\nimport { BehaviorSubject, Observable, ReplaySubject, delay, filter, map, switchMap, tap, timer } from \"rxjs\";\r\nimport { AuthorizationResult, User } from \"../types\";\r\nimport { CodeFlowAuthConfig } from \"../types/code-flow-auth-config\";\r\nimport { ROPCAuthConfig } from \"../types/ropc-auth-config\";\r\nimport { SerializableUserConnection, UserConnection } from \"../types/user-connection\";\r\n\r\nconst log = new Logger(\"AuthService\");\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class AuthService {\r\n\tprivate readonly cacheStorageService = inject(CacheStorageService);\r\n\tprivate readonly oauthService = inject(OAuthService);\r\n\tprivate readonly oauthStorage = inject(OAuthStorage);\r\n\tprivate readonly router = inject(Router);\r\n\r\n\tprivate _authorizationResult = new AuthorizationResult(false, false, false);\r\n\tprivate _isLoadDiscoveryDocumentDone = false;\r\n\tprivate _isIdentityConfigurationDone = false;\r\n\tprivate _isIdentityServerOnError = false;\r\n\tprivate _stateUrl?: string;\r\n\tprivate _useRopcFlow = false;\r\n\tprivate _userSessionDurationNbMinutes = 1440;\r\n\r\n\t// Subject\r\n\tprivate _isIdentityServerOnErrorSubject = new BehaviorSubject(this._isIdentityServerOnError);\r\n\tprivate _authorizationResultSubject = new ReplaySubject(1);\r\n\r\n\t// Observable\r\n\tisIdentityServerOnError$: Observable = this._isIdentityServerOnErrorSubject.pipe(\r\n\t\ttap((isIdentityServerOnError: boolean) => (this._isIdentityServerOnError = isIdentityServerOnError))\r\n\t);\r\n\tauthorizationResult$: Observable = this._authorizationResultSubject.asObservable();\r\n\r\n\tprivate _onRetryOnFail$ = this._isIdentityServerOnErrorSubject.pipe(\r\n\t\ttakeUntilDestroyed(),\r\n\t\tfilter((isIdentityServerOnError) => isIdentityServerOnError),\r\n\t\ttap(() => {\r\n\t\t\tthis.notifyAuthorizationResultChange();\r\n\t\t}),\r\n\t\tdelay(10000),\r\n\t\tswitchMap(() => {\r\n\t\t\treturn this.initialize();\r\n\t\t})\r\n\t);\r\n\r\n\tprivate _onAuthErrorEvents$: Observable = this.oauthService.events.pipe(\r\n\t\ttakeUntilDestroyed(),\r\n\t\tfilter((e) => e instanceof OAuthErrorEvent),\r\n\t\tmap((e) => e as OAuthErrorEvent),\r\n\t\ttap(async (e) => await this.handleErrorEvents(e))\r\n\t);\r\n\r\n\tprivate _onAuthSuccessEvents$: Observable = this.oauthService.events.pipe(\r\n\t\ttakeUntilDestroyed(),\r\n\t\tfilter((e) => e instanceof OAuthSuccessEvent),\r\n\t\tmap((e) => e as OAuthSuccessEvent),\r\n\t\ttap((e) => this.handleSuccessEvents(e))\r\n\t);\r\n\r\n\tprivate _onAuthInfoEvents$: Observable = this.oauthService.events.pipe(\r\n\t\ttakeUntilDestroyed(),\r\n\t\tfilter((e) => e instanceof OAuthInfoEvent),\r\n\t\tmap((e) => e as OAuthInfoEvent),\r\n\t\ttap((e) => this.handleInfoEvents(e))\r\n\t);\r\n\r\n\tprivate _onAuthSilentRefreshEvents$: Observable = this.oauthService.events.pipe(\r\n\t\ttakeUntilDestroyed(),\r\n\t\tfilter((e) => [\"silently_refreshed\", \"token_refreshed\"].indexOf(e.type) > -1),\r\n\t\tmap((e) => e as OAuthInfoEvent),\r\n\t\ttap(async () => await this.oauthService.loadUserProfile())\r\n\t);\r\n\r\n\t// 300 000ms --> every 5 minutes after 5 minutes\r\n\tprivate _onUserConnectionCheck$: Observable = timer(300000, 300000).pipe(\r\n\t\ttakeUntilDestroyed(),\r\n\t\tswitchMap(async () => this.checkAndAddUserSessionEndCheck())\r\n\t);\r\n\r\n\tget idToken(): string {\r\n\t\treturn this.oauthService.getIdToken();\r\n\t}\r\n\r\n\tget accessToken(): string {\r\n\t\treturn this.oauthService.getAccessToken();\r\n\t}\r\n\r\n\tget stateUrl(): string | undefined {\r\n\t\treturn this._stateUrl;\r\n\t}\r\n\r\n\tget user(): User {\r\n\t\treturn this._authorizationResult ? this.authorizationResult.user : new User();\r\n\t}\r\n\r\n\tget authorizationResult(): AuthorizationResult {\r\n\t\treturn this._authorizationResult;\r\n\t}\r\n\r\n\tget hasValidAccessToken(): boolean {\r\n\t\tif (!this.oauthService.hasValidAccessToken()) return false;\r\n\r\n\t\tconst accessTokenExpiration = this.oauthService.getAccessTokenExpiration();\r\n\t\tif (!accessTokenExpiration) return false;\r\n\r\n\t\treturn this.isInTheFuture(accessTokenExpiration);\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tthis.registerEvents();\r\n\t}\r\n\r\n\tconfigure(config: AppConfig): void {\r\n\t\t// This method should be called only once\r\n\t\tif (this._isIdentityConfigurationDone) return;\r\n\r\n\t\tconst authConfig: AuthConfig = config.useRopcFlow\r\n\t\t\t? new ROPCAuthConfig(config, environment.production)\r\n\t\t\t: new CodeFlowAuthConfig(config, environment.production);\r\n\r\n\t\tthis._userSessionDurationNbMinutes = config.userSessionNbMinutes;\r\n\t\tthis.oauthService.configure(authConfig);\r\n\t\tthis.oauthService.tokenValidationHandler = new JwksValidationHandler();\r\n\t\tthis._useRopcFlow = config.useRopcFlow;\r\n\r\n\t\tthis._isIdentityConfigurationDone = true;\r\n\t}\r\n\r\n\tasync initialize(): Promise {\r\n\t\ttry {\r\n\t\t\tawait this.loadDiscoveryDocument();\r\n\r\n\t\t\t//\r\n\t\t\tconst loginOption = new LoginOptions();\r\n\t\t\tloginOption.preventClearHashAfterLogin = false;\r\n\r\n\t\t\tlet isLoginSuccess = await this.oauthService.tryLogin(loginOption);\r\n\t\t\t// no valid access token --> try get one with silent refresh\r\n\t\t\tif (!this.hasValidAccessToken && this.oauthService.useSilentRefresh) {\r\n\t\t\t\tconsole.debug(\"No valid access token --> try to get a valid one through silent refresh\");\r\n\t\t\t\tisLoginSuccess = await this.silentRefresh(false);\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.hasValidAccessToken) {\r\n\t\t\t\tthis.notifyAuthorizationResultChange();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t// set up the automatic silent refresh\r\n\t\t\tif (isLoginSuccess) {\r\n\t\t\t\tawait this.oauthService.loadUserProfile();\r\n\t\t\t\t// set up the automatic silent refresh\r\n\t\t\t\tthis.oauthService.setupAutomaticSilentRefresh();\r\n\t\t\t} else {\r\n\t\t\t\tthis.notifyAuthorizationResultChange();\r\n\t\t\t}\r\n\r\n\t\t\tthis.tryRegisterRedirectFromUrl();\r\n\r\n\t\t\t// notify that identity is up\r\n\t\t\tthis._isIdentityServerOnErrorSubject.next(false);\r\n\r\n\t\t\tawait this.ensureUserConnection();\r\n\t\t\tawait this.checkAndAddUserSessionEndCheck();\r\n\r\n\t\t\treturn true;\r\n\t\t} catch (error: unknown) {\r\n\t\t\tif (!(error instanceof OAuthErrorEvent)) {\r\n\t\t\t\tthis._isIdentityServerOnErrorSubject.next(true);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tconst errorReason: OAuthErrorEventParams | null = error?.params;\r\n\t\t\tif (!errorReason || errorReason.error !== \"login_required\") {\r\n\t\t\t\tthis._isIdentityServerOnErrorSubject.next(true);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t// Code Flow\r\n\tlogin(targetUrl?: string): void {\r\n\t\tthis.oauthService.initCodeFlow(targetUrl || this.router.url);\r\n\t}\r\n\r\n\tasync tryForceLogin(targetUrl?: string): Promise {\r\n\t\tlet customRedirectUri: string | undefined = targetUrl || this.router.url;\r\n\t\tcustomRedirectUri = customRedirectUri !== \"/\" ? customRedirectUri : undefined;\r\n\t\tawait this.oauthService.initLoginFlow(customRedirectUri);\r\n\t}\r\n\r\n\tasync logout(): Promise {\r\n\t\ttry {\r\n\t\t\tthis.cacheStorageService.removeCacheValue(CacheKeys.USER_CONNECTION);\r\n\t\t\tawait this.oauthService.revokeTokenAndLogout();\r\n\t\t} catch (e: unknown) {\r\n\t\t\tconsole.error(e);\r\n\t\t}\r\n\t}\r\n\r\n\t// Password Flow\r\n\tasync ropcLogin(userName: string, password: string): Promise {\r\n\t\ttry {\r\n\t\t\tawait this.oauthService.fetchTokenUsingPasswordFlowAndLoadUserProfile(userName, password);\r\n\t\t\treturn true;\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(error);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tasync ropcLogout(): Promise {\r\n\t\ttry {\r\n\t\t\tawait this.oauthService.logOut(true);\r\n\t\t} catch (e: unknown) {\r\n\t\t\tconsole.error(e);\r\n\t\t}\r\n\t}\r\n\r\n\tasync ensureUserConnection(force = false): Promise {\r\n\t\tif (!this.hasValidAccessToken) return;\r\n\r\n\t\tlet userConnection = this.getUserConnectionFromCache();\r\n\r\n\t\t// Do nothings\r\n\t\tif (!!userConnection && !force) {\r\n\t\t\tlog.debug(\"User connection info already added\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Extends\r\n\t\tif (!!userConnection && force) {\r\n\t\t\tuserConnection.extends(this._userSessionDurationNbMinutes);\r\n\t\t\tthis.cacheStorageService.saveCache(CacheKeys.USER_CONNECTION, UserConnection.serialize(userConnection));\r\n\t\t\tlog.debug(\"Extends user connection\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tuserConnection = UserConnection.create(this._userSessionDurationNbMinutes);\r\n\t\tthis.cacheStorageService.saveCache(CacheKeys.USER_CONNECTION, UserConnection.serialize(userConnection));\r\n\t\tlog.info(\"User connection info added\", userConnection);\r\n\t}\r\n\r\n\trefreshToken() {\r\n\t\tthis.oauthService.refreshToken();\r\n\t}\r\n\r\n\timpersonateThirdParty(\r\n\t\tcurrentRentalId: string,\r\n\t\tfamilyName: string,\r\n\t\tgivenName: string,\r\n\t\troles: string[],\r\n\t\tisImpersonate: boolean,\r\n\t\tisRegistered: boolean,\r\n\t\trentalIds: string[],\r\n\t\tuserName: string,\r\n\t\tthirdPartyId: string\r\n\t): void {\r\n\t\tthis.authorizationResult.user.impersonateThirdParty(\r\n\t\t\tcurrentRentalId,\r\n\t\t\tfamilyName,\r\n\t\t\tgivenName,\r\n\t\t\troles,\r\n\t\t\tisImpersonate,\r\n\t\t\tisRegistered,\r\n\t\t\trentalIds,\r\n\t\t\tuserName,\r\n\t\t\tthirdPartyId\r\n\t\t);\r\n\t\tthis.notifyAuthorizationResultChange();\r\n\t}\r\n\r\n\t// Private function\r\n\tprivate async silentRefresh(forceLoginIfFailed = true): Promise {\r\n\t\ttry {\r\n\t\t\tawait this.oauthService.silentRefresh();\r\n\r\n\t\t\treturn true;\r\n\t\t} catch (silentRefreshError: any) {\r\n\t\t\tif (!forceLoginIfFailed) {\r\n\t\t\t\tconsole.debug(\"Silent refresh failed\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\t// Subset of situations from https://openid.net/specs/openid-connect-core-1_0.html#AuthError\r\n\t\t\t// Only the ones where it's reasonably sure that sending the\r\n\t\t\t// user to the IdServer will help.\r\n\t\t\tconst errorResponsesRequiringUserInteraction = [\r\n\t\t\t\t\"interaction_required\",\r\n\t\t\t\t\"login_required\",\r\n\t\t\t\t\"account_selection_required\",\r\n\t\t\t\t\"consent_required\",\r\n\t\t\t];\r\n\r\n\t\t\tif (\r\n\t\t\t\tsilentRefreshError &&\r\n\t\t\t\tsilentRefreshError.reason &&\r\n\t\t\t\tsilentRefreshError.reason.params &&\r\n\t\t\t\terrorResponsesRequiringUserInteraction.indexOf(silentRefreshError.reason.params.error) >= 0\r\n\t\t\t) {\r\n\t\t\t\t// 3. ASK FOR LOGIN:\r\n\t\t\t\t// At this point we know for sure that we have to ask the\r\n\t\t\t\t// user to log in, so we redirect them to the IdServer to\r\n\t\t\t\t// enter credentials.\r\n\t\t\t\t// Enable this to ALWAYS force a user to login.\r\n\t\t\t\tif (this._useRopcFlow) return false;\r\n\t\t\t\t// Enable this to ALWAYS force a user to login.\r\n\t\t\t\tthis.login();\r\n\t\t\t\t//\r\n\t\t\t\t// Instead, we'll now do this:\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t// We can't handle the truth, just pass on the problem to the\r\n\t\t\t// next handler.\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate tryRegisterRedirectFromUrl(): void {\r\n\t\tif (!this.oauthService.state || this.oauthService.state === \"undefined\" || this.oauthService.state === \"null\")\r\n\t\t\treturn;\r\n\r\n\t\tlet currentStateUrl = this.oauthService.state;\r\n\r\n\t\tif (!currentStateUrl.startsWith(\"/\")) currentStateUrl = decodeURIComponent(currentStateUrl);\r\n\r\n\t\tthis._stateUrl = currentStateUrl;\r\n\t}\r\n\r\n\tprivate buildUser(): User {\r\n\t\tconst claims = this.oauthService.getIdentityClaims();\r\n\r\n\t\tif (!claims) return new User();\r\n\r\n\t\tconst user = new User({\r\n\t\t\tid: claims[\"sub\"],\r\n\t\t\tfamilyName: claims[\"family_name\"],\r\n\t\t\tgivenName: claims[\"given_name\"],\r\n\t\t\troles: claims[\"role\"],\r\n\t\t\tthirdPartyId: claims[\"third_party_id\"],\r\n\t\t\tusername: claims[\"user_name\"],\r\n\t\t});\r\n\r\n\t\tif (claims[\"rental_id\"] && claims[\"rental_id\"].length !== 0) {\r\n\t\t\tuser.currentRentalId = Array.isArray(claims[\"rental_id\"]) ? claims[\"rental_id\"][0] : claims[\"rental_id\"];\r\n\t\t}\r\n\t\treturn user;\r\n\t}\r\n\r\n\tprivate buildAuthorizationResult(): AuthorizationResult {\r\n\t\tif (this._isIdentityServerOnError) {\r\n\t\t\treturn new AuthorizationResult(true, true, false);\r\n\t\t}\r\n\r\n\t\tconst isAuthenticated = this.hasValidAccessToken;\r\n\r\n\t\tif (!isAuthenticated) {\r\n\t\t\treturn new AuthorizationResult(true, false, false);\r\n\t\t}\r\n\r\n\t\tconst user = this.buildUser();\r\n\t\treturn new AuthorizationResult(true, false, true, user);\r\n\t}\r\n\r\n\tprivate notifyAuthorizationResultChange(): void {\r\n\t\tthis._authorizationResult = this.buildAuthorizationResult();\r\n\t\tthis._authorizationResultSubject.next(this._authorizationResult);\r\n\t}\r\n\r\n\tprivate handleSuccessEvents(e: OAuthSuccessEvent): void {\r\n\t\tconsole.debug(e);\r\n\r\n\t\tif (e.type === \"user_profile_loaded\") {\r\n\t\t\tthis.notifyAuthorizationResultChange();\r\n\t\t}\r\n\t}\r\n\tprivate handleInfoEvents(e: OAuthInfoEvent): void {\r\n\t\tconsole.debug(e);\r\n\t}\r\n\r\n\tprivate async handleErrorEvents(e: OAuthErrorEvent): Promise {\r\n\t\tconsole.error(e);\r\n\r\n\t\tif (e.type === \"user_profile_load_error\") {\r\n\t\t\tthis.forceRemoveTokens();\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate forceRemoveTokens(): void {\r\n\t\tthis.oauthStorage.removeItem(\"refresh_token\");\r\n\t\tthis.oauthStorage.removeItem(\"access_token\");\r\n\t\tthis.oauthStorage.removeItem(\"id_token\");\r\n\t}\r\n\r\n\tprivate async loadDiscoveryDocument(): Promise {\r\n\t\tif (this._isLoadDiscoveryDocumentDone) return;\r\n\r\n\t\tawait this.oauthService.loadDiscoveryDocument();\r\n\t\tthis._isLoadDiscoveryDocumentDone = true;\r\n\t}\r\n\r\n\tprivate registerEvents(): void {\r\n\t\tthis._onAuthErrorEvents$.subscribe();\r\n\t\tthis._onAuthInfoEvents$.subscribe();\r\n\t\tthis._onAuthSuccessEvents$.subscribe();\r\n\t\tthis._onRetryOnFail$.subscribe();\r\n\t\tthis._onAuthSilentRefreshEvents$.subscribe();\r\n\t\tthis._onUserConnectionCheck$.subscribe();\r\n\t}\r\n\r\n\tprivate isInTheFuture(value: number): boolean {\r\n\t\tconst duration: number = value - new Date().getTime();\r\n\t\treturn duration > 0;\r\n\t}\r\n\r\n\tprivate async checkAndAddUserSessionEndCheck(): Promise {\r\n\t\tconst userConnection = this.getUserConnectionFromCache();\r\n\t\tawait this.checkUserSessionEnd(userConnection);\r\n\t\treturn userConnection;\r\n\t}\r\n\r\n\tprivate getUserConnectionFromCache(): UserConnection | null {\r\n\t\tconst userConnection = this.cacheStorageService.retrieveCacheValue(\r\n\t\t\tCacheKeys.USER_CONNECTION\r\n\t\t) as SerializableUserConnection;\r\n\t\treturn UserConnection.deserialize(userConnection);\r\n\t}\r\n\r\n\tprivate async checkUserSessionEnd(userConnection: UserConnection | null): Promise {\r\n\t\tif (!userConnection) {\r\n\t\t\tlog.warn(\"User connection info is empty\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (userConnection.isExpired()) {\r\n\t\t\tlog.debug(\"User session is no more active\");\r\n\t\t\tawait this.logout();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (userConnection.isAlmostExpired()) {\r\n\t\t\tlog.info(`User session will expire in about ${UserConnection.almostExpirationDateNbMinutes} minutes`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlog.debug(\"User session is still active\");\r\n\t}\r\n}\r\n\r\ntype OAuthErrorEventParams = {\r\n\terror?: string;\r\n};\r\n","import { HttpClient, HttpHeaders, HttpParams } from \"@angular/common/http\";\r\nimport { Injectable, inject } from \"@angular/core\";\r\nimport { APP_CONFIG } from \"@e-tenant-hub/shared/config\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nexport interface IRequestOptions {\r\n\theaders?: HttpHeaders;\r\n\tobserve?: \"body\";\r\n\tparams?: HttpParams;\r\n\treportProgress?: boolean;\r\n\tresponseType?: \"json\";\r\n\twithCredentials?: boolean;\r\n\tbody?: unknown;\r\n}\r\n\r\n@Injectable()\r\nexport class AuthHttpClient {\r\n\tprivate readonly appConfig = inject(APP_CONFIG);\r\n\tprivate readonly httpClient = inject(HttpClient);\r\n\r\n\t/**\r\n\t * HTTP GET request\r\n\t * @param endPoint end point of the auth api\r\n\t * @param options options request (ex: header,body, params, etc..)\r\n\t * @returns {Observable}\r\n\t */\r\n\tget(endPoint: string, options?: IRequestOptions): Observable {\r\n\t\treturn this.httpClient.get(this.appConfig.authApiRoot + endPoint, options);\r\n\t}\r\n\r\n\t/**\r\n\t * HTTP POST request\r\n\t * @param endPoint end point of the patient api\r\n\t * @param params body of request\r\n\t * @param options options request (ex: header,body, params, etc..)\r\n\t * @returns {Observable}\r\n\t */\r\n\tpost(endPoint: string, params: object, options?: IRequestOptions): Observable {\r\n\t\treturn this.httpClient.post(this.appConfig.authApiRoot + endPoint, params, options);\r\n\t}\r\n\r\n\t/**\r\n\t * HTTP PUT request\r\n\t * @param endPoint end point of the patient api\r\n\t * @param params body of request\r\n\t * @param options options request (ex: header,body, params, etc..)\r\n\t * @returns {Observable}\r\n\t */\r\n\tput(endPoint: string, params: object, options?: IRequestOptions): Observable {\r\n\t\treturn this.httpClient.put(this.appConfig.authApiRoot + endPoint, params, options);\r\n\t}\r\n\r\n\t/**\r\n\t * HTTP DELETE request\r\n\t * @param endPoint\r\n\t * @param options\r\n\t * @returns {Observable}\r\n\t */\r\n\tdelete(endPoint: string, options?: IRequestOptions): Observable {\r\n\t\treturn this.httpClient.delete(this.appConfig.authApiRoot + endPoint, options);\r\n\t}\r\n}\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from \"@angular/common/http\";\r\nimport { Injectable, inject } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { AuthService } from \"../services\";\r\n\r\n@Injectable()\r\nexport class AuthInterceptor implements HttpInterceptor {\r\n\tprivate readonly authService = inject(AuthService);\r\n\r\n\tintercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n\t\tif (this.authService.hasValidAccessToken) {\r\n\t\t\trequest = request.clone({\r\n\t\t\t\theaders: request.headers.set(\"Authorization\", \"Bearer \" + this.authService.accessToken),\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn next.handle(request);\r\n\t}\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { HTTP_INTERCEPTORS, HttpClient } from \"@angular/common/http\";\r\nimport { APP_INITIALIZER, NgModule } from \"@angular/core\";\r\nimport { AppConfigService, ConfigModule } from \"@e-tenant-hub/shared/config\";\r\nimport { UtilsModule } from \"@e-tenant-hub/shared/utils\";\r\nimport { OAuthModule, OAuthStorage, ValidationHandler } from \"angular-oauth2-oidc\";\r\nimport { JwksValidationHandler } from \"angular-oauth2-oidc-jwks\";\r\nimport { AuthHttpClient } from \"./http-clients\";\r\nimport { AuthInterceptor } from \"./interceptors\";\r\nimport { AuthService } from \"./services\";\r\n\r\nexport function storageFactory(): OAuthStorage {\r\n\treturn localStorage;\r\n}\r\nconst initializeAuthFn =\r\n\t(configService: AppConfigService, authService: AuthService): (() => Promise) =>\r\n\t() => {\r\n\t\tauthService.configure(configService.appConfig);\r\n\t\treturn authService.initialize();\r\n\t};\r\n\r\n@NgModule({\r\n\timports: [CommonModule, ConfigModule, UtilsModule, OAuthModule.forRoot()],\r\n\tproviders: [\r\n\t\t{ provide: ValidationHandler, useClass: JwksValidationHandler },\r\n\t\t{ provide: OAuthStorage, useFactory: storageFactory },\r\n\t\t{\r\n\t\t\tprovide: APP_INITIALIZER,\r\n\t\t\tuseFactory: initializeAuthFn,\r\n\t\t\tmulti: true,\r\n\t\t\tdeps: [AppConfigService, AuthService],\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: AuthHttpClient,\r\n\t\t\tdeps: [HttpClient],\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: HTTP_INTERCEPTORS,\r\n\t\t\tuseClass: AuthInterceptor,\r\n\t\t\tmulti: true,\r\n\t\t},\r\n\t],\r\n})\r\nexport class AuthModule {}\r\n","import { Injectable, inject } from \"@angular/core\";\r\nimport {\r\n\tActivatedRouteSnapshot,\r\n\tCanActivateFn,\r\n\tParams,\r\n\tRouterStateSnapshot,\r\n\tUrlTree,\r\n\tcreateUrlTreeFromSnapshot,\r\n} from \"@angular/router\";\r\nimport { Observable, map } from \"rxjs\";\r\nimport { AuthService } from \"../services\";\r\nimport { AuthorizationResult } from \"../types\";\r\n\r\nexport const authInGuard: CanActivateFn = (\r\n\troute: ActivatedRouteSnapshot,\r\n\tstate: RouterStateSnapshot\r\n): Observable => {\r\n\treturn inject(PermissionsService).isAuthenticated(route, state);\r\n};\r\n\r\nexport const rolesInGuard: CanActivateFn = (\r\n\troute: ActivatedRouteSnapshot,\r\n\tstate: RouterStateSnapshot\r\n): Observable => {\r\n\treturn inject(PermissionsService).hasInRoles(route, state);\r\n};\r\n\r\nexport const impersonationForThirdPartyGuard: CanActivateFn = (\r\n\troute: ActivatedRouteSnapshot,\r\n\tstate: RouterStateSnapshot\r\n): Observable | boolean | UrlTree => {\r\n\treturn inject(PermissionsService).isImpersonatedAsThirdParty(route, state);\r\n};\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class PermissionsService {\r\n\tprivate readonly unauthorizedUrl = \"/unauthorized\";\r\n\tprivate readonly serviceUnreachableUrl = \"/service-unreachable\";\r\n\tprivate readonly forbiddenUrl = \"/forbidden\";\r\n\tprivate readonly impersonationUrl = \"/choose-account\";\r\n\tprivate readonly authService = inject(AuthService);\r\n\r\n\tisAuthenticated(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n\t\treturn this.authService.authorizationResult$.pipe(\r\n\t\t\tmap((authorizationResult: AuthorizationResult) => {\r\n\t\t\t\tif (!authorizationResult.canAccessAuthorizedContent()) {\r\n\t\t\t\t\tconsole.debug(\r\n\t\t\t\t\t\t`Unauthorized to access ${state.url} | User not authenticated --> redirection to unauthorized page`\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn this.redirectToUnauthorizedPage(route, state.url);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\thasInRoles(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n\t\treturn this.authService.authorizationResult$.pipe(\r\n\t\t\tmap((authorizationResult: AuthorizationResult): boolean | UrlTree => {\r\n\t\t\t\tif (!authorizationResult.canAccessAuthorizedContent()) {\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t`Unauthorized to access ${state.url} | User not authenticated --> redirection to unauthorized page`\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn this.redirectToUnauthorizedPage(route, state.url);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!route.data || !authorizationResult.hasRoles(route.data[\"roles\"])) {\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t`Forbidden to access ${state.url} | current scopes not allowed --> redirection to forbidden page`\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn this.redirectToForbiddenPage(route, state.url);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tisImpersonatedAsThirdParty(\r\n\t\troute: ActivatedRouteSnapshot,\r\n\t\tstate: RouterStateSnapshot\r\n\t): Observable {\r\n\t\treturn this.authService.authorizationResult$.pipe(\r\n\t\t\tmap((authorizationResult): boolean | UrlTree => {\r\n\t\t\t\tif (!authorizationResult.canAccessAuthorizedContent()) {\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t`Unauthorized to access ${state.url} | User not authenticated --> redirection to unauthorized page`\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn this.redirectToUnauthorizedPage(route, state.url);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (authorizationResult.user.hasAdminRole && !authorizationResult.user.isImpersonated) {\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t`Wrong impersonation state to access ${state.url} | User not impersonated --> redirection to impersonation page`\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn this.redirectToImpersonationPage(route);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tprivate redirectToUnauthorizedPage(route: ActivatedRouteSnapshot, returnUrl: string): UrlTree {\r\n\t\treturn this.createUrlTree(route, [this.unauthorizedUrl], { returnUrl: returnUrl });\r\n\t}\r\n\r\n\tprivate redirectToForbiddenPage(route: ActivatedRouteSnapshot, returnUrl: string): UrlTree {\r\n\t\treturn this.createUrlTree(route, [this.forbiddenUrl], { returnUrl: returnUrl });\r\n\t}\r\n\r\n\tprivate redirectToImpersonationPage(route: ActivatedRouteSnapshot): UrlTree {\r\n\t\treturn this.createUrlTree(route, [this.impersonationUrl]);\r\n\t}\r\n\r\n\tprivate createUrlTree(\r\n\t\troute: ActivatedRouteSnapshot,\r\n\t\tcommands: string[],\r\n\t\tqueryParams?: Params | null | undefined\r\n\t): UrlTree {\r\n\t\treturn createUrlTreeFromSnapshot(route, commands, queryParams);\r\n\t}\r\n}\r\n"],"mappings":"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ACX,UAAW,WACX,UAAW,OACX,UAAW,OACX,UAAW,EACX,UAAW,MACX,UAAW,WACX,QAAS,WACT,SAAU,OACV,SAAU,GACV,SAAU,WACV,SAAU,WACV,SAAU,WACV,UAAW,OACX,UAAW,WACX,UAAW,OACX,UAAW,EACX,UAAW,MACX,UAAW,WACX,UAAW,WACX,UAAW,OACX,UAAW,WACX,UAAW,MACX,UAAW,EACX,UAAW,WACX,UAAW,WACX,UAAW,WACX,UAAW,WACX,UAAW,GACX,UAAW,OACX,UAAW,MACX,UAAW,MACX,UAAW,OACX,UAAW,OACX,UAAW,WACX,UAAW,OACX,UAAW,WACX,UAAW,WACX,UAAW,WACX,UAAW,OACX,UAAW,OACX,UAAW,WACX,UAAW,MACX,UAAW,WACX,UAAW,WACX,UAAW,GACX,UAAW,WACX,UAAW,WACX,UAAW,WACX,UAAW,WACX,UAAW,OACX,UAAW,EACX,UAAW,MACX,UAAW,WACX,UAAW,MACb,EAAG,CACD,EAAK,IACL,QAAS,EACT,QAAS,SACT,QAAS,MACT,QAAS,MACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,SAAU,MACV,SAAU,SACV,SAAU,SACV,SAAU,MACV,SAAU,EACV,SAAU,IACV,OAAQ,SACR,QAAS,SACT,QAAS,EACT,QAAS,SACT,QAAS,SACT,QAAS,MACT,QAAS,MACT,QAAS,IACT,QAAS,EACT,QAAS,IACT,SAAU,SACV,SAAU,MACV,SAAU,MACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,MACV,SAAU,MACV,SAAU,SACV,SAAU,IACV,SAAU,SACV,SAAU,SACV,SAAU,EACV,SAAU,SACV,SAAU,SACV,SAAU,EACV,SAAU,MACV,SAAU,SACV,SAAU,IACV,SAAU,MACV,SAAU,SACV,SAAU,SACV,SAAU,IACV,SAAU,SACV,SAAU,EACV,SAAU,MACV,SAAU,SACV,SAAU,IACV,SAAU,SACV,SAAU,MACV,SAAU,SACV,SAAU,MACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,EACV,SAAU,KACZ,EAAG,C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A,EAAE,UAAW,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,SAAS,EAAGA,EAAE,WAAY,SAAS,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,SAAS,EAAGA,EAAE,UAAW,UAAU,EAAGA,EAAE,UAAW,UAAU,EAAGA,EAAE,UAAW,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,SAAS,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,UAAW,UAAU,EAAGA,EAAE,UAAW,SAAS,EAAGA,EAAE,UAAW,UAAU,EAAGA,EAAE,UAAW,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,SAAS,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,SAAS,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,UAAW,SAAS,EAAGA,EAAE,UAAW,UAAU,EAAGA,EAAE,UAAW,UAAU,EAAGA,EAAE,UAAW,UAAU,EAAGA,EAAE,UAAW,UAAU,EAAGA,EAAE,UAAW,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,SAAS,EAAGA,EAAE,WAAY,SAAS,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,UAAU,EAAGA,EAAE,WAAY,SAAS,EAAGA,EAAE,WAAY,UAAU,EAAGA,E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","names":["require_package","__commonJSMin","exports","module","require_jsrsasign","__commonJSMin","exports","navigator","window","VERSION","VERSION_FULL","CryptoJS","g","a","b","j","n","p","o","l","h","t","q","s","r","m","d","c","i","w","x","v","u","f","k","e","y","z","A","B","C","D","E","F","T","ea","G","H","I","J","X","K","Y","L","Z","M","$","N","aa","O","ba","P","ca","Q","U","R","S","V","W","fa","da","b64map","b64pad","hex2b64","b64tohex","int2char","b64toBA","dbits","canary","j_lm","BigInteger","nbi","am1","am2","am3","BI_FP","BI_RM","BI_RC","rr","vv","intAt","bnpCopyTo","bnpFromInt","nbv","bnpFromString","bnpClamp","bnToString","bnNegate","bnAbs","bnCompareTo","nbits","bnBitLength","bnpDLShiftTo","bnpDRShiftTo","bnpLShiftTo","bnpRShiftTo","bnpSubTo","bnpMultiplyTo","bnpSquareTo","bnpDivRemTo","bnMod","Classic","cConvert","cRevert","cReduce","cMulTo","cSqrTo","bnpInvDigit","Montgomery","montConvert","montRevert","montReduce","montSqrTo","montMulTo","bnpIsEven","bnpExp","bnModPowInt","bnClone","bnIntValue","bnByteValue","bnShortValue","bnpChunkSize","bnSigNum","bnpToRadix","bnpFromRadix","bnpFromNumber","op_or","bnToByteArray","bnEquals","bnMin","bnMax","bnpBitwiseTo","op_and","bnAnd","bnOr","op_xor","bnXor","op_andnot","bnAndNot","bnNot","bnShiftLeft","bnShiftRight","lbit","bnGetLowestSetBit","cbit","bnBitCount","bnTestBit","bnpChangeBit","bnSetBit","bnClearBit","bnFlipBit","bnpAddTo","bnAdd","bnSubtract","bnMultiply","bnSquare","bnDivide","bnRemainder","bnDivideAndRemainder","bnpDMultiply","bnpDAddOffset","NullExp","nNop","nMulTo","nSqrTo","bnPow","bnpMultiplyLowerTo","bnpMultiplyUpperTo","Barrett","barrettConvert","barrettRevert","barrettReduce","barrettSqrTo","barrettMulTo","bnModPow","bnGCD","bnpModInt","bnModInverse","lowprimes","lplim","bnIsProbablePrime","bnpMillerRabin","Arcfour","ARC4init","ARC4next","prng_newstate","rng_psize","rng_state","rng_pool","rng_pptr","rng_seed_int","rng_seed_time","crypto","ua","rng_get_byte","rng_get_bytes","SecureRandom","parseBigInt","RSAKey","RSASetPublic","RSADoPublic","RSASetPrivate","RSASetPrivateEx","RSAGenerate","RSADoPrivate","ECFieldElementFp","feFpEquals","feFpToBigInteger","feFpNegate","feFpAdd","feFpSubtract","feFpMultiply","feFpSquare","feFpDivide","ECPointFp","pointFpGetX","pointFpGetY","pointFpEquals","pointFpIsInfinity","pointFpNegate","pointFpAdd","pointFpTwice","pointFpMultiply","pointFpMultiplyTwo","ECCurveFp","curveFpGetQ","curveFpGetA","curveFpGetB","curveFpEquals","curveFpGetInfinity","curveFpFromBigInteger","curveFpDecodePointHex","jsonParse","KJUR","twoscompl","hextopem","utf8tohex","extendClass","oidtohex","stohex","ASN1HEX","bitstrtoint","hextooid","hextorstr","hextoutf8","ucs2hextoutf8","iso88591hextoutf8","bitstrtobinstr","KEYUTIL","namearraytobinstr","X509","pemtohex","iptohex","rstrtohex","stoBA","BAtos","BAtohex","stob64","stob64u","b64tob64u","b64utos","b64utob64","hextob64u","b64utohex","utf8tob64u","b64utoutf8","uricmptohex","encodeURIComponentAll","hextouricmp","utf8tob64","b64toutf8","iso88591hextoutf8hex","hextob64","hextob64nl","foldnl","b64nltohex","b64topem","pemtob64","hextoArrayBuffer","ArrayBuffertohex","zulutomsec","timetogen","msectozulu","zulutosec","zulutodate","datetozulu","ipv6tohex","hextoipv6","hextoip","ipprefixlen","ipnetmask","newline_toUnix","newline_toDos","ishex","isBase64URLDot","hextoposhex","intarystrtohex","strdiffidx","strpad","inttohex","inttobitstr","binstrtobitstr","aryval","_RE_HEXDECONLY","_zeroPaddingOfSignature","pss_mgf1_str","_rsasign_getAlgNameAndHashFromHexDisgestInfo","ac","ab","X509CRL","AppConfig","constructor","init","apiRoot","authApiRoot","appCompanyName","appDisplayName","appName","appVersion","appVersionBuild","appVersionName","authority","clientId","clientSecret","enableAdminSolicitationReading","enableIntegrationMode","hostHub","production","sumUpAffiliateKey","sumUpCallbackPath","sumUpSchemeUrl","systemPayPaymentUrl","useRopcFlow","userSessionNbMinutes","Object","assign","createAppConfigFromEnvironment","environment","require","version","JSON","parse","AppConfigService","initAppConfig","of","AppConfig","createAppConfigFromEnvironment","pipe","tap","iniAppConfig","appConfig","factory","ɵfac","providedIn","_AppConfigService","APP_CONFIG","InjectionToken","initializeConfigFn","configService","initAppConfig","ConfigModule","provide","APP_INITIALIZER","useFactory","multi","deps","AppConfigService","inject","appConfig","imports","CommonModule","_ConfigModule","takeUntilDestroyed","destroyRef","assertInInjectionContext","inject","DestroyRef","destroyed$","Observable","observer","source","takeUntil","Roles","_Roles","admin","legalPerson","naturalPerson","NullValidationHandler","validationParams","OAuthModuleConfig","DateTimeProvider","SystemDateTimeProvider","_SystemDateTimeProvider","ɵSystemDateTimeProvider_BaseFactory","t","ɵɵgetInheritedFactory","ɵɵdefineInjectable","LoginOptions","OAuthLogger","OAuthStorage","MemoryStorage","_MemoryStorage","key","data","OAuthEvent","type","OAuthSuccessEvent","info","OAuthInfoEvent","OAuthErrorEvent","reason","params","b64DecodeUnicode","str","base64","c","base64UrlEncode","AuthConfig","json","uri","WebHttpUrlEncodingCodec","k","v","ValidationHandler","AbstractValidationHandler","__async","hashAlg","tokenHash","leftMostHalf","atHash","claimsAtHash","jwtHeader","alg","UrlHelperService","_UrlHelperService","customHashFragment","hash","questionMarkPosition","queryString","data","pair","separatorIndex","escapedKey","escapedValue","key","value","pairs","i","t","ɵɵdefineInjectable","digestLength","blockSize","K","hashBlocks","w","p","pos","len","a","b","d","e","f","g","u","j","t1","t2","Hash","dataLength","dataPos","out","bytesHashed","left","bitLenHi","bitLenLo","padLength","from","hash","data","h","Hash","digest","hkdfSalt","digestLength","HashHandler","decodeUTF8","s","d","b","i","encodeUTF8","arr","DefaultHashHandler","_DefaultHashHandler","valueToHash","algorithm","__async","hash","byteArray","result","e","buffer","t","ɵɵdefineInjectable","OAuthService","_OAuthService","AuthConfig","ngZone","http","storage","tokenValidationHandler","config","urlHelper","logger","crypto","document","dateTimeService","Subject","ua","test","filter","params","listenTo","noPrompt","shouldRunSilentRefresh","tap","debounceTime","options","state","args","url","errors","httpsCheck","issuerCheck","lcUrl","description","expiration","storedAt","timeout","of","OAuthInfoEvent","delay","now","delta","duration","maxTimeoutValue","fullUrl","resolve","reject","doc","OAuthErrorEvent","jwks","event","OAuthSuccessEvent","err","userName","password","headers","HttpHeaders","response","info","existingClaims","parameters","grantType","HttpParams","WebHttpUrlEncodingCodec","header","key","tokenResponse","switchMap","from","map","message","claims","existingIframe","iframe","redirectUri","first","success","race","windowRef","checkForPopupClosedTimer","tryLogin","cleanup","checkForPopupClosed","storageListener","listener","height","width","left","top","expectedPrefix","prefixedMessage","origin","issuer","sessionState","loginHint","customRedirectUri","that","nonce","seperationChar","scope","challenge","verifier","additionalState","addParams","error","tokenParams","accessToken","refreshToken","expiresIn","grantedScopes","customParameters","expiresInMilliSeconds","expiresAt","value","queryString","querySource","parts","code","href","nonceInState","userState","requestedRoute","PKCEVerifier","reason","idToken","idx","savedNonce","defaultSkewMsc","skipNonceCheck","tokenParts","headerBase64","headerJson","b64DecodeUnicode","claimsBase64","claimsJson","v","issuedAtMSec","expiresAtMSec","clockSkewInMSec","validationParams","atHashValid","atHashCheckEnabled","scopes","base64data","requestedProperty","noRedirectToLogoutUrl","id_token","customParam","logoutUrl","postLogoutUrl","silentRefreshFrame","sessionCheckFrame","unreserved","size","id","bytes","x","base64UrlEncode","challengeRaw","foundParameters","recognizedParameter","ignoreCorsIssues","revokeEndpoint","revokeAccessToken","revokeRefreshToken","revokationParams","catchError","throwError","combineLatest","res","ɵɵinject","NgZone","HttpClient","OAuthStorage","ValidationHandler","UrlHelperService","OAuthLogger","DOCUMENT","DateTimeProvider","OAuthResourceServerErrorHandler","OAuthNoopResourceServerErrorHandler","DefaultOAuthInterceptor","_DefaultOAuthInterceptor","oAuthService","errorHandler","moduleConfig","u","req","next","merge","token","take","mergeMap","OAuthModuleConfig","createDefaultLogger","createDefaultStorage","MemoryStorage","provideOAuthClient","validationHandlerClass","NullValidationHandler","makeEnvironmentProviders","HTTP_INTERCEPTORS","SystemDateTimeProvider","OAuthModule","_OAuthModule","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","AUTH_CONFIG","InjectionToken","rs","JwksValidationHandler","AbstractValidationHandler","params","retry","kid","keys","key","alg","k","kty","matchingKeys","error","loadedKeys","_","keyObj","validationOptions","valueToHash","algorithm","result","byteArrayAsString","hexString","i","hexDigit","num","AuthorizationResult","constructor","isIdentityServerConfigured","isIdentityServerOnError","isAuthenticated","user","hasRoles","roles","canAccessAuthorizedContent","Impersonation","constructor","init","currentRentalId","familyName","givenName","isImpersonated","isLegalPerson","isRegistered","rentalIds","username","thirdPartyId","Object","assign","saveInsideCache","jsonData","JSON","stringify","localStorage","setItem","CacheKeys","IMPERSONATION","resetImpersonationInsideCache","impersonation","retrieveFromCache","getItem","parse","User","constructor","init","isAuthenticated","_impersonation","Impersonation","retrieveFromCache","Object","assign","familyName","isImpersonated","_familyName","givenName","_givenName","currentRentalId","_currentRentalId","rentalId","rentalIds","thirdPartyId","_thirdPartyId","username","_username","userName","hasAdminRole","hasRoles","Roles","admin","isLegalPerson","legalPerson","roles","includes","role","impersonateThirdParty","isImpersonate","isRegistered","impersonation","saveInsideCache","CodeFlowAuthConfig","AuthConfig","constructor","appConfig","isProduction","clearHashAfterLogin","clientId","dummyClientSecret","clientSecret","issuer","authority","oidc","postLogoutRedirectUri","window","location","origin","redirectUri","redirectUriAsPostLogoutRedirectUriFallback","responseType","scope","sessionChecksEnabled","showDebugInformation","silentRefreshRedirectUri","useSilentRefresh","ROPCAuthConfig","AuthConfig","constructor","appConfig","isProduction","issuer","authority","redirectUri","window","location","origin","oidc","scope","clientId","dummyClientSecret","clientSecret","showDebugInformation","byteToHex","i","unsafeStringify","arr","offset","getRandomValues","rnds8","rng","randomUUID","native_default","v4","options","buf","offset","native_default","rnds","rng","i","unsafeStringify","v4_default","UserConnection","constructor","almostExpirationDate","connectionDate","expirationDate","extensionDate","userConnectionId","isExpired","PreciseDate","current","isAlmostExpired","extends","userSessionDurationNbMinutes","getCurrentDate","getExpirationDate","getAlmostExpirationDate","toISOString","add","subtract","almostExpirationDateNbMinutes","create","uuidv4","deserialize","userConnection","serialize","_UserConnection","log","Logger","AuthService","idToken","oauthService","getIdToken","accessToken","getAccessToken","stateUrl","_stateUrl","user","_authorizationResult","authorizationResult","User","hasValidAccessToken","accessTokenExpiration","getAccessTokenExpiration","isInTheFuture","constructor","cacheStorageService","inject","CacheStorageService","OAuthService","oauthStorage","OAuthStorage","router","Router","AuthorizationResult","_isLoadDiscoveryDocumentDone","_isIdentityConfigurationDone","_isIdentityServerOnError","_useRopcFlow","_userSessionDurationNbMinutes","_isIdentityServerOnErrorSubject","BehaviorSubject","_authorizationResultSubject","ReplaySubject","isIdentityServerOnError$","pipe","tap","isIdentityServerOnError","authorizationResult$","asObservable","_onRetryOnFail$","takeUntilDestroyed","filter","notifyAuthorizationResultChange","delay","switchMap","initialize","_onAuthErrorEvents$","events","e","OAuthErrorEvent","map","__async","handleErrorEvents","_onAuthSuccessEvents$","OAuthSuccessEvent","handleSuccessEvents","_onAuthInfoEvents$","OAuthInfoEvent","handleInfoEvents","_onAuthSilentRefreshEvents$","indexOf","type","loadUserProfile","_onUserConnectionCheck$","timer","checkAndAddUserSessionEndCheck","registerEvents","configure","config","authConfig","useRopcFlow","ROPCAuthConfig","environment","production","CodeFlowAuthConfig","userSessionNbMinutes","tokenValidationHandler","JwksValidationHandler","loadDiscoveryDocument","loginOption","LoginOptions","preventClearHashAfterLogin","isLoginSuccess","tryLogin","useSilentRefresh","console","debug","silentRefresh","setupAutomaticSilentRefresh","tryRegisterRedirectFromUrl","next","ensureUserConnection","error","errorReason","params","login","targetUrl","initCodeFlow","url","tryForceLogin","customRedirectUri","undefined","initLoginFlow","logout","removeCacheValue","CacheKeys","USER_CONNECTION","revokeTokenAndLogout","ropcLogin","userName","password","fetchTokenUsingPasswordFlowAndLoadUserProfile","ropcLogout","logOut","force","userConnection","getUserConnectionFromCache","extends","saveCache","UserConnection","serialize","create","info","refreshToken","impersonateThirdParty","currentRentalId","familyName","givenName","roles","isImpersonate","isRegistered","rentalIds","thirdPartyId","forceLoginIfFailed","silentRefreshError","errorResponsesRequiringUserInteraction","reason","state","currentStateUrl","startsWith","decodeURIComponent","buildUser","claims","getIdentityClaims","id","username","length","Array","isArray","buildAuthorizationResult","forceRemoveTokens","removeItem","subscribe","value","Date","getTime","checkUserSessionEnd","retrieveCacheValue","deserialize","warn","isExpired","isAlmostExpired","almostExpirationDateNbMinutes","factory","ɵfac","providedIn","_AuthService","AuthHttpClient","constructor","appConfig","inject","APP_CONFIG","httpClient","HttpClient","get","endPoint","options","authApiRoot","post","params","put","delete","factory","ɵfac","_AuthHttpClient","AuthInterceptor","constructor","authService","inject","AuthService","intercept","request","next","hasValidAccessToken","clone","headers","set","accessToken","handle","factory","ɵfac","_AuthInterceptor","storageFactory","localStorage","initializeAuthFn","configService","authService","configure","appConfig","initialize","AuthModule","provide","ValidationHandler","useClass","JwksValidationHandler","OAuthStorage","useFactory","APP_INITIALIZER","multi","deps","AppConfigService","AuthService","AuthHttpClient","HttpClient","HTTP_INTERCEPTORS","AuthInterceptor","imports","CommonModule","ConfigModule","UtilsModule","OAuthModule","forRoot","_AuthModule","authInGuard","route","state","inject","PermissionsService","isAuthenticated","rolesInGuard","hasInRoles","impersonationForThirdPartyGuard","isImpersonatedAsThirdParty","constructor","unauthorizedUrl","serviceUnreachableUrl","forbiddenUrl","impersonationUrl","authService","AuthService","authorizationResult$","pipe","map","authorizationResult","canAccessAuthorizedContent","console","debug","url","redirectToUnauthorizedPage","data","hasRoles","warn","redirectToForbiddenPage","user","hasAdminRole","isImpersonated","redirectToImpersonationPage","returnUrl","createUrlTree","commands","queryParams","createUrlTreeFromSnapshot","factory","ɵfac","providedIn","_PermissionsService"],"x_google_ignoreList":[1,5,7,8,14,15,16,17]}