{"version":3,"file":"generate-jira-git-branch.cjs","names":["http2","EventEmitter","url","EventEmitter","https","tls","net","EventEmitter","crypto","parse","url","querystring","crypto","REGEX","URL","v35","v35","assert","Stream","util","buffer","util","assert","crypto","crypto","crypto","crypto","stream","util","crypto","crypto","crypto","crypto","util","crypto","crypto","crypto","crypto","util","util","mod_util","exports","crypto","util","crypto","util","net","tls","Stream","util","util","util","http","https","fs","stream","Promise","fs","crypto","fs","crypto","crypto","crypto","tls","http","https","util","Buffer","stream","net","net","exports","http","https","exports","net","http","util","tls","zlib","stream","url","pc","JiraApi","OpenAI"],"sources":["../../node_modules/.pnpm/@babel+runtime@7.26.9/node_modules/@babel/runtime/helpers/interopRequireDefault.js","../../node_modules/.pnpm/extend@3.0.2/node_modules/extend/index.js","../../node_modules/.pnpm/punycode@2.3.1/node_modules/punycode/punycode.js","../../node_modules/.pnpm/requires-port@1.0.0/node_modules/requires-port/index.js","../../node_modules/.pnpm/querystringify@2.2.0/node_modules/querystringify/index.js","../../node_modules/.pnpm/url-parse@1.5.10/node_modules/url-parse/index.js","../../node_modules/.pnpm/psl@1.15.0/node_modules/psl/dist/psl.cjs","../../node_modules/.pnpm/@postman+tough-cookie@4.1.3-postman.1/node_modules/@postman/tough-cookie/lib/pubsuffix-psl.js","../../node_modules/.pnpm/@postman+tough-cookie@4.1.3-postman.1/node_modules/@postman/tough-cookie/lib/store.js","../../node_modules/.pnpm/universalify@0.2.0/node_modules/universalify/index.js","../../node_modules/.pnpm/@postman+tough-cookie@4.1.3-postman.1/node_modules/@postman/tough-cookie/lib/permuteDomain.js","../../node_modules/.pnpm/@postman+tough-cookie@4.1.3-postman.1/node_modules/@postman/tough-cookie/lib/pathMatch.js","../../node_modules/.pnpm/@postman+tough-cookie@4.1.3-postman.1/node_modules/@postman/tough-cookie/lib/utilHelper.js","../../node_modules/.pnpm/@postman+tough-cookie@4.1.3-postman.1/node_modules/@postman/tough-cookie/lib/memstore.js","../../node_modules/.pnpm/@postman+tough-cookie@4.1.3-postman.1/node_modules/@postman/tough-cookie/lib/validators.js","../../node_modules/.pnpm/@postman+tough-cookie@4.1.3-postman.1/node_modules/@postman/tough-cookie/lib/version.js","../../node_modules/.pnpm/@postman+tough-cookie@4.1.3-postman.1/node_modules/@postman/tough-cookie/lib/cookie.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/cookies.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/autohttp/requestName.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/http2/agent.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/autohttp/headerValidations.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/http2/request.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/http2/index.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/autohttp/agent.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/autohttp/request.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/autohttp/index.js","../../node_modules/.pnpm/aws-sign2@0.7.0/node_modules/aws-sign2/index.js","../../node_modules/.pnpm/aws4@1.13.2/node_modules/aws4/lru.js","../../node_modules/.pnpm/aws4@1.13.2/node_modules/aws4/aws4.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/rng.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/regex.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/validate.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/stringify.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/v1.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/parse.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/v35.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/md5.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/v3.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/v4.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/sha1.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/v5.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/nil.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/version.js","../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/index.js","../../node_modules/.pnpm/assert-plus@1.0.0/node_modules/assert-plus/assert.js","../../node_modules/.pnpm/safer-buffer@2.1.2/node_modules/safer-buffer/safer.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/algs.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/errors.js","../../node_modules/.pnpm/asn1@0.2.6/node_modules/asn1/lib/ber/errors.js","../../node_modules/.pnpm/asn1@0.2.6/node_modules/asn1/lib/ber/types.js","../../node_modules/.pnpm/asn1@0.2.6/node_modules/asn1/lib/ber/reader.js","../../node_modules/.pnpm/asn1@0.2.6/node_modules/asn1/lib/ber/writer.js","../../node_modules/.pnpm/asn1@0.2.6/node_modules/asn1/lib/ber/index.js","../../node_modules/.pnpm/asn1@0.2.6/node_modules/asn1/lib/index.js","../../node_modules/.pnpm/jsbn@0.1.1/node_modules/jsbn/index.js","../../node_modules/.pnpm/ecc-jsbn@0.1.2/node_modules/ecc-jsbn/lib/ec.js","../../node_modules/.pnpm/tweetnacl@0.14.5/node_modules/tweetnacl/nacl-fast.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/utils.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/ssh-buffer.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/signature.js","../../node_modules/.pnpm/ecc-jsbn@0.1.2/node_modules/ecc-jsbn/lib/sec.js","../../node_modules/.pnpm/ecc-jsbn@0.1.2/node_modules/ecc-jsbn/index.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/dhe.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/ed-compat.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/pkcs8.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/pkcs1.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/rfc4253.js","../../node_modules/.pnpm/bcrypt-pbkdf@1.0.2/node_modules/bcrypt-pbkdf/index.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/ssh-private.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/pem.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/ssh.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/dnssec.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/putty.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/auto.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/private-key.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/identity.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/openssh-cert.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/x509.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/formats/x509-pem.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/certificate.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/fingerprint.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/key.js","../../node_modules/.pnpm/sshpk@1.18.0/node_modules/sshpk/lib/index.js","../../node_modules/.pnpm/http-signature@1.4.0/node_modules/http-signature/lib/utils.js","../../node_modules/.pnpm/http-signature@1.4.0/node_modules/http-signature/lib/parser.js","../../node_modules/.pnpm/extsprintf@1.3.0/node_modules/extsprintf/lib/extsprintf.js","../../node_modules/.pnpm/core-util-is@1.0.2/node_modules/core-util-is/lib/util.js","../../node_modules/.pnpm/verror@1.10.0/node_modules/verror/lib/verror.js","../../node_modules/.pnpm/json-schema@0.4.0/node_modules/json-schema/lib/validate.js","../../node_modules/.pnpm/jsprim@2.0.2/node_modules/jsprim/lib/jsprim.js","../../node_modules/.pnpm/http-signature@1.4.0/node_modules/http-signature/lib/signer.js","../../node_modules/.pnpm/http-signature@1.4.0/node_modules/http-signature/lib/verify.js","../../node_modules/.pnpm/http-signature@1.4.0/node_modules/http-signature/lib/index.js","../../node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/db.json","../../node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/index.js","../../node_modules/.pnpm/mime-types@2.1.35/node_modules/mime-types/index.js","../../node_modules/.pnpm/caseless@0.12.0/node_modules/caseless/index.js","../../node_modules/.pnpm/forever-agent@0.6.1/node_modules/forever-agent/index.js","../../node_modules/.pnpm/delayed-stream@1.0.0/node_modules/delayed-stream/lib/delayed_stream.js","../../node_modules/.pnpm/combined-stream@1.0.8/node_modules/combined-stream/lib/combined_stream.js","../../node_modules/.pnpm/asynckit@0.4.0/node_modules/asynckit/lib/defer.js","../../node_modules/.pnpm/asynckit@0.4.0/node_modules/asynckit/lib/async.js","../../node_modules/.pnpm/asynckit@0.4.0/node_modules/asynckit/lib/abort.js","../../node_modules/.pnpm/asynckit@0.4.0/node_modules/asynckit/lib/iterate.js","../../node_modules/.pnpm/asynckit@0.4.0/node_modules/asynckit/lib/state.js","../../node_modules/.pnpm/asynckit@0.4.0/node_modules/asynckit/lib/terminator.js","../../node_modules/.pnpm/asynckit@0.4.0/node_modules/asynckit/parallel.js","../../node_modules/.pnpm/asynckit@0.4.0/node_modules/asynckit/serialOrdered.js","../../node_modules/.pnpm/asynckit@0.4.0/node_modules/asynckit/serial.js","../../node_modules/.pnpm/asynckit@0.4.0/node_modules/asynckit/index.js","../../node_modules/.pnpm/@postman+form-data@3.1.1/node_modules/@postman/form-data/lib/populate.js","../../node_modules/.pnpm/@postman+form-data@3.1.1/node_modules/@postman/form-data/lib/form_data.js","../../node_modules/.pnpm/isstream@0.1.2/node_modules/isstream/isstream.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/es5.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/util.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/schedule.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/queue.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/async.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/errors.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/thenables.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/promise_array.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/captured_trace.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/debuggability.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/context.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/catch_filter.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/promise_resolver.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/progress.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/method.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/bind.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/finally.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/direct_resolve.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/synchronous_inspection.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/join.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/map.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/cancel.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/using.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/generators.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/nodeify.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/call_get.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/props.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/race.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/reduce.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/settle.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/some.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/promisify.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/any.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/each.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/timers.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/filter.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/promise.js","../../node_modules/.pnpm/bluebird@2.11.0/node_modules/bluebird/js/main/bluebird.js","../../node_modules/.pnpm/stream-length@1.0.2/node_modules/stream-length/lib/stream-length.js","../../node_modules/.pnpm/stream-length@1.0.2/node_modules/stream-length/index.js","../../node_modules/.pnpm/is-typedarray@1.0.0/node_modules/is-typedarray/index.js","../../node_modules/.pnpm/json-stringify-safe@5.0.1/node_modules/json-stringify-safe/stringify.js","../../node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/helpers.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/getProxyFromURI.js","../../node_modules/.pnpm/qs@6.5.3/node_modules/qs/lib/utils.js","../../node_modules/.pnpm/qs@6.5.3/node_modules/qs/lib/formats.js","../../node_modules/.pnpm/qs@6.5.3/node_modules/qs/lib/stringify.js","../../node_modules/.pnpm/qs@6.5.3/node_modules/qs/lib/parse.js","../../node_modules/.pnpm/qs@6.5.3/node_modules/qs/lib/index.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/querystring.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/har.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/auth.js","../../node_modules/.pnpm/oauth-sign@0.9.0/node_modules/oauth-sign/index.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/oauth.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/hawk.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/multipart.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/redirect.js","../../node_modules/.pnpm/@postman+tunnel-agent@0.6.4/node_modules/@postman/tunnel-agent/index.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/tunnel.js","../../node_modules/.pnpm/smart-buffer@4.2.0/node_modules/smart-buffer/build/utils.js","../../node_modules/.pnpm/smart-buffer@4.2.0/node_modules/smart-buffer/build/smartbuffer.js","../../node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/constants.js","../../node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/util.js","../../node_modules/.pnpm/ip-address@10.0.1/node_modules/ip-address/dist/common.js","../../node_modules/.pnpm/ip-address@10.0.1/node_modules/ip-address/dist/v4/constants.js","../../node_modules/.pnpm/ip-address@10.0.1/node_modules/ip-address/dist/address-error.js","../../node_modules/.pnpm/ip-address@10.0.1/node_modules/ip-address/dist/ipv4.js","../../node_modules/.pnpm/ip-address@10.0.1/node_modules/ip-address/dist/v6/constants.js","../../node_modules/.pnpm/ip-address@10.0.1/node_modules/ip-address/dist/v6/helpers.js","../../node_modules/.pnpm/ip-address@10.0.1/node_modules/ip-address/dist/v6/regular-expressions.js","../../node_modules/.pnpm/ip-address@10.0.1/node_modules/ip-address/dist/ipv6.js","../../node_modules/.pnpm/ip-address@10.0.1/node_modules/ip-address/dist/ip-address.js","../../node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/helpers.js","../../node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/receivebuffer.js","../../node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/client/socksclient.js","../../node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/index.js","../../node_modules/.pnpm/agent-base@7.1.4/node_modules/agent-base/dist/helpers.js","../../node_modules/.pnpm/agent-base@7.1.4/node_modules/agent-base/dist/index.js","../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/common.js","../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/browser.js","../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/node.js","../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/index.js","../../node_modules/.pnpm/socks-proxy-agent@8.0.5/node_modules/socks-proxy-agent/dist/index.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/socks.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/inflate.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/lib/url-parse.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/request.js","../../node_modules/.pnpm/postman-request@2.88.1-postman.43/node_modules/postman-request/index.js","../../node_modules/.pnpm/jira-client@8.2.2/node_modules/jira-client/lib/jira.js","../../src/scripts/generate-jira-git-branch.ts"],"sourcesContent":["function _interopRequireDefault(e) {\n  return e && e.__esModule ? e : {\n    \"default\": e\n  };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n  protocol = protocol.split(':')[0];\n  port = +port;\n\n  if (!port) return false;\n\n  switch (protocol) {\n    case 'http':\n    case 'ws':\n    return port !== 80;\n\n    case 'https':\n    case 'wss':\n    return port !== 443;\n\n    case 'ftp':\n    return port !== 21;\n\n    case 'gopher':\n    return port !== 70;\n\n    case 'file':\n    return false;\n  }\n\n  return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n  try {\n    return decodeURIComponent(input.replace(/\\+/g, ' '));\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n  try {\n    return encodeURIComponent(input);\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n  var parser = /([^=?#&]+)=?([^&]*)/g\n    , result = {}\n    , part;\n\n  while (part = parser.exec(query)) {\n    var key = decode(part[1])\n      , value = decode(part[2]);\n\n    //\n    // Prevent overriding of existing properties. This ensures that build-in\n    // methods like `toString` or __proto__ are not overriden by malicious\n    // querystrings.\n    //\n    // In the case if failed decoding, we want to omit the key/value pairs\n    // from the result.\n    //\n    if (key === null || value === null || key in result) continue;\n    result[key] = value;\n  }\n\n  return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n  prefix = prefix || '';\n\n  var pairs = []\n    , value\n    , key;\n\n  //\n  // Optionally prefix with a '?' if needed\n  //\n  if ('string' !== typeof prefix) prefix = '?';\n\n  for (key in obj) {\n    if (has.call(obj, key)) {\n      value = obj[key];\n\n      //\n      // Edge cases where we actually want to encode the value to an empty\n      // string instead of the stringified value.\n      //\n      if (!value && (value === null || value === undef || isNaN(value))) {\n        value = '';\n      }\n\n      key = encode(key);\n      value = encode(value);\n\n      //\n      // If we failed to encode the strings, we should bail out as we don't\n      // want to add invalid strings to the query.\n      //\n      if (key === null || value === null) continue;\n      pairs.push(key +'='+ value);\n    }\n  }\n\n  return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\nvar required = require('requires-port')\n  , qs = require('querystringify')\n  , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n  , CRHTLF = /[\\n\\r\\t]/g\n  , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n  , port = /:\\d+$/\n  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n  , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n *     characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n  return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n *    indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n *    the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n  ['#', 'hash'],                        // Extract from the back.\n  ['?', 'query'],                       // Extract from the back.\n  function sanitize(address, url) {     // Sanitize what is left of the address\n    return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n  },\n  ['/', 'pathname'],                    // Extract from the back.\n  ['@', 'auth', 1],                     // Extract from the front.\n  [NaN, 'host', undefined, 1, 1],       // Set left over value.\n  [/:(\\d*)$/, 'port', undefined, 1],    // RegExp the back.\n  [NaN, 'hostname', undefined, 1, 1]    // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n  var globalVar;\n\n  if (typeof window !== 'undefined') globalVar = window;\n  else if (typeof global !== 'undefined') globalVar = global;\n  else if (typeof self !== 'undefined') globalVar = self;\n  else globalVar = {};\n\n  var location = globalVar.location || {};\n  loc = loc || location;\n\n  var finaldestination = {}\n    , type = typeof loc\n    , key;\n\n  if ('blob:' === loc.protocol) {\n    finaldestination = new Url(unescape(loc.pathname), {});\n  } else if ('string' === type) {\n    finaldestination = new Url(loc, {});\n    for (key in ignore) delete finaldestination[key];\n  } else if ('object' === type) {\n    for (key in loc) {\n      if (key in ignore) continue;\n      finaldestination[key] = loc[key];\n    }\n\n    if (finaldestination.slashes === undefined) {\n      finaldestination.slashes = slashes.test(loc.href);\n    }\n  }\n\n  return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n  return (\n    scheme === 'file:' ||\n    scheme === 'ftp:' ||\n    scheme === 'http:' ||\n    scheme === 'https:' ||\n    scheme === 'ws:' ||\n    scheme === 'wss:'\n  );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n  location = location || {};\n\n  var match = protocolre.exec(address);\n  var protocol = match[1] ? match[1].toLowerCase() : '';\n  var forwardSlashes = !!match[2];\n  var otherSlashes = !!match[3];\n  var slashesCount = 0;\n  var rest;\n\n  if (forwardSlashes) {\n    if (otherSlashes) {\n      rest = match[2] + match[3] + match[4];\n      slashesCount = match[2].length + match[3].length;\n    } else {\n      rest = match[2] + match[4];\n      slashesCount = match[2].length;\n    }\n  } else {\n    if (otherSlashes) {\n      rest = match[3] + match[4];\n      slashesCount = match[3].length;\n    } else {\n      rest = match[4]\n    }\n  }\n\n  if (protocol === 'file:') {\n    if (slashesCount >= 2) {\n      rest = rest.slice(2);\n    }\n  } else if (isSpecial(protocol)) {\n    rest = match[4];\n  } else if (protocol) {\n    if (forwardSlashes) {\n      rest = rest.slice(2);\n    }\n  } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n    rest = match[4];\n  }\n\n  return {\n    protocol: protocol,\n    slashes: forwardSlashes || isSpecial(protocol),\n    slashesCount: slashesCount,\n    rest: rest\n  };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n  if (relative === '') return base;\n\n  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n    , i = path.length\n    , last = path[i - 1]\n    , unshift = false\n    , up = 0;\n\n  while (i--) {\n    if (path[i] === '.') {\n      path.splice(i, 1);\n    } else if (path[i] === '..') {\n      path.splice(i, 1);\n      up++;\n    } else if (up) {\n      if (i === 0) unshift = true;\n      path.splice(i, 1);\n      up--;\n    }\n  }\n\n  if (unshift) path.unshift('');\n  if (last === '.' || last === '..') path.push('');\n\n  return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n\n  if (!(this instanceof Url)) {\n    return new Url(address, location, parser);\n  }\n\n  var relative, extracted, parse, instruction, index, key\n    , instructions = rules.slice()\n    , type = typeof location\n    , url = this\n    , i = 0;\n\n  //\n  // The following if statements allows this module two have compatibility with\n  // 2 different API:\n  //\n  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n  //    where the boolean indicates that the query string should also be parsed.\n  //\n  // 2. The `URL` interface of the browser which accepts a URL, object as\n  //    arguments. The supplied object will be used as default values / fall-back\n  //    for relative paths.\n  //\n  if ('object' !== type && 'string' !== type) {\n    parser = location;\n    location = null;\n  }\n\n  if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n  location = lolcation(location);\n\n  //\n  // Extract protocol information before running the instructions.\n  //\n  extracted = extractProtocol(address || '', location);\n  relative = !extracted.protocol && !extracted.slashes;\n  url.slashes = extracted.slashes || relative && location.slashes;\n  url.protocol = extracted.protocol || location.protocol || '';\n  address = extracted.rest;\n\n  //\n  // When the authority component is absent the URL starts with a path\n  // component.\n  //\n  if (\n    extracted.protocol === 'file:' && (\n      extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n    (!extracted.slashes &&\n      (extracted.protocol ||\n        extracted.slashesCount < 2 ||\n        !isSpecial(url.protocol)))\n  ) {\n    instructions[3] = [/(.*)/, 'pathname'];\n  }\n\n  for (; i < instructions.length; i++) {\n    instruction = instructions[i];\n\n    if (typeof instruction === 'function') {\n      address = instruction(address, url);\n      continue;\n    }\n\n    parse = instruction[0];\n    key = instruction[1];\n\n    if (parse !== parse) {\n      url[key] = address;\n    } else if ('string' === typeof parse) {\n      index = parse === '@'\n        ? address.lastIndexOf(parse)\n        : address.indexOf(parse);\n\n      if (~index) {\n        if ('number' === typeof instruction[2]) {\n          url[key] = address.slice(0, index);\n          address = address.slice(index + instruction[2]);\n        } else {\n          url[key] = address.slice(index);\n          address = address.slice(0, index);\n        }\n      }\n    } else if ((index = parse.exec(address))) {\n      url[key] = index[1];\n      address = address.slice(0, index.index);\n    }\n\n    url[key] = url[key] || (\n      relative && instruction[3] ? location[key] || '' : ''\n    );\n\n    //\n    // Hostname, host and protocol should be lowercased so they can be used to\n    // create a proper `origin`.\n    //\n    if (instruction[4]) url[key] = url[key].toLowerCase();\n  }\n\n  //\n  // Also parse the supplied query string in to an object. If we're supplied\n  // with a custom parser as function use that instead of the default build-in\n  // parser.\n  //\n  if (parser) url.query = parser(url.query);\n\n  //\n  // If the URL is relative, resolve the pathname against the base URL.\n  //\n  if (\n      relative\n    && location.slashes\n    && url.pathname.charAt(0) !== '/'\n    && (url.pathname !== '' || location.pathname !== '')\n  ) {\n    url.pathname = resolve(url.pathname, location.pathname);\n  }\n\n  //\n  // Default to a / for pathname if none exists. This normalizes the URL\n  // to always have a /\n  //\n  if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n    url.pathname = '/' + url.pathname;\n  }\n\n  //\n  // We should not add port numbers if they are already the default port number\n  // for a given protocol. As the host also contains the port number we're going\n  // override it with the hostname which contains no port number.\n  //\n  if (!required(url.port, url.protocol)) {\n    url.host = url.hostname;\n    url.port = '';\n  }\n\n  //\n  // Parse down the `auth` for the username and password.\n  //\n  url.username = url.password = '';\n\n  if (url.auth) {\n    index = url.auth.indexOf(':');\n\n    if (~index) {\n      url.username = url.auth.slice(0, index);\n      url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n      url.password = url.auth.slice(index + 1);\n      url.password = encodeURIComponent(decodeURIComponent(url.password))\n    } else {\n      url.username = encodeURIComponent(decodeURIComponent(url.auth));\n    }\n\n    url.auth = url.password ? url.username +':'+ url.password : url.username;\n  }\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  //\n  // The href is just the compiled result.\n  //\n  url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part          Property we need to adjust.\n * @param {Mixed} value          The newly assigned value.\n * @param {Boolean|Function} fn  When setting the query, it will be the function\n *                               used to parse the query.\n *                               When setting the protocol, double slash will be\n *                               removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n  var url = this;\n\n  switch (part) {\n    case 'query':\n      if ('string' === typeof value && value.length) {\n        value = (fn || qs.parse)(value);\n      }\n\n      url[part] = value;\n      break;\n\n    case 'port':\n      url[part] = value;\n\n      if (!required(value, url.protocol)) {\n        url.host = url.hostname;\n        url[part] = '';\n      } else if (value) {\n        url.host = url.hostname +':'+ value;\n      }\n\n      break;\n\n    case 'hostname':\n      url[part] = value;\n\n      if (url.port) value += ':'+ url.port;\n      url.host = value;\n      break;\n\n    case 'host':\n      url[part] = value;\n\n      if (port.test(value)) {\n        value = value.split(':');\n        url.port = value.pop();\n        url.hostname = value.join(':');\n      } else {\n        url.hostname = value;\n        url.port = '';\n      }\n\n      break;\n\n    case 'protocol':\n      url.protocol = value.toLowerCase();\n      url.slashes = !fn;\n      break;\n\n    case 'pathname':\n    case 'hash':\n      if (value) {\n        var char = part === 'pathname' ? '/' : '#';\n        url[part] = value.charAt(0) !== char ? char + value : value;\n      } else {\n        url[part] = value;\n      }\n      break;\n\n    case 'username':\n    case 'password':\n      url[part] = encodeURIComponent(value);\n      break;\n\n    case 'auth':\n      var index = value.indexOf(':');\n\n      if (~index) {\n        url.username = value.slice(0, index);\n        url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n        url.password = value.slice(index + 1);\n        url.password = encodeURIComponent(decodeURIComponent(url.password));\n      } else {\n        url.username = encodeURIComponent(decodeURIComponent(value));\n      }\n  }\n\n  for (var i = 0; i < rules.length; i++) {\n    var ins = rules[i];\n\n    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n  }\n\n  url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  url.href = url.toString();\n\n  return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n  if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n  var query\n    , url = this\n    , host = url.host\n    , protocol = url.protocol;\n\n  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n  var result =\n    protocol +\n    ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n  if (url.username) {\n    result += url.username;\n    if (url.password) result += ':'+ url.password;\n    result += '@';\n  } else if (url.password) {\n    result += ':'+ url.password;\n    result += '@';\n  } else if (\n    url.protocol !== 'file:' &&\n    isSpecial(url.protocol) &&\n    !host &&\n    url.pathname !== '/'\n  ) {\n    //\n    // Add back the empty userinfo, otherwise the original invalid URL\n    // might be transformed into a valid one with `url.pathname` as host.\n    //\n    result += '@';\n  }\n\n  //\n  // Trailing colon is removed from `url.host` when it is parsed. If it still\n  // ends with a colon, then add back the trailing colon that was removed. This\n  // prevents an invalid URL from being transformed into a valid one.\n  //\n  if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n    host += ':';\n  }\n\n  result += host + url.pathname;\n\n  query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n  if (url.hash) result += url.hash;\n\n  return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","\"use strict\";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:\"Module\"}});function K(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}var O,F;function Q(){if(F)return O;F=1;const e=2147483647,s=36,c=1,o=26,t=38,d=700,z=72,y=128,g=\"-\",P=/^xn--/,V=/[^\\0-\\x7F]/,G=/[\\x2E\\u3002\\uFF0E\\uFF61]/g,W={overflow:\"Overflow: input needs wider integers to process\",\"not-basic\":\"Illegal input >= 0x80 (not a basic code point)\",\"invalid-input\":\"Invalid input\"},C=s-c,h=Math.floor,I=String.fromCharCode;function v(a){throw new RangeError(W[a])}function U(a,i){const m=[];let n=a.length;for(;n--;)m[n]=i(a[n]);return m}function S(a,i){const m=a.split(\"@\");let n=\"\";m.length>1&&(n=m[0]+\"@\",a=m[1]),a=a.replace(G,\".\");const r=a.split(\".\"),p=U(r,i).join(\".\");return n+p}function L(a){const i=[];let m=0;const n=a.length;for(;m<n;){const r=a.charCodeAt(m++);if(r>=55296&&r<=56319&&m<n){const p=a.charCodeAt(m++);(p&64512)==56320?i.push(((r&1023)<<10)+(p&1023)+65536):(i.push(r),m--)}else i.push(r)}return i}const $=a=>String.fromCodePoint(...a),J=function(a){return a>=48&&a<58?26+(a-48):a>=65&&a<91?a-65:a>=97&&a<123?a-97:s},D=function(a,i){return a+22+75*(a<26)-((i!=0)<<5)},T=function(a,i,m){let n=0;for(a=m?h(a/d):a>>1,a+=h(a/i);a>C*o>>1;n+=s)a=h(a/C);return h(n+(C+1)*a/(a+t))},E=function(a){const i=[],m=a.length;let n=0,r=y,p=z,j=a.lastIndexOf(g);j<0&&(j=0);for(let u=0;u<j;++u)a.charCodeAt(u)>=128&&v(\"not-basic\"),i.push(a.charCodeAt(u));for(let u=j>0?j+1:0;u<m;){const k=n;for(let l=1,b=s;;b+=s){u>=m&&v(\"invalid-input\");const w=J(a.charCodeAt(u++));w>=s&&v(\"invalid-input\"),w>h((e-n)/l)&&v(\"overflow\"),n+=w*l;const x=b<=p?c:b>=p+o?o:b-p;if(w<x)break;const q=s-x;l>h(e/q)&&v(\"overflow\"),l*=q}const f=i.length+1;p=T(n-k,f,k==0),h(n/f)>e-r&&v(\"overflow\"),r+=h(n/f),n%=f,i.splice(n++,0,r)}return String.fromCodePoint(...i)},B=function(a){const i=[];a=L(a);const m=a.length;let n=y,r=0,p=z;for(const k of a)k<128&&i.push(I(k));const j=i.length;let u=j;for(j&&i.push(g);u<m;){let k=e;for(const l of a)l>=n&&l<k&&(k=l);const f=u+1;k-n>h((e-r)/f)&&v(\"overflow\"),r+=(k-n)*f,n=k;for(const l of a)if(l<n&&++r>e&&v(\"overflow\"),l===n){let b=r;for(let w=s;;w+=s){const x=w<=p?c:w>=p+o?o:w-p;if(b<x)break;const q=b-x,M=s-x;i.push(I(D(x+q%M,0))),b=h(q/M)}i.push(I(D(b,0))),p=T(r,f,u===j),r=0,++u}++r,++n}return i.join(\"\")};return O={version:\"2.3.1\",ucs2:{decode:L,encode:$},decode:E,encode:B,toASCII:function(a){return S(a,function(i){return V.test(i)?\"xn--\"+B(i):i})},toUnicode:function(a){return S(a,function(i){return P.test(i)?E(i.slice(4).toLowerCase()):i})}},O}var X=Q();const A=K(X),Y=[\"ac\",\"com.ac\",\"edu.ac\",\"gov.ac\",\"mil.ac\",\"net.ac\",\"org.ac\",\"ad\",\"ae\",\"ac.ae\",\"co.ae\",\"gov.ae\",\"mil.ae\",\"net.ae\",\"org.ae\",\"sch.ae\",\"aero\",\"airline.aero\",\"airport.aero\",\"accident-investigation.aero\",\"accident-prevention.aero\",\"aerobatic.aero\",\"aeroclub.aero\",\"aerodrome.aero\",\"agents.aero\",\"air-surveillance.aero\",\"air-traffic-control.aero\",\"aircraft.aero\",\"airtraffic.aero\",\"ambulance.aero\",\"association.aero\",\"author.aero\",\"ballooning.aero\",\"broker.aero\",\"caa.aero\",\"cargo.aero\",\"catering.aero\",\"certification.aero\",\"championship.aero\",\"charter.aero\",\"civilaviation.aero\",\"club.aero\",\"conference.aero\",\"consultant.aero\",\"consulting.aero\",\"control.aero\",\"council.aero\",\"crew.aero\",\"design.aero\",\"dgca.aero\",\"educator.aero\",\"emergency.aero\",\"engine.aero\",\"engineer.aero\",\"entertainment.aero\",\"equipment.aero\",\"exchange.aero\",\"express.aero\",\"federation.aero\",\"flight.aero\",\"freight.aero\",\"fuel.aero\",\"gliding.aero\",\"government.aero\",\"groundhandling.aero\",\"group.aero\",\"hanggliding.aero\",\"homebuilt.aero\",\"insurance.aero\",\"journal.aero\",\"journalist.aero\",\"leasing.aero\",\"logistics.aero\",\"magazine.aero\",\"maintenance.aero\",\"marketplace.aero\",\"media.aero\",\"microlight.aero\",\"modelling.aero\",\"navigation.aero\",\"parachuting.aero\",\"paragliding.aero\",\"passenger-association.aero\",\"pilot.aero\",\"press.aero\",\"production.aero\",\"recreation.aero\",\"repbody.aero\",\"res.aero\",\"research.aero\",\"rotorcraft.aero\",\"safety.aero\",\"scientist.aero\",\"services.aero\",\"show.aero\",\"skydiving.aero\",\"software.aero\",\"student.aero\",\"taxi.aero\",\"trader.aero\",\"trading.aero\",\"trainer.aero\",\"union.aero\",\"workinggroup.aero\",\"works.aero\",\"af\",\"com.af\",\"edu.af\",\"gov.af\",\"net.af\",\"org.af\",\"ag\",\"co.ag\",\"com.ag\",\"net.ag\",\"nom.ag\",\"org.ag\",\"ai\",\"com.ai\",\"net.ai\",\"off.ai\",\"org.ai\",\"al\",\"com.al\",\"edu.al\",\"gov.al\",\"mil.al\",\"net.al\",\"org.al\",\"am\",\"co.am\",\"com.am\",\"commune.am\",\"net.am\",\"org.am\",\"ao\",\"co.ao\",\"ed.ao\",\"edu.ao\",\"gov.ao\",\"gv.ao\",\"it.ao\",\"og.ao\",\"org.ao\",\"pb.ao\",\"aq\",\"ar\",\"bet.ar\",\"com.ar\",\"coop.ar\",\"edu.ar\",\"gob.ar\",\"gov.ar\",\"int.ar\",\"mil.ar\",\"musica.ar\",\"mutual.ar\",\"net.ar\",\"org.ar\",\"senasa.ar\",\"tur.ar\",\"arpa\",\"e164.arpa\",\"home.arpa\",\"in-addr.arpa\",\"ip6.arpa\",\"iris.arpa\",\"uri.arpa\",\"urn.arpa\",\"as\",\"gov.as\",\"asia\",\"at\",\"ac.at\",\"sth.ac.at\",\"co.at\",\"gv.at\",\"or.at\",\"au\",\"asn.au\",\"com.au\",\"edu.au\",\"gov.au\",\"id.au\",\"net.au\",\"org.au\",\"conf.au\",\"oz.au\",\"act.au\",\"nsw.au\",\"nt.au\",\"qld.au\",\"sa.au\",\"tas.au\",\"vic.au\",\"wa.au\",\"act.edu.au\",\"catholic.edu.au\",\"nsw.edu.au\",\"nt.edu.au\",\"qld.edu.au\",\"sa.edu.au\",\"tas.edu.au\",\"vic.edu.au\",\"wa.edu.au\",\"qld.gov.au\",\"sa.gov.au\",\"tas.gov.au\",\"vic.gov.au\",\"wa.gov.au\",\"schools.nsw.edu.au\",\"aw\",\"com.aw\",\"ax\",\"az\",\"biz.az\",\"com.az\",\"edu.az\",\"gov.az\",\"info.az\",\"int.az\",\"mil.az\",\"name.az\",\"net.az\",\"org.az\",\"pp.az\",\"pro.az\",\"ba\",\"com.ba\",\"edu.ba\",\"gov.ba\",\"mil.ba\",\"net.ba\",\"org.ba\",\"bb\",\"biz.bb\",\"co.bb\",\"com.bb\",\"edu.bb\",\"gov.bb\",\"info.bb\",\"net.bb\",\"org.bb\",\"store.bb\",\"tv.bb\",\"*.bd\",\"be\",\"ac.be\",\"bf\",\"gov.bf\",\"bg\",\"0.bg\",\"1.bg\",\"2.bg\",\"3.bg\",\"4.bg\",\"5.bg\",\"6.bg\",\"7.bg\",\"8.bg\",\"9.bg\",\"a.bg\",\"b.bg\",\"c.bg\",\"d.bg\",\"e.bg\",\"f.bg\",\"g.bg\",\"h.bg\",\"i.bg\",\"j.bg\",\"k.bg\",\"l.bg\",\"m.bg\",\"n.bg\",\"o.bg\",\"p.bg\",\"q.bg\",\"r.bg\",\"s.bg\",\"t.bg\",\"u.bg\",\"v.bg\",\"w.bg\",\"x.bg\",\"y.bg\",\"z.bg\",\"bh\",\"com.bh\",\"edu.bh\",\"gov.bh\",\"net.bh\",\"org.bh\",\"bi\",\"co.bi\",\"com.bi\",\"edu.bi\",\"or.bi\",\"org.bi\",\"biz\",\"bj\",\"africa.bj\",\"agro.bj\",\"architectes.bj\",\"assur.bj\",\"avocats.bj\",\"co.bj\",\"com.bj\",\"eco.bj\",\"econo.bj\",\"edu.bj\",\"info.bj\",\"loisirs.bj\",\"money.bj\",\"net.bj\",\"org.bj\",\"ote.bj\",\"restaurant.bj\",\"resto.bj\",\"tourism.bj\",\"univ.bj\",\"bm\",\"com.bm\",\"edu.bm\",\"gov.bm\",\"net.bm\",\"org.bm\",\"bn\",\"com.bn\",\"edu.bn\",\"gov.bn\",\"net.bn\",\"org.bn\",\"bo\",\"com.bo\",\"edu.bo\",\"gob.bo\",\"int.bo\",\"mil.bo\",\"net.bo\",\"org.bo\",\"tv.bo\",\"web.bo\",\"academia.bo\",\"agro.bo\",\"arte.bo\",\"blog.bo\",\"bolivia.bo\",\"ciencia.bo\",\"cooperativa.bo\",\"democracia.bo\",\"deporte.bo\",\"ecologia.bo\",\"economia.bo\",\"empresa.bo\",\"indigena.bo\",\"industria.bo\",\"info.bo\",\"medicina.bo\",\"movimiento.bo\",\"musica.bo\",\"natural.bo\",\"nombre.bo\",\"noticias.bo\",\"patria.bo\",\"plurinacional.bo\",\"politica.bo\",\"profesional.bo\",\"pueblo.bo\",\"revista.bo\",\"salud.bo\",\"tecnologia.bo\",\"tksat.bo\",\"transporte.bo\",\"wiki.bo\",\"br\",\"9guacu.br\",\"abc.br\",\"adm.br\",\"adv.br\",\"agr.br\",\"aju.br\",\"am.br\",\"anani.br\",\"aparecida.br\",\"app.br\",\"arq.br\",\"art.br\",\"ato.br\",\"b.br\",\"barueri.br\",\"belem.br\",\"bet.br\",\"bhz.br\",\"bib.br\",\"bio.br\",\"blog.br\",\"bmd.br\",\"boavista.br\",\"bsb.br\",\"campinagrande.br\",\"campinas.br\",\"caxias.br\",\"cim.br\",\"cng.br\",\"cnt.br\",\"com.br\",\"contagem.br\",\"coop.br\",\"coz.br\",\"cri.br\",\"cuiaba.br\",\"curitiba.br\",\"def.br\",\"des.br\",\"det.br\",\"dev.br\",\"ecn.br\",\"eco.br\",\"edu.br\",\"emp.br\",\"enf.br\",\"eng.br\",\"esp.br\",\"etc.br\",\"eti.br\",\"far.br\",\"feira.br\",\"flog.br\",\"floripa.br\",\"fm.br\",\"fnd.br\",\"fortal.br\",\"fot.br\",\"foz.br\",\"fst.br\",\"g12.br\",\"geo.br\",\"ggf.br\",\"goiania.br\",\"gov.br\",\"ac.gov.br\",\"al.gov.br\",\"am.gov.br\",\"ap.gov.br\",\"ba.gov.br\",\"ce.gov.br\",\"df.gov.br\",\"es.gov.br\",\"go.gov.br\",\"ma.gov.br\",\"mg.gov.br\",\"ms.gov.br\",\"mt.gov.br\",\"pa.gov.br\",\"pb.gov.br\",\"pe.gov.br\",\"pi.gov.br\",\"pr.gov.br\",\"rj.gov.br\",\"rn.gov.br\",\"ro.gov.br\",\"rr.gov.br\",\"rs.gov.br\",\"sc.gov.br\",\"se.gov.br\",\"sp.gov.br\",\"to.gov.br\",\"gru.br\",\"imb.br\",\"ind.br\",\"inf.br\",\"jab.br\",\"jampa.br\",\"jdf.br\",\"joinville.br\",\"jor.br\",\"jus.br\",\"leg.br\",\"leilao.br\",\"lel.br\",\"log.br\",\"londrina.br\",\"macapa.br\",\"maceio.br\",\"manaus.br\",\"maringa.br\",\"mat.br\",\"med.br\",\"mil.br\",\"morena.br\",\"mp.br\",\"mus.br\",\"natal.br\",\"net.br\",\"niteroi.br\",\"*.nom.br\",\"not.br\",\"ntr.br\",\"odo.br\",\"ong.br\",\"org.br\",\"osasco.br\",\"palmas.br\",\"poa.br\",\"ppg.br\",\"pro.br\",\"psc.br\",\"psi.br\",\"pvh.br\",\"qsl.br\",\"radio.br\",\"rec.br\",\"recife.br\",\"rep.br\",\"ribeirao.br\",\"rio.br\",\"riobranco.br\",\"riopreto.br\",\"salvador.br\",\"sampa.br\",\"santamaria.br\",\"santoandre.br\",\"saobernardo.br\",\"saogonca.br\",\"seg.br\",\"sjc.br\",\"slg.br\",\"slz.br\",\"sorocaba.br\",\"srv.br\",\"taxi.br\",\"tc.br\",\"tec.br\",\"teo.br\",\"the.br\",\"tmp.br\",\"trd.br\",\"tur.br\",\"tv.br\",\"udi.br\",\"vet.br\",\"vix.br\",\"vlog.br\",\"wiki.br\",\"zlg.br\",\"bs\",\"com.bs\",\"edu.bs\",\"gov.bs\",\"net.bs\",\"org.bs\",\"bt\",\"com.bt\",\"edu.bt\",\"gov.bt\",\"net.bt\",\"org.bt\",\"bv\",\"bw\",\"co.bw\",\"org.bw\",\"by\",\"gov.by\",\"mil.by\",\"com.by\",\"of.by\",\"bz\",\"co.bz\",\"com.bz\",\"edu.bz\",\"gov.bz\",\"net.bz\",\"org.bz\",\"ca\",\"ab.ca\",\"bc.ca\",\"mb.ca\",\"nb.ca\",\"nf.ca\",\"nl.ca\",\"ns.ca\",\"nt.ca\",\"nu.ca\",\"on.ca\",\"pe.ca\",\"qc.ca\",\"sk.ca\",\"yk.ca\",\"gc.ca\",\"cat\",\"cc\",\"cd\",\"gov.cd\",\"cf\",\"cg\",\"ch\",\"ci\",\"ac.ci\",\"aéroport.ci\",\"asso.ci\",\"co.ci\",\"com.ci\",\"ed.ci\",\"edu.ci\",\"go.ci\",\"gouv.ci\",\"int.ci\",\"net.ci\",\"or.ci\",\"org.ci\",\"*.ck\",\"!www.ck\",\"cl\",\"co.cl\",\"gob.cl\",\"gov.cl\",\"mil.cl\",\"cm\",\"co.cm\",\"com.cm\",\"gov.cm\",\"net.cm\",\"cn\",\"ac.cn\",\"com.cn\",\"edu.cn\",\"gov.cn\",\"mil.cn\",\"net.cn\",\"org.cn\",\"公司.cn\",\"網絡.cn\",\"网络.cn\",\"ah.cn\",\"bj.cn\",\"cq.cn\",\"fj.cn\",\"gd.cn\",\"gs.cn\",\"gx.cn\",\"gz.cn\",\"ha.cn\",\"hb.cn\",\"he.cn\",\"hi.cn\",\"hk.cn\",\"hl.cn\",\"hn.cn\",\"jl.cn\",\"js.cn\",\"jx.cn\",\"ln.cn\",\"mo.cn\",\"nm.cn\",\"nx.cn\",\"qh.cn\",\"sc.cn\",\"sd.cn\",\"sh.cn\",\"sn.cn\",\"sx.cn\",\"tj.cn\",\"tw.cn\",\"xj.cn\",\"xz.cn\",\"yn.cn\",\"zj.cn\",\"co\",\"com.co\",\"edu.co\",\"gov.co\",\"mil.co\",\"net.co\",\"nom.co\",\"org.co\",\"com\",\"coop\",\"cr\",\"ac.cr\",\"co.cr\",\"ed.cr\",\"fi.cr\",\"go.cr\",\"or.cr\",\"sa.cr\",\"cu\",\"com.cu\",\"edu.cu\",\"gob.cu\",\"inf.cu\",\"nat.cu\",\"net.cu\",\"org.cu\",\"cv\",\"com.cv\",\"edu.cv\",\"id.cv\",\"int.cv\",\"net.cv\",\"nome.cv\",\"org.cv\",\"publ.cv\",\"cw\",\"com.cw\",\"edu.cw\",\"net.cw\",\"org.cw\",\"cx\",\"gov.cx\",\"cy\",\"ac.cy\",\"biz.cy\",\"com.cy\",\"ekloges.cy\",\"gov.cy\",\"ltd.cy\",\"mil.cy\",\"net.cy\",\"org.cy\",\"press.cy\",\"pro.cy\",\"tm.cy\",\"cz\",\"de\",\"dj\",\"dk\",\"dm\",\"co.dm\",\"com.dm\",\"edu.dm\",\"gov.dm\",\"net.dm\",\"org.dm\",\"do\",\"art.do\",\"com.do\",\"edu.do\",\"gob.do\",\"gov.do\",\"mil.do\",\"net.do\",\"org.do\",\"sld.do\",\"web.do\",\"dz\",\"art.dz\",\"asso.dz\",\"com.dz\",\"edu.dz\",\"gov.dz\",\"net.dz\",\"org.dz\",\"pol.dz\",\"soc.dz\",\"tm.dz\",\"ec\",\"com.ec\",\"edu.ec\",\"fin.ec\",\"gob.ec\",\"gov.ec\",\"info.ec\",\"k12.ec\",\"med.ec\",\"mil.ec\",\"net.ec\",\"org.ec\",\"pro.ec\",\"edu\",\"ee\",\"aip.ee\",\"com.ee\",\"edu.ee\",\"fie.ee\",\"gov.ee\",\"lib.ee\",\"med.ee\",\"org.ee\",\"pri.ee\",\"riik.ee\",\"eg\",\"ac.eg\",\"com.eg\",\"edu.eg\",\"eun.eg\",\"gov.eg\",\"info.eg\",\"me.eg\",\"mil.eg\",\"name.eg\",\"net.eg\",\"org.eg\",\"sci.eg\",\"sport.eg\",\"tv.eg\",\"*.er\",\"es\",\"com.es\",\"edu.es\",\"gob.es\",\"nom.es\",\"org.es\",\"et\",\"biz.et\",\"com.et\",\"edu.et\",\"gov.et\",\"info.et\",\"name.et\",\"net.et\",\"org.et\",\"eu\",\"fi\",\"aland.fi\",\"fj\",\"ac.fj\",\"biz.fj\",\"com.fj\",\"gov.fj\",\"info.fj\",\"mil.fj\",\"name.fj\",\"net.fj\",\"org.fj\",\"pro.fj\",\"*.fk\",\"fm\",\"com.fm\",\"edu.fm\",\"net.fm\",\"org.fm\",\"fo\",\"fr\",\"asso.fr\",\"com.fr\",\"gouv.fr\",\"nom.fr\",\"prd.fr\",\"tm.fr\",\"avoues.fr\",\"cci.fr\",\"greta.fr\",\"huissier-justice.fr\",\"ga\",\"gb\",\"gd\",\"edu.gd\",\"gov.gd\",\"ge\",\"com.ge\",\"edu.ge\",\"gov.ge\",\"net.ge\",\"org.ge\",\"pvt.ge\",\"school.ge\",\"gf\",\"gg\",\"co.gg\",\"net.gg\",\"org.gg\",\"gh\",\"com.gh\",\"edu.gh\",\"gov.gh\",\"mil.gh\",\"org.gh\",\"gi\",\"com.gi\",\"edu.gi\",\"gov.gi\",\"ltd.gi\",\"mod.gi\",\"org.gi\",\"gl\",\"co.gl\",\"com.gl\",\"edu.gl\",\"net.gl\",\"org.gl\",\"gm\",\"gn\",\"ac.gn\",\"com.gn\",\"edu.gn\",\"gov.gn\",\"net.gn\",\"org.gn\",\"gov\",\"gp\",\"asso.gp\",\"com.gp\",\"edu.gp\",\"mobi.gp\",\"net.gp\",\"org.gp\",\"gq\",\"gr\",\"com.gr\",\"edu.gr\",\"gov.gr\",\"net.gr\",\"org.gr\",\"gs\",\"gt\",\"com.gt\",\"edu.gt\",\"gob.gt\",\"ind.gt\",\"mil.gt\",\"net.gt\",\"org.gt\",\"gu\",\"com.gu\",\"edu.gu\",\"gov.gu\",\"guam.gu\",\"info.gu\",\"net.gu\",\"org.gu\",\"web.gu\",\"gw\",\"gy\",\"co.gy\",\"com.gy\",\"edu.gy\",\"gov.gy\",\"net.gy\",\"org.gy\",\"hk\",\"com.hk\",\"edu.hk\",\"gov.hk\",\"idv.hk\",\"net.hk\",\"org.hk\",\"个人.hk\",\"個人.hk\",\"公司.hk\",\"政府.hk\",\"敎育.hk\",\"教育.hk\",\"箇人.hk\",\"組織.hk\",\"組织.hk\",\"網絡.hk\",\"網络.hk\",\"组織.hk\",\"组织.hk\",\"网絡.hk\",\"网络.hk\",\"hm\",\"hn\",\"com.hn\",\"edu.hn\",\"gob.hn\",\"mil.hn\",\"net.hn\",\"org.hn\",\"hr\",\"com.hr\",\"from.hr\",\"iz.hr\",\"name.hr\",\"ht\",\"adult.ht\",\"art.ht\",\"asso.ht\",\"com.ht\",\"coop.ht\",\"edu.ht\",\"firm.ht\",\"gouv.ht\",\"info.ht\",\"med.ht\",\"net.ht\",\"org.ht\",\"perso.ht\",\"pol.ht\",\"pro.ht\",\"rel.ht\",\"shop.ht\",\"hu\",\"2000.hu\",\"agrar.hu\",\"bolt.hu\",\"casino.hu\",\"city.hu\",\"co.hu\",\"erotica.hu\",\"erotika.hu\",\"film.hu\",\"forum.hu\",\"games.hu\",\"hotel.hu\",\"info.hu\",\"ingatlan.hu\",\"jogasz.hu\",\"konyvelo.hu\",\"lakas.hu\",\"media.hu\",\"news.hu\",\"org.hu\",\"priv.hu\",\"reklam.hu\",\"sex.hu\",\"shop.hu\",\"sport.hu\",\"suli.hu\",\"szex.hu\",\"tm.hu\",\"tozsde.hu\",\"utazas.hu\",\"video.hu\",\"id\",\"ac.id\",\"biz.id\",\"co.id\",\"desa.id\",\"go.id\",\"mil.id\",\"my.id\",\"net.id\",\"or.id\",\"ponpes.id\",\"sch.id\",\"web.id\",\"ie\",\"gov.ie\",\"il\",\"ac.il\",\"co.il\",\"gov.il\",\"idf.il\",\"k12.il\",\"muni.il\",\"net.il\",\"org.il\",\"ישראל\",\"אקדמיה.ישראל\",\"ישוב.ישראל\",\"צהל.ישראל\",\"ממשל.ישראל\",\"im\",\"ac.im\",\"co.im\",\"ltd.co.im\",\"plc.co.im\",\"com.im\",\"net.im\",\"org.im\",\"tt.im\",\"tv.im\",\"in\",\"5g.in\",\"6g.in\",\"ac.in\",\"ai.in\",\"am.in\",\"bihar.in\",\"biz.in\",\"business.in\",\"ca.in\",\"cn.in\",\"co.in\",\"com.in\",\"coop.in\",\"cs.in\",\"delhi.in\",\"dr.in\",\"edu.in\",\"er.in\",\"firm.in\",\"gen.in\",\"gov.in\",\"gujarat.in\",\"ind.in\",\"info.in\",\"int.in\",\"internet.in\",\"io.in\",\"me.in\",\"mil.in\",\"net.in\",\"nic.in\",\"org.in\",\"pg.in\",\"post.in\",\"pro.in\",\"res.in\",\"travel.in\",\"tv.in\",\"uk.in\",\"up.in\",\"us.in\",\"info\",\"int\",\"eu.int\",\"io\",\"co.io\",\"com.io\",\"edu.io\",\"gov.io\",\"mil.io\",\"net.io\",\"nom.io\",\"org.io\",\"iq\",\"com.iq\",\"edu.iq\",\"gov.iq\",\"mil.iq\",\"net.iq\",\"org.iq\",\"ir\",\"ac.ir\",\"co.ir\",\"gov.ir\",\"id.ir\",\"net.ir\",\"org.ir\",\"sch.ir\",\"ایران.ir\",\"ايران.ir\",\"is\",\"it\",\"edu.it\",\"gov.it\",\"abr.it\",\"abruzzo.it\",\"aosta-valley.it\",\"aostavalley.it\",\"bas.it\",\"basilicata.it\",\"cal.it\",\"calabria.it\",\"cam.it\",\"campania.it\",\"emilia-romagna.it\",\"emiliaromagna.it\",\"emr.it\",\"friuli-v-giulia.it\",\"friuli-ve-giulia.it\",\"friuli-vegiulia.it\",\"friuli-venezia-giulia.it\",\"friuli-veneziagiulia.it\",\"friuli-vgiulia.it\",\"friuliv-giulia.it\",\"friulive-giulia.it\",\"friulivegiulia.it\",\"friulivenezia-giulia.it\",\"friuliveneziagiulia.it\",\"friulivgiulia.it\",\"fvg.it\",\"laz.it\",\"lazio.it\",\"lig.it\",\"liguria.it\",\"lom.it\",\"lombardia.it\",\"lombardy.it\",\"lucania.it\",\"mar.it\",\"marche.it\",\"mol.it\",\"molise.it\",\"piedmont.it\",\"piemonte.it\",\"pmn.it\",\"pug.it\",\"puglia.it\",\"sar.it\",\"sardegna.it\",\"sardinia.it\",\"sic.it\",\"sicilia.it\",\"sicily.it\",\"taa.it\",\"tos.it\",\"toscana.it\",\"trentin-sud-tirol.it\",\"trentin-süd-tirol.it\",\"trentin-sudtirol.it\",\"trentin-südtirol.it\",\"trentin-sued-tirol.it\",\"trentin-suedtirol.it\",\"trentino.it\",\"trentino-a-adige.it\",\"trentino-aadige.it\",\"trentino-alto-adige.it\",\"trentino-altoadige.it\",\"trentino-s-tirol.it\",\"trentino-stirol.it\",\"trentino-sud-tirol.it\",\"trentino-süd-tirol.it\",\"trentino-sudtirol.it\",\"trentino-südtirol.it\",\"trentino-sued-tirol.it\",\"trentino-suedtirol.it\",\"trentinoa-adige.it\",\"trentinoaadige.it\",\"trentinoalto-adige.it\",\"trentinoaltoadige.it\",\"trentinos-tirol.it\",\"trentinostirol.it\",\"trentinosud-tirol.it\",\"trentinosüd-tirol.it\",\"trentinosudtirol.it\",\"trentinosüdtirol.it\",\"trentinosued-tirol.it\",\"trentinosuedtirol.it\",\"trentinsud-tirol.it\",\"trentinsüd-tirol.it\",\"trentinsudtirol.it\",\"trentinsüdtirol.it\",\"trentinsued-tirol.it\",\"trentinsuedtirol.it\",\"tuscany.it\",\"umb.it\",\"umbria.it\",\"val-d-aosta.it\",\"val-daosta.it\",\"vald-aosta.it\",\"valdaosta.it\",\"valle-aosta.it\",\"valle-d-aosta.it\",\"valle-daosta.it\",\"valleaosta.it\",\"valled-aosta.it\",\"valledaosta.it\",\"vallee-aoste.it\",\"vallée-aoste.it\",\"vallee-d-aoste.it\",\"vallée-d-aoste.it\",\"valleeaoste.it\",\"valléeaoste.it\",\"valleedaoste.it\",\"valléedaoste.it\",\"vao.it\",\"vda.it\",\"ven.it\",\"veneto.it\",\"ag.it\",\"agrigento.it\",\"al.it\",\"alessandria.it\",\"alto-adige.it\",\"altoadige.it\",\"an.it\",\"ancona.it\",\"andria-barletta-trani.it\",\"andria-trani-barletta.it\",\"andriabarlettatrani.it\",\"andriatranibarletta.it\",\"ao.it\",\"aosta.it\",\"aoste.it\",\"ap.it\",\"aq.it\",\"aquila.it\",\"ar.it\",\"arezzo.it\",\"ascoli-piceno.it\",\"ascolipiceno.it\",\"asti.it\",\"at.it\",\"av.it\",\"avellino.it\",\"ba.it\",\"balsan.it\",\"balsan-sudtirol.it\",\"balsan-südtirol.it\",\"balsan-suedtirol.it\",\"bari.it\",\"barletta-trani-andria.it\",\"barlettatraniandria.it\",\"belluno.it\",\"benevento.it\",\"bergamo.it\",\"bg.it\",\"bi.it\",\"biella.it\",\"bl.it\",\"bn.it\",\"bo.it\",\"bologna.it\",\"bolzano.it\",\"bolzano-altoadige.it\",\"bozen.it\",\"bozen-sudtirol.it\",\"bozen-südtirol.it\",\"bozen-suedtirol.it\",\"br.it\",\"brescia.it\",\"brindisi.it\",\"bs.it\",\"bt.it\",\"bulsan.it\",\"bulsan-sudtirol.it\",\"bulsan-südtirol.it\",\"bulsan-suedtirol.it\",\"bz.it\",\"ca.it\",\"cagliari.it\",\"caltanissetta.it\",\"campidano-medio.it\",\"campidanomedio.it\",\"campobasso.it\",\"carbonia-iglesias.it\",\"carboniaiglesias.it\",\"carrara-massa.it\",\"carraramassa.it\",\"caserta.it\",\"catania.it\",\"catanzaro.it\",\"cb.it\",\"ce.it\",\"cesena-forli.it\",\"cesena-forlì.it\",\"cesenaforli.it\",\"cesenaforlì.it\",\"ch.it\",\"chieti.it\",\"ci.it\",\"cl.it\",\"cn.it\",\"co.it\",\"como.it\",\"cosenza.it\",\"cr.it\",\"cremona.it\",\"crotone.it\",\"cs.it\",\"ct.it\",\"cuneo.it\",\"cz.it\",\"dell-ogliastra.it\",\"dellogliastra.it\",\"en.it\",\"enna.it\",\"fc.it\",\"fe.it\",\"fermo.it\",\"ferrara.it\",\"fg.it\",\"fi.it\",\"firenze.it\",\"florence.it\",\"fm.it\",\"foggia.it\",\"forli-cesena.it\",\"forlì-cesena.it\",\"forlicesena.it\",\"forlìcesena.it\",\"fr.it\",\"frosinone.it\",\"ge.it\",\"genoa.it\",\"genova.it\",\"go.it\",\"gorizia.it\",\"gr.it\",\"grosseto.it\",\"iglesias-carbonia.it\",\"iglesiascarbonia.it\",\"im.it\",\"imperia.it\",\"is.it\",\"isernia.it\",\"kr.it\",\"la-spezia.it\",\"laquila.it\",\"laspezia.it\",\"latina.it\",\"lc.it\",\"le.it\",\"lecce.it\",\"lecco.it\",\"li.it\",\"livorno.it\",\"lo.it\",\"lodi.it\",\"lt.it\",\"lu.it\",\"lucca.it\",\"macerata.it\",\"mantova.it\",\"massa-carrara.it\",\"massacarrara.it\",\"matera.it\",\"mb.it\",\"mc.it\",\"me.it\",\"medio-campidano.it\",\"mediocampidano.it\",\"messina.it\",\"mi.it\",\"milan.it\",\"milano.it\",\"mn.it\",\"mo.it\",\"modena.it\",\"monza.it\",\"monza-brianza.it\",\"monza-e-della-brianza.it\",\"monzabrianza.it\",\"monzaebrianza.it\",\"monzaedellabrianza.it\",\"ms.it\",\"mt.it\",\"na.it\",\"naples.it\",\"napoli.it\",\"no.it\",\"novara.it\",\"nu.it\",\"nuoro.it\",\"og.it\",\"ogliastra.it\",\"olbia-tempio.it\",\"olbiatempio.it\",\"or.it\",\"oristano.it\",\"ot.it\",\"pa.it\",\"padova.it\",\"padua.it\",\"palermo.it\",\"parma.it\",\"pavia.it\",\"pc.it\",\"pd.it\",\"pe.it\",\"perugia.it\",\"pesaro-urbino.it\",\"pesarourbino.it\",\"pescara.it\",\"pg.it\",\"pi.it\",\"piacenza.it\",\"pisa.it\",\"pistoia.it\",\"pn.it\",\"po.it\",\"pordenone.it\",\"potenza.it\",\"pr.it\",\"prato.it\",\"pt.it\",\"pu.it\",\"pv.it\",\"pz.it\",\"ra.it\",\"ragusa.it\",\"ravenna.it\",\"rc.it\",\"re.it\",\"reggio-calabria.it\",\"reggio-emilia.it\",\"reggiocalabria.it\",\"reggioemilia.it\",\"rg.it\",\"ri.it\",\"rieti.it\",\"rimini.it\",\"rm.it\",\"rn.it\",\"ro.it\",\"roma.it\",\"rome.it\",\"rovigo.it\",\"sa.it\",\"salerno.it\",\"sassari.it\",\"savona.it\",\"si.it\",\"siena.it\",\"siracusa.it\",\"so.it\",\"sondrio.it\",\"sp.it\",\"sr.it\",\"ss.it\",\"südtirol.it\",\"suedtirol.it\",\"sv.it\",\"ta.it\",\"taranto.it\",\"te.it\",\"tempio-olbia.it\",\"tempioolbia.it\",\"teramo.it\",\"terni.it\",\"tn.it\",\"to.it\",\"torino.it\",\"tp.it\",\"tr.it\",\"trani-andria-barletta.it\",\"trani-barletta-andria.it\",\"traniandriabarletta.it\",\"tranibarlettaandria.it\",\"trapani.it\",\"trento.it\",\"treviso.it\",\"trieste.it\",\"ts.it\",\"turin.it\",\"tv.it\",\"ud.it\",\"udine.it\",\"urbino-pesaro.it\",\"urbinopesaro.it\",\"va.it\",\"varese.it\",\"vb.it\",\"vc.it\",\"ve.it\",\"venezia.it\",\"venice.it\",\"verbania.it\",\"vercelli.it\",\"verona.it\",\"vi.it\",\"vibo-valentia.it\",\"vibovalentia.it\",\"vicenza.it\",\"viterbo.it\",\"vr.it\",\"vs.it\",\"vt.it\",\"vv.it\",\"je\",\"co.je\",\"net.je\",\"org.je\",\"*.jm\",\"jo\",\"agri.jo\",\"ai.jo\",\"com.jo\",\"edu.jo\",\"eng.jo\",\"fm.jo\",\"gov.jo\",\"mil.jo\",\"net.jo\",\"org.jo\",\"per.jo\",\"phd.jo\",\"sch.jo\",\"tv.jo\",\"jobs\",\"jp\",\"ac.jp\",\"ad.jp\",\"co.jp\",\"ed.jp\",\"go.jp\",\"gr.jp\",\"lg.jp\",\"ne.jp\",\"or.jp\",\"aichi.jp\",\"akita.jp\",\"aomori.jp\",\"chiba.jp\",\"ehime.jp\",\"fukui.jp\",\"fukuoka.jp\",\"fukushima.jp\",\"gifu.jp\",\"gunma.jp\",\"hiroshima.jp\",\"hokkaido.jp\",\"hyogo.jp\",\"ibaraki.jp\",\"ishikawa.jp\",\"iwate.jp\",\"kagawa.jp\",\"kagoshima.jp\",\"kanagawa.jp\",\"kochi.jp\",\"kumamoto.jp\",\"kyoto.jp\",\"mie.jp\",\"miyagi.jp\",\"miyazaki.jp\",\"nagano.jp\",\"nagasaki.jp\",\"nara.jp\",\"niigata.jp\",\"oita.jp\",\"okayama.jp\",\"okinawa.jp\",\"osaka.jp\",\"saga.jp\",\"saitama.jp\",\"shiga.jp\",\"shimane.jp\",\"shizuoka.jp\",\"tochigi.jp\",\"tokushima.jp\",\"tokyo.jp\",\"tottori.jp\",\"toyama.jp\",\"wakayama.jp\",\"yamagata.jp\",\"yamaguchi.jp\",\"yamanashi.jp\",\"三重.jp\",\"京都.jp\",\"佐賀.jp\",\"兵庫.jp\",\"北海道.jp\",\"千葉.jp\",\"和歌山.jp\",\"埼玉.jp\",\"大分.jp\",\"大阪.jp\",\"奈良.jp\",\"宮城.jp\",\"宮崎.jp\",\"富山.jp\",\"山口.jp\",\"山形.jp\",\"山梨.jp\",\"岐阜.jp\",\"岡山.jp\",\"岩手.jp\",\"島根.jp\",\"広島.jp\",\"徳島.jp\",\"愛媛.jp\",\"愛知.jp\",\"新潟.jp\",\"東京.jp\",\"栃木.jp\",\"沖縄.jp\",\"滋賀.jp\",\"熊本.jp\",\"石川.jp\",\"神奈川.jp\",\"福井.jp\",\"福岡.jp\",\"福島.jp\",\"秋田.jp\",\"群馬.jp\",\"茨城.jp\",\"長崎.jp\",\"長野.jp\",\"青森.jp\",\"静岡.jp\",\"香川.jp\",\"高知.jp\",\"鳥取.jp\",\"鹿児島.jp\",\"*.kawasaki.jp\",\"!city.kawasaki.jp\",\"*.kitakyushu.jp\",\"!city.kitakyushu.jp\",\"*.kobe.jp\",\"!city.kobe.jp\",\"*.nagoya.jp\",\"!city.nagoya.jp\",\"*.sapporo.jp\",\"!city.sapporo.jp\",\"*.sendai.jp\",\"!city.sendai.jp\",\"*.yokohama.jp\",\"!city.yokohama.jp\",\"aisai.aichi.jp\",\"ama.aichi.jp\",\"anjo.aichi.jp\",\"asuke.aichi.jp\",\"chiryu.aichi.jp\",\"chita.aichi.jp\",\"fuso.aichi.jp\",\"gamagori.aichi.jp\",\"handa.aichi.jp\",\"hazu.aichi.jp\",\"hekinan.aichi.jp\",\"higashiura.aichi.jp\",\"ichinomiya.aichi.jp\",\"inazawa.aichi.jp\",\"inuyama.aichi.jp\",\"isshiki.aichi.jp\",\"iwakura.aichi.jp\",\"kanie.aichi.jp\",\"kariya.aichi.jp\",\"kasugai.aichi.jp\",\"kira.aichi.jp\",\"kiyosu.aichi.jp\",\"komaki.aichi.jp\",\"konan.aichi.jp\",\"kota.aichi.jp\",\"mihama.aichi.jp\",\"miyoshi.aichi.jp\",\"nishio.aichi.jp\",\"nisshin.aichi.jp\",\"obu.aichi.jp\",\"oguchi.aichi.jp\",\"oharu.aichi.jp\",\"okazaki.aichi.jp\",\"owariasahi.aichi.jp\",\"seto.aichi.jp\",\"shikatsu.aichi.jp\",\"shinshiro.aichi.jp\",\"shitara.aichi.jp\",\"tahara.aichi.jp\",\"takahama.aichi.jp\",\"tobishima.aichi.jp\",\"toei.aichi.jp\",\"togo.aichi.jp\",\"tokai.aichi.jp\",\"tokoname.aichi.jp\",\"toyoake.aichi.jp\",\"toyohashi.aichi.jp\",\"toyokawa.aichi.jp\",\"toyone.aichi.jp\",\"toyota.aichi.jp\",\"tsushima.aichi.jp\",\"yatomi.aichi.jp\",\"akita.akita.jp\",\"daisen.akita.jp\",\"fujisato.akita.jp\",\"gojome.akita.jp\",\"hachirogata.akita.jp\",\"happou.akita.jp\",\"higashinaruse.akita.jp\",\"honjo.akita.jp\",\"honjyo.akita.jp\",\"ikawa.akita.jp\",\"kamikoani.akita.jp\",\"kamioka.akita.jp\",\"katagami.akita.jp\",\"kazuno.akita.jp\",\"kitaakita.akita.jp\",\"kosaka.akita.jp\",\"kyowa.akita.jp\",\"misato.akita.jp\",\"mitane.akita.jp\",\"moriyoshi.akita.jp\",\"nikaho.akita.jp\",\"noshiro.akita.jp\",\"odate.akita.jp\",\"oga.akita.jp\",\"ogata.akita.jp\",\"semboku.akita.jp\",\"yokote.akita.jp\",\"yurihonjo.akita.jp\",\"aomori.aomori.jp\",\"gonohe.aomori.jp\",\"hachinohe.aomori.jp\",\"hashikami.aomori.jp\",\"hiranai.aomori.jp\",\"hirosaki.aomori.jp\",\"itayanagi.aomori.jp\",\"kuroishi.aomori.jp\",\"misawa.aomori.jp\",\"mutsu.aomori.jp\",\"nakadomari.aomori.jp\",\"noheji.aomori.jp\",\"oirase.aomori.jp\",\"owani.aomori.jp\",\"rokunohe.aomori.jp\",\"sannohe.aomori.jp\",\"shichinohe.aomori.jp\",\"shingo.aomori.jp\",\"takko.aomori.jp\",\"towada.aomori.jp\",\"tsugaru.aomori.jp\",\"tsuruta.aomori.jp\",\"abiko.chiba.jp\",\"asahi.chiba.jp\",\"chonan.chiba.jp\",\"chosei.chiba.jp\",\"choshi.chiba.jp\",\"chuo.chiba.jp\",\"funabashi.chiba.jp\",\"futtsu.chiba.jp\",\"hanamigawa.chiba.jp\",\"ichihara.chiba.jp\",\"ichikawa.chiba.jp\",\"ichinomiya.chiba.jp\",\"inzai.chiba.jp\",\"isumi.chiba.jp\",\"kamagaya.chiba.jp\",\"kamogawa.chiba.jp\",\"kashiwa.chiba.jp\",\"katori.chiba.jp\",\"katsuura.chiba.jp\",\"kimitsu.chiba.jp\",\"kisarazu.chiba.jp\",\"kozaki.chiba.jp\",\"kujukuri.chiba.jp\",\"kyonan.chiba.jp\",\"matsudo.chiba.jp\",\"midori.chiba.jp\",\"mihama.chiba.jp\",\"minamiboso.chiba.jp\",\"mobara.chiba.jp\",\"mutsuzawa.chiba.jp\",\"nagara.chiba.jp\",\"nagareyama.chiba.jp\",\"narashino.chiba.jp\",\"narita.chiba.jp\",\"noda.chiba.jp\",\"oamishirasato.chiba.jp\",\"omigawa.chiba.jp\",\"onjuku.chiba.jp\",\"otaki.chiba.jp\",\"sakae.chiba.jp\",\"sakura.chiba.jp\",\"shimofusa.chiba.jp\",\"shirako.chiba.jp\",\"shiroi.chiba.jp\",\"shisui.chiba.jp\",\"sodegaura.chiba.jp\",\"sosa.chiba.jp\",\"tako.chiba.jp\",\"tateyama.chiba.jp\",\"togane.chiba.jp\",\"tohnosho.chiba.jp\",\"tomisato.chiba.jp\",\"urayasu.chiba.jp\",\"yachimata.chiba.jp\",\"yachiyo.chiba.jp\",\"yokaichiba.chiba.jp\",\"yokoshibahikari.chiba.jp\",\"yotsukaido.chiba.jp\",\"ainan.ehime.jp\",\"honai.ehime.jp\",\"ikata.ehime.jp\",\"imabari.ehime.jp\",\"iyo.ehime.jp\",\"kamijima.ehime.jp\",\"kihoku.ehime.jp\",\"kumakogen.ehime.jp\",\"masaki.ehime.jp\",\"matsuno.ehime.jp\",\"matsuyama.ehime.jp\",\"namikata.ehime.jp\",\"niihama.ehime.jp\",\"ozu.ehime.jp\",\"saijo.ehime.jp\",\"seiyo.ehime.jp\",\"shikokuchuo.ehime.jp\",\"tobe.ehime.jp\",\"toon.ehime.jp\",\"uchiko.ehime.jp\",\"uwajima.ehime.jp\",\"yawatahama.ehime.jp\",\"echizen.fukui.jp\",\"eiheiji.fukui.jp\",\"fukui.fukui.jp\",\"ikeda.fukui.jp\",\"katsuyama.fukui.jp\",\"mihama.fukui.jp\",\"minamiechizen.fukui.jp\",\"obama.fukui.jp\",\"ohi.fukui.jp\",\"ono.fukui.jp\",\"sabae.fukui.jp\",\"sakai.fukui.jp\",\"takahama.fukui.jp\",\"tsuruga.fukui.jp\",\"wakasa.fukui.jp\",\"ashiya.fukuoka.jp\",\"buzen.fukuoka.jp\",\"chikugo.fukuoka.jp\",\"chikuho.fukuoka.jp\",\"chikujo.fukuoka.jp\",\"chikushino.fukuoka.jp\",\"chikuzen.fukuoka.jp\",\"chuo.fukuoka.jp\",\"dazaifu.fukuoka.jp\",\"fukuchi.fukuoka.jp\",\"hakata.fukuoka.jp\",\"higashi.fukuoka.jp\",\"hirokawa.fukuoka.jp\",\"hisayama.fukuoka.jp\",\"iizuka.fukuoka.jp\",\"inatsuki.fukuoka.jp\",\"kaho.fukuoka.jp\",\"kasuga.fukuoka.jp\",\"kasuya.fukuoka.jp\",\"kawara.fukuoka.jp\",\"keisen.fukuoka.jp\",\"koga.fukuoka.jp\",\"kurate.fukuoka.jp\",\"kurogi.fukuoka.jp\",\"kurume.fukuoka.jp\",\"minami.fukuoka.jp\",\"miyako.fukuoka.jp\",\"miyama.fukuoka.jp\",\"miyawaka.fukuoka.jp\",\"mizumaki.fukuoka.jp\",\"munakata.fukuoka.jp\",\"nakagawa.fukuoka.jp\",\"nakama.fukuoka.jp\",\"nishi.fukuoka.jp\",\"nogata.fukuoka.jp\",\"ogori.fukuoka.jp\",\"okagaki.fukuoka.jp\",\"okawa.fukuoka.jp\",\"oki.fukuoka.jp\",\"omuta.fukuoka.jp\",\"onga.fukuoka.jp\",\"onojo.fukuoka.jp\",\"oto.fukuoka.jp\",\"saigawa.fukuoka.jp\",\"sasaguri.fukuoka.jp\",\"shingu.fukuoka.jp\",\"shinyoshitomi.fukuoka.jp\",\"shonai.fukuoka.jp\",\"soeda.fukuoka.jp\",\"sue.fukuoka.jp\",\"tachiarai.fukuoka.jp\",\"tagawa.fukuoka.jp\",\"takata.fukuoka.jp\",\"toho.fukuoka.jp\",\"toyotsu.fukuoka.jp\",\"tsuiki.fukuoka.jp\",\"ukiha.fukuoka.jp\",\"umi.fukuoka.jp\",\"usui.fukuoka.jp\",\"yamada.fukuoka.jp\",\"yame.fukuoka.jp\",\"yanagawa.fukuoka.jp\",\"yukuhashi.fukuoka.jp\",\"aizubange.fukushima.jp\",\"aizumisato.fukushima.jp\",\"aizuwakamatsu.fukushima.jp\",\"asakawa.fukushima.jp\",\"bandai.fukushima.jp\",\"date.fukushima.jp\",\"fukushima.fukushima.jp\",\"furudono.fukushima.jp\",\"futaba.fukushima.jp\",\"hanawa.fukushima.jp\",\"higashi.fukushima.jp\",\"hirata.fukushima.jp\",\"hirono.fukushima.jp\",\"iitate.fukushima.jp\",\"inawashiro.fukushima.jp\",\"ishikawa.fukushima.jp\",\"iwaki.fukushima.jp\",\"izumizaki.fukushima.jp\",\"kagamiishi.fukushima.jp\",\"kaneyama.fukushima.jp\",\"kawamata.fukushima.jp\",\"kitakata.fukushima.jp\",\"kitashiobara.fukushima.jp\",\"koori.fukushima.jp\",\"koriyama.fukushima.jp\",\"kunimi.fukushima.jp\",\"miharu.fukushima.jp\",\"mishima.fukushima.jp\",\"namie.fukushima.jp\",\"nango.fukushima.jp\",\"nishiaizu.fukushima.jp\",\"nishigo.fukushima.jp\",\"okuma.fukushima.jp\",\"omotego.fukushima.jp\",\"ono.fukushima.jp\",\"otama.fukushima.jp\",\"samegawa.fukushima.jp\",\"shimogo.fukushima.jp\",\"shirakawa.fukushima.jp\",\"showa.fukushima.jp\",\"soma.fukushima.jp\",\"sukagawa.fukushima.jp\",\"taishin.fukushima.jp\",\"tamakawa.fukushima.jp\",\"tanagura.fukushima.jp\",\"tenei.fukushima.jp\",\"yabuki.fukushima.jp\",\"yamato.fukushima.jp\",\"yamatsuri.fukushima.jp\",\"yanaizu.fukushima.jp\",\"yugawa.fukushima.jp\",\"anpachi.gifu.jp\",\"ena.gifu.jp\",\"gifu.gifu.jp\",\"ginan.gifu.jp\",\"godo.gifu.jp\",\"gujo.gifu.jp\",\"hashima.gifu.jp\",\"hichiso.gifu.jp\",\"hida.gifu.jp\",\"higashishirakawa.gifu.jp\",\"ibigawa.gifu.jp\",\"ikeda.gifu.jp\",\"kakamigahara.gifu.jp\",\"kani.gifu.jp\",\"kasahara.gifu.jp\",\"kasamatsu.gifu.jp\",\"kawaue.gifu.jp\",\"kitagata.gifu.jp\",\"mino.gifu.jp\",\"minokamo.gifu.jp\",\"mitake.gifu.jp\",\"mizunami.gifu.jp\",\"motosu.gifu.jp\",\"nakatsugawa.gifu.jp\",\"ogaki.gifu.jp\",\"sakahogi.gifu.jp\",\"seki.gifu.jp\",\"sekigahara.gifu.jp\",\"shirakawa.gifu.jp\",\"tajimi.gifu.jp\",\"takayama.gifu.jp\",\"tarui.gifu.jp\",\"toki.gifu.jp\",\"tomika.gifu.jp\",\"wanouchi.gifu.jp\",\"yamagata.gifu.jp\",\"yaotsu.gifu.jp\",\"yoro.gifu.jp\",\"annaka.gunma.jp\",\"chiyoda.gunma.jp\",\"fujioka.gunma.jp\",\"higashiagatsuma.gunma.jp\",\"isesaki.gunma.jp\",\"itakura.gunma.jp\",\"kanna.gunma.jp\",\"kanra.gunma.jp\",\"katashina.gunma.jp\",\"kawaba.gunma.jp\",\"kiryu.gunma.jp\",\"kusatsu.gunma.jp\",\"maebashi.gunma.jp\",\"meiwa.gunma.jp\",\"midori.gunma.jp\",\"minakami.gunma.jp\",\"naganohara.gunma.jp\",\"nakanojo.gunma.jp\",\"nanmoku.gunma.jp\",\"numata.gunma.jp\",\"oizumi.gunma.jp\",\"ora.gunma.jp\",\"ota.gunma.jp\",\"shibukawa.gunma.jp\",\"shimonita.gunma.jp\",\"shinto.gunma.jp\",\"showa.gunma.jp\",\"takasaki.gunma.jp\",\"takayama.gunma.jp\",\"tamamura.gunma.jp\",\"tatebayashi.gunma.jp\",\"tomioka.gunma.jp\",\"tsukiyono.gunma.jp\",\"tsumagoi.gunma.jp\",\"ueno.gunma.jp\",\"yoshioka.gunma.jp\",\"asaminami.hiroshima.jp\",\"daiwa.hiroshima.jp\",\"etajima.hiroshima.jp\",\"fuchu.hiroshima.jp\",\"fukuyama.hiroshima.jp\",\"hatsukaichi.hiroshima.jp\",\"higashihiroshima.hiroshima.jp\",\"hongo.hiroshima.jp\",\"jinsekikogen.hiroshima.jp\",\"kaita.hiroshima.jp\",\"kui.hiroshima.jp\",\"kumano.hiroshima.jp\",\"kure.hiroshima.jp\",\"mihara.hiroshima.jp\",\"miyoshi.hiroshima.jp\",\"naka.hiroshima.jp\",\"onomichi.hiroshima.jp\",\"osakikamijima.hiroshima.jp\",\"otake.hiroshima.jp\",\"saka.hiroshima.jp\",\"sera.hiroshima.jp\",\"seranishi.hiroshima.jp\",\"shinichi.hiroshima.jp\",\"shobara.hiroshima.jp\",\"takehara.hiroshima.jp\",\"abashiri.hokkaido.jp\",\"abira.hokkaido.jp\",\"aibetsu.hokkaido.jp\",\"akabira.hokkaido.jp\",\"akkeshi.hokkaido.jp\",\"asahikawa.hokkaido.jp\",\"ashibetsu.hokkaido.jp\",\"ashoro.hokkaido.jp\",\"assabu.hokkaido.jp\",\"atsuma.hokkaido.jp\",\"bibai.hokkaido.jp\",\"biei.hokkaido.jp\",\"bifuka.hokkaido.jp\",\"bihoro.hokkaido.jp\",\"biratori.hokkaido.jp\",\"chippubetsu.hokkaido.jp\",\"chitose.hokkaido.jp\",\"date.hokkaido.jp\",\"ebetsu.hokkaido.jp\",\"embetsu.hokkaido.jp\",\"eniwa.hokkaido.jp\",\"erimo.hokkaido.jp\",\"esan.hokkaido.jp\",\"esashi.hokkaido.jp\",\"fukagawa.hokkaido.jp\",\"fukushima.hokkaido.jp\",\"furano.hokkaido.jp\",\"furubira.hokkaido.jp\",\"haboro.hokkaido.jp\",\"hakodate.hokkaido.jp\",\"hamatonbetsu.hokkaido.jp\",\"hidaka.hokkaido.jp\",\"higashikagura.hokkaido.jp\",\"higashikawa.hokkaido.jp\",\"hiroo.hokkaido.jp\",\"hokuryu.hokkaido.jp\",\"hokuto.hokkaido.jp\",\"honbetsu.hokkaido.jp\",\"horokanai.hokkaido.jp\",\"horonobe.hokkaido.jp\",\"ikeda.hokkaido.jp\",\"imakane.hokkaido.jp\",\"ishikari.hokkaido.jp\",\"iwamizawa.hokkaido.jp\",\"iwanai.hokkaido.jp\",\"kamifurano.hokkaido.jp\",\"kamikawa.hokkaido.jp\",\"kamishihoro.hokkaido.jp\",\"kamisunagawa.hokkaido.jp\",\"kamoenai.hokkaido.jp\",\"kayabe.hokkaido.jp\",\"kembuchi.hokkaido.jp\",\"kikonai.hokkaido.jp\",\"kimobetsu.hokkaido.jp\",\"kitahiroshima.hokkaido.jp\",\"kitami.hokkaido.jp\",\"kiyosato.hokkaido.jp\",\"koshimizu.hokkaido.jp\",\"kunneppu.hokkaido.jp\",\"kuriyama.hokkaido.jp\",\"kuromatsunai.hokkaido.jp\",\"kushiro.hokkaido.jp\",\"kutchan.hokkaido.jp\",\"kyowa.hokkaido.jp\",\"mashike.hokkaido.jp\",\"matsumae.hokkaido.jp\",\"mikasa.hokkaido.jp\",\"minamifurano.hokkaido.jp\",\"mombetsu.hokkaido.jp\",\"moseushi.hokkaido.jp\",\"mukawa.hokkaido.jp\",\"muroran.hokkaido.jp\",\"naie.hokkaido.jp\",\"nakagawa.hokkaido.jp\",\"nakasatsunai.hokkaido.jp\",\"nakatombetsu.hokkaido.jp\",\"nanae.hokkaido.jp\",\"nanporo.hokkaido.jp\",\"nayoro.hokkaido.jp\",\"nemuro.hokkaido.jp\",\"niikappu.hokkaido.jp\",\"niki.hokkaido.jp\",\"nishiokoppe.hokkaido.jp\",\"noboribetsu.hokkaido.jp\",\"numata.hokkaido.jp\",\"obihiro.hokkaido.jp\",\"obira.hokkaido.jp\",\"oketo.hokkaido.jp\",\"okoppe.hokkaido.jp\",\"otaru.hokkaido.jp\",\"otobe.hokkaido.jp\",\"otofuke.hokkaido.jp\",\"otoineppu.hokkaido.jp\",\"oumu.hokkaido.jp\",\"ozora.hokkaido.jp\",\"pippu.hokkaido.jp\",\"rankoshi.hokkaido.jp\",\"rebun.hokkaido.jp\",\"rikubetsu.hokkaido.jp\",\"rishiri.hokkaido.jp\",\"rishirifuji.hokkaido.jp\",\"saroma.hokkaido.jp\",\"sarufutsu.hokkaido.jp\",\"shakotan.hokkaido.jp\",\"shari.hokkaido.jp\",\"shibecha.hokkaido.jp\",\"shibetsu.hokkaido.jp\",\"shikabe.hokkaido.jp\",\"shikaoi.hokkaido.jp\",\"shimamaki.hokkaido.jp\",\"shimizu.hokkaido.jp\",\"shimokawa.hokkaido.jp\",\"shinshinotsu.hokkaido.jp\",\"shintoku.hokkaido.jp\",\"shiranuka.hokkaido.jp\",\"shiraoi.hokkaido.jp\",\"shiriuchi.hokkaido.jp\",\"sobetsu.hokkaido.jp\",\"sunagawa.hokkaido.jp\",\"taiki.hokkaido.jp\",\"takasu.hokkaido.jp\",\"takikawa.hokkaido.jp\",\"takinoue.hokkaido.jp\",\"teshikaga.hokkaido.jp\",\"tobetsu.hokkaido.jp\",\"tohma.hokkaido.jp\",\"tomakomai.hokkaido.jp\",\"tomari.hokkaido.jp\",\"toya.hokkaido.jp\",\"toyako.hokkaido.jp\",\"toyotomi.hokkaido.jp\",\"toyoura.hokkaido.jp\",\"tsubetsu.hokkaido.jp\",\"tsukigata.hokkaido.jp\",\"urakawa.hokkaido.jp\",\"urausu.hokkaido.jp\",\"uryu.hokkaido.jp\",\"utashinai.hokkaido.jp\",\"wakkanai.hokkaido.jp\",\"wassamu.hokkaido.jp\",\"yakumo.hokkaido.jp\",\"yoichi.hokkaido.jp\",\"aioi.hyogo.jp\",\"akashi.hyogo.jp\",\"ako.hyogo.jp\",\"amagasaki.hyogo.jp\",\"aogaki.hyogo.jp\",\"asago.hyogo.jp\",\"ashiya.hyogo.jp\",\"awaji.hyogo.jp\",\"fukusaki.hyogo.jp\",\"goshiki.hyogo.jp\",\"harima.hyogo.jp\",\"himeji.hyogo.jp\",\"ichikawa.hyogo.jp\",\"inagawa.hyogo.jp\",\"itami.hyogo.jp\",\"kakogawa.hyogo.jp\",\"kamigori.hyogo.jp\",\"kamikawa.hyogo.jp\",\"kasai.hyogo.jp\",\"kasuga.hyogo.jp\",\"kawanishi.hyogo.jp\",\"miki.hyogo.jp\",\"minamiawaji.hyogo.jp\",\"nishinomiya.hyogo.jp\",\"nishiwaki.hyogo.jp\",\"ono.hyogo.jp\",\"sanda.hyogo.jp\",\"sannan.hyogo.jp\",\"sasayama.hyogo.jp\",\"sayo.hyogo.jp\",\"shingu.hyogo.jp\",\"shinonsen.hyogo.jp\",\"shiso.hyogo.jp\",\"sumoto.hyogo.jp\",\"taishi.hyogo.jp\",\"taka.hyogo.jp\",\"takarazuka.hyogo.jp\",\"takasago.hyogo.jp\",\"takino.hyogo.jp\",\"tamba.hyogo.jp\",\"tatsuno.hyogo.jp\",\"toyooka.hyogo.jp\",\"yabu.hyogo.jp\",\"yashiro.hyogo.jp\",\"yoka.hyogo.jp\",\"yokawa.hyogo.jp\",\"ami.ibaraki.jp\",\"asahi.ibaraki.jp\",\"bando.ibaraki.jp\",\"chikusei.ibaraki.jp\",\"daigo.ibaraki.jp\",\"fujishiro.ibaraki.jp\",\"hitachi.ibaraki.jp\",\"hitachinaka.ibaraki.jp\",\"hitachiomiya.ibaraki.jp\",\"hitachiota.ibaraki.jp\",\"ibaraki.ibaraki.jp\",\"ina.ibaraki.jp\",\"inashiki.ibaraki.jp\",\"itako.ibaraki.jp\",\"iwama.ibaraki.jp\",\"joso.ibaraki.jp\",\"kamisu.ibaraki.jp\",\"kasama.ibaraki.jp\",\"kashima.ibaraki.jp\",\"kasumigaura.ibaraki.jp\",\"koga.ibaraki.jp\",\"miho.ibaraki.jp\",\"mito.ibaraki.jp\",\"moriya.ibaraki.jp\",\"naka.ibaraki.jp\",\"namegata.ibaraki.jp\",\"oarai.ibaraki.jp\",\"ogawa.ibaraki.jp\",\"omitama.ibaraki.jp\",\"ryugasaki.ibaraki.jp\",\"sakai.ibaraki.jp\",\"sakuragawa.ibaraki.jp\",\"shimodate.ibaraki.jp\",\"shimotsuma.ibaraki.jp\",\"shirosato.ibaraki.jp\",\"sowa.ibaraki.jp\",\"suifu.ibaraki.jp\",\"takahagi.ibaraki.jp\",\"tamatsukuri.ibaraki.jp\",\"tokai.ibaraki.jp\",\"tomobe.ibaraki.jp\",\"tone.ibaraki.jp\",\"toride.ibaraki.jp\",\"tsuchiura.ibaraki.jp\",\"tsukuba.ibaraki.jp\",\"uchihara.ibaraki.jp\",\"ushiku.ibaraki.jp\",\"yachiyo.ibaraki.jp\",\"yamagata.ibaraki.jp\",\"yawara.ibaraki.jp\",\"yuki.ibaraki.jp\",\"anamizu.ishikawa.jp\",\"hakui.ishikawa.jp\",\"hakusan.ishikawa.jp\",\"kaga.ishikawa.jp\",\"kahoku.ishikawa.jp\",\"kanazawa.ishikawa.jp\",\"kawakita.ishikawa.jp\",\"komatsu.ishikawa.jp\",\"nakanoto.ishikawa.jp\",\"nanao.ishikawa.jp\",\"nomi.ishikawa.jp\",\"nonoichi.ishikawa.jp\",\"noto.ishikawa.jp\",\"shika.ishikawa.jp\",\"suzu.ishikawa.jp\",\"tsubata.ishikawa.jp\",\"tsurugi.ishikawa.jp\",\"uchinada.ishikawa.jp\",\"wajima.ishikawa.jp\",\"fudai.iwate.jp\",\"fujisawa.iwate.jp\",\"hanamaki.iwate.jp\",\"hiraizumi.iwate.jp\",\"hirono.iwate.jp\",\"ichinohe.iwate.jp\",\"ichinoseki.iwate.jp\",\"iwaizumi.iwate.jp\",\"iwate.iwate.jp\",\"joboji.iwate.jp\",\"kamaishi.iwate.jp\",\"kanegasaki.iwate.jp\",\"karumai.iwate.jp\",\"kawai.iwate.jp\",\"kitakami.iwate.jp\",\"kuji.iwate.jp\",\"kunohe.iwate.jp\",\"kuzumaki.iwate.jp\",\"miyako.iwate.jp\",\"mizusawa.iwate.jp\",\"morioka.iwate.jp\",\"ninohe.iwate.jp\",\"noda.iwate.jp\",\"ofunato.iwate.jp\",\"oshu.iwate.jp\",\"otsuchi.iwate.jp\",\"rikuzentakata.iwate.jp\",\"shiwa.iwate.jp\",\"shizukuishi.iwate.jp\",\"sumita.iwate.jp\",\"tanohata.iwate.jp\",\"tono.iwate.jp\",\"yahaba.iwate.jp\",\"yamada.iwate.jp\",\"ayagawa.kagawa.jp\",\"higashikagawa.kagawa.jp\",\"kanonji.kagawa.jp\",\"kotohira.kagawa.jp\",\"manno.kagawa.jp\",\"marugame.kagawa.jp\",\"mitoyo.kagawa.jp\",\"naoshima.kagawa.jp\",\"sanuki.kagawa.jp\",\"tadotsu.kagawa.jp\",\"takamatsu.kagawa.jp\",\"tonosho.kagawa.jp\",\"uchinomi.kagawa.jp\",\"utazu.kagawa.jp\",\"zentsuji.kagawa.jp\",\"akune.kagoshima.jp\",\"amami.kagoshima.jp\",\"hioki.kagoshima.jp\",\"isa.kagoshima.jp\",\"isen.kagoshima.jp\",\"izumi.kagoshima.jp\",\"kagoshima.kagoshima.jp\",\"kanoya.kagoshima.jp\",\"kawanabe.kagoshima.jp\",\"kinko.kagoshima.jp\",\"kouyama.kagoshima.jp\",\"makurazaki.kagoshima.jp\",\"matsumoto.kagoshima.jp\",\"minamitane.kagoshima.jp\",\"nakatane.kagoshima.jp\",\"nishinoomote.kagoshima.jp\",\"satsumasendai.kagoshima.jp\",\"soo.kagoshima.jp\",\"tarumizu.kagoshima.jp\",\"yusui.kagoshima.jp\",\"aikawa.kanagawa.jp\",\"atsugi.kanagawa.jp\",\"ayase.kanagawa.jp\",\"chigasaki.kanagawa.jp\",\"ebina.kanagawa.jp\",\"fujisawa.kanagawa.jp\",\"hadano.kanagawa.jp\",\"hakone.kanagawa.jp\",\"hiratsuka.kanagawa.jp\",\"isehara.kanagawa.jp\",\"kaisei.kanagawa.jp\",\"kamakura.kanagawa.jp\",\"kiyokawa.kanagawa.jp\",\"matsuda.kanagawa.jp\",\"minamiashigara.kanagawa.jp\",\"miura.kanagawa.jp\",\"nakai.kanagawa.jp\",\"ninomiya.kanagawa.jp\",\"odawara.kanagawa.jp\",\"oi.kanagawa.jp\",\"oiso.kanagawa.jp\",\"sagamihara.kanagawa.jp\",\"samukawa.kanagawa.jp\",\"tsukui.kanagawa.jp\",\"yamakita.kanagawa.jp\",\"yamato.kanagawa.jp\",\"yokosuka.kanagawa.jp\",\"yugawara.kanagawa.jp\",\"zama.kanagawa.jp\",\"zushi.kanagawa.jp\",\"aki.kochi.jp\",\"geisei.kochi.jp\",\"hidaka.kochi.jp\",\"higashitsuno.kochi.jp\",\"ino.kochi.jp\",\"kagami.kochi.jp\",\"kami.kochi.jp\",\"kitagawa.kochi.jp\",\"kochi.kochi.jp\",\"mihara.kochi.jp\",\"motoyama.kochi.jp\",\"muroto.kochi.jp\",\"nahari.kochi.jp\",\"nakamura.kochi.jp\",\"nankoku.kochi.jp\",\"nishitosa.kochi.jp\",\"niyodogawa.kochi.jp\",\"ochi.kochi.jp\",\"okawa.kochi.jp\",\"otoyo.kochi.jp\",\"otsuki.kochi.jp\",\"sakawa.kochi.jp\",\"sukumo.kochi.jp\",\"susaki.kochi.jp\",\"tosa.kochi.jp\",\"tosashimizu.kochi.jp\",\"toyo.kochi.jp\",\"tsuno.kochi.jp\",\"umaji.kochi.jp\",\"yasuda.kochi.jp\",\"yusuhara.kochi.jp\",\"amakusa.kumamoto.jp\",\"arao.kumamoto.jp\",\"aso.kumamoto.jp\",\"choyo.kumamoto.jp\",\"gyokuto.kumamoto.jp\",\"kamiamakusa.kumamoto.jp\",\"kikuchi.kumamoto.jp\",\"kumamoto.kumamoto.jp\",\"mashiki.kumamoto.jp\",\"mifune.kumamoto.jp\",\"minamata.kumamoto.jp\",\"minamioguni.kumamoto.jp\",\"nagasu.kumamoto.jp\",\"nishihara.kumamoto.jp\",\"oguni.kumamoto.jp\",\"ozu.kumamoto.jp\",\"sumoto.kumamoto.jp\",\"takamori.kumamoto.jp\",\"uki.kumamoto.jp\",\"uto.kumamoto.jp\",\"yamaga.kumamoto.jp\",\"yamato.kumamoto.jp\",\"yatsushiro.kumamoto.jp\",\"ayabe.kyoto.jp\",\"fukuchiyama.kyoto.jp\",\"higashiyama.kyoto.jp\",\"ide.kyoto.jp\",\"ine.kyoto.jp\",\"joyo.kyoto.jp\",\"kameoka.kyoto.jp\",\"kamo.kyoto.jp\",\"kita.kyoto.jp\",\"kizu.kyoto.jp\",\"kumiyama.kyoto.jp\",\"kyotamba.kyoto.jp\",\"kyotanabe.kyoto.jp\",\"kyotango.kyoto.jp\",\"maizuru.kyoto.jp\",\"minami.kyoto.jp\",\"minamiyamashiro.kyoto.jp\",\"miyazu.kyoto.jp\",\"muko.kyoto.jp\",\"nagaokakyo.kyoto.jp\",\"nakagyo.kyoto.jp\",\"nantan.kyoto.jp\",\"oyamazaki.kyoto.jp\",\"sakyo.kyoto.jp\",\"seika.kyoto.jp\",\"tanabe.kyoto.jp\",\"uji.kyoto.jp\",\"ujitawara.kyoto.jp\",\"wazuka.kyoto.jp\",\"yamashina.kyoto.jp\",\"yawata.kyoto.jp\",\"asahi.mie.jp\",\"inabe.mie.jp\",\"ise.mie.jp\",\"kameyama.mie.jp\",\"kawagoe.mie.jp\",\"kiho.mie.jp\",\"kisosaki.mie.jp\",\"kiwa.mie.jp\",\"komono.mie.jp\",\"kumano.mie.jp\",\"kuwana.mie.jp\",\"matsusaka.mie.jp\",\"meiwa.mie.jp\",\"mihama.mie.jp\",\"minamiise.mie.jp\",\"misugi.mie.jp\",\"miyama.mie.jp\",\"nabari.mie.jp\",\"shima.mie.jp\",\"suzuka.mie.jp\",\"tado.mie.jp\",\"taiki.mie.jp\",\"taki.mie.jp\",\"tamaki.mie.jp\",\"toba.mie.jp\",\"tsu.mie.jp\",\"udono.mie.jp\",\"ureshino.mie.jp\",\"watarai.mie.jp\",\"yokkaichi.mie.jp\",\"furukawa.miyagi.jp\",\"higashimatsushima.miyagi.jp\",\"ishinomaki.miyagi.jp\",\"iwanuma.miyagi.jp\",\"kakuda.miyagi.jp\",\"kami.miyagi.jp\",\"kawasaki.miyagi.jp\",\"marumori.miyagi.jp\",\"matsushima.miyagi.jp\",\"minamisanriku.miyagi.jp\",\"misato.miyagi.jp\",\"murata.miyagi.jp\",\"natori.miyagi.jp\",\"ogawara.miyagi.jp\",\"ohira.miyagi.jp\",\"onagawa.miyagi.jp\",\"osaki.miyagi.jp\",\"rifu.miyagi.jp\",\"semine.miyagi.jp\",\"shibata.miyagi.jp\",\"shichikashuku.miyagi.jp\",\"shikama.miyagi.jp\",\"shiogama.miyagi.jp\",\"shiroishi.miyagi.jp\",\"tagajo.miyagi.jp\",\"taiwa.miyagi.jp\",\"tome.miyagi.jp\",\"tomiya.miyagi.jp\",\"wakuya.miyagi.jp\",\"watari.miyagi.jp\",\"yamamoto.miyagi.jp\",\"zao.miyagi.jp\",\"aya.miyazaki.jp\",\"ebino.miyazaki.jp\",\"gokase.miyazaki.jp\",\"hyuga.miyazaki.jp\",\"kadogawa.miyazaki.jp\",\"kawaminami.miyazaki.jp\",\"kijo.miyazaki.jp\",\"kitagawa.miyazaki.jp\",\"kitakata.miyazaki.jp\",\"kitaura.miyazaki.jp\",\"kobayashi.miyazaki.jp\",\"kunitomi.miyazaki.jp\",\"kushima.miyazaki.jp\",\"mimata.miyazaki.jp\",\"miyakonojo.miyazaki.jp\",\"miyazaki.miyazaki.jp\",\"morotsuka.miyazaki.jp\",\"nichinan.miyazaki.jp\",\"nishimera.miyazaki.jp\",\"nobeoka.miyazaki.jp\",\"saito.miyazaki.jp\",\"shiiba.miyazaki.jp\",\"shintomi.miyazaki.jp\",\"takaharu.miyazaki.jp\",\"takanabe.miyazaki.jp\",\"takazaki.miyazaki.jp\",\"tsuno.miyazaki.jp\",\"achi.nagano.jp\",\"agematsu.nagano.jp\",\"anan.nagano.jp\",\"aoki.nagano.jp\",\"asahi.nagano.jp\",\"azumino.nagano.jp\",\"chikuhoku.nagano.jp\",\"chikuma.nagano.jp\",\"chino.nagano.jp\",\"fujimi.nagano.jp\",\"hakuba.nagano.jp\",\"hara.nagano.jp\",\"hiraya.nagano.jp\",\"iida.nagano.jp\",\"iijima.nagano.jp\",\"iiyama.nagano.jp\",\"iizuna.nagano.jp\",\"ikeda.nagano.jp\",\"ikusaka.nagano.jp\",\"ina.nagano.jp\",\"karuizawa.nagano.jp\",\"kawakami.nagano.jp\",\"kiso.nagano.jp\",\"kisofukushima.nagano.jp\",\"kitaaiki.nagano.jp\",\"komagane.nagano.jp\",\"komoro.nagano.jp\",\"matsukawa.nagano.jp\",\"matsumoto.nagano.jp\",\"miasa.nagano.jp\",\"minamiaiki.nagano.jp\",\"minamimaki.nagano.jp\",\"minamiminowa.nagano.jp\",\"minowa.nagano.jp\",\"miyada.nagano.jp\",\"miyota.nagano.jp\",\"mochizuki.nagano.jp\",\"nagano.nagano.jp\",\"nagawa.nagano.jp\",\"nagiso.nagano.jp\",\"nakagawa.nagano.jp\",\"nakano.nagano.jp\",\"nozawaonsen.nagano.jp\",\"obuse.nagano.jp\",\"ogawa.nagano.jp\",\"okaya.nagano.jp\",\"omachi.nagano.jp\",\"omi.nagano.jp\",\"ookuwa.nagano.jp\",\"ooshika.nagano.jp\",\"otaki.nagano.jp\",\"otari.nagano.jp\",\"sakae.nagano.jp\",\"sakaki.nagano.jp\",\"saku.nagano.jp\",\"sakuho.nagano.jp\",\"shimosuwa.nagano.jp\",\"shinanomachi.nagano.jp\",\"shiojiri.nagano.jp\",\"suwa.nagano.jp\",\"suzaka.nagano.jp\",\"takagi.nagano.jp\",\"takamori.nagano.jp\",\"takayama.nagano.jp\",\"tateshina.nagano.jp\",\"tatsuno.nagano.jp\",\"togakushi.nagano.jp\",\"togura.nagano.jp\",\"tomi.nagano.jp\",\"ueda.nagano.jp\",\"wada.nagano.jp\",\"yamagata.nagano.jp\",\"yamanouchi.nagano.jp\",\"yasaka.nagano.jp\",\"yasuoka.nagano.jp\",\"chijiwa.nagasaki.jp\",\"futsu.nagasaki.jp\",\"goto.nagasaki.jp\",\"hasami.nagasaki.jp\",\"hirado.nagasaki.jp\",\"iki.nagasaki.jp\",\"isahaya.nagasaki.jp\",\"kawatana.nagasaki.jp\",\"kuchinotsu.nagasaki.jp\",\"matsuura.nagasaki.jp\",\"nagasaki.nagasaki.jp\",\"obama.nagasaki.jp\",\"omura.nagasaki.jp\",\"oseto.nagasaki.jp\",\"saikai.nagasaki.jp\",\"sasebo.nagasaki.jp\",\"seihi.nagasaki.jp\",\"shimabara.nagasaki.jp\",\"shinkamigoto.nagasaki.jp\",\"togitsu.nagasaki.jp\",\"tsushima.nagasaki.jp\",\"unzen.nagasaki.jp\",\"ando.nara.jp\",\"gose.nara.jp\",\"heguri.nara.jp\",\"higashiyoshino.nara.jp\",\"ikaruga.nara.jp\",\"ikoma.nara.jp\",\"kamikitayama.nara.jp\",\"kanmaki.nara.jp\",\"kashiba.nara.jp\",\"kashihara.nara.jp\",\"katsuragi.nara.jp\",\"kawai.nara.jp\",\"kawakami.nara.jp\",\"kawanishi.nara.jp\",\"koryo.nara.jp\",\"kurotaki.nara.jp\",\"mitsue.nara.jp\",\"miyake.nara.jp\",\"nara.nara.jp\",\"nosegawa.nara.jp\",\"oji.nara.jp\",\"ouda.nara.jp\",\"oyodo.nara.jp\",\"sakurai.nara.jp\",\"sango.nara.jp\",\"shimoichi.nara.jp\",\"shimokitayama.nara.jp\",\"shinjo.nara.jp\",\"soni.nara.jp\",\"takatori.nara.jp\",\"tawaramoto.nara.jp\",\"tenkawa.nara.jp\",\"tenri.nara.jp\",\"uda.nara.jp\",\"yamatokoriyama.nara.jp\",\"yamatotakada.nara.jp\",\"yamazoe.nara.jp\",\"yoshino.nara.jp\",\"aga.niigata.jp\",\"agano.niigata.jp\",\"gosen.niigata.jp\",\"itoigawa.niigata.jp\",\"izumozaki.niigata.jp\",\"joetsu.niigata.jp\",\"kamo.niigata.jp\",\"kariwa.niigata.jp\",\"kashiwazaki.niigata.jp\",\"minamiuonuma.niigata.jp\",\"mitsuke.niigata.jp\",\"muika.niigata.jp\",\"murakami.niigata.jp\",\"myoko.niigata.jp\",\"nagaoka.niigata.jp\",\"niigata.niigata.jp\",\"ojiya.niigata.jp\",\"omi.niigata.jp\",\"sado.niigata.jp\",\"sanjo.niigata.jp\",\"seiro.niigata.jp\",\"seirou.niigata.jp\",\"sekikawa.niigata.jp\",\"shibata.niigata.jp\",\"tagami.niigata.jp\",\"tainai.niigata.jp\",\"tochio.niigata.jp\",\"tokamachi.niigata.jp\",\"tsubame.niigata.jp\",\"tsunan.niigata.jp\",\"uonuma.niigata.jp\",\"yahiko.niigata.jp\",\"yoita.niigata.jp\",\"yuzawa.niigata.jp\",\"beppu.oita.jp\",\"bungoono.oita.jp\",\"bungotakada.oita.jp\",\"hasama.oita.jp\",\"hiji.oita.jp\",\"himeshima.oita.jp\",\"hita.oita.jp\",\"kamitsue.oita.jp\",\"kokonoe.oita.jp\",\"kuju.oita.jp\",\"kunisaki.oita.jp\",\"kusu.oita.jp\",\"oita.oita.jp\",\"saiki.oita.jp\",\"taketa.oita.jp\",\"tsukumi.oita.jp\",\"usa.oita.jp\",\"usuki.oita.jp\",\"yufu.oita.jp\",\"akaiwa.okayama.jp\",\"asakuchi.okayama.jp\",\"bizen.okayama.jp\",\"hayashima.okayama.jp\",\"ibara.okayama.jp\",\"kagamino.okayama.jp\",\"kasaoka.okayama.jp\",\"kibichuo.okayama.jp\",\"kumenan.okayama.jp\",\"kurashiki.okayama.jp\",\"maniwa.okayama.jp\",\"misaki.okayama.jp\",\"nagi.okayama.jp\",\"niimi.okayama.jp\",\"nishiawakura.okayama.jp\",\"okayama.okayama.jp\",\"satosho.okayama.jp\",\"setouchi.okayama.jp\",\"shinjo.okayama.jp\",\"shoo.okayama.jp\",\"soja.okayama.jp\",\"takahashi.okayama.jp\",\"tamano.okayama.jp\",\"tsuyama.okayama.jp\",\"wake.okayama.jp\",\"yakage.okayama.jp\",\"aguni.okinawa.jp\",\"ginowan.okinawa.jp\",\"ginoza.okinawa.jp\",\"gushikami.okinawa.jp\",\"haebaru.okinawa.jp\",\"higashi.okinawa.jp\",\"hirara.okinawa.jp\",\"iheya.okinawa.jp\",\"ishigaki.okinawa.jp\",\"ishikawa.okinawa.jp\",\"itoman.okinawa.jp\",\"izena.okinawa.jp\",\"kadena.okinawa.jp\",\"kin.okinawa.jp\",\"kitadaito.okinawa.jp\",\"kitanakagusuku.okinawa.jp\",\"kumejima.okinawa.jp\",\"kunigami.okinawa.jp\",\"minamidaito.okinawa.jp\",\"motobu.okinawa.jp\",\"nago.okinawa.jp\",\"naha.okinawa.jp\",\"nakagusuku.okinawa.jp\",\"nakijin.okinawa.jp\",\"nanjo.okinawa.jp\",\"nishihara.okinawa.jp\",\"ogimi.okinawa.jp\",\"okinawa.okinawa.jp\",\"onna.okinawa.jp\",\"shimoji.okinawa.jp\",\"taketomi.okinawa.jp\",\"tarama.okinawa.jp\",\"tokashiki.okinawa.jp\",\"tomigusuku.okinawa.jp\",\"tonaki.okinawa.jp\",\"urasoe.okinawa.jp\",\"uruma.okinawa.jp\",\"yaese.okinawa.jp\",\"yomitan.okinawa.jp\",\"yonabaru.okinawa.jp\",\"yonaguni.okinawa.jp\",\"zamami.okinawa.jp\",\"abeno.osaka.jp\",\"chihayaakasaka.osaka.jp\",\"chuo.osaka.jp\",\"daito.osaka.jp\",\"fujiidera.osaka.jp\",\"habikino.osaka.jp\",\"hannan.osaka.jp\",\"higashiosaka.osaka.jp\",\"higashisumiyoshi.osaka.jp\",\"higashiyodogawa.osaka.jp\",\"hirakata.osaka.jp\",\"ibaraki.osaka.jp\",\"ikeda.osaka.jp\",\"izumi.osaka.jp\",\"izumiotsu.osaka.jp\",\"izumisano.osaka.jp\",\"kadoma.osaka.jp\",\"kaizuka.osaka.jp\",\"kanan.osaka.jp\",\"kashiwara.osaka.jp\",\"katano.osaka.jp\",\"kawachinagano.osaka.jp\",\"kishiwada.osaka.jp\",\"kita.osaka.jp\",\"kumatori.osaka.jp\",\"matsubara.osaka.jp\",\"minato.osaka.jp\",\"minoh.osaka.jp\",\"misaki.osaka.jp\",\"moriguchi.osaka.jp\",\"neyagawa.osaka.jp\",\"nishi.osaka.jp\",\"nose.osaka.jp\",\"osakasayama.osaka.jp\",\"sakai.osaka.jp\",\"sayama.osaka.jp\",\"sennan.osaka.jp\",\"settsu.osaka.jp\",\"shijonawate.osaka.jp\",\"shimamoto.osaka.jp\",\"suita.osaka.jp\",\"tadaoka.osaka.jp\",\"taishi.osaka.jp\",\"tajiri.osaka.jp\",\"takaishi.osaka.jp\",\"takatsuki.osaka.jp\",\"tondabayashi.osaka.jp\",\"toyonaka.osaka.jp\",\"toyono.osaka.jp\",\"yao.osaka.jp\",\"ariake.saga.jp\",\"arita.saga.jp\",\"fukudomi.saga.jp\",\"genkai.saga.jp\",\"hamatama.saga.jp\",\"hizen.saga.jp\",\"imari.saga.jp\",\"kamimine.saga.jp\",\"kanzaki.saga.jp\",\"karatsu.saga.jp\",\"kashima.saga.jp\",\"kitagata.saga.jp\",\"kitahata.saga.jp\",\"kiyama.saga.jp\",\"kouhoku.saga.jp\",\"kyuragi.saga.jp\",\"nishiarita.saga.jp\",\"ogi.saga.jp\",\"omachi.saga.jp\",\"ouchi.saga.jp\",\"saga.saga.jp\",\"shiroishi.saga.jp\",\"taku.saga.jp\",\"tara.saga.jp\",\"tosu.saga.jp\",\"yoshinogari.saga.jp\",\"arakawa.saitama.jp\",\"asaka.saitama.jp\",\"chichibu.saitama.jp\",\"fujimi.saitama.jp\",\"fujimino.saitama.jp\",\"fukaya.saitama.jp\",\"hanno.saitama.jp\",\"hanyu.saitama.jp\",\"hasuda.saitama.jp\",\"hatogaya.saitama.jp\",\"hatoyama.saitama.jp\",\"hidaka.saitama.jp\",\"higashichichibu.saitama.jp\",\"higashimatsuyama.saitama.jp\",\"honjo.saitama.jp\",\"ina.saitama.jp\",\"iruma.saitama.jp\",\"iwatsuki.saitama.jp\",\"kamiizumi.saitama.jp\",\"kamikawa.saitama.jp\",\"kamisato.saitama.jp\",\"kasukabe.saitama.jp\",\"kawagoe.saitama.jp\",\"kawaguchi.saitama.jp\",\"kawajima.saitama.jp\",\"kazo.saitama.jp\",\"kitamoto.saitama.jp\",\"koshigaya.saitama.jp\",\"kounosu.saitama.jp\",\"kuki.saitama.jp\",\"kumagaya.saitama.jp\",\"matsubushi.saitama.jp\",\"minano.saitama.jp\",\"misato.saitama.jp\",\"miyashiro.saitama.jp\",\"miyoshi.saitama.jp\",\"moroyama.saitama.jp\",\"nagatoro.saitama.jp\",\"namegawa.saitama.jp\",\"niiza.saitama.jp\",\"ogano.saitama.jp\",\"ogawa.saitama.jp\",\"ogose.saitama.jp\",\"okegawa.saitama.jp\",\"omiya.saitama.jp\",\"otaki.saitama.jp\",\"ranzan.saitama.jp\",\"ryokami.saitama.jp\",\"saitama.saitama.jp\",\"sakado.saitama.jp\",\"satte.saitama.jp\",\"sayama.saitama.jp\",\"shiki.saitama.jp\",\"shiraoka.saitama.jp\",\"soka.saitama.jp\",\"sugito.saitama.jp\",\"toda.saitama.jp\",\"tokigawa.saitama.jp\",\"tokorozawa.saitama.jp\",\"tsurugashima.saitama.jp\",\"urawa.saitama.jp\",\"warabi.saitama.jp\",\"yashio.saitama.jp\",\"yokoze.saitama.jp\",\"yono.saitama.jp\",\"yorii.saitama.jp\",\"yoshida.saitama.jp\",\"yoshikawa.saitama.jp\",\"yoshimi.saitama.jp\",\"aisho.shiga.jp\",\"gamo.shiga.jp\",\"higashiomi.shiga.jp\",\"hikone.shiga.jp\",\"koka.shiga.jp\",\"konan.shiga.jp\",\"kosei.shiga.jp\",\"koto.shiga.jp\",\"kusatsu.shiga.jp\",\"maibara.shiga.jp\",\"moriyama.shiga.jp\",\"nagahama.shiga.jp\",\"nishiazai.shiga.jp\",\"notogawa.shiga.jp\",\"omihachiman.shiga.jp\",\"otsu.shiga.jp\",\"ritto.shiga.jp\",\"ryuoh.shiga.jp\",\"takashima.shiga.jp\",\"takatsuki.shiga.jp\",\"torahime.shiga.jp\",\"toyosato.shiga.jp\",\"yasu.shiga.jp\",\"akagi.shimane.jp\",\"ama.shimane.jp\",\"gotsu.shimane.jp\",\"hamada.shimane.jp\",\"higashiizumo.shimane.jp\",\"hikawa.shimane.jp\",\"hikimi.shimane.jp\",\"izumo.shimane.jp\",\"kakinoki.shimane.jp\",\"masuda.shimane.jp\",\"matsue.shimane.jp\",\"misato.shimane.jp\",\"nishinoshima.shimane.jp\",\"ohda.shimane.jp\",\"okinoshima.shimane.jp\",\"okuizumo.shimane.jp\",\"shimane.shimane.jp\",\"tamayu.shimane.jp\",\"tsuwano.shimane.jp\",\"unnan.shimane.jp\",\"yakumo.shimane.jp\",\"yasugi.shimane.jp\",\"yatsuka.shimane.jp\",\"arai.shizuoka.jp\",\"atami.shizuoka.jp\",\"fuji.shizuoka.jp\",\"fujieda.shizuoka.jp\",\"fujikawa.shizuoka.jp\",\"fujinomiya.shizuoka.jp\",\"fukuroi.shizuoka.jp\",\"gotemba.shizuoka.jp\",\"haibara.shizuoka.jp\",\"hamamatsu.shizuoka.jp\",\"higashiizu.shizuoka.jp\",\"ito.shizuoka.jp\",\"iwata.shizuoka.jp\",\"izu.shizuoka.jp\",\"izunokuni.shizuoka.jp\",\"kakegawa.shizuoka.jp\",\"kannami.shizuoka.jp\",\"kawanehon.shizuoka.jp\",\"kawazu.shizuoka.jp\",\"kikugawa.shizuoka.jp\",\"kosai.shizuoka.jp\",\"makinohara.shizuoka.jp\",\"matsuzaki.shizuoka.jp\",\"minamiizu.shizuoka.jp\",\"mishima.shizuoka.jp\",\"morimachi.shizuoka.jp\",\"nishiizu.shizuoka.jp\",\"numazu.shizuoka.jp\",\"omaezaki.shizuoka.jp\",\"shimada.shizuoka.jp\",\"shimizu.shizuoka.jp\",\"shimoda.shizuoka.jp\",\"shizuoka.shizuoka.jp\",\"susono.shizuoka.jp\",\"yaizu.shizuoka.jp\",\"yoshida.shizuoka.jp\",\"ashikaga.tochigi.jp\",\"bato.tochigi.jp\",\"haga.tochigi.jp\",\"ichikai.tochigi.jp\",\"iwafune.tochigi.jp\",\"kaminokawa.tochigi.jp\",\"kanuma.tochigi.jp\",\"karasuyama.tochigi.jp\",\"kuroiso.tochigi.jp\",\"mashiko.tochigi.jp\",\"mibu.tochigi.jp\",\"moka.tochigi.jp\",\"motegi.tochigi.jp\",\"nasu.tochigi.jp\",\"nasushiobara.tochigi.jp\",\"nikko.tochigi.jp\",\"nishikata.tochigi.jp\",\"nogi.tochigi.jp\",\"ohira.tochigi.jp\",\"ohtawara.tochigi.jp\",\"oyama.tochigi.jp\",\"sakura.tochigi.jp\",\"sano.tochigi.jp\",\"shimotsuke.tochigi.jp\",\"shioya.tochigi.jp\",\"takanezawa.tochigi.jp\",\"tochigi.tochigi.jp\",\"tsuga.tochigi.jp\",\"ujiie.tochigi.jp\",\"utsunomiya.tochigi.jp\",\"yaita.tochigi.jp\",\"aizumi.tokushima.jp\",\"anan.tokushima.jp\",\"ichiba.tokushima.jp\",\"itano.tokushima.jp\",\"kainan.tokushima.jp\",\"komatsushima.tokushima.jp\",\"matsushige.tokushima.jp\",\"mima.tokushima.jp\",\"minami.tokushima.jp\",\"miyoshi.tokushima.jp\",\"mugi.tokushima.jp\",\"nakagawa.tokushima.jp\",\"naruto.tokushima.jp\",\"sanagochi.tokushima.jp\",\"shishikui.tokushima.jp\",\"tokushima.tokushima.jp\",\"wajiki.tokushima.jp\",\"adachi.tokyo.jp\",\"akiruno.tokyo.jp\",\"akishima.tokyo.jp\",\"aogashima.tokyo.jp\",\"arakawa.tokyo.jp\",\"bunkyo.tokyo.jp\",\"chiyoda.tokyo.jp\",\"chofu.tokyo.jp\",\"chuo.tokyo.jp\",\"edogawa.tokyo.jp\",\"fuchu.tokyo.jp\",\"fussa.tokyo.jp\",\"hachijo.tokyo.jp\",\"hachioji.tokyo.jp\",\"hamura.tokyo.jp\",\"higashikurume.tokyo.jp\",\"higashimurayama.tokyo.jp\",\"higashiyamato.tokyo.jp\",\"hino.tokyo.jp\",\"hinode.tokyo.jp\",\"hinohara.tokyo.jp\",\"inagi.tokyo.jp\",\"itabashi.tokyo.jp\",\"katsushika.tokyo.jp\",\"kita.tokyo.jp\",\"kiyose.tokyo.jp\",\"kodaira.tokyo.jp\",\"koganei.tokyo.jp\",\"kokubunji.tokyo.jp\",\"komae.tokyo.jp\",\"koto.tokyo.jp\",\"kouzushima.tokyo.jp\",\"kunitachi.tokyo.jp\",\"machida.tokyo.jp\",\"meguro.tokyo.jp\",\"minato.tokyo.jp\",\"mitaka.tokyo.jp\",\"mizuho.tokyo.jp\",\"musashimurayama.tokyo.jp\",\"musashino.tokyo.jp\",\"nakano.tokyo.jp\",\"nerima.tokyo.jp\",\"ogasawara.tokyo.jp\",\"okutama.tokyo.jp\",\"ome.tokyo.jp\",\"oshima.tokyo.jp\",\"ota.tokyo.jp\",\"setagaya.tokyo.jp\",\"shibuya.tokyo.jp\",\"shinagawa.tokyo.jp\",\"shinjuku.tokyo.jp\",\"suginami.tokyo.jp\",\"sumida.tokyo.jp\",\"tachikawa.tokyo.jp\",\"taito.tokyo.jp\",\"tama.tokyo.jp\",\"toshima.tokyo.jp\",\"chizu.tottori.jp\",\"hino.tottori.jp\",\"kawahara.tottori.jp\",\"koge.tottori.jp\",\"kotoura.tottori.jp\",\"misasa.tottori.jp\",\"nanbu.tottori.jp\",\"nichinan.tottori.jp\",\"sakaiminato.tottori.jp\",\"tottori.tottori.jp\",\"wakasa.tottori.jp\",\"yazu.tottori.jp\",\"yonago.tottori.jp\",\"asahi.toyama.jp\",\"fuchu.toyama.jp\",\"fukumitsu.toyama.jp\",\"funahashi.toyama.jp\",\"himi.toyama.jp\",\"imizu.toyama.jp\",\"inami.toyama.jp\",\"johana.toyama.jp\",\"kamiichi.toyama.jp\",\"kurobe.toyama.jp\",\"nakaniikawa.toyama.jp\",\"namerikawa.toyama.jp\",\"nanto.toyama.jp\",\"nyuzen.toyama.jp\",\"oyabe.toyama.jp\",\"taira.toyama.jp\",\"takaoka.toyama.jp\",\"tateyama.toyama.jp\",\"toga.toyama.jp\",\"tonami.toyama.jp\",\"toyama.toyama.jp\",\"unazuki.toyama.jp\",\"uozu.toyama.jp\",\"yamada.toyama.jp\",\"arida.wakayama.jp\",\"aridagawa.wakayama.jp\",\"gobo.wakayama.jp\",\"hashimoto.wakayama.jp\",\"hidaka.wakayama.jp\",\"hirogawa.wakayama.jp\",\"inami.wakayama.jp\",\"iwade.wakayama.jp\",\"kainan.wakayama.jp\",\"kamitonda.wakayama.jp\",\"katsuragi.wakayama.jp\",\"kimino.wakayama.jp\",\"kinokawa.wakayama.jp\",\"kitayama.wakayama.jp\",\"koya.wakayama.jp\",\"koza.wakayama.jp\",\"kozagawa.wakayama.jp\",\"kudoyama.wakayama.jp\",\"kushimoto.wakayama.jp\",\"mihama.wakayama.jp\",\"misato.wakayama.jp\",\"nachikatsuura.wakayama.jp\",\"shingu.wakayama.jp\",\"shirahama.wakayama.jp\",\"taiji.wakayama.jp\",\"tanabe.wakayama.jp\",\"wakayama.wakayama.jp\",\"yuasa.wakayama.jp\",\"yura.wakayama.jp\",\"asahi.yamagata.jp\",\"funagata.yamagata.jp\",\"higashine.yamagata.jp\",\"iide.yamagata.jp\",\"kahoku.yamagata.jp\",\"kaminoyama.yamagata.jp\",\"kaneyama.yamagata.jp\",\"kawanishi.yamagata.jp\",\"mamurogawa.yamagata.jp\",\"mikawa.yamagata.jp\",\"murayama.yamagata.jp\",\"nagai.yamagata.jp\",\"nakayama.yamagata.jp\",\"nanyo.yamagata.jp\",\"nishikawa.yamagata.jp\",\"obanazawa.yamagata.jp\",\"oe.yamagata.jp\",\"oguni.yamagata.jp\",\"ohkura.yamagata.jp\",\"oishida.yamagata.jp\",\"sagae.yamagata.jp\",\"sakata.yamagata.jp\",\"sakegawa.yamagata.jp\",\"shinjo.yamagata.jp\",\"shirataka.yamagata.jp\",\"shonai.yamagata.jp\",\"takahata.yamagata.jp\",\"tendo.yamagata.jp\",\"tozawa.yamagata.jp\",\"tsuruoka.yamagata.jp\",\"yamagata.yamagata.jp\",\"yamanobe.yamagata.jp\",\"yonezawa.yamagata.jp\",\"yuza.yamagata.jp\",\"abu.yamaguchi.jp\",\"hagi.yamaguchi.jp\",\"hikari.yamaguchi.jp\",\"hofu.yamaguchi.jp\",\"iwakuni.yamaguchi.jp\",\"kudamatsu.yamaguchi.jp\",\"mitou.yamaguchi.jp\",\"nagato.yamaguchi.jp\",\"oshima.yamaguchi.jp\",\"shimonoseki.yamaguchi.jp\",\"shunan.yamaguchi.jp\",\"tabuse.yamaguchi.jp\",\"tokuyama.yamaguchi.jp\",\"toyota.yamaguchi.jp\",\"ube.yamaguchi.jp\",\"yuu.yamaguchi.jp\",\"chuo.yamanashi.jp\",\"doshi.yamanashi.jp\",\"fuefuki.yamanashi.jp\",\"fujikawa.yamanashi.jp\",\"fujikawaguchiko.yamanashi.jp\",\"fujiyoshida.yamanashi.jp\",\"hayakawa.yamanashi.jp\",\"hokuto.yamanashi.jp\",\"ichikawamisato.yamanashi.jp\",\"kai.yamanashi.jp\",\"kofu.yamanashi.jp\",\"koshu.yamanashi.jp\",\"kosuge.yamanashi.jp\",\"minami-alps.yamanashi.jp\",\"minobu.yamanashi.jp\",\"nakamichi.yamanashi.jp\",\"nanbu.yamanashi.jp\",\"narusawa.yamanashi.jp\",\"nirasaki.yamanashi.jp\",\"nishikatsura.yamanashi.jp\",\"oshino.yamanashi.jp\",\"otsuki.yamanashi.jp\",\"showa.yamanashi.jp\",\"tabayama.yamanashi.jp\",\"tsuru.yamanashi.jp\",\"uenohara.yamanashi.jp\",\"yamanakako.yamanashi.jp\",\"yamanashi.yamanashi.jp\",\"ke\",\"ac.ke\",\"co.ke\",\"go.ke\",\"info.ke\",\"me.ke\",\"mobi.ke\",\"ne.ke\",\"or.ke\",\"sc.ke\",\"kg\",\"com.kg\",\"edu.kg\",\"gov.kg\",\"mil.kg\",\"net.kg\",\"org.kg\",\"*.kh\",\"ki\",\"biz.ki\",\"com.ki\",\"edu.ki\",\"gov.ki\",\"info.ki\",\"net.ki\",\"org.ki\",\"km\",\"ass.km\",\"com.km\",\"edu.km\",\"gov.km\",\"mil.km\",\"nom.km\",\"org.km\",\"prd.km\",\"tm.km\",\"asso.km\",\"coop.km\",\"gouv.km\",\"medecin.km\",\"notaires.km\",\"pharmaciens.km\",\"presse.km\",\"veterinaire.km\",\"kn\",\"edu.kn\",\"gov.kn\",\"net.kn\",\"org.kn\",\"kp\",\"com.kp\",\"edu.kp\",\"gov.kp\",\"org.kp\",\"rep.kp\",\"tra.kp\",\"kr\",\"ac.kr\",\"co.kr\",\"es.kr\",\"go.kr\",\"hs.kr\",\"kg.kr\",\"mil.kr\",\"ms.kr\",\"ne.kr\",\"or.kr\",\"pe.kr\",\"re.kr\",\"sc.kr\",\"busan.kr\",\"chungbuk.kr\",\"chungnam.kr\",\"daegu.kr\",\"daejeon.kr\",\"gangwon.kr\",\"gwangju.kr\",\"gyeongbuk.kr\",\"gyeonggi.kr\",\"gyeongnam.kr\",\"incheon.kr\",\"jeju.kr\",\"jeonbuk.kr\",\"jeonnam.kr\",\"seoul.kr\",\"ulsan.kr\",\"kw\",\"com.kw\",\"edu.kw\",\"emb.kw\",\"gov.kw\",\"ind.kw\",\"net.kw\",\"org.kw\",\"ky\",\"com.ky\",\"edu.ky\",\"net.ky\",\"org.ky\",\"kz\",\"com.kz\",\"edu.kz\",\"gov.kz\",\"mil.kz\",\"net.kz\",\"org.kz\",\"la\",\"com.la\",\"edu.la\",\"gov.la\",\"info.la\",\"int.la\",\"net.la\",\"org.la\",\"per.la\",\"lb\",\"com.lb\",\"edu.lb\",\"gov.lb\",\"net.lb\",\"org.lb\",\"lc\",\"co.lc\",\"com.lc\",\"edu.lc\",\"gov.lc\",\"net.lc\",\"org.lc\",\"li\",\"lk\",\"ac.lk\",\"assn.lk\",\"com.lk\",\"edu.lk\",\"gov.lk\",\"grp.lk\",\"hotel.lk\",\"int.lk\",\"ltd.lk\",\"net.lk\",\"ngo.lk\",\"org.lk\",\"sch.lk\",\"soc.lk\",\"web.lk\",\"lr\",\"com.lr\",\"edu.lr\",\"gov.lr\",\"net.lr\",\"org.lr\",\"ls\",\"ac.ls\",\"biz.ls\",\"co.ls\",\"edu.ls\",\"gov.ls\",\"info.ls\",\"net.ls\",\"org.ls\",\"sc.ls\",\"lt\",\"gov.lt\",\"lu\",\"lv\",\"asn.lv\",\"com.lv\",\"conf.lv\",\"edu.lv\",\"gov.lv\",\"id.lv\",\"mil.lv\",\"net.lv\",\"org.lv\",\"ly\",\"com.ly\",\"edu.ly\",\"gov.ly\",\"id.ly\",\"med.ly\",\"net.ly\",\"org.ly\",\"plc.ly\",\"sch.ly\",\"ma\",\"ac.ma\",\"co.ma\",\"gov.ma\",\"net.ma\",\"org.ma\",\"press.ma\",\"mc\",\"asso.mc\",\"tm.mc\",\"md\",\"me\",\"ac.me\",\"co.me\",\"edu.me\",\"gov.me\",\"its.me\",\"net.me\",\"org.me\",\"priv.me\",\"mg\",\"co.mg\",\"com.mg\",\"edu.mg\",\"gov.mg\",\"mil.mg\",\"nom.mg\",\"org.mg\",\"prd.mg\",\"mh\",\"mil\",\"mk\",\"com.mk\",\"edu.mk\",\"gov.mk\",\"inf.mk\",\"name.mk\",\"net.mk\",\"org.mk\",\"ml\",\"com.ml\",\"edu.ml\",\"gouv.ml\",\"gov.ml\",\"net.ml\",\"org.ml\",\"presse.ml\",\"*.mm\",\"mn\",\"edu.mn\",\"gov.mn\",\"org.mn\",\"mo\",\"com.mo\",\"edu.mo\",\"gov.mo\",\"net.mo\",\"org.mo\",\"mobi\",\"mp\",\"mq\",\"mr\",\"gov.mr\",\"ms\",\"com.ms\",\"edu.ms\",\"gov.ms\",\"net.ms\",\"org.ms\",\"mt\",\"com.mt\",\"edu.mt\",\"net.mt\",\"org.mt\",\"mu\",\"ac.mu\",\"co.mu\",\"com.mu\",\"gov.mu\",\"net.mu\",\"or.mu\",\"org.mu\",\"museum\",\"mv\",\"aero.mv\",\"biz.mv\",\"com.mv\",\"coop.mv\",\"edu.mv\",\"gov.mv\",\"info.mv\",\"int.mv\",\"mil.mv\",\"museum.mv\",\"name.mv\",\"net.mv\",\"org.mv\",\"pro.mv\",\"mw\",\"ac.mw\",\"biz.mw\",\"co.mw\",\"com.mw\",\"coop.mw\",\"edu.mw\",\"gov.mw\",\"int.mw\",\"net.mw\",\"org.mw\",\"mx\",\"com.mx\",\"edu.mx\",\"gob.mx\",\"net.mx\",\"org.mx\",\"my\",\"biz.my\",\"com.my\",\"edu.my\",\"gov.my\",\"mil.my\",\"name.my\",\"net.my\",\"org.my\",\"mz\",\"ac.mz\",\"adv.mz\",\"co.mz\",\"edu.mz\",\"gov.mz\",\"mil.mz\",\"net.mz\",\"org.mz\",\"na\",\"alt.na\",\"co.na\",\"com.na\",\"gov.na\",\"net.na\",\"org.na\",\"name\",\"nc\",\"asso.nc\",\"nom.nc\",\"ne\",\"net\",\"nf\",\"arts.nf\",\"com.nf\",\"firm.nf\",\"info.nf\",\"net.nf\",\"other.nf\",\"per.nf\",\"rec.nf\",\"store.nf\",\"web.nf\",\"ng\",\"com.ng\",\"edu.ng\",\"gov.ng\",\"i.ng\",\"mil.ng\",\"mobi.ng\",\"name.ng\",\"net.ng\",\"org.ng\",\"sch.ng\",\"ni\",\"ac.ni\",\"biz.ni\",\"co.ni\",\"com.ni\",\"edu.ni\",\"gob.ni\",\"in.ni\",\"info.ni\",\"int.ni\",\"mil.ni\",\"net.ni\",\"nom.ni\",\"org.ni\",\"web.ni\",\"nl\",\"no\",\"fhs.no\",\"folkebibl.no\",\"fylkesbibl.no\",\"idrett.no\",\"museum.no\",\"priv.no\",\"vgs.no\",\"dep.no\",\"herad.no\",\"kommune.no\",\"mil.no\",\"stat.no\",\"aa.no\",\"ah.no\",\"bu.no\",\"fm.no\",\"hl.no\",\"hm.no\",\"jan-mayen.no\",\"mr.no\",\"nl.no\",\"nt.no\",\"of.no\",\"ol.no\",\"oslo.no\",\"rl.no\",\"sf.no\",\"st.no\",\"svalbard.no\",\"tm.no\",\"tr.no\",\"va.no\",\"vf.no\",\"gs.aa.no\",\"gs.ah.no\",\"gs.bu.no\",\"gs.fm.no\",\"gs.hl.no\",\"gs.hm.no\",\"gs.jan-mayen.no\",\"gs.mr.no\",\"gs.nl.no\",\"gs.nt.no\",\"gs.of.no\",\"gs.ol.no\",\"gs.oslo.no\",\"gs.rl.no\",\"gs.sf.no\",\"gs.st.no\",\"gs.svalbard.no\",\"gs.tm.no\",\"gs.tr.no\",\"gs.va.no\",\"gs.vf.no\",\"akrehamn.no\",\"åkrehamn.no\",\"algard.no\",\"ålgård.no\",\"arna.no\",\"bronnoysund.no\",\"brønnøysund.no\",\"brumunddal.no\",\"bryne.no\",\"drobak.no\",\"drøbak.no\",\"egersund.no\",\"fetsund.no\",\"floro.no\",\"florø.no\",\"fredrikstad.no\",\"hokksund.no\",\"honefoss.no\",\"hønefoss.no\",\"jessheim.no\",\"jorpeland.no\",\"jørpeland.no\",\"kirkenes.no\",\"kopervik.no\",\"krokstadelva.no\",\"langevag.no\",\"langevåg.no\",\"leirvik.no\",\"mjondalen.no\",\"mjøndalen.no\",\"mo-i-rana.no\",\"mosjoen.no\",\"mosjøen.no\",\"nesoddtangen.no\",\"orkanger.no\",\"osoyro.no\",\"osøyro.no\",\"raholt.no\",\"råholt.no\",\"sandnessjoen.no\",\"sandnessjøen.no\",\"skedsmokorset.no\",\"slattum.no\",\"spjelkavik.no\",\"stathelle.no\",\"stavern.no\",\"stjordalshalsen.no\",\"stjørdalshalsen.no\",\"tananger.no\",\"tranby.no\",\"vossevangen.no\",\"aarborte.no\",\"aejrie.no\",\"afjord.no\",\"åfjord.no\",\"agdenes.no\",\"nes.akershus.no\",\"aknoluokta.no\",\"ákŋoluokta.no\",\"al.no\",\"ål.no\",\"alaheadju.no\",\"álaheadju.no\",\"alesund.no\",\"ålesund.no\",\"alstahaug.no\",\"alta.no\",\"áltá.no\",\"alvdal.no\",\"amli.no\",\"åmli.no\",\"amot.no\",\"åmot.no\",\"andasuolo.no\",\"andebu.no\",\"andoy.no\",\"andøy.no\",\"ardal.no\",\"årdal.no\",\"aremark.no\",\"arendal.no\",\"ås.no\",\"aseral.no\",\"åseral.no\",\"asker.no\",\"askim.no\",\"askoy.no\",\"askøy.no\",\"askvoll.no\",\"asnes.no\",\"åsnes.no\",\"audnedaln.no\",\"aukra.no\",\"aure.no\",\"aurland.no\",\"aurskog-holand.no\",\"aurskog-høland.no\",\"austevoll.no\",\"austrheim.no\",\"averoy.no\",\"averøy.no\",\"badaddja.no\",\"bådåddjå.no\",\"bærum.no\",\"bahcavuotna.no\",\"báhcavuotna.no\",\"bahccavuotna.no\",\"báhccavuotna.no\",\"baidar.no\",\"báidár.no\",\"bajddar.no\",\"bájddar.no\",\"balat.no\",\"bálát.no\",\"balestrand.no\",\"ballangen.no\",\"balsfjord.no\",\"bamble.no\",\"bardu.no\",\"barum.no\",\"batsfjord.no\",\"båtsfjord.no\",\"bearalvahki.no\",\"bearalváhki.no\",\"beardu.no\",\"beiarn.no\",\"berg.no\",\"bergen.no\",\"berlevag.no\",\"berlevåg.no\",\"bievat.no\",\"bievát.no\",\"bindal.no\",\"birkenes.no\",\"bjarkoy.no\",\"bjarkøy.no\",\"bjerkreim.no\",\"bjugn.no\",\"bodo.no\",\"bodø.no\",\"bokn.no\",\"bomlo.no\",\"bømlo.no\",\"bremanger.no\",\"bronnoy.no\",\"brønnøy.no\",\"budejju.no\",\"nes.buskerud.no\",\"bygland.no\",\"bykle.no\",\"cahcesuolo.no\",\"čáhcesuolo.no\",\"davvenjarga.no\",\"davvenjárga.no\",\"davvesiida.no\",\"deatnu.no\",\"dielddanuorri.no\",\"divtasvuodna.no\",\"divttasvuotna.no\",\"donna.no\",\"dønna.no\",\"dovre.no\",\"drammen.no\",\"drangedal.no\",\"dyroy.no\",\"dyrøy.no\",\"eid.no\",\"eidfjord.no\",\"eidsberg.no\",\"eidskog.no\",\"eidsvoll.no\",\"eigersund.no\",\"elverum.no\",\"enebakk.no\",\"engerdal.no\",\"etne.no\",\"etnedal.no\",\"evenassi.no\",\"evenášši.no\",\"evenes.no\",\"evje-og-hornnes.no\",\"farsund.no\",\"fauske.no\",\"fedje.no\",\"fet.no\",\"finnoy.no\",\"finnøy.no\",\"fitjar.no\",\"fjaler.no\",\"fjell.no\",\"fla.no\",\"flå.no\",\"flakstad.no\",\"flatanger.no\",\"flekkefjord.no\",\"flesberg.no\",\"flora.no\",\"folldal.no\",\"forde.no\",\"førde.no\",\"forsand.no\",\"fosnes.no\",\"fræna.no\",\"frana.no\",\"frei.no\",\"frogn.no\",\"froland.no\",\"frosta.no\",\"froya.no\",\"frøya.no\",\"fuoisku.no\",\"fuossko.no\",\"fusa.no\",\"fyresdal.no\",\"gaivuotna.no\",\"gáivuotna.no\",\"galsa.no\",\"gálsá.no\",\"gamvik.no\",\"gangaviika.no\",\"gáŋgaviika.no\",\"gaular.no\",\"gausdal.no\",\"giehtavuoatna.no\",\"gildeskal.no\",\"gildeskål.no\",\"giske.no\",\"gjemnes.no\",\"gjerdrum.no\",\"gjerstad.no\",\"gjesdal.no\",\"gjovik.no\",\"gjøvik.no\",\"gloppen.no\",\"gol.no\",\"gran.no\",\"grane.no\",\"granvin.no\",\"gratangen.no\",\"grimstad.no\",\"grong.no\",\"grue.no\",\"gulen.no\",\"guovdageaidnu.no\",\"ha.no\",\"hå.no\",\"habmer.no\",\"hábmer.no\",\"hadsel.no\",\"hægebostad.no\",\"hagebostad.no\",\"halden.no\",\"halsa.no\",\"hamar.no\",\"hamaroy.no\",\"hammarfeasta.no\",\"hámmárfeasta.no\",\"hammerfest.no\",\"hapmir.no\",\"hápmir.no\",\"haram.no\",\"hareid.no\",\"harstad.no\",\"hasvik.no\",\"hattfjelldal.no\",\"haugesund.no\",\"os.hedmark.no\",\"valer.hedmark.no\",\"våler.hedmark.no\",\"hemne.no\",\"hemnes.no\",\"hemsedal.no\",\"hitra.no\",\"hjartdal.no\",\"hjelmeland.no\",\"hobol.no\",\"hobøl.no\",\"hof.no\",\"hol.no\",\"hole.no\",\"holmestrand.no\",\"holtalen.no\",\"holtålen.no\",\"os.hordaland.no\",\"hornindal.no\",\"horten.no\",\"hoyanger.no\",\"høyanger.no\",\"hoylandet.no\",\"høylandet.no\",\"hurdal.no\",\"hurum.no\",\"hvaler.no\",\"hyllestad.no\",\"ibestad.no\",\"inderoy.no\",\"inderøy.no\",\"iveland.no\",\"ivgu.no\",\"jevnaker.no\",\"jolster.no\",\"jølster.no\",\"jondal.no\",\"kafjord.no\",\"kåfjord.no\",\"karasjohka.no\",\"kárášjohka.no\",\"karasjok.no\",\"karlsoy.no\",\"karmoy.no\",\"karmøy.no\",\"kautokeino.no\",\"klabu.no\",\"klæbu.no\",\"klepp.no\",\"kongsberg.no\",\"kongsvinger.no\",\"kraanghke.no\",\"kråanghke.no\",\"kragero.no\",\"kragerø.no\",\"kristiansand.no\",\"kristiansund.no\",\"krodsherad.no\",\"krødsherad.no\",\"kvæfjord.no\",\"kvænangen.no\",\"kvafjord.no\",\"kvalsund.no\",\"kvam.no\",\"kvanangen.no\",\"kvinesdal.no\",\"kvinnherad.no\",\"kviteseid.no\",\"kvitsoy.no\",\"kvitsøy.no\",\"laakesvuemie.no\",\"lærdal.no\",\"lahppi.no\",\"láhppi.no\",\"lardal.no\",\"larvik.no\",\"lavagis.no\",\"lavangen.no\",\"leangaviika.no\",\"leaŋgaviika.no\",\"lebesby.no\",\"leikanger.no\",\"leirfjord.no\",\"leka.no\",\"leksvik.no\",\"lenvik.no\",\"lerdal.no\",\"lesja.no\",\"levanger.no\",\"lier.no\",\"lierne.no\",\"lillehammer.no\",\"lillesand.no\",\"lindas.no\",\"lindås.no\",\"lindesnes.no\",\"loabat.no\",\"loabát.no\",\"lodingen.no\",\"lødingen.no\",\"lom.no\",\"loppa.no\",\"lorenskog.no\",\"lørenskog.no\",\"loten.no\",\"løten.no\",\"lund.no\",\"lunner.no\",\"luroy.no\",\"lurøy.no\",\"luster.no\",\"lyngdal.no\",\"lyngen.no\",\"malatvuopmi.no\",\"málatvuopmi.no\",\"malselv.no\",\"målselv.no\",\"malvik.no\",\"mandal.no\",\"marker.no\",\"marnardal.no\",\"masfjorden.no\",\"masoy.no\",\"måsøy.no\",\"matta-varjjat.no\",\"mátta-várjjat.no\",\"meland.no\",\"meldal.no\",\"melhus.no\",\"meloy.no\",\"meløy.no\",\"meraker.no\",\"meråker.no\",\"midsund.no\",\"midtre-gauldal.no\",\"moareke.no\",\"moåreke.no\",\"modalen.no\",\"modum.no\",\"molde.no\",\"heroy.more-og-romsdal.no\",\"sande.more-og-romsdal.no\",\"herøy.møre-og-romsdal.no\",\"sande.møre-og-romsdal.no\",\"moskenes.no\",\"moss.no\",\"mosvik.no\",\"muosat.no\",\"muosát.no\",\"naamesjevuemie.no\",\"nååmesjevuemie.no\",\"nærøy.no\",\"namdalseid.no\",\"namsos.no\",\"namsskogan.no\",\"nannestad.no\",\"naroy.no\",\"narviika.no\",\"narvik.no\",\"naustdal.no\",\"navuotna.no\",\"návuotna.no\",\"nedre-eiker.no\",\"nesna.no\",\"nesodden.no\",\"nesseby.no\",\"nesset.no\",\"nissedal.no\",\"nittedal.no\",\"nord-aurdal.no\",\"nord-fron.no\",\"nord-odal.no\",\"norddal.no\",\"nordkapp.no\",\"bo.nordland.no\",\"bø.nordland.no\",\"heroy.nordland.no\",\"herøy.nordland.no\",\"nordre-land.no\",\"nordreisa.no\",\"nore-og-uvdal.no\",\"notodden.no\",\"notteroy.no\",\"nøtterøy.no\",\"odda.no\",\"oksnes.no\",\"øksnes.no\",\"omasvuotna.no\",\"oppdal.no\",\"oppegard.no\",\"oppegård.no\",\"orkdal.no\",\"orland.no\",\"ørland.no\",\"orskog.no\",\"ørskog.no\",\"orsta.no\",\"ørsta.no\",\"osen.no\",\"osteroy.no\",\"osterøy.no\",\"valer.ostfold.no\",\"våler.østfold.no\",\"ostre-toten.no\",\"østre-toten.no\",\"overhalla.no\",\"ovre-eiker.no\",\"øvre-eiker.no\",\"oyer.no\",\"øyer.no\",\"oygarden.no\",\"øygarden.no\",\"oystre-slidre.no\",\"øystre-slidre.no\",\"porsanger.no\",\"porsangu.no\",\"porsáŋgu.no\",\"porsgrunn.no\",\"rade.no\",\"råde.no\",\"radoy.no\",\"radøy.no\",\"rælingen.no\",\"rahkkeravju.no\",\"ráhkkerávju.no\",\"raisa.no\",\"ráisa.no\",\"rakkestad.no\",\"ralingen.no\",\"rana.no\",\"randaberg.no\",\"rauma.no\",\"rendalen.no\",\"rennebu.no\",\"rennesoy.no\",\"rennesøy.no\",\"rindal.no\",\"ringebu.no\",\"ringerike.no\",\"ringsaker.no\",\"risor.no\",\"risør.no\",\"rissa.no\",\"roan.no\",\"rodoy.no\",\"rødøy.no\",\"rollag.no\",\"romsa.no\",\"romskog.no\",\"rømskog.no\",\"roros.no\",\"røros.no\",\"rost.no\",\"røst.no\",\"royken.no\",\"røyken.no\",\"royrvik.no\",\"røyrvik.no\",\"ruovat.no\",\"rygge.no\",\"salangen.no\",\"salat.no\",\"sálat.no\",\"sálát.no\",\"saltdal.no\",\"samnanger.no\",\"sandefjord.no\",\"sandnes.no\",\"sandoy.no\",\"sandøy.no\",\"sarpsborg.no\",\"sauda.no\",\"sauherad.no\",\"sel.no\",\"selbu.no\",\"selje.no\",\"seljord.no\",\"siellak.no\",\"sigdal.no\",\"siljan.no\",\"sirdal.no\",\"skanit.no\",\"skánit.no\",\"skanland.no\",\"skånland.no\",\"skaun.no\",\"skedsmo.no\",\"ski.no\",\"skien.no\",\"skierva.no\",\"skiervá.no\",\"skiptvet.no\",\"skjak.no\",\"skjåk.no\",\"skjervoy.no\",\"skjervøy.no\",\"skodje.no\",\"smola.no\",\"smøla.no\",\"snaase.no\",\"snåase.no\",\"snasa.no\",\"snåsa.no\",\"snillfjord.no\",\"snoasa.no\",\"sogndal.no\",\"sogne.no\",\"søgne.no\",\"sokndal.no\",\"sola.no\",\"solund.no\",\"somna.no\",\"sømna.no\",\"sondre-land.no\",\"søndre-land.no\",\"songdalen.no\",\"sor-aurdal.no\",\"sør-aurdal.no\",\"sor-fron.no\",\"sør-fron.no\",\"sor-odal.no\",\"sør-odal.no\",\"sor-varanger.no\",\"sør-varanger.no\",\"sorfold.no\",\"sørfold.no\",\"sorreisa.no\",\"sørreisa.no\",\"sortland.no\",\"sorum.no\",\"sørum.no\",\"spydeberg.no\",\"stange.no\",\"stavanger.no\",\"steigen.no\",\"steinkjer.no\",\"stjordal.no\",\"stjørdal.no\",\"stokke.no\",\"stor-elvdal.no\",\"stord.no\",\"stordal.no\",\"storfjord.no\",\"strand.no\",\"stranda.no\",\"stryn.no\",\"sula.no\",\"suldal.no\",\"sund.no\",\"sunndal.no\",\"surnadal.no\",\"sveio.no\",\"svelvik.no\",\"sykkylven.no\",\"tana.no\",\"bo.telemark.no\",\"bø.telemark.no\",\"time.no\",\"tingvoll.no\",\"tinn.no\",\"tjeldsund.no\",\"tjome.no\",\"tjøme.no\",\"tokke.no\",\"tolga.no\",\"tonsberg.no\",\"tønsberg.no\",\"torsken.no\",\"træna.no\",\"trana.no\",\"tranoy.no\",\"tranøy.no\",\"troandin.no\",\"trogstad.no\",\"trøgstad.no\",\"tromsa.no\",\"tromso.no\",\"tromsø.no\",\"trondheim.no\",\"trysil.no\",\"tvedestrand.no\",\"tydal.no\",\"tynset.no\",\"tysfjord.no\",\"tysnes.no\",\"tysvær.no\",\"tysvar.no\",\"ullensaker.no\",\"ullensvang.no\",\"ulvik.no\",\"unjarga.no\",\"unjárga.no\",\"utsira.no\",\"vaapste.no\",\"vadso.no\",\"vadsø.no\",\"værøy.no\",\"vaga.no\",\"vågå.no\",\"vagan.no\",\"vågan.no\",\"vagsoy.no\",\"vågsøy.no\",\"vaksdal.no\",\"valle.no\",\"vang.no\",\"vanylven.no\",\"vardo.no\",\"vardø.no\",\"varggat.no\",\"várggát.no\",\"varoy.no\",\"vefsn.no\",\"vega.no\",\"vegarshei.no\",\"vegårshei.no\",\"vennesla.no\",\"verdal.no\",\"verran.no\",\"vestby.no\",\"sande.vestfold.no\",\"vestnes.no\",\"vestre-slidre.no\",\"vestre-toten.no\",\"vestvagoy.no\",\"vestvågøy.no\",\"vevelstad.no\",\"vik.no\",\"vikna.no\",\"vindafjord.no\",\"voagat.no\",\"volda.no\",\"voss.no\",\"*.np\",\"nr\",\"biz.nr\",\"com.nr\",\"edu.nr\",\"gov.nr\",\"info.nr\",\"net.nr\",\"org.nr\",\"nu\",\"nz\",\"ac.nz\",\"co.nz\",\"cri.nz\",\"geek.nz\",\"gen.nz\",\"govt.nz\",\"health.nz\",\"iwi.nz\",\"kiwi.nz\",\"maori.nz\",\"māori.nz\",\"mil.nz\",\"net.nz\",\"org.nz\",\"parliament.nz\",\"school.nz\",\"om\",\"co.om\",\"com.om\",\"edu.om\",\"gov.om\",\"med.om\",\"museum.om\",\"net.om\",\"org.om\",\"pro.om\",\"onion\",\"org\",\"pa\",\"abo.pa\",\"ac.pa\",\"com.pa\",\"edu.pa\",\"gob.pa\",\"ing.pa\",\"med.pa\",\"net.pa\",\"nom.pa\",\"org.pa\",\"sld.pa\",\"pe\",\"com.pe\",\"edu.pe\",\"gob.pe\",\"mil.pe\",\"net.pe\",\"nom.pe\",\"org.pe\",\"pf\",\"com.pf\",\"edu.pf\",\"org.pf\",\"*.pg\",\"ph\",\"com.ph\",\"edu.ph\",\"gov.ph\",\"i.ph\",\"mil.ph\",\"net.ph\",\"ngo.ph\",\"org.ph\",\"pk\",\"ac.pk\",\"biz.pk\",\"com.pk\",\"edu.pk\",\"fam.pk\",\"gkp.pk\",\"gob.pk\",\"gog.pk\",\"gok.pk\",\"gon.pk\",\"gop.pk\",\"gos.pk\",\"gov.pk\",\"net.pk\",\"org.pk\",\"web.pk\",\"pl\",\"com.pl\",\"net.pl\",\"org.pl\",\"agro.pl\",\"aid.pl\",\"atm.pl\",\"auto.pl\",\"biz.pl\",\"edu.pl\",\"gmina.pl\",\"gsm.pl\",\"info.pl\",\"mail.pl\",\"media.pl\",\"miasta.pl\",\"mil.pl\",\"nieruchomosci.pl\",\"nom.pl\",\"pc.pl\",\"powiat.pl\",\"priv.pl\",\"realestate.pl\",\"rel.pl\",\"sex.pl\",\"shop.pl\",\"sklep.pl\",\"sos.pl\",\"szkola.pl\",\"targi.pl\",\"tm.pl\",\"tourism.pl\",\"travel.pl\",\"turystyka.pl\",\"gov.pl\",\"ap.gov.pl\",\"griw.gov.pl\",\"ic.gov.pl\",\"is.gov.pl\",\"kmpsp.gov.pl\",\"konsulat.gov.pl\",\"kppsp.gov.pl\",\"kwp.gov.pl\",\"kwpsp.gov.pl\",\"mup.gov.pl\",\"mw.gov.pl\",\"oia.gov.pl\",\"oirm.gov.pl\",\"oke.gov.pl\",\"oow.gov.pl\",\"oschr.gov.pl\",\"oum.gov.pl\",\"pa.gov.pl\",\"pinb.gov.pl\",\"piw.gov.pl\",\"po.gov.pl\",\"pr.gov.pl\",\"psp.gov.pl\",\"psse.gov.pl\",\"pup.gov.pl\",\"rzgw.gov.pl\",\"sa.gov.pl\",\"sdn.gov.pl\",\"sko.gov.pl\",\"so.gov.pl\",\"sr.gov.pl\",\"starostwo.gov.pl\",\"ug.gov.pl\",\"ugim.gov.pl\",\"um.gov.pl\",\"umig.gov.pl\",\"upow.gov.pl\",\"uppo.gov.pl\",\"us.gov.pl\",\"uw.gov.pl\",\"uzs.gov.pl\",\"wif.gov.pl\",\"wiih.gov.pl\",\"winb.gov.pl\",\"wios.gov.pl\",\"witd.gov.pl\",\"wiw.gov.pl\",\"wkz.gov.pl\",\"wsa.gov.pl\",\"wskr.gov.pl\",\"wsse.gov.pl\",\"wuoz.gov.pl\",\"wzmiuw.gov.pl\",\"zp.gov.pl\",\"zpisdn.gov.pl\",\"augustow.pl\",\"babia-gora.pl\",\"bedzin.pl\",\"beskidy.pl\",\"bialowieza.pl\",\"bialystok.pl\",\"bielawa.pl\",\"bieszczady.pl\",\"boleslawiec.pl\",\"bydgoszcz.pl\",\"bytom.pl\",\"cieszyn.pl\",\"czeladz.pl\",\"czest.pl\",\"dlugoleka.pl\",\"elblag.pl\",\"elk.pl\",\"glogow.pl\",\"gniezno.pl\",\"gorlice.pl\",\"grajewo.pl\",\"ilawa.pl\",\"jaworzno.pl\",\"jelenia-gora.pl\",\"jgora.pl\",\"kalisz.pl\",\"karpacz.pl\",\"kartuzy.pl\",\"kaszuby.pl\",\"katowice.pl\",\"kazimierz-dolny.pl\",\"kepno.pl\",\"ketrzyn.pl\",\"klodzko.pl\",\"kobierzyce.pl\",\"kolobrzeg.pl\",\"konin.pl\",\"konskowola.pl\",\"kutno.pl\",\"lapy.pl\",\"lebork.pl\",\"legnica.pl\",\"lezajsk.pl\",\"limanowa.pl\",\"lomza.pl\",\"lowicz.pl\",\"lubin.pl\",\"lukow.pl\",\"malbork.pl\",\"malopolska.pl\",\"mazowsze.pl\",\"mazury.pl\",\"mielec.pl\",\"mielno.pl\",\"mragowo.pl\",\"naklo.pl\",\"nowaruda.pl\",\"nysa.pl\",\"olawa.pl\",\"olecko.pl\",\"olkusz.pl\",\"olsztyn.pl\",\"opoczno.pl\",\"opole.pl\",\"ostroda.pl\",\"ostroleka.pl\",\"ostrowiec.pl\",\"ostrowwlkp.pl\",\"pila.pl\",\"pisz.pl\",\"podhale.pl\",\"podlasie.pl\",\"polkowice.pl\",\"pomorskie.pl\",\"pomorze.pl\",\"prochowice.pl\",\"pruszkow.pl\",\"przeworsk.pl\",\"pulawy.pl\",\"radom.pl\",\"rawa-maz.pl\",\"rybnik.pl\",\"rzeszow.pl\",\"sanok.pl\",\"sejny.pl\",\"skoczow.pl\",\"slask.pl\",\"slupsk.pl\",\"sosnowiec.pl\",\"stalowa-wola.pl\",\"starachowice.pl\",\"stargard.pl\",\"suwalki.pl\",\"swidnica.pl\",\"swiebodzin.pl\",\"swinoujscie.pl\",\"szczecin.pl\",\"szczytno.pl\",\"tarnobrzeg.pl\",\"tgory.pl\",\"turek.pl\",\"tychy.pl\",\"ustka.pl\",\"walbrzych.pl\",\"warmia.pl\",\"warszawa.pl\",\"waw.pl\",\"wegrow.pl\",\"wielun.pl\",\"wlocl.pl\",\"wloclawek.pl\",\"wodzislaw.pl\",\"wolomin.pl\",\"wroclaw.pl\",\"zachpomor.pl\",\"zagan.pl\",\"zarow.pl\",\"zgora.pl\",\"zgorzelec.pl\",\"pm\",\"pn\",\"co.pn\",\"edu.pn\",\"gov.pn\",\"net.pn\",\"org.pn\",\"post\",\"pr\",\"biz.pr\",\"com.pr\",\"edu.pr\",\"gov.pr\",\"info.pr\",\"isla.pr\",\"name.pr\",\"net.pr\",\"org.pr\",\"pro.pr\",\"ac.pr\",\"est.pr\",\"prof.pr\",\"pro\",\"aaa.pro\",\"aca.pro\",\"acct.pro\",\"avocat.pro\",\"bar.pro\",\"cpa.pro\",\"eng.pro\",\"jur.pro\",\"law.pro\",\"med.pro\",\"recht.pro\",\"ps\",\"com.ps\",\"edu.ps\",\"gov.ps\",\"net.ps\",\"org.ps\",\"plo.ps\",\"sec.ps\",\"pt\",\"com.pt\",\"edu.pt\",\"gov.pt\",\"int.pt\",\"net.pt\",\"nome.pt\",\"org.pt\",\"publ.pt\",\"pw\",\"belau.pw\",\"co.pw\",\"ed.pw\",\"go.pw\",\"or.pw\",\"py\",\"com.py\",\"coop.py\",\"edu.py\",\"gov.py\",\"mil.py\",\"net.py\",\"org.py\",\"qa\",\"com.qa\",\"edu.qa\",\"gov.qa\",\"mil.qa\",\"name.qa\",\"net.qa\",\"org.qa\",\"sch.qa\",\"re\",\"asso.re\",\"com.re\",\"ro\",\"arts.ro\",\"com.ro\",\"firm.ro\",\"info.ro\",\"nom.ro\",\"nt.ro\",\"org.ro\",\"rec.ro\",\"store.ro\",\"tm.ro\",\"www.ro\",\"rs\",\"ac.rs\",\"co.rs\",\"edu.rs\",\"gov.rs\",\"in.rs\",\"org.rs\",\"ru\",\"rw\",\"ac.rw\",\"co.rw\",\"coop.rw\",\"gov.rw\",\"mil.rw\",\"net.rw\",\"org.rw\",\"sa\",\"com.sa\",\"edu.sa\",\"gov.sa\",\"med.sa\",\"net.sa\",\"org.sa\",\"pub.sa\",\"sch.sa\",\"sb\",\"com.sb\",\"edu.sb\",\"gov.sb\",\"net.sb\",\"org.sb\",\"sc\",\"com.sc\",\"edu.sc\",\"gov.sc\",\"net.sc\",\"org.sc\",\"sd\",\"com.sd\",\"edu.sd\",\"gov.sd\",\"info.sd\",\"med.sd\",\"net.sd\",\"org.sd\",\"tv.sd\",\"se\",\"a.se\",\"ac.se\",\"b.se\",\"bd.se\",\"brand.se\",\"c.se\",\"d.se\",\"e.se\",\"f.se\",\"fh.se\",\"fhsk.se\",\"fhv.se\",\"g.se\",\"h.se\",\"i.se\",\"k.se\",\"komforb.se\",\"kommunalforbund.se\",\"komvux.se\",\"l.se\",\"lanbib.se\",\"m.se\",\"n.se\",\"naturbruksgymn.se\",\"o.se\",\"org.se\",\"p.se\",\"parti.se\",\"pp.se\",\"press.se\",\"r.se\",\"s.se\",\"t.se\",\"tm.se\",\"u.se\",\"w.se\",\"x.se\",\"y.se\",\"z.se\",\"sg\",\"com.sg\",\"edu.sg\",\"gov.sg\",\"net.sg\",\"org.sg\",\"sh\",\"com.sh\",\"gov.sh\",\"mil.sh\",\"net.sh\",\"org.sh\",\"si\",\"sj\",\"sk\",\"sl\",\"com.sl\",\"edu.sl\",\"gov.sl\",\"net.sl\",\"org.sl\",\"sm\",\"sn\",\"art.sn\",\"com.sn\",\"edu.sn\",\"gouv.sn\",\"org.sn\",\"perso.sn\",\"univ.sn\",\"so\",\"com.so\",\"edu.so\",\"gov.so\",\"me.so\",\"net.so\",\"org.so\",\"sr\",\"ss\",\"biz.ss\",\"co.ss\",\"com.ss\",\"edu.ss\",\"gov.ss\",\"me.ss\",\"net.ss\",\"org.ss\",\"sch.ss\",\"st\",\"co.st\",\"com.st\",\"consulado.st\",\"edu.st\",\"embaixada.st\",\"mil.st\",\"net.st\",\"org.st\",\"principe.st\",\"saotome.st\",\"store.st\",\"su\",\"sv\",\"com.sv\",\"edu.sv\",\"gob.sv\",\"org.sv\",\"red.sv\",\"sx\",\"gov.sx\",\"sy\",\"com.sy\",\"edu.sy\",\"gov.sy\",\"mil.sy\",\"net.sy\",\"org.sy\",\"sz\",\"ac.sz\",\"co.sz\",\"org.sz\",\"tc\",\"td\",\"tel\",\"tf\",\"tg\",\"th\",\"ac.th\",\"co.th\",\"go.th\",\"in.th\",\"mi.th\",\"net.th\",\"or.th\",\"tj\",\"ac.tj\",\"biz.tj\",\"co.tj\",\"com.tj\",\"edu.tj\",\"go.tj\",\"gov.tj\",\"int.tj\",\"mil.tj\",\"name.tj\",\"net.tj\",\"nic.tj\",\"org.tj\",\"test.tj\",\"web.tj\",\"tk\",\"tl\",\"gov.tl\",\"tm\",\"co.tm\",\"com.tm\",\"edu.tm\",\"gov.tm\",\"mil.tm\",\"net.tm\",\"nom.tm\",\"org.tm\",\"tn\",\"com.tn\",\"ens.tn\",\"fin.tn\",\"gov.tn\",\"ind.tn\",\"info.tn\",\"intl.tn\",\"mincom.tn\",\"nat.tn\",\"net.tn\",\"org.tn\",\"perso.tn\",\"tourism.tn\",\"to\",\"com.to\",\"edu.to\",\"gov.to\",\"mil.to\",\"net.to\",\"org.to\",\"tr\",\"av.tr\",\"bbs.tr\",\"bel.tr\",\"biz.tr\",\"com.tr\",\"dr.tr\",\"edu.tr\",\"gen.tr\",\"gov.tr\",\"info.tr\",\"k12.tr\",\"kep.tr\",\"mil.tr\",\"name.tr\",\"net.tr\",\"org.tr\",\"pol.tr\",\"tel.tr\",\"tsk.tr\",\"tv.tr\",\"web.tr\",\"nc.tr\",\"gov.nc.tr\",\"tt\",\"biz.tt\",\"co.tt\",\"com.tt\",\"edu.tt\",\"gov.tt\",\"info.tt\",\"mil.tt\",\"name.tt\",\"net.tt\",\"org.tt\",\"pro.tt\",\"tv\",\"tw\",\"club.tw\",\"com.tw\",\"ebiz.tw\",\"edu.tw\",\"game.tw\",\"gov.tw\",\"idv.tw\",\"mil.tw\",\"net.tw\",\"org.tw\",\"tz\",\"ac.tz\",\"co.tz\",\"go.tz\",\"hotel.tz\",\"info.tz\",\"me.tz\",\"mil.tz\",\"mobi.tz\",\"ne.tz\",\"or.tz\",\"sc.tz\",\"tv.tz\",\"ua\",\"com.ua\",\"edu.ua\",\"gov.ua\",\"in.ua\",\"net.ua\",\"org.ua\",\"cherkassy.ua\",\"cherkasy.ua\",\"chernigov.ua\",\"chernihiv.ua\",\"chernivtsi.ua\",\"chernovtsy.ua\",\"ck.ua\",\"cn.ua\",\"cr.ua\",\"crimea.ua\",\"cv.ua\",\"dn.ua\",\"dnepropetrovsk.ua\",\"dnipropetrovsk.ua\",\"donetsk.ua\",\"dp.ua\",\"if.ua\",\"ivano-frankivsk.ua\",\"kh.ua\",\"kharkiv.ua\",\"kharkov.ua\",\"kherson.ua\",\"khmelnitskiy.ua\",\"khmelnytskyi.ua\",\"kiev.ua\",\"kirovograd.ua\",\"km.ua\",\"kr.ua\",\"kropyvnytskyi.ua\",\"krym.ua\",\"ks.ua\",\"kv.ua\",\"kyiv.ua\",\"lg.ua\",\"lt.ua\",\"lugansk.ua\",\"luhansk.ua\",\"lutsk.ua\",\"lv.ua\",\"lviv.ua\",\"mk.ua\",\"mykolaiv.ua\",\"nikolaev.ua\",\"od.ua\",\"odesa.ua\",\"odessa.ua\",\"pl.ua\",\"poltava.ua\",\"rivne.ua\",\"rovno.ua\",\"rv.ua\",\"sb.ua\",\"sebastopol.ua\",\"sevastopol.ua\",\"sm.ua\",\"sumy.ua\",\"te.ua\",\"ternopil.ua\",\"uz.ua\",\"uzhgorod.ua\",\"uzhhorod.ua\",\"vinnica.ua\",\"vinnytsia.ua\",\"vn.ua\",\"volyn.ua\",\"yalta.ua\",\"zakarpattia.ua\",\"zaporizhzhe.ua\",\"zaporizhzhia.ua\",\"zhitomir.ua\",\"zhytomyr.ua\",\"zp.ua\",\"zt.ua\",\"ug\",\"ac.ug\",\"co.ug\",\"com.ug\",\"go.ug\",\"ne.ug\",\"or.ug\",\"org.ug\",\"sc.ug\",\"uk\",\"ac.uk\",\"co.uk\",\"gov.uk\",\"ltd.uk\",\"me.uk\",\"net.uk\",\"nhs.uk\",\"org.uk\",\"plc.uk\",\"police.uk\",\"*.sch.uk\",\"us\",\"dni.us\",\"fed.us\",\"isa.us\",\"kids.us\",\"nsn.us\",\"ak.us\",\"al.us\",\"ar.us\",\"as.us\",\"az.us\",\"ca.us\",\"co.us\",\"ct.us\",\"dc.us\",\"de.us\",\"fl.us\",\"ga.us\",\"gu.us\",\"hi.us\",\"ia.us\",\"id.us\",\"il.us\",\"in.us\",\"ks.us\",\"ky.us\",\"la.us\",\"ma.us\",\"md.us\",\"me.us\",\"mi.us\",\"mn.us\",\"mo.us\",\"ms.us\",\"mt.us\",\"nc.us\",\"nd.us\",\"ne.us\",\"nh.us\",\"nj.us\",\"nm.us\",\"nv.us\",\"ny.us\",\"oh.us\",\"ok.us\",\"or.us\",\"pa.us\",\"pr.us\",\"ri.us\",\"sc.us\",\"sd.us\",\"tn.us\",\"tx.us\",\"ut.us\",\"va.us\",\"vi.us\",\"vt.us\",\"wa.us\",\"wi.us\",\"wv.us\",\"wy.us\",\"k12.ak.us\",\"k12.al.us\",\"k12.ar.us\",\"k12.as.us\",\"k12.az.us\",\"k12.ca.us\",\"k12.co.us\",\"k12.ct.us\",\"k12.dc.us\",\"k12.fl.us\",\"k12.ga.us\",\"k12.gu.us\",\"k12.ia.us\",\"k12.id.us\",\"k12.il.us\",\"k12.in.us\",\"k12.ks.us\",\"k12.ky.us\",\"k12.la.us\",\"k12.ma.us\",\"k12.md.us\",\"k12.me.us\",\"k12.mi.us\",\"k12.mn.us\",\"k12.mo.us\",\"k12.ms.us\",\"k12.mt.us\",\"k12.nc.us\",\"k12.ne.us\",\"k12.nh.us\",\"k12.nj.us\",\"k12.nm.us\",\"k12.nv.us\",\"k12.ny.us\",\"k12.oh.us\",\"k12.ok.us\",\"k12.or.us\",\"k12.pa.us\",\"k12.pr.us\",\"k12.sc.us\",\"k12.tn.us\",\"k12.tx.us\",\"k12.ut.us\",\"k12.va.us\",\"k12.vi.us\",\"k12.vt.us\",\"k12.wa.us\",\"k12.wi.us\",\"cc.ak.us\",\"lib.ak.us\",\"cc.al.us\",\"lib.al.us\",\"cc.ar.us\",\"lib.ar.us\",\"cc.as.us\",\"lib.as.us\",\"cc.az.us\",\"lib.az.us\",\"cc.ca.us\",\"lib.ca.us\",\"cc.co.us\",\"lib.co.us\",\"cc.ct.us\",\"lib.ct.us\",\"cc.dc.us\",\"lib.dc.us\",\"cc.de.us\",\"cc.fl.us\",\"cc.ga.us\",\"cc.gu.us\",\"cc.hi.us\",\"cc.ia.us\",\"cc.id.us\",\"cc.il.us\",\"cc.in.us\",\"cc.ks.us\",\"cc.ky.us\",\"cc.la.us\",\"cc.ma.us\",\"cc.md.us\",\"cc.me.us\",\"cc.mi.us\",\"cc.mn.us\",\"cc.mo.us\",\"cc.ms.us\",\"cc.mt.us\",\"cc.nc.us\",\"cc.nd.us\",\"cc.ne.us\",\"cc.nh.us\",\"cc.nj.us\",\"cc.nm.us\",\"cc.nv.us\",\"cc.ny.us\",\"cc.oh.us\",\"cc.ok.us\",\"cc.or.us\",\"cc.pa.us\",\"cc.pr.us\",\"cc.ri.us\",\"cc.sc.us\",\"cc.sd.us\",\"cc.tn.us\",\"cc.tx.us\",\"cc.ut.us\",\"cc.va.us\",\"cc.vi.us\",\"cc.vt.us\",\"cc.wa.us\",\"cc.wi.us\",\"cc.wv.us\",\"cc.wy.us\",\"k12.wy.us\",\"lib.fl.us\",\"lib.ga.us\",\"lib.gu.us\",\"lib.hi.us\",\"lib.ia.us\",\"lib.id.us\",\"lib.il.us\",\"lib.in.us\",\"lib.ks.us\",\"lib.ky.us\",\"lib.la.us\",\"lib.ma.us\",\"lib.md.us\",\"lib.me.us\",\"lib.mi.us\",\"lib.mn.us\",\"lib.mo.us\",\"lib.ms.us\",\"lib.mt.us\",\"lib.nc.us\",\"lib.nd.us\",\"lib.ne.us\",\"lib.nh.us\",\"lib.nj.us\",\"lib.nm.us\",\"lib.nv.us\",\"lib.ny.us\",\"lib.oh.us\",\"lib.ok.us\",\"lib.or.us\",\"lib.pa.us\",\"lib.pr.us\",\"lib.ri.us\",\"lib.sc.us\",\"lib.sd.us\",\"lib.tn.us\",\"lib.tx.us\",\"lib.ut.us\",\"lib.va.us\",\"lib.vi.us\",\"lib.vt.us\",\"lib.wa.us\",\"lib.wi.us\",\"lib.wy.us\",\"chtr.k12.ma.us\",\"paroch.k12.ma.us\",\"pvt.k12.ma.us\",\"ann-arbor.mi.us\",\"cog.mi.us\",\"dst.mi.us\",\"eaton.mi.us\",\"gen.mi.us\",\"mus.mi.us\",\"tec.mi.us\",\"washtenaw.mi.us\",\"uy\",\"com.uy\",\"edu.uy\",\"gub.uy\",\"mil.uy\",\"net.uy\",\"org.uy\",\"uz\",\"co.uz\",\"com.uz\",\"net.uz\",\"org.uz\",\"va\",\"vc\",\"com.vc\",\"edu.vc\",\"gov.vc\",\"mil.vc\",\"net.vc\",\"org.vc\",\"ve\",\"arts.ve\",\"bib.ve\",\"co.ve\",\"com.ve\",\"e12.ve\",\"edu.ve\",\"firm.ve\",\"gob.ve\",\"gov.ve\",\"info.ve\",\"int.ve\",\"mil.ve\",\"net.ve\",\"nom.ve\",\"org.ve\",\"rar.ve\",\"rec.ve\",\"store.ve\",\"tec.ve\",\"web.ve\",\"vg\",\"vi\",\"co.vi\",\"com.vi\",\"k12.vi\",\"net.vi\",\"org.vi\",\"vn\",\"ac.vn\",\"ai.vn\",\"biz.vn\",\"com.vn\",\"edu.vn\",\"gov.vn\",\"health.vn\",\"id.vn\",\"info.vn\",\"int.vn\",\"io.vn\",\"name.vn\",\"net.vn\",\"org.vn\",\"pro.vn\",\"angiang.vn\",\"bacgiang.vn\",\"backan.vn\",\"baclieu.vn\",\"bacninh.vn\",\"baria-vungtau.vn\",\"bentre.vn\",\"binhdinh.vn\",\"binhduong.vn\",\"binhphuoc.vn\",\"binhthuan.vn\",\"camau.vn\",\"cantho.vn\",\"caobang.vn\",\"daklak.vn\",\"daknong.vn\",\"danang.vn\",\"dienbien.vn\",\"dongnai.vn\",\"dongthap.vn\",\"gialai.vn\",\"hagiang.vn\",\"haiduong.vn\",\"haiphong.vn\",\"hanam.vn\",\"hanoi.vn\",\"hatinh.vn\",\"haugiang.vn\",\"hoabinh.vn\",\"hungyen.vn\",\"khanhhoa.vn\",\"kiengiang.vn\",\"kontum.vn\",\"laichau.vn\",\"lamdong.vn\",\"langson.vn\",\"laocai.vn\",\"longan.vn\",\"namdinh.vn\",\"nghean.vn\",\"ninhbinh.vn\",\"ninhthuan.vn\",\"phutho.vn\",\"phuyen.vn\",\"quangbinh.vn\",\"quangnam.vn\",\"quangngai.vn\",\"quangninh.vn\",\"quangtri.vn\",\"soctrang.vn\",\"sonla.vn\",\"tayninh.vn\",\"thaibinh.vn\",\"thainguyen.vn\",\"thanhhoa.vn\",\"thanhphohochiminh.vn\",\"thuathienhue.vn\",\"tiengiang.vn\",\"travinh.vn\",\"tuyenquang.vn\",\"vinhlong.vn\",\"vinhphuc.vn\",\"yenbai.vn\",\"vu\",\"com.vu\",\"edu.vu\",\"net.vu\",\"org.vu\",\"wf\",\"ws\",\"com.ws\",\"edu.ws\",\"gov.ws\",\"net.ws\",\"org.ws\",\"yt\",\"امارات\",\"հայ\",\"বাংলা\",\"бг\",\"البحرين\",\"бел\",\"中国\",\"中國\",\"الجزائر\",\"مصر\",\"ею\",\"ευ\",\"موريتانيا\",\"გე\",\"ελ\",\"香港\",\"個人.香港\",\"公司.香港\",\"政府.香港\",\"教育.香港\",\"組織.香港\",\"網絡.香港\",\"ಭಾರತ\",\"ଭାରତ\",\"ভাৰত\",\"भारतम्\",\"भारोत\",\"ڀارت\",\"ഭാരതം\",\"भारत\",\"بارت\",\"بھارت\",\"భారత్\",\"ભારત\",\"ਭਾਰਤ\",\"ভারত\",\"இந்தியா\",\"ایران\",\"ايران\",\"عراق\",\"الاردن\",\"한국\",\"қаз\",\"ລາວ\",\"ලංකා\",\"இலங்கை\",\"المغرب\",\"мкд\",\"мон\",\"澳門\",\"澳门\",\"مليسيا\",\"عمان\",\"پاکستان\",\"پاكستان\",\"فلسطين\",\"срб\",\"ак.срб\",\"обр.срб\",\"од.срб\",\"орг.срб\",\"пр.срб\",\"упр.срб\",\"рф\",\"قطر\",\"السعودية\",\"السعودیة\",\"السعودیۃ\",\"السعوديه\",\"سودان\",\"新加坡\",\"சிங்கப்பூர்\",\"سورية\",\"سوريا\",\"ไทย\",\"ทหาร.ไทย\",\"ธุรกิจ.ไทย\",\"เน็ต.ไทย\",\"รัฐบาล.ไทย\",\"ศึกษา.ไทย\",\"องค์กร.ไทย\",\"تونس\",\"台灣\",\"台湾\",\"臺灣\",\"укр\",\"اليمن\",\"xxx\",\"ye\",\"com.ye\",\"edu.ye\",\"gov.ye\",\"mil.ye\",\"net.ye\",\"org.ye\",\"ac.za\",\"agric.za\",\"alt.za\",\"co.za\",\"edu.za\",\"gov.za\",\"grondar.za\",\"law.za\",\"mil.za\",\"net.za\",\"ngo.za\",\"nic.za\",\"nis.za\",\"nom.za\",\"org.za\",\"school.za\",\"tm.za\",\"web.za\",\"zm\",\"ac.zm\",\"biz.zm\",\"co.zm\",\"com.zm\",\"edu.zm\",\"gov.zm\",\"info.zm\",\"mil.zm\",\"net.zm\",\"org.zm\",\"sch.zm\",\"zw\",\"ac.zw\",\"co.zw\",\"gov.zw\",\"mil.zw\",\"org.zw\",\"aaa\",\"aarp\",\"abb\",\"abbott\",\"abbvie\",\"abc\",\"able\",\"abogado\",\"abudhabi\",\"academy\",\"accenture\",\"accountant\",\"accountants\",\"aco\",\"actor\",\"ads\",\"adult\",\"aeg\",\"aetna\",\"afl\",\"africa\",\"agakhan\",\"agency\",\"aig\",\"airbus\",\"airforce\",\"airtel\",\"akdn\",\"alibaba\",\"alipay\",\"allfinanz\",\"allstate\",\"ally\",\"alsace\",\"alstom\",\"amazon\",\"americanexpress\",\"americanfamily\",\"amex\",\"amfam\",\"amica\",\"amsterdam\",\"analytics\",\"android\",\"anquan\",\"anz\",\"aol\",\"apartments\",\"app\",\"apple\",\"aquarelle\",\"arab\",\"aramco\",\"archi\",\"army\",\"art\",\"arte\",\"asda\",\"associates\",\"athleta\",\"attorney\",\"auction\",\"audi\",\"audible\",\"audio\",\"auspost\",\"author\",\"auto\",\"autos\",\"aws\",\"axa\",\"azure\",\"baby\",\"baidu\",\"banamex\",\"band\",\"bank\",\"bar\",\"barcelona\",\"barclaycard\",\"barclays\",\"barefoot\",\"bargains\",\"baseball\",\"basketball\",\"bauhaus\",\"bayern\",\"bbc\",\"bbt\",\"bbva\",\"bcg\",\"bcn\",\"beats\",\"beauty\",\"beer\",\"bentley\",\"berlin\",\"best\",\"bestbuy\",\"bet\",\"bharti\",\"bible\",\"bid\",\"bike\",\"bing\",\"bingo\",\"bio\",\"black\",\"blackfriday\",\"blockbuster\",\"blog\",\"bloomberg\",\"blue\",\"bms\",\"bmw\",\"bnpparibas\",\"boats\",\"boehringer\",\"bofa\",\"bom\",\"bond\",\"boo\",\"book\",\"booking\",\"bosch\",\"bostik\",\"boston\",\"bot\",\"boutique\",\"box\",\"bradesco\",\"bridgestone\",\"broadway\",\"broker\",\"brother\",\"brussels\",\"build\",\"builders\",\"business\",\"buy\",\"buzz\",\"bzh\",\"cab\",\"cafe\",\"cal\",\"call\",\"calvinklein\",\"cam\",\"camera\",\"camp\",\"canon\",\"capetown\",\"capital\",\"capitalone\",\"car\",\"caravan\",\"cards\",\"care\",\"career\",\"careers\",\"cars\",\"casa\",\"case\",\"cash\",\"casino\",\"catering\",\"catholic\",\"cba\",\"cbn\",\"cbre\",\"center\",\"ceo\",\"cern\",\"cfa\",\"cfd\",\"chanel\",\"channel\",\"charity\",\"chase\",\"chat\",\"cheap\",\"chintai\",\"christmas\",\"chrome\",\"church\",\"cipriani\",\"circle\",\"cisco\",\"citadel\",\"citi\",\"citic\",\"city\",\"claims\",\"cleaning\",\"click\",\"clinic\",\"clinique\",\"clothing\",\"cloud\",\"club\",\"clubmed\",\"coach\",\"codes\",\"coffee\",\"college\",\"cologne\",\"commbank\",\"community\",\"company\",\"compare\",\"computer\",\"comsec\",\"condos\",\"construction\",\"consulting\",\"contact\",\"contractors\",\"cooking\",\"cool\",\"corsica\",\"country\",\"coupon\",\"coupons\",\"courses\",\"cpa\",\"credit\",\"creditcard\",\"creditunion\",\"cricket\",\"crown\",\"crs\",\"cruise\",\"cruises\",\"cuisinella\",\"cymru\",\"cyou\",\"dad\",\"dance\",\"data\",\"date\",\"dating\",\"datsun\",\"day\",\"dclk\",\"dds\",\"deal\",\"dealer\",\"deals\",\"degree\",\"delivery\",\"dell\",\"deloitte\",\"delta\",\"democrat\",\"dental\",\"dentist\",\"desi\",\"design\",\"dev\",\"dhl\",\"diamonds\",\"diet\",\"digital\",\"direct\",\"directory\",\"discount\",\"discover\",\"dish\",\"diy\",\"dnp\",\"docs\",\"doctor\",\"dog\",\"domains\",\"dot\",\"download\",\"drive\",\"dtv\",\"dubai\",\"dunlop\",\"dupont\",\"durban\",\"dvag\",\"dvr\",\"earth\",\"eat\",\"eco\",\"edeka\",\"education\",\"email\",\"emerck\",\"energy\",\"engineer\",\"engineering\",\"enterprises\",\"epson\",\"equipment\",\"ericsson\",\"erni\",\"esq\",\"estate\",\"eurovision\",\"eus\",\"events\",\"exchange\",\"expert\",\"exposed\",\"express\",\"extraspace\",\"fage\",\"fail\",\"fairwinds\",\"faith\",\"family\",\"fan\",\"fans\",\"farm\",\"farmers\",\"fashion\",\"fast\",\"fedex\",\"feedback\",\"ferrari\",\"ferrero\",\"fidelity\",\"fido\",\"film\",\"final\",\"finance\",\"financial\",\"fire\",\"firestone\",\"firmdale\",\"fish\",\"fishing\",\"fit\",\"fitness\",\"flickr\",\"flights\",\"flir\",\"florist\",\"flowers\",\"fly\",\"foo\",\"food\",\"football\",\"ford\",\"forex\",\"forsale\",\"forum\",\"foundation\",\"fox\",\"free\",\"fresenius\",\"frl\",\"frogans\",\"frontier\",\"ftr\",\"fujitsu\",\"fun\",\"fund\",\"furniture\",\"futbol\",\"fyi\",\"gal\",\"gallery\",\"gallo\",\"gallup\",\"game\",\"games\",\"gap\",\"garden\",\"gay\",\"gbiz\",\"gdn\",\"gea\",\"gent\",\"genting\",\"george\",\"ggee\",\"gift\",\"gifts\",\"gives\",\"giving\",\"glass\",\"gle\",\"global\",\"globo\",\"gmail\",\"gmbh\",\"gmo\",\"gmx\",\"godaddy\",\"gold\",\"goldpoint\",\"golf\",\"goo\",\"goodyear\",\"goog\",\"google\",\"gop\",\"got\",\"grainger\",\"graphics\",\"gratis\",\"green\",\"gripe\",\"grocery\",\"group\",\"gucci\",\"guge\",\"guide\",\"guitars\",\"guru\",\"hair\",\"hamburg\",\"hangout\",\"haus\",\"hbo\",\"hdfc\",\"hdfcbank\",\"health\",\"healthcare\",\"help\",\"helsinki\",\"here\",\"hermes\",\"hiphop\",\"hisamitsu\",\"hitachi\",\"hiv\",\"hkt\",\"hockey\",\"holdings\",\"holiday\",\"homedepot\",\"homegoods\",\"homes\",\"homesense\",\"honda\",\"horse\",\"hospital\",\"host\",\"hosting\",\"hot\",\"hotels\",\"hotmail\",\"house\",\"how\",\"hsbc\",\"hughes\",\"hyatt\",\"hyundai\",\"ibm\",\"icbc\",\"ice\",\"icu\",\"ieee\",\"ifm\",\"ikano\",\"imamat\",\"imdb\",\"immo\",\"immobilien\",\"inc\",\"industries\",\"infiniti\",\"ing\",\"ink\",\"institute\",\"insurance\",\"insure\",\"international\",\"intuit\",\"investments\",\"ipiranga\",\"irish\",\"ismaili\",\"ist\",\"istanbul\",\"itau\",\"itv\",\"jaguar\",\"java\",\"jcb\",\"jeep\",\"jetzt\",\"jewelry\",\"jio\",\"jll\",\"jmp\",\"jnj\",\"joburg\",\"jot\",\"joy\",\"jpmorgan\",\"jprs\",\"juegos\",\"juniper\",\"kaufen\",\"kddi\",\"kerryhotels\",\"kerrylogistics\",\"kerryproperties\",\"kfh\",\"kia\",\"kids\",\"kim\",\"kindle\",\"kitchen\",\"kiwi\",\"koeln\",\"komatsu\",\"kosher\",\"kpmg\",\"kpn\",\"krd\",\"kred\",\"kuokgroup\",\"kyoto\",\"lacaixa\",\"lamborghini\",\"lamer\",\"lancaster\",\"land\",\"landrover\",\"lanxess\",\"lasalle\",\"lat\",\"latino\",\"latrobe\",\"law\",\"lawyer\",\"lds\",\"lease\",\"leclerc\",\"lefrak\",\"legal\",\"lego\",\"lexus\",\"lgbt\",\"lidl\",\"life\",\"lifeinsurance\",\"lifestyle\",\"lighting\",\"like\",\"lilly\",\"limited\",\"limo\",\"lincoln\",\"link\",\"lipsy\",\"live\",\"living\",\"llc\",\"llp\",\"loan\",\"loans\",\"locker\",\"locus\",\"lol\",\"london\",\"lotte\",\"lotto\",\"love\",\"lpl\",\"lplfinancial\",\"ltd\",\"ltda\",\"lundbeck\",\"luxe\",\"luxury\",\"madrid\",\"maif\",\"maison\",\"makeup\",\"man\",\"management\",\"mango\",\"map\",\"market\",\"marketing\",\"markets\",\"marriott\",\"marshalls\",\"mattel\",\"mba\",\"mckinsey\",\"med\",\"media\",\"meet\",\"melbourne\",\"meme\",\"memorial\",\"men\",\"menu\",\"merck\",\"merckmsd\",\"miami\",\"microsoft\",\"mini\",\"mint\",\"mit\",\"mitsubishi\",\"mlb\",\"mls\",\"mma\",\"mobile\",\"moda\",\"moe\",\"moi\",\"mom\",\"monash\",\"money\",\"monster\",\"mormon\",\"mortgage\",\"moscow\",\"moto\",\"motorcycles\",\"mov\",\"movie\",\"msd\",\"mtn\",\"mtr\",\"music\",\"nab\",\"nagoya\",\"navy\",\"nba\",\"nec\",\"netbank\",\"netflix\",\"network\",\"neustar\",\"new\",\"news\",\"next\",\"nextdirect\",\"nexus\",\"nfl\",\"ngo\",\"nhk\",\"nico\",\"nike\",\"nikon\",\"ninja\",\"nissan\",\"nissay\",\"nokia\",\"norton\",\"now\",\"nowruz\",\"nowtv\",\"nra\",\"nrw\",\"ntt\",\"nyc\",\"obi\",\"observer\",\"office\",\"okinawa\",\"olayan\",\"olayangroup\",\"ollo\",\"omega\",\"one\",\"ong\",\"onl\",\"online\",\"ooo\",\"open\",\"oracle\",\"orange\",\"organic\",\"origins\",\"osaka\",\"otsuka\",\"ott\",\"ovh\",\"page\",\"panasonic\",\"paris\",\"pars\",\"partners\",\"parts\",\"party\",\"pay\",\"pccw\",\"pet\",\"pfizer\",\"pharmacy\",\"phd\",\"philips\",\"phone\",\"photo\",\"photography\",\"photos\",\"physio\",\"pics\",\"pictet\",\"pictures\",\"pid\",\"pin\",\"ping\",\"pink\",\"pioneer\",\"pizza\",\"place\",\"play\",\"playstation\",\"plumbing\",\"plus\",\"pnc\",\"pohl\",\"poker\",\"politie\",\"porn\",\"pramerica\",\"praxi\",\"press\",\"prime\",\"prod\",\"productions\",\"prof\",\"progressive\",\"promo\",\"properties\",\"property\",\"protection\",\"pru\",\"prudential\",\"pub\",\"pwc\",\"qpon\",\"quebec\",\"quest\",\"racing\",\"radio\",\"read\",\"realestate\",\"realtor\",\"realty\",\"recipes\",\"red\",\"redstone\",\"redumbrella\",\"rehab\",\"reise\",\"reisen\",\"reit\",\"reliance\",\"ren\",\"rent\",\"rentals\",\"repair\",\"report\",\"republican\",\"rest\",\"restaurant\",\"review\",\"reviews\",\"rexroth\",\"rich\",\"richardli\",\"ricoh\",\"ril\",\"rio\",\"rip\",\"rocks\",\"rodeo\",\"rogers\",\"room\",\"rsvp\",\"rugby\",\"ruhr\",\"run\",\"rwe\",\"ryukyu\",\"saarland\",\"safe\",\"safety\",\"sakura\",\"sale\",\"salon\",\"samsclub\",\"samsung\",\"sandvik\",\"sandvikcoromant\",\"sanofi\",\"sap\",\"sarl\",\"sas\",\"save\",\"saxo\",\"sbi\",\"sbs\",\"scb\",\"schaeffler\",\"schmidt\",\"scholarships\",\"school\",\"schule\",\"schwarz\",\"science\",\"scot\",\"search\",\"seat\",\"secure\",\"security\",\"seek\",\"select\",\"sener\",\"services\",\"seven\",\"sew\",\"sex\",\"sexy\",\"sfr\",\"shangrila\",\"sharp\",\"shell\",\"shia\",\"shiksha\",\"shoes\",\"shop\",\"shopping\",\"shouji\",\"show\",\"silk\",\"sina\",\"singles\",\"site\",\"ski\",\"skin\",\"sky\",\"skype\",\"sling\",\"smart\",\"smile\",\"sncf\",\"soccer\",\"social\",\"softbank\",\"software\",\"sohu\",\"solar\",\"solutions\",\"song\",\"sony\",\"soy\",\"spa\",\"space\",\"sport\",\"spot\",\"srl\",\"stada\",\"staples\",\"star\",\"statebank\",\"statefarm\",\"stc\",\"stcgroup\",\"stockholm\",\"storage\",\"store\",\"stream\",\"studio\",\"study\",\"style\",\"sucks\",\"supplies\",\"supply\",\"support\",\"surf\",\"surgery\",\"suzuki\",\"swatch\",\"swiss\",\"sydney\",\"systems\",\"tab\",\"taipei\",\"talk\",\"taobao\",\"target\",\"tatamotors\",\"tatar\",\"tattoo\",\"tax\",\"taxi\",\"tci\",\"tdk\",\"team\",\"tech\",\"technology\",\"temasek\",\"tennis\",\"teva\",\"thd\",\"theater\",\"theatre\",\"tiaa\",\"tickets\",\"tienda\",\"tips\",\"tires\",\"tirol\",\"tjmaxx\",\"tjx\",\"tkmaxx\",\"tmall\",\"today\",\"tokyo\",\"tools\",\"top\",\"toray\",\"toshiba\",\"total\",\"tours\",\"town\",\"toyota\",\"toys\",\"trade\",\"trading\",\"training\",\"travel\",\"travelers\",\"travelersinsurance\",\"trust\",\"trv\",\"tube\",\"tui\",\"tunes\",\"tushu\",\"tvs\",\"ubank\",\"ubs\",\"unicom\",\"university\",\"uno\",\"uol\",\"ups\",\"vacations\",\"vana\",\"vanguard\",\"vegas\",\"ventures\",\"verisign\",\"versicherung\",\"vet\",\"viajes\",\"video\",\"vig\",\"viking\",\"villas\",\"vin\",\"vip\",\"virgin\",\"visa\",\"vision\",\"viva\",\"vivo\",\"vlaanderen\",\"vodka\",\"volvo\",\"vote\",\"voting\",\"voto\",\"voyage\",\"wales\",\"walmart\",\"walter\",\"wang\",\"wanggou\",\"watch\",\"watches\",\"weather\",\"weatherchannel\",\"webcam\",\"weber\",\"website\",\"wed\",\"wedding\",\"weibo\",\"weir\",\"whoswho\",\"wien\",\"wiki\",\"williamhill\",\"win\",\"windows\",\"wine\",\"winners\",\"wme\",\"wolterskluwer\",\"woodside\",\"work\",\"works\",\"world\",\"wow\",\"wtc\",\"wtf\",\"xbox\",\"xerox\",\"xihuan\",\"xin\",\"कॉम\",\"セール\",\"佛山\",\"慈善\",\"集团\",\"在线\",\"点看\",\"คอม\",\"八卦\",\"موقع\",\"公益\",\"公司\",\"香格里拉\",\"网站\",\"移动\",\"我爱你\",\"москва\",\"католик\",\"онлайн\",\"сайт\",\"联通\",\"קום\",\"时尚\",\"微博\",\"淡马锡\",\"ファッション\",\"орг\",\"नेट\",\"ストア\",\"アマゾン\",\"삼성\",\"商标\",\"商店\",\"商城\",\"дети\",\"ポイント\",\"新闻\",\"家電\",\"كوم\",\"中文网\",\"中信\",\"娱乐\",\"谷歌\",\"電訊盈科\",\"购物\",\"クラウド\",\"通販\",\"网店\",\"संगठन\",\"餐厅\",\"网络\",\"ком\",\"亚马逊\",\"食品\",\"飞利浦\",\"手机\",\"ارامكو\",\"العليان\",\"بازار\",\"ابوظبي\",\"كاثوليك\",\"همراه\",\"닷컴\",\"政府\",\"شبكة\",\"بيتك\",\"عرب\",\"机构\",\"组织机构\",\"健康\",\"招聘\",\"рус\",\"大拿\",\"みんな\",\"グーグル\",\"世界\",\"書籍\",\"网址\",\"닷넷\",\"コム\",\"天主教\",\"游戏\",\"vermögensberater\",\"vermögensberatung\",\"企业\",\"信息\",\"嘉里大酒店\",\"嘉里\",\"广东\",\"政务\",\"xyz\",\"yachts\",\"yahoo\",\"yamaxun\",\"yandex\",\"yodobashi\",\"yoga\",\"yokohama\",\"you\",\"youtube\",\"yun\",\"zappos\",\"zara\",\"zero\",\"zip\",\"zone\",\"zuerich\",\"co.krd\",\"edu.krd\",\"art.pl\",\"gliwice.pl\",\"krakow.pl\",\"poznan.pl\",\"wroc.pl\",\"zakopane.pl\",\"lib.de.us\",\"12chars.dev\",\"12chars.it\",\"12chars.pro\",\"cc.ua\",\"inf.ua\",\"ltd.ua\",\"611.to\",\"a2hosted.com\",\"cpserver.com\",\"aaa.vodka\",\"*.on-acorn.io\",\"activetrail.biz\",\"adaptable.app\",\"adobeaemcloud.com\",\"*.dev.adobeaemcloud.com\",\"aem.live\",\"hlx.live\",\"adobeaemcloud.net\",\"aem.page\",\"hlx.page\",\"hlx3.page\",\"adobeio-static.net\",\"adobeioruntime.net\",\"africa.com\",\"beep.pl\",\"airkitapps.com\",\"airkitapps-au.com\",\"airkitapps.eu\",\"aivencloud.com\",\"akadns.net\",\"akamai.net\",\"akamai-staging.net\",\"akamaiedge.net\",\"akamaiedge-staging.net\",\"akamaihd.net\",\"akamaihd-staging.net\",\"akamaiorigin.net\",\"akamaiorigin-staging.net\",\"akamaized.net\",\"akamaized-staging.net\",\"edgekey.net\",\"edgekey-staging.net\",\"edgesuite.net\",\"edgesuite-staging.net\",\"barsy.ca\",\"*.compute.estate\",\"*.alces.network\",\"kasserver.com\",\"altervista.org\",\"alwaysdata.net\",\"myamaze.net\",\"execute-api.cn-north-1.amazonaws.com.cn\",\"execute-api.cn-northwest-1.amazonaws.com.cn\",\"execute-api.af-south-1.amazonaws.com\",\"execute-api.ap-east-1.amazonaws.com\",\"execute-api.ap-northeast-1.amazonaws.com\",\"execute-api.ap-northeast-2.amazonaws.com\",\"execute-api.ap-northeast-3.amazonaws.com\",\"execute-api.ap-south-1.amazonaws.com\",\"execute-api.ap-south-2.amazonaws.com\",\"execute-api.ap-southeast-1.amazonaws.com\",\"execute-api.ap-southeast-2.amazonaws.com\",\"execute-api.ap-southeast-3.amazonaws.com\",\"execute-api.ap-southeast-4.amazonaws.com\",\"execute-api.ap-southeast-5.amazonaws.com\",\"execute-api.ca-central-1.amazonaws.com\",\"execute-api.ca-west-1.amazonaws.com\",\"execute-api.eu-central-1.amazonaws.com\",\"execute-api.eu-central-2.amazonaws.com\",\"execute-api.eu-north-1.amazonaws.com\",\"execute-api.eu-south-1.amazonaws.com\",\"execute-api.eu-south-2.amazonaws.com\",\"execute-api.eu-west-1.amazonaws.com\",\"execute-api.eu-west-2.amazonaws.com\",\"execute-api.eu-west-3.amazonaws.com\",\"execute-api.il-central-1.amazonaws.com\",\"execute-api.me-central-1.amazonaws.com\",\"execute-api.me-south-1.amazonaws.com\",\"execute-api.sa-east-1.amazonaws.com\",\"execute-api.us-east-1.amazonaws.com\",\"execute-api.us-east-2.amazonaws.com\",\"execute-api.us-gov-east-1.amazonaws.com\",\"execute-api.us-gov-west-1.amazonaws.com\",\"execute-api.us-west-1.amazonaws.com\",\"execute-api.us-west-2.amazonaws.com\",\"cloudfront.net\",\"auth.af-south-1.amazoncognito.com\",\"auth.ap-east-1.amazoncognito.com\",\"auth.ap-northeast-1.amazoncognito.com\",\"auth.ap-northeast-2.amazoncognito.com\",\"auth.ap-northeast-3.amazoncognito.com\",\"auth.ap-south-1.amazoncognito.com\",\"auth.ap-south-2.amazoncognito.com\",\"auth.ap-southeast-1.amazoncognito.com\",\"auth.ap-southeast-2.amazoncognito.com\",\"auth.ap-southeast-3.amazoncognito.com\",\"auth.ap-southeast-4.amazoncognito.com\",\"auth.ca-central-1.amazoncognito.com\",\"auth.ca-west-1.amazoncognito.com\",\"auth.eu-central-1.amazoncognito.com\",\"auth.eu-central-2.amazoncognito.com\",\"auth.eu-north-1.amazoncognito.com\",\"auth.eu-south-1.amazoncognito.com\",\"auth.eu-south-2.amazoncognito.com\",\"auth.eu-west-1.amazoncognito.com\",\"auth.eu-west-2.amazoncognito.com\",\"auth.eu-west-3.amazoncognito.com\",\"auth.il-central-1.amazoncognito.com\",\"auth.me-central-1.amazoncognito.com\",\"auth.me-south-1.amazoncognito.com\",\"auth.sa-east-1.amazoncognito.com\",\"auth.us-east-1.amazoncognito.com\",\"auth-fips.us-east-1.amazoncognito.com\",\"auth.us-east-2.amazoncognito.com\",\"auth-fips.us-east-2.amazoncognito.com\",\"auth-fips.us-gov-west-1.amazoncognito.com\",\"auth.us-west-1.amazoncognito.com\",\"auth-fips.us-west-1.amazoncognito.com\",\"auth.us-west-2.amazoncognito.com\",\"auth-fips.us-west-2.amazoncognito.com\",\"*.compute.amazonaws.com.cn\",\"*.compute.amazonaws.com\",\"*.compute-1.amazonaws.com\",\"us-east-1.amazonaws.com\",\"emrappui-prod.cn-north-1.amazonaws.com.cn\",\"emrnotebooks-prod.cn-north-1.amazonaws.com.cn\",\"emrstudio-prod.cn-north-1.amazonaws.com.cn\",\"emrappui-prod.cn-northwest-1.amazonaws.com.cn\",\"emrnotebooks-prod.cn-northwest-1.amazonaws.com.cn\",\"emrstudio-prod.cn-northwest-1.amazonaws.com.cn\",\"emrappui-prod.af-south-1.amazonaws.com\",\"emrnotebooks-prod.af-south-1.amazonaws.com\",\"emrstudio-prod.af-south-1.amazonaws.com\",\"emrappui-prod.ap-east-1.amazonaws.com\",\"emrnotebooks-prod.ap-east-1.amazonaws.com\",\"emrstudio-prod.ap-east-1.amazonaws.com\",\"emrappui-prod.ap-northeast-1.amazonaws.com\",\"emrnotebooks-prod.ap-northeast-1.amazonaws.com\",\"emrstudio-prod.ap-northeast-1.amazonaws.com\",\"emrappui-prod.ap-northeast-2.amazonaws.com\",\"emrnotebooks-prod.ap-northeast-2.amazonaws.com\",\"emrstudio-prod.ap-northeast-2.amazonaws.com\",\"emrappui-prod.ap-northeast-3.amazonaws.com\",\"emrnotebooks-prod.ap-northeast-3.amazonaws.com\",\"emrstudio-prod.ap-northeast-3.amazonaws.com\",\"emrappui-prod.ap-south-1.amazonaws.com\",\"emrnotebooks-prod.ap-south-1.amazonaws.com\",\"emrstudio-prod.ap-south-1.amazonaws.com\",\"emrappui-prod.ap-south-2.amazonaws.com\",\"emrnotebooks-prod.ap-south-2.amazonaws.com\",\"emrstudio-prod.ap-south-2.amazonaws.com\",\"emrappui-prod.ap-southeast-1.amazonaws.com\",\"emrnotebooks-prod.ap-southeast-1.amazonaws.com\",\"emrstudio-prod.ap-southeast-1.amazonaws.com\",\"emrappui-prod.ap-southeast-2.amazonaws.com\",\"emrnotebooks-prod.ap-southeast-2.amazonaws.com\",\"emrstudio-prod.ap-southeast-2.amazonaws.com\",\"emrappui-prod.ap-southeast-3.amazonaws.com\",\"emrnotebooks-prod.ap-southeast-3.amazonaws.com\",\"emrstudio-prod.ap-southeast-3.amazonaws.com\",\"emrappui-prod.ap-southeast-4.amazonaws.com\",\"emrnotebooks-prod.ap-southeast-4.amazonaws.com\",\"emrstudio-prod.ap-southeast-4.amazonaws.com\",\"emrappui-prod.ca-central-1.amazonaws.com\",\"emrnotebooks-prod.ca-central-1.amazonaws.com\",\"emrstudio-prod.ca-central-1.amazonaws.com\",\"emrappui-prod.ca-west-1.amazonaws.com\",\"emrnotebooks-prod.ca-west-1.amazonaws.com\",\"emrstudio-prod.ca-west-1.amazonaws.com\",\"emrappui-prod.eu-central-1.amazonaws.com\",\"emrnotebooks-prod.eu-central-1.amazonaws.com\",\"emrstudio-prod.eu-central-1.amazonaws.com\",\"emrappui-prod.eu-central-2.amazonaws.com\",\"emrnotebooks-prod.eu-central-2.amazonaws.com\",\"emrstudio-prod.eu-central-2.amazonaws.com\",\"emrappui-prod.eu-north-1.amazonaws.com\",\"emrnotebooks-prod.eu-north-1.amazonaws.com\",\"emrstudio-prod.eu-north-1.amazonaws.com\",\"emrappui-prod.eu-south-1.amazonaws.com\",\"emrnotebooks-prod.eu-south-1.amazonaws.com\",\"emrstudio-prod.eu-south-1.amazonaws.com\",\"emrappui-prod.eu-south-2.amazonaws.com\",\"emrnotebooks-prod.eu-south-2.amazonaws.com\",\"emrstudio-prod.eu-south-2.amazonaws.com\",\"emrappui-prod.eu-west-1.amazonaws.com\",\"emrnotebooks-prod.eu-west-1.amazonaws.com\",\"emrstudio-prod.eu-west-1.amazonaws.com\",\"emrappui-prod.eu-west-2.amazonaws.com\",\"emrnotebooks-prod.eu-west-2.amazonaws.com\",\"emrstudio-prod.eu-west-2.amazonaws.com\",\"emrappui-prod.eu-west-3.amazonaws.com\",\"emrnotebooks-prod.eu-west-3.amazonaws.com\",\"emrstudio-prod.eu-west-3.amazonaws.com\",\"emrappui-prod.il-central-1.amazonaws.com\",\"emrnotebooks-prod.il-central-1.amazonaws.com\",\"emrstudio-prod.il-central-1.amazonaws.com\",\"emrappui-prod.me-central-1.amazonaws.com\",\"emrnotebooks-prod.me-central-1.amazonaws.com\",\"emrstudio-prod.me-central-1.amazonaws.com\",\"emrappui-prod.me-south-1.amazonaws.com\",\"emrnotebooks-prod.me-south-1.amazonaws.com\",\"emrstudio-prod.me-south-1.amazonaws.com\",\"emrappui-prod.sa-east-1.amazonaws.com\",\"emrnotebooks-prod.sa-east-1.amazonaws.com\",\"emrstudio-prod.sa-east-1.amazonaws.com\",\"emrappui-prod.us-east-1.amazonaws.com\",\"emrnotebooks-prod.us-east-1.amazonaws.com\",\"emrstudio-prod.us-east-1.amazonaws.com\",\"emrappui-prod.us-east-2.amazonaws.com\",\"emrnotebooks-prod.us-east-2.amazonaws.com\",\"emrstudio-prod.us-east-2.amazonaws.com\",\"emrappui-prod.us-gov-east-1.amazonaws.com\",\"emrnotebooks-prod.us-gov-east-1.amazonaws.com\",\"emrstudio-prod.us-gov-east-1.amazonaws.com\",\"emrappui-prod.us-gov-west-1.amazonaws.com\",\"emrnotebooks-prod.us-gov-west-1.amazonaws.com\",\"emrstudio-prod.us-gov-west-1.amazonaws.com\",\"emrappui-prod.us-west-1.amazonaws.com\",\"emrnotebooks-prod.us-west-1.amazonaws.com\",\"emrstudio-prod.us-west-1.amazonaws.com\",\"emrappui-prod.us-west-2.amazonaws.com\",\"emrnotebooks-prod.us-west-2.amazonaws.com\",\"emrstudio-prod.us-west-2.amazonaws.com\",\"*.cn-north-1.airflow.amazonaws.com.cn\",\"*.cn-northwest-1.airflow.amazonaws.com.cn\",\"*.af-south-1.airflow.amazonaws.com\",\"*.ap-east-1.airflow.amazonaws.com\",\"*.ap-northeast-1.airflow.amazonaws.com\",\"*.ap-northeast-2.airflow.amazonaws.com\",\"*.ap-northeast-3.airflow.amazonaws.com\",\"*.ap-south-1.airflow.amazonaws.com\",\"*.ap-south-2.airflow.amazonaws.com\",\"*.ap-southeast-1.airflow.amazonaws.com\",\"*.ap-southeast-2.airflow.amazonaws.com\",\"*.ap-southeast-3.airflow.amazonaws.com\",\"*.ap-southeast-4.airflow.amazonaws.com\",\"*.ca-central-1.airflow.amazonaws.com\",\"*.ca-west-1.airflow.amazonaws.com\",\"*.eu-central-1.airflow.amazonaws.com\",\"*.eu-central-2.airflow.amazonaws.com\",\"*.eu-north-1.airflow.amazonaws.com\",\"*.eu-south-1.airflow.amazonaws.com\",\"*.eu-south-2.airflow.amazonaws.com\",\"*.eu-west-1.airflow.amazonaws.com\",\"*.eu-west-2.airflow.amazonaws.com\",\"*.eu-west-3.airflow.amazonaws.com\",\"*.il-central-1.airflow.amazonaws.com\",\"*.me-central-1.airflow.amazonaws.com\",\"*.me-south-1.airflow.amazonaws.com\",\"*.sa-east-1.airflow.amazonaws.com\",\"*.us-east-1.airflow.amazonaws.com\",\"*.us-east-2.airflow.amazonaws.com\",\"*.us-west-1.airflow.amazonaws.com\",\"*.us-west-2.airflow.amazonaws.com\",\"s3.dualstack.cn-north-1.amazonaws.com.cn\",\"s3-accesspoint.dualstack.cn-north-1.amazonaws.com.cn\",\"s3-website.dualstack.cn-north-1.amazonaws.com.cn\",\"s3.cn-north-1.amazonaws.com.cn\",\"s3-accesspoint.cn-north-1.amazonaws.com.cn\",\"s3-deprecated.cn-north-1.amazonaws.com.cn\",\"s3-object-lambda.cn-north-1.amazonaws.com.cn\",\"s3-website.cn-north-1.amazonaws.com.cn\",\"s3.dualstack.cn-northwest-1.amazonaws.com.cn\",\"s3-accesspoint.dualstack.cn-northwest-1.amazonaws.com.cn\",\"s3.cn-northwest-1.amazonaws.com.cn\",\"s3-accesspoint.cn-northwest-1.amazonaws.com.cn\",\"s3-object-lambda.cn-northwest-1.amazonaws.com.cn\",\"s3-website.cn-northwest-1.amazonaws.com.cn\",\"s3.dualstack.af-south-1.amazonaws.com\",\"s3-accesspoint.dualstack.af-south-1.amazonaws.com\",\"s3-website.dualstack.af-south-1.amazonaws.com\",\"s3.af-south-1.amazonaws.com\",\"s3-accesspoint.af-south-1.amazonaws.com\",\"s3-object-lambda.af-south-1.amazonaws.com\",\"s3-website.af-south-1.amazonaws.com\",\"s3.dualstack.ap-east-1.amazonaws.com\",\"s3-accesspoint.dualstack.ap-east-1.amazonaws.com\",\"s3.ap-east-1.amazonaws.com\",\"s3-accesspoint.ap-east-1.amazonaws.com\",\"s3-object-lambda.ap-east-1.amazonaws.com\",\"s3-website.ap-east-1.amazonaws.com\",\"s3.dualstack.ap-northeast-1.amazonaws.com\",\"s3-accesspoint.dualstack.ap-northeast-1.amazonaws.com\",\"s3-website.dualstack.ap-northeast-1.amazonaws.com\",\"s3.ap-northeast-1.amazonaws.com\",\"s3-accesspoint.ap-northeast-1.amazonaws.com\",\"s3-object-lambda.ap-northeast-1.amazonaws.com\",\"s3-website.ap-northeast-1.amazonaws.com\",\"s3.dualstack.ap-northeast-2.amazonaws.com\",\"s3-accesspoint.dualstack.ap-northeast-2.amazonaws.com\",\"s3-website.dualstack.ap-northeast-2.amazonaws.com\",\"s3.ap-northeast-2.amazonaws.com\",\"s3-accesspoint.ap-northeast-2.amazonaws.com\",\"s3-object-lambda.ap-northeast-2.amazonaws.com\",\"s3-website.ap-northeast-2.amazonaws.com\",\"s3.dualstack.ap-northeast-3.amazonaws.com\",\"s3-accesspoint.dualstack.ap-northeast-3.amazonaws.com\",\"s3-website.dualstack.ap-northeast-3.amazonaws.com\",\"s3.ap-northeast-3.amazonaws.com\",\"s3-accesspoint.ap-northeast-3.amazonaws.com\",\"s3-object-lambda.ap-northeast-3.amazonaws.com\",\"s3-website.ap-northeast-3.amazonaws.com\",\"s3.dualstack.ap-south-1.amazonaws.com\",\"s3-accesspoint.dualstack.ap-south-1.amazonaws.com\",\"s3-website.dualstack.ap-south-1.amazonaws.com\",\"s3.ap-south-1.amazonaws.com\",\"s3-accesspoint.ap-south-1.amazonaws.com\",\"s3-object-lambda.ap-south-1.amazonaws.com\",\"s3-website.ap-south-1.amazonaws.com\",\"s3.dualstack.ap-south-2.amazonaws.com\",\"s3-accesspoint.dualstack.ap-south-2.amazonaws.com\",\"s3-website.dualstack.ap-south-2.amazonaws.com\",\"s3.ap-south-2.amazonaws.com\",\"s3-accesspoint.ap-south-2.amazonaws.com\",\"s3-object-lambda.ap-south-2.amazonaws.com\",\"s3-website.ap-south-2.amazonaws.com\",\"s3.dualstack.ap-southeast-1.amazonaws.com\",\"s3-accesspoint.dualstack.ap-southeast-1.amazonaws.com\",\"s3-website.dualstack.ap-southeast-1.amazonaws.com\",\"s3.ap-southeast-1.amazonaws.com\",\"s3-accesspoint.ap-southeast-1.amazonaws.com\",\"s3-object-lambda.ap-southeast-1.amazonaws.com\",\"s3-website.ap-southeast-1.amazonaws.com\",\"s3.dualstack.ap-southeast-2.amazonaws.com\",\"s3-accesspoint.dualstack.ap-southeast-2.amazonaws.com\",\"s3-website.dualstack.ap-southeast-2.amazonaws.com\",\"s3.ap-southeast-2.amazonaws.com\",\"s3-accesspoint.ap-southeast-2.amazonaws.com\",\"s3-object-lambda.ap-southeast-2.amazonaws.com\",\"s3-website.ap-southeast-2.amazonaws.com\",\"s3.dualstack.ap-southeast-3.amazonaws.com\",\"s3-accesspoint.dualstack.ap-southeast-3.amazonaws.com\",\"s3-website.dualstack.ap-southeast-3.amazonaws.com\",\"s3.ap-southeast-3.amazonaws.com\",\"s3-accesspoint.ap-southeast-3.amazonaws.com\",\"s3-object-lambda.ap-southeast-3.amazonaws.com\",\"s3-website.ap-southeast-3.amazonaws.com\",\"s3.dualstack.ap-southeast-4.amazonaws.com\",\"s3-accesspoint.dualstack.ap-southeast-4.amazonaws.com\",\"s3-website.dualstack.ap-southeast-4.amazonaws.com\",\"s3.ap-southeast-4.amazonaws.com\",\"s3-accesspoint.ap-southeast-4.amazonaws.com\",\"s3-object-lambda.ap-southeast-4.amazonaws.com\",\"s3-website.ap-southeast-4.amazonaws.com\",\"s3.dualstack.ap-southeast-5.amazonaws.com\",\"s3-accesspoint.dualstack.ap-southeast-5.amazonaws.com\",\"s3-website.dualstack.ap-southeast-5.amazonaws.com\",\"s3.ap-southeast-5.amazonaws.com\",\"s3-accesspoint.ap-southeast-5.amazonaws.com\",\"s3-deprecated.ap-southeast-5.amazonaws.com\",\"s3-object-lambda.ap-southeast-5.amazonaws.com\",\"s3-website.ap-southeast-5.amazonaws.com\",\"s3.dualstack.ca-central-1.amazonaws.com\",\"s3-accesspoint.dualstack.ca-central-1.amazonaws.com\",\"s3-accesspoint-fips.dualstack.ca-central-1.amazonaws.com\",\"s3-fips.dualstack.ca-central-1.amazonaws.com\",\"s3-website.dualstack.ca-central-1.amazonaws.com\",\"s3.ca-central-1.amazonaws.com\",\"s3-accesspoint.ca-central-1.amazonaws.com\",\"s3-accesspoint-fips.ca-central-1.amazonaws.com\",\"s3-fips.ca-central-1.amazonaws.com\",\"s3-object-lambda.ca-central-1.amazonaws.com\",\"s3-website.ca-central-1.amazonaws.com\",\"s3.dualstack.ca-west-1.amazonaws.com\",\"s3-accesspoint.dualstack.ca-west-1.amazonaws.com\",\"s3-accesspoint-fips.dualstack.ca-west-1.amazonaws.com\",\"s3-fips.dualstack.ca-west-1.amazonaws.com\",\"s3-website.dualstack.ca-west-1.amazonaws.com\",\"s3.ca-west-1.amazonaws.com\",\"s3-accesspoint.ca-west-1.amazonaws.com\",\"s3-accesspoint-fips.ca-west-1.amazonaws.com\",\"s3-fips.ca-west-1.amazonaws.com\",\"s3-object-lambda.ca-west-1.amazonaws.com\",\"s3-website.ca-west-1.amazonaws.com\",\"s3.dualstack.eu-central-1.amazonaws.com\",\"s3-accesspoint.dualstack.eu-central-1.amazonaws.com\",\"s3-website.dualstack.eu-central-1.amazonaws.com\",\"s3.eu-central-1.amazonaws.com\",\"s3-accesspoint.eu-central-1.amazonaws.com\",\"s3-object-lambda.eu-central-1.amazonaws.com\",\"s3-website.eu-central-1.amazonaws.com\",\"s3.dualstack.eu-central-2.amazonaws.com\",\"s3-accesspoint.dualstack.eu-central-2.amazonaws.com\",\"s3-website.dualstack.eu-central-2.amazonaws.com\",\"s3.eu-central-2.amazonaws.com\",\"s3-accesspoint.eu-central-2.amazonaws.com\",\"s3-object-lambda.eu-central-2.amazonaws.com\",\"s3-website.eu-central-2.amazonaws.com\",\"s3.dualstack.eu-north-1.amazonaws.com\",\"s3-accesspoint.dualstack.eu-north-1.amazonaws.com\",\"s3.eu-north-1.amazonaws.com\",\"s3-accesspoint.eu-north-1.amazonaws.com\",\"s3-object-lambda.eu-north-1.amazonaws.com\",\"s3-website.eu-north-1.amazonaws.com\",\"s3.dualstack.eu-south-1.amazonaws.com\",\"s3-accesspoint.dualstack.eu-south-1.amazonaws.com\",\"s3-website.dualstack.eu-south-1.amazonaws.com\",\"s3.eu-south-1.amazonaws.com\",\"s3-accesspoint.eu-south-1.amazonaws.com\",\"s3-object-lambda.eu-south-1.amazonaws.com\",\"s3-website.eu-south-1.amazonaws.com\",\"s3.dualstack.eu-south-2.amazonaws.com\",\"s3-accesspoint.dualstack.eu-south-2.amazonaws.com\",\"s3-website.dualstack.eu-south-2.amazonaws.com\",\"s3.eu-south-2.amazonaws.com\",\"s3-accesspoint.eu-south-2.amazonaws.com\",\"s3-object-lambda.eu-south-2.amazonaws.com\",\"s3-website.eu-south-2.amazonaws.com\",\"s3.dualstack.eu-west-1.amazonaws.com\",\"s3-accesspoint.dualstack.eu-west-1.amazonaws.com\",\"s3-website.dualstack.eu-west-1.amazonaws.com\",\"s3.eu-west-1.amazonaws.com\",\"s3-accesspoint.eu-west-1.amazonaws.com\",\"s3-deprecated.eu-west-1.amazonaws.com\",\"s3-object-lambda.eu-west-1.amazonaws.com\",\"s3-website.eu-west-1.amazonaws.com\",\"s3.dualstack.eu-west-2.amazonaws.com\",\"s3-accesspoint.dualstack.eu-west-2.amazonaws.com\",\"s3.eu-west-2.amazonaws.com\",\"s3-accesspoint.eu-west-2.amazonaws.com\",\"s3-object-lambda.eu-west-2.amazonaws.com\",\"s3-website.eu-west-2.amazonaws.com\",\"s3.dualstack.eu-west-3.amazonaws.com\",\"s3-accesspoint.dualstack.eu-west-3.amazonaws.com\",\"s3-website.dualstack.eu-west-3.amazonaws.com\",\"s3.eu-west-3.amazonaws.com\",\"s3-accesspoint.eu-west-3.amazonaws.com\",\"s3-object-lambda.eu-west-3.amazonaws.com\",\"s3-website.eu-west-3.amazonaws.com\",\"s3.dualstack.il-central-1.amazonaws.com\",\"s3-accesspoint.dualstack.il-central-1.amazonaws.com\",\"s3-website.dualstack.il-central-1.amazonaws.com\",\"s3.il-central-1.amazonaws.com\",\"s3-accesspoint.il-central-1.amazonaws.com\",\"s3-object-lambda.il-central-1.amazonaws.com\",\"s3-website.il-central-1.amazonaws.com\",\"s3.dualstack.me-central-1.amazonaws.com\",\"s3-accesspoint.dualstack.me-central-1.amazonaws.com\",\"s3-website.dualstack.me-central-1.amazonaws.com\",\"s3.me-central-1.amazonaws.com\",\"s3-accesspoint.me-central-1.amazonaws.com\",\"s3-object-lambda.me-central-1.amazonaws.com\",\"s3-website.me-central-1.amazonaws.com\",\"s3.dualstack.me-south-1.amazonaws.com\",\"s3-accesspoint.dualstack.me-south-1.amazonaws.com\",\"s3.me-south-1.amazonaws.com\",\"s3-accesspoint.me-south-1.amazonaws.com\",\"s3-object-lambda.me-south-1.amazonaws.com\",\"s3-website.me-south-1.amazonaws.com\",\"s3.amazonaws.com\",\"s3-1.amazonaws.com\",\"s3-ap-east-1.amazonaws.com\",\"s3-ap-northeast-1.amazonaws.com\",\"s3-ap-northeast-2.amazonaws.com\",\"s3-ap-northeast-3.amazonaws.com\",\"s3-ap-south-1.amazonaws.com\",\"s3-ap-southeast-1.amazonaws.com\",\"s3-ap-southeast-2.amazonaws.com\",\"s3-ca-central-1.amazonaws.com\",\"s3-eu-central-1.amazonaws.com\",\"s3-eu-north-1.amazonaws.com\",\"s3-eu-west-1.amazonaws.com\",\"s3-eu-west-2.amazonaws.com\",\"s3-eu-west-3.amazonaws.com\",\"s3-external-1.amazonaws.com\",\"s3-fips-us-gov-east-1.amazonaws.com\",\"s3-fips-us-gov-west-1.amazonaws.com\",\"mrap.accesspoint.s3-global.amazonaws.com\",\"s3-me-south-1.amazonaws.com\",\"s3-sa-east-1.amazonaws.com\",\"s3-us-east-2.amazonaws.com\",\"s3-us-gov-east-1.amazonaws.com\",\"s3-us-gov-west-1.amazonaws.com\",\"s3-us-west-1.amazonaws.com\",\"s3-us-west-2.amazonaws.com\",\"s3-website-ap-northeast-1.amazonaws.com\",\"s3-website-ap-southeast-1.amazonaws.com\",\"s3-website-ap-southeast-2.amazonaws.com\",\"s3-website-eu-west-1.amazonaws.com\",\"s3-website-sa-east-1.amazonaws.com\",\"s3-website-us-east-1.amazonaws.com\",\"s3-website-us-gov-west-1.amazonaws.com\",\"s3-website-us-west-1.amazonaws.com\",\"s3-website-us-west-2.amazonaws.com\",\"s3.dualstack.sa-east-1.amazonaws.com\",\"s3-accesspoint.dualstack.sa-east-1.amazonaws.com\",\"s3-website.dualstack.sa-east-1.amazonaws.com\",\"s3.sa-east-1.amazonaws.com\",\"s3-accesspoint.sa-east-1.amazonaws.com\",\"s3-object-lambda.sa-east-1.amazonaws.com\",\"s3-website.sa-east-1.amazonaws.com\",\"s3.dualstack.us-east-1.amazonaws.com\",\"s3-accesspoint.dualstack.us-east-1.amazonaws.com\",\"s3-accesspoint-fips.dualstack.us-east-1.amazonaws.com\",\"s3-fips.dualstack.us-east-1.amazonaws.com\",\"s3-website.dualstack.us-east-1.amazonaws.com\",\"s3.us-east-1.amazonaws.com\",\"s3-accesspoint.us-east-1.amazonaws.com\",\"s3-accesspoint-fips.us-east-1.amazonaws.com\",\"s3-deprecated.us-east-1.amazonaws.com\",\"s3-fips.us-east-1.amazonaws.com\",\"s3-object-lambda.us-east-1.amazonaws.com\",\"s3-website.us-east-1.amazonaws.com\",\"s3.dualstack.us-east-2.amazonaws.com\",\"s3-accesspoint.dualstack.us-east-2.amazonaws.com\",\"s3-accesspoint-fips.dualstack.us-east-2.amazonaws.com\",\"s3-fips.dualstack.us-east-2.amazonaws.com\",\"s3-website.dualstack.us-east-2.amazonaws.com\",\"s3.us-east-2.amazonaws.com\",\"s3-accesspoint.us-east-2.amazonaws.com\",\"s3-accesspoint-fips.us-east-2.amazonaws.com\",\"s3-deprecated.us-east-2.amazonaws.com\",\"s3-fips.us-east-2.amazonaws.com\",\"s3-object-lambda.us-east-2.amazonaws.com\",\"s3-website.us-east-2.amazonaws.com\",\"s3.dualstack.us-gov-east-1.amazonaws.com\",\"s3-accesspoint.dualstack.us-gov-east-1.amazonaws.com\",\"s3-accesspoint-fips.dualstack.us-gov-east-1.amazonaws.com\",\"s3-fips.dualstack.us-gov-east-1.amazonaws.com\",\"s3.us-gov-east-1.amazonaws.com\",\"s3-accesspoint.us-gov-east-1.amazonaws.com\",\"s3-accesspoint-fips.us-gov-east-1.amazonaws.com\",\"s3-fips.us-gov-east-1.amazonaws.com\",\"s3-object-lambda.us-gov-east-1.amazonaws.com\",\"s3-website.us-gov-east-1.amazonaws.com\",\"s3.dualstack.us-gov-west-1.amazonaws.com\",\"s3-accesspoint.dualstack.us-gov-west-1.amazonaws.com\",\"s3-accesspoint-fips.dualstack.us-gov-west-1.amazonaws.com\",\"s3-fips.dualstack.us-gov-west-1.amazonaws.com\",\"s3.us-gov-west-1.amazonaws.com\",\"s3-accesspoint.us-gov-west-1.amazonaws.com\",\"s3-accesspoint-fips.us-gov-west-1.amazonaws.com\",\"s3-fips.us-gov-west-1.amazonaws.com\",\"s3-object-lambda.us-gov-west-1.amazonaws.com\",\"s3-website.us-gov-west-1.amazonaws.com\",\"s3.dualstack.us-west-1.amazonaws.com\",\"s3-accesspoint.dualstack.us-west-1.amazonaws.com\",\"s3-accesspoint-fips.dualstack.us-west-1.amazonaws.com\",\"s3-fips.dualstack.us-west-1.amazonaws.com\",\"s3-website.dualstack.us-west-1.amazonaws.com\",\"s3.us-west-1.amazonaws.com\",\"s3-accesspoint.us-west-1.amazonaws.com\",\"s3-accesspoint-fips.us-west-1.amazonaws.com\",\"s3-fips.us-west-1.amazonaws.com\",\"s3-object-lambda.us-west-1.amazonaws.com\",\"s3-website.us-west-1.amazonaws.com\",\"s3.dualstack.us-west-2.amazonaws.com\",\"s3-accesspoint.dualstack.us-west-2.amazonaws.com\",\"s3-accesspoint-fips.dualstack.us-west-2.amazonaws.com\",\"s3-fips.dualstack.us-west-2.amazonaws.com\",\"s3-website.dualstack.us-west-2.amazonaws.com\",\"s3.us-west-2.amazonaws.com\",\"s3-accesspoint.us-west-2.amazonaws.com\",\"s3-accesspoint-fips.us-west-2.amazonaws.com\",\"s3-deprecated.us-west-2.amazonaws.com\",\"s3-fips.us-west-2.amazonaws.com\",\"s3-object-lambda.us-west-2.amazonaws.com\",\"s3-website.us-west-2.amazonaws.com\",\"labeling.ap-northeast-1.sagemaker.aws\",\"labeling.ap-northeast-2.sagemaker.aws\",\"labeling.ap-south-1.sagemaker.aws\",\"labeling.ap-southeast-1.sagemaker.aws\",\"labeling.ap-southeast-2.sagemaker.aws\",\"labeling.ca-central-1.sagemaker.aws\",\"labeling.eu-central-1.sagemaker.aws\",\"labeling.eu-west-1.sagemaker.aws\",\"labeling.eu-west-2.sagemaker.aws\",\"labeling.us-east-1.sagemaker.aws\",\"labeling.us-east-2.sagemaker.aws\",\"labeling.us-west-2.sagemaker.aws\",\"notebook.af-south-1.sagemaker.aws\",\"notebook.ap-east-1.sagemaker.aws\",\"notebook.ap-northeast-1.sagemaker.aws\",\"notebook.ap-northeast-2.sagemaker.aws\",\"notebook.ap-northeast-3.sagemaker.aws\",\"notebook.ap-south-1.sagemaker.aws\",\"notebook.ap-south-2.sagemaker.aws\",\"notebook.ap-southeast-1.sagemaker.aws\",\"notebook.ap-southeast-2.sagemaker.aws\",\"notebook.ap-southeast-3.sagemaker.aws\",\"notebook.ap-southeast-4.sagemaker.aws\",\"notebook.ca-central-1.sagemaker.aws\",\"notebook-fips.ca-central-1.sagemaker.aws\",\"notebook.ca-west-1.sagemaker.aws\",\"notebook-fips.ca-west-1.sagemaker.aws\",\"notebook.eu-central-1.sagemaker.aws\",\"notebook.eu-central-2.sagemaker.aws\",\"notebook.eu-north-1.sagemaker.aws\",\"notebook.eu-south-1.sagemaker.aws\",\"notebook.eu-south-2.sagemaker.aws\",\"notebook.eu-west-1.sagemaker.aws\",\"notebook.eu-west-2.sagemaker.aws\",\"notebook.eu-west-3.sagemaker.aws\",\"notebook.il-central-1.sagemaker.aws\",\"notebook.me-central-1.sagemaker.aws\",\"notebook.me-south-1.sagemaker.aws\",\"notebook.sa-east-1.sagemaker.aws\",\"notebook.us-east-1.sagemaker.aws\",\"notebook-fips.us-east-1.sagemaker.aws\",\"notebook.us-east-2.sagemaker.aws\",\"notebook-fips.us-east-2.sagemaker.aws\",\"notebook.us-gov-east-1.sagemaker.aws\",\"notebook-fips.us-gov-east-1.sagemaker.aws\",\"notebook.us-gov-west-1.sagemaker.aws\",\"notebook-fips.us-gov-west-1.sagemaker.aws\",\"notebook.us-west-1.sagemaker.aws\",\"notebook-fips.us-west-1.sagemaker.aws\",\"notebook.us-west-2.sagemaker.aws\",\"notebook-fips.us-west-2.sagemaker.aws\",\"notebook.cn-north-1.sagemaker.com.cn\",\"notebook.cn-northwest-1.sagemaker.com.cn\",\"studio.af-south-1.sagemaker.aws\",\"studio.ap-east-1.sagemaker.aws\",\"studio.ap-northeast-1.sagemaker.aws\",\"studio.ap-northeast-2.sagemaker.aws\",\"studio.ap-northeast-3.sagemaker.aws\",\"studio.ap-south-1.sagemaker.aws\",\"studio.ap-southeast-1.sagemaker.aws\",\"studio.ap-southeast-2.sagemaker.aws\",\"studio.ap-southeast-3.sagemaker.aws\",\"studio.ca-central-1.sagemaker.aws\",\"studio.eu-central-1.sagemaker.aws\",\"studio.eu-north-1.sagemaker.aws\",\"studio.eu-south-1.sagemaker.aws\",\"studio.eu-south-2.sagemaker.aws\",\"studio.eu-west-1.sagemaker.aws\",\"studio.eu-west-2.sagemaker.aws\",\"studio.eu-west-3.sagemaker.aws\",\"studio.il-central-1.sagemaker.aws\",\"studio.me-central-1.sagemaker.aws\",\"studio.me-south-1.sagemaker.aws\",\"studio.sa-east-1.sagemaker.aws\",\"studio.us-east-1.sagemaker.aws\",\"studio.us-east-2.sagemaker.aws\",\"studio.us-gov-east-1.sagemaker.aws\",\"studio-fips.us-gov-east-1.sagemaker.aws\",\"studio.us-gov-west-1.sagemaker.aws\",\"studio-fips.us-gov-west-1.sagemaker.aws\",\"studio.us-west-1.sagemaker.aws\",\"studio.us-west-2.sagemaker.aws\",\"studio.cn-north-1.sagemaker.com.cn\",\"studio.cn-northwest-1.sagemaker.com.cn\",\"*.experiments.sagemaker.aws\",\"analytics-gateway.ap-northeast-1.amazonaws.com\",\"analytics-gateway.ap-northeast-2.amazonaws.com\",\"analytics-gateway.ap-south-1.amazonaws.com\",\"analytics-gateway.ap-southeast-1.amazonaws.com\",\"analytics-gateway.ap-southeast-2.amazonaws.com\",\"analytics-gateway.eu-central-1.amazonaws.com\",\"analytics-gateway.eu-west-1.amazonaws.com\",\"analytics-gateway.us-east-1.amazonaws.com\",\"analytics-gateway.us-east-2.amazonaws.com\",\"analytics-gateway.us-west-2.amazonaws.com\",\"amplifyapp.com\",\"*.awsapprunner.com\",\"webview-assets.aws-cloud9.af-south-1.amazonaws.com\",\"vfs.cloud9.af-south-1.amazonaws.com\",\"webview-assets.cloud9.af-south-1.amazonaws.com\",\"webview-assets.aws-cloud9.ap-east-1.amazonaws.com\",\"vfs.cloud9.ap-east-1.amazonaws.com\",\"webview-assets.cloud9.ap-east-1.amazonaws.com\",\"webview-assets.aws-cloud9.ap-northeast-1.amazonaws.com\",\"vfs.cloud9.ap-northeast-1.amazonaws.com\",\"webview-assets.cloud9.ap-northeast-1.amazonaws.com\",\"webview-assets.aws-cloud9.ap-northeast-2.amazonaws.com\",\"vfs.cloud9.ap-northeast-2.amazonaws.com\",\"webview-assets.cloud9.ap-northeast-2.amazonaws.com\",\"webview-assets.aws-cloud9.ap-northeast-3.amazonaws.com\",\"vfs.cloud9.ap-northeast-3.amazonaws.com\",\"webview-assets.cloud9.ap-northeast-3.amazonaws.com\",\"webview-assets.aws-cloud9.ap-south-1.amazonaws.com\",\"vfs.cloud9.ap-south-1.amazonaws.com\",\"webview-assets.cloud9.ap-south-1.amazonaws.com\",\"webview-assets.aws-cloud9.ap-southeast-1.amazonaws.com\",\"vfs.cloud9.ap-southeast-1.amazonaws.com\",\"webview-assets.cloud9.ap-southeast-1.amazonaws.com\",\"webview-assets.aws-cloud9.ap-southeast-2.amazonaws.com\",\"vfs.cloud9.ap-southeast-2.amazonaws.com\",\"webview-assets.cloud9.ap-southeast-2.amazonaws.com\",\"webview-assets.aws-cloud9.ca-central-1.amazonaws.com\",\"vfs.cloud9.ca-central-1.amazonaws.com\",\"webview-assets.cloud9.ca-central-1.amazonaws.com\",\"webview-assets.aws-cloud9.eu-central-1.amazonaws.com\",\"vfs.cloud9.eu-central-1.amazonaws.com\",\"webview-assets.cloud9.eu-central-1.amazonaws.com\",\"webview-assets.aws-cloud9.eu-north-1.amazonaws.com\",\"vfs.cloud9.eu-north-1.amazonaws.com\",\"webview-assets.cloud9.eu-north-1.amazonaws.com\",\"webview-assets.aws-cloud9.eu-south-1.amazonaws.com\",\"vfs.cloud9.eu-south-1.amazonaws.com\",\"webview-assets.cloud9.eu-south-1.amazonaws.com\",\"webview-assets.aws-cloud9.eu-west-1.amazonaws.com\",\"vfs.cloud9.eu-west-1.amazonaws.com\",\"webview-assets.cloud9.eu-west-1.amazonaws.com\",\"webview-assets.aws-cloud9.eu-west-2.amazonaws.com\",\"vfs.cloud9.eu-west-2.amazonaws.com\",\"webview-assets.cloud9.eu-west-2.amazonaws.com\",\"webview-assets.aws-cloud9.eu-west-3.amazonaws.com\",\"vfs.cloud9.eu-west-3.amazonaws.com\",\"webview-assets.cloud9.eu-west-3.amazonaws.com\",\"webview-assets.aws-cloud9.il-central-1.amazonaws.com\",\"vfs.cloud9.il-central-1.amazonaws.com\",\"webview-assets.aws-cloud9.me-south-1.amazonaws.com\",\"vfs.cloud9.me-south-1.amazonaws.com\",\"webview-assets.cloud9.me-south-1.amazonaws.com\",\"webview-assets.aws-cloud9.sa-east-1.amazonaws.com\",\"vfs.cloud9.sa-east-1.amazonaws.com\",\"webview-assets.cloud9.sa-east-1.amazonaws.com\",\"webview-assets.aws-cloud9.us-east-1.amazonaws.com\",\"vfs.cloud9.us-east-1.amazonaws.com\",\"webview-assets.cloud9.us-east-1.amazonaws.com\",\"webview-assets.aws-cloud9.us-east-2.amazonaws.com\",\"vfs.cloud9.us-east-2.amazonaws.com\",\"webview-assets.cloud9.us-east-2.amazonaws.com\",\"webview-assets.aws-cloud9.us-west-1.amazonaws.com\",\"vfs.cloud9.us-west-1.amazonaws.com\",\"webview-assets.cloud9.us-west-1.amazonaws.com\",\"webview-assets.aws-cloud9.us-west-2.amazonaws.com\",\"vfs.cloud9.us-west-2.amazonaws.com\",\"webview-assets.cloud9.us-west-2.amazonaws.com\",\"awsapps.com\",\"cn-north-1.eb.amazonaws.com.cn\",\"cn-northwest-1.eb.amazonaws.com.cn\",\"elasticbeanstalk.com\",\"af-south-1.elasticbeanstalk.com\",\"ap-east-1.elasticbeanstalk.com\",\"ap-northeast-1.elasticbeanstalk.com\",\"ap-northeast-2.elasticbeanstalk.com\",\"ap-northeast-3.elasticbeanstalk.com\",\"ap-south-1.elasticbeanstalk.com\",\"ap-southeast-1.elasticbeanstalk.com\",\"ap-southeast-2.elasticbeanstalk.com\",\"ap-southeast-3.elasticbeanstalk.com\",\"ca-central-1.elasticbeanstalk.com\",\"eu-central-1.elasticbeanstalk.com\",\"eu-north-1.elasticbeanstalk.com\",\"eu-south-1.elasticbeanstalk.com\",\"eu-west-1.elasticbeanstalk.com\",\"eu-west-2.elasticbeanstalk.com\",\"eu-west-3.elasticbeanstalk.com\",\"il-central-1.elasticbeanstalk.com\",\"me-south-1.elasticbeanstalk.com\",\"sa-east-1.elasticbeanstalk.com\",\"us-east-1.elasticbeanstalk.com\",\"us-east-2.elasticbeanstalk.com\",\"us-gov-east-1.elasticbeanstalk.com\",\"us-gov-west-1.elasticbeanstalk.com\",\"us-west-1.elasticbeanstalk.com\",\"us-west-2.elasticbeanstalk.com\",\"*.elb.amazonaws.com.cn\",\"*.elb.amazonaws.com\",\"awsglobalaccelerator.com\",\"*.private.repost.aws\",\"eero.online\",\"eero-stage.online\",\"apigee.io\",\"panel.dev\",\"siiites.com\",\"appspacehosted.com\",\"appspaceusercontent.com\",\"appudo.net\",\"on-aptible.com\",\"f5.si\",\"arvanedge.ir\",\"user.aseinet.ne.jp\",\"gv.vc\",\"d.gv.vc\",\"user.party.eus\",\"pimienta.org\",\"poivron.org\",\"potager.org\",\"sweetpepper.org\",\"myasustor.com\",\"cdn.prod.atlassian-dev.net\",\"translated.page\",\"myfritz.link\",\"myfritz.net\",\"onavstack.net\",\"*.awdev.ca\",\"*.advisor.ws\",\"ecommerce-shop.pl\",\"b-data.io\",\"balena-devices.com\",\"base.ec\",\"official.ec\",\"buyshop.jp\",\"fashionstore.jp\",\"handcrafted.jp\",\"kawaiishop.jp\",\"supersale.jp\",\"theshop.jp\",\"shopselect.net\",\"base.shop\",\"beagleboard.io\",\"*.beget.app\",\"pages.gay\",\"bnr.la\",\"bitbucket.io\",\"blackbaudcdn.net\",\"of.je\",\"bluebite.io\",\"boomla.net\",\"boutir.com\",\"boxfuse.io\",\"square7.ch\",\"bplaced.com\",\"bplaced.de\",\"square7.de\",\"bplaced.net\",\"square7.net\",\"*.s.brave.io\",\"shop.brendly.hr\",\"shop.brendly.rs\",\"browsersafetymark.io\",\"radio.am\",\"radio.fm\",\"uk0.bigv.io\",\"dh.bytemark.co.uk\",\"vm.bytemark.co.uk\",\"cafjs.com\",\"canva-apps.cn\",\"*.my.canvasite.cn\",\"canva-apps.com\",\"*.my.canva.site\",\"drr.ac\",\"uwu.ai\",\"carrd.co\",\"crd.co\",\"ju.mp\",\"api.gov.uk\",\"cdn77-storage.com\",\"rsc.contentproxy9.cz\",\"r.cdn77.net\",\"cdn77-ssl.net\",\"c.cdn77.org\",\"rsc.cdn77.org\",\"ssl.origin.cdn77-secure.org\",\"za.bz\",\"br.com\",\"cn.com\",\"de.com\",\"eu.com\",\"jpn.com\",\"mex.com\",\"ru.com\",\"sa.com\",\"uk.com\",\"us.com\",\"za.com\",\"com.de\",\"gb.net\",\"hu.net\",\"jp.net\",\"se.net\",\"uk.net\",\"ae.org\",\"com.se\",\"cx.ua\",\"discourse.group\",\"discourse.team\",\"clerk.app\",\"clerkstage.app\",\"*.lcl.dev\",\"*.lclstage.dev\",\"*.stg.dev\",\"*.stgstage.dev\",\"cleverapps.cc\",\"*.services.clever-cloud.com\",\"cleverapps.io\",\"cleverapps.tech\",\"clickrising.net\",\"cloudns.asia\",\"cloudns.be\",\"cloud-ip.biz\",\"cloudns.biz\",\"cloudns.cc\",\"cloudns.ch\",\"cloudns.cl\",\"cloudns.club\",\"dnsabr.com\",\"ip-ddns.com\",\"cloudns.cx\",\"cloudns.eu\",\"cloudns.in\",\"cloudns.info\",\"ddns-ip.net\",\"dns-cloud.net\",\"dns-dynamic.net\",\"cloudns.nz\",\"cloudns.org\",\"ip-dynamic.org\",\"cloudns.ph\",\"cloudns.pro\",\"cloudns.pw\",\"cloudns.us\",\"c66.me\",\"cloud66.ws\",\"cloud66.zone\",\"jdevcloud.com\",\"wpdevcloud.com\",\"cloudaccess.host\",\"freesite.host\",\"cloudaccess.net\",\"*.cloudera.site\",\"cf-ipfs.com\",\"cloudflare-ipfs.com\",\"trycloudflare.com\",\"pages.dev\",\"r2.dev\",\"workers.dev\",\"cloudflare.net\",\"cdn.cloudflare.net\",\"cdn.cloudflareanycast.net\",\"cdn.cloudflarecn.net\",\"cdn.cloudflareglobal.net\",\"cust.cloudscale.ch\",\"objects.lpg.cloudscale.ch\",\"objects.rma.cloudscale.ch\",\"wnext.app\",\"cnpy.gdn\",\"*.otap.co\",\"co.ca\",\"co.com\",\"codeberg.page\",\"csb.app\",\"preview.csb.app\",\"co.nl\",\"co.no\",\"webhosting.be\",\"hosting-cluster.nl\",\"ctfcloud.net\",\"convex.site\",\"ac.ru\",\"edu.ru\",\"gov.ru\",\"int.ru\",\"mil.ru\",\"test.ru\",\"dyn.cosidns.de\",\"dnsupdater.de\",\"dynamisches-dns.de\",\"internet-dns.de\",\"l-o-g-i-n.de\",\"dynamic-dns.info\",\"feste-ip.net\",\"knx-server.net\",\"static-access.net\",\"craft.me\",\"realm.cz\",\"on.crisp.email\",\"*.cryptonomic.net\",\"curv.dev\",\"cfolks.pl\",\"cyon.link\",\"cyon.site\",\"platform0.app\",\"fnwk.site\",\"folionetwork.site\",\"biz.dk\",\"co.dk\",\"firm.dk\",\"reg.dk\",\"store.dk\",\"dyndns.dappnode.io\",\"builtwithdark.com\",\"darklang.io\",\"demo.datadetect.com\",\"instance.datadetect.com\",\"edgestack.me\",\"dattolocal.com\",\"dattorelay.com\",\"dattoweb.com\",\"mydatto.com\",\"dattolocal.net\",\"mydatto.net\",\"ddnss.de\",\"dyn.ddnss.de\",\"dyndns.ddnss.de\",\"dyn-ip24.de\",\"dyndns1.de\",\"home-webserver.de\",\"dyn.home-webserver.de\",\"myhome-server.de\",\"ddnss.org\",\"debian.net\",\"definima.io\",\"definima.net\",\"deno.dev\",\"deno-staging.dev\",\"dedyn.io\",\"deta.app\",\"deta.dev\",\"dfirma.pl\",\"dkonto.pl\",\"you2.pl\",\"ondigitalocean.app\",\"*.digitaloceanspaces.com\",\"us.kg\",\"rss.my.id\",\"diher.solutions\",\"discordsays.com\",\"discordsez.com\",\"jozi.biz\",\"dnshome.de\",\"online.th\",\"shop.th\",\"drayddns.com\",\"shoparena.pl\",\"dreamhosters.com\",\"durumis.com\",\"mydrobo.com\",\"drud.io\",\"drud.us\",\"duckdns.org\",\"dy.fi\",\"tunk.org\",\"dyndns.biz\",\"for-better.biz\",\"for-more.biz\",\"for-some.biz\",\"for-the.biz\",\"selfip.biz\",\"webhop.biz\",\"ftpaccess.cc\",\"game-server.cc\",\"myphotos.cc\",\"scrapping.cc\",\"blogdns.com\",\"cechire.com\",\"dnsalias.com\",\"dnsdojo.com\",\"doesntexist.com\",\"dontexist.com\",\"doomdns.com\",\"dyn-o-saur.com\",\"dynalias.com\",\"dyndns-at-home.com\",\"dyndns-at-work.com\",\"dyndns-blog.com\",\"dyndns-free.com\",\"dyndns-home.com\",\"dyndns-ip.com\",\"dyndns-mail.com\",\"dyndns-office.com\",\"dyndns-pics.com\",\"dyndns-remote.com\",\"dyndns-server.com\",\"dyndns-web.com\",\"dyndns-wiki.com\",\"dyndns-work.com\",\"est-a-la-maison.com\",\"est-a-la-masion.com\",\"est-le-patron.com\",\"est-mon-blogueur.com\",\"from-ak.com\",\"from-al.com\",\"from-ar.com\",\"from-ca.com\",\"from-ct.com\",\"from-dc.com\",\"from-de.com\",\"from-fl.com\",\"from-ga.com\",\"from-hi.com\",\"from-ia.com\",\"from-id.com\",\"from-il.com\",\"from-in.com\",\"from-ks.com\",\"from-ky.com\",\"from-ma.com\",\"from-md.com\",\"from-mi.com\",\"from-mn.com\",\"from-mo.com\",\"from-ms.com\",\"from-mt.com\",\"from-nc.com\",\"from-nd.com\",\"from-ne.com\",\"from-nh.com\",\"from-nj.com\",\"from-nm.com\",\"from-nv.com\",\"from-oh.com\",\"from-ok.com\",\"from-or.com\",\"from-pa.com\",\"from-pr.com\",\"from-ri.com\",\"from-sc.com\",\"from-sd.com\",\"from-tn.com\",\"from-tx.com\",\"from-ut.com\",\"from-va.com\",\"from-vt.com\",\"from-wa.com\",\"from-wi.com\",\"from-wv.com\",\"from-wy.com\",\"getmyip.com\",\"gotdns.com\",\"hobby-site.com\",\"homelinux.com\",\"homeunix.com\",\"iamallama.com\",\"is-a-anarchist.com\",\"is-a-blogger.com\",\"is-a-bookkeeper.com\",\"is-a-bulls-fan.com\",\"is-a-caterer.com\",\"is-a-chef.com\",\"is-a-conservative.com\",\"is-a-cpa.com\",\"is-a-cubicle-slave.com\",\"is-a-democrat.com\",\"is-a-designer.com\",\"is-a-doctor.com\",\"is-a-financialadvisor.com\",\"is-a-geek.com\",\"is-a-green.com\",\"is-a-guru.com\",\"is-a-hard-worker.com\",\"is-a-hunter.com\",\"is-a-landscaper.com\",\"is-a-lawyer.com\",\"is-a-liberal.com\",\"is-a-libertarian.com\",\"is-a-llama.com\",\"is-a-musician.com\",\"is-a-nascarfan.com\",\"is-a-nurse.com\",\"is-a-painter.com\",\"is-a-personaltrainer.com\",\"is-a-photographer.com\",\"is-a-player.com\",\"is-a-republican.com\",\"is-a-rockstar.com\",\"is-a-socialist.com\",\"is-a-student.com\",\"is-a-teacher.com\",\"is-a-techie.com\",\"is-a-therapist.com\",\"is-an-accountant.com\",\"is-an-actor.com\",\"is-an-actress.com\",\"is-an-anarchist.com\",\"is-an-artist.com\",\"is-an-engineer.com\",\"is-an-entertainer.com\",\"is-certified.com\",\"is-gone.com\",\"is-into-anime.com\",\"is-into-cars.com\",\"is-into-cartoons.com\",\"is-into-games.com\",\"is-leet.com\",\"is-not-certified.com\",\"is-slick.com\",\"is-uberleet.com\",\"is-with-theband.com\",\"isa-geek.com\",\"isa-hockeynut.com\",\"issmarterthanyou.com\",\"likes-pie.com\",\"likescandy.com\",\"neat-url.com\",\"saves-the-whales.com\",\"selfip.com\",\"sells-for-less.com\",\"sells-for-u.com\",\"servebbs.com\",\"simple-url.com\",\"space-to-rent.com\",\"teaches-yoga.com\",\"writesthisblog.com\",\"ath.cx\",\"fuettertdasnetz.de\",\"isteingeek.de\",\"istmein.de\",\"lebtimnetz.de\",\"leitungsen.de\",\"traeumtgerade.de\",\"barrel-of-knowledge.info\",\"barrell-of-knowledge.info\",\"dyndns.info\",\"for-our.info\",\"groks-the.info\",\"groks-this.info\",\"here-for-more.info\",\"knowsitall.info\",\"selfip.info\",\"webhop.info\",\"forgot.her.name\",\"forgot.his.name\",\"at-band-camp.net\",\"blogdns.net\",\"broke-it.net\",\"buyshouses.net\",\"dnsalias.net\",\"dnsdojo.net\",\"does-it.net\",\"dontexist.net\",\"dynalias.net\",\"dynathome.net\",\"endofinternet.net\",\"from-az.net\",\"from-co.net\",\"from-la.net\",\"from-ny.net\",\"gets-it.net\",\"ham-radio-op.net\",\"homeftp.net\",\"homeip.net\",\"homelinux.net\",\"homeunix.net\",\"in-the-band.net\",\"is-a-chef.net\",\"is-a-geek.net\",\"isa-geek.net\",\"kicks-ass.net\",\"office-on-the.net\",\"podzone.net\",\"scrapper-site.net\",\"selfip.net\",\"sells-it.net\",\"servebbs.net\",\"serveftp.net\",\"thruhere.net\",\"webhop.net\",\"merseine.nu\",\"mine.nu\",\"shacknet.nu\",\"blogdns.org\",\"blogsite.org\",\"boldlygoingnowhere.org\",\"dnsalias.org\",\"dnsdojo.org\",\"doesntexist.org\",\"dontexist.org\",\"doomdns.org\",\"dvrdns.org\",\"dynalias.org\",\"dyndns.org\",\"go.dyndns.org\",\"home.dyndns.org\",\"endofinternet.org\",\"endoftheinternet.org\",\"from-me.org\",\"game-host.org\",\"gotdns.org\",\"hobby-site.org\",\"homedns.org\",\"homeftp.org\",\"homelinux.org\",\"homeunix.org\",\"is-a-bruinsfan.org\",\"is-a-candidate.org\",\"is-a-celticsfan.org\",\"is-a-chef.org\",\"is-a-geek.org\",\"is-a-knight.org\",\"is-a-linux-user.org\",\"is-a-patsfan.org\",\"is-a-soxfan.org\",\"is-found.org\",\"is-lost.org\",\"is-saved.org\",\"is-very-bad.org\",\"is-very-evil.org\",\"is-very-good.org\",\"is-very-nice.org\",\"is-very-sweet.org\",\"isa-geek.org\",\"kicks-ass.org\",\"misconfused.org\",\"podzone.org\",\"readmyblog.org\",\"selfip.org\",\"sellsyourhome.org\",\"servebbs.org\",\"serveftp.org\",\"servegame.org\",\"stuff-4-sale.org\",\"webhop.org\",\"better-than.tv\",\"dyndns.tv\",\"on-the-web.tv\",\"worse-than.tv\",\"is-by.us\",\"land-4-sale.us\",\"stuff-4-sale.us\",\"dyndns.ws\",\"mypets.ws\",\"ddnsfree.com\",\"ddnsgeek.com\",\"giize.com\",\"gleeze.com\",\"kozow.com\",\"loseyourip.com\",\"ooguy.com\",\"theworkpc.com\",\"casacam.net\",\"dynu.net\",\"accesscam.org\",\"camdvr.org\",\"freeddns.org\",\"mywire.org\",\"webredirect.org\",\"myddns.rocks\",\"dynv6.net\",\"e4.cz\",\"easypanel.app\",\"easypanel.host\",\"*.ewp.live\",\"twmail.cc\",\"twmail.net\",\"twmail.org\",\"mymailer.com.tw\",\"url.tw\",\"at.emf.camp\",\"rt.ht\",\"elementor.cloud\",\"elementor.cool\",\"en-root.fr\",\"mytuleap.com\",\"tuleap-partners.com\",\"encr.app\",\"encoreapi.com\",\"eu.encoway.cloud\",\"eu.org\",\"al.eu.org\",\"asso.eu.org\",\"at.eu.org\",\"au.eu.org\",\"be.eu.org\",\"bg.eu.org\",\"ca.eu.org\",\"cd.eu.org\",\"ch.eu.org\",\"cn.eu.org\",\"cy.eu.org\",\"cz.eu.org\",\"de.eu.org\",\"dk.eu.org\",\"edu.eu.org\",\"ee.eu.org\",\"es.eu.org\",\"fi.eu.org\",\"fr.eu.org\",\"gr.eu.org\",\"hr.eu.org\",\"hu.eu.org\",\"ie.eu.org\",\"il.eu.org\",\"in.eu.org\",\"int.eu.org\",\"is.eu.org\",\"it.eu.org\",\"jp.eu.org\",\"kr.eu.org\",\"lt.eu.org\",\"lu.eu.org\",\"lv.eu.org\",\"me.eu.org\",\"mk.eu.org\",\"mt.eu.org\",\"my.eu.org\",\"net.eu.org\",\"ng.eu.org\",\"nl.eu.org\",\"no.eu.org\",\"nz.eu.org\",\"pl.eu.org\",\"pt.eu.org\",\"ro.eu.org\",\"ru.eu.org\",\"se.eu.org\",\"si.eu.org\",\"sk.eu.org\",\"tr.eu.org\",\"uk.eu.org\",\"us.eu.org\",\"eurodir.ru\",\"eu-1.evennode.com\",\"eu-2.evennode.com\",\"eu-3.evennode.com\",\"eu-4.evennode.com\",\"us-1.evennode.com\",\"us-2.evennode.com\",\"us-3.evennode.com\",\"us-4.evennode.com\",\"relay.evervault.app\",\"relay.evervault.dev\",\"expo.app\",\"staging.expo.app\",\"onfabrica.com\",\"ru.net\",\"adygeya.ru\",\"bashkiria.ru\",\"bir.ru\",\"cbg.ru\",\"com.ru\",\"dagestan.ru\",\"grozny.ru\",\"kalmykia.ru\",\"kustanai.ru\",\"marine.ru\",\"mordovia.ru\",\"msk.ru\",\"mytis.ru\",\"nalchik.ru\",\"nov.ru\",\"pyatigorsk.ru\",\"spb.ru\",\"vladikavkaz.ru\",\"vladimir.ru\",\"abkhazia.su\",\"adygeya.su\",\"aktyubinsk.su\",\"arkhangelsk.su\",\"armenia.su\",\"ashgabad.su\",\"azerbaijan.su\",\"balashov.su\",\"bashkiria.su\",\"bryansk.su\",\"bukhara.su\",\"chimkent.su\",\"dagestan.su\",\"east-kazakhstan.su\",\"exnet.su\",\"georgia.su\",\"grozny.su\",\"ivanovo.su\",\"jambyl.su\",\"kalmykia.su\",\"kaluga.su\",\"karacol.su\",\"karaganda.su\",\"karelia.su\",\"khakassia.su\",\"krasnodar.su\",\"kurgan.su\",\"kustanai.su\",\"lenug.su\",\"mangyshlak.su\",\"mordovia.su\",\"msk.su\",\"murmansk.su\",\"nalchik.su\",\"navoi.su\",\"north-kazakhstan.su\",\"nov.su\",\"obninsk.su\",\"penza.su\",\"pokrovsk.su\",\"sochi.su\",\"spb.su\",\"tashkent.su\",\"termez.su\",\"togliatti.su\",\"troitsk.su\",\"tselinograd.su\",\"tula.su\",\"tuva.su\",\"vladikavkaz.su\",\"vladimir.su\",\"vologda.su\",\"channelsdvr.net\",\"u.channelsdvr.net\",\"edgecompute.app\",\"fastly-edge.com\",\"fastly-terrarium.com\",\"freetls.fastly.net\",\"map.fastly.net\",\"a.prod.fastly.net\",\"global.prod.fastly.net\",\"a.ssl.fastly.net\",\"b.ssl.fastly.net\",\"global.ssl.fastly.net\",\"fastlylb.net\",\"map.fastlylb.net\",\"*.user.fm\",\"fastvps-server.com\",\"fastvps.host\",\"myfast.host\",\"fastvps.site\",\"myfast.space\",\"conn.uk\",\"copro.uk\",\"hosp.uk\",\"fedorainfracloud.org\",\"fedorapeople.org\",\"cloud.fedoraproject.org\",\"app.os.fedoraproject.org\",\"app.os.stg.fedoraproject.org\",\"mydobiss.com\",\"fh-muenster.io\",\"filegear.me\",\"firebaseapp.com\",\"fldrv.com\",\"flutterflow.app\",\"fly.dev\",\"shw.io\",\"edgeapp.net\",\"forgeblocks.com\",\"id.forgerock.io\",\"framer.ai\",\"framer.app\",\"framercanvas.com\",\"framer.media\",\"framer.photos\",\"framer.website\",\"framer.wiki\",\"0e.vc\",\"freebox-os.com\",\"freeboxos.com\",\"fbx-os.fr\",\"fbxos.fr\",\"freebox-os.fr\",\"freeboxos.fr\",\"freedesktop.org\",\"freemyip.com\",\"*.frusky.de\",\"wien.funkfeuer.at\",\"daemon.asia\",\"dix.asia\",\"mydns.bz\",\"0am.jp\",\"0g0.jp\",\"0j0.jp\",\"0t0.jp\",\"mydns.jp\",\"pgw.jp\",\"wjg.jp\",\"keyword-on.net\",\"live-on.net\",\"server-on.net\",\"mydns.tw\",\"mydns.vc\",\"*.futurecms.at\",\"*.ex.futurecms.at\",\"*.in.futurecms.at\",\"futurehosting.at\",\"futuremailing.at\",\"*.ex.ortsinfo.at\",\"*.kunden.ortsinfo.at\",\"*.statics.cloud\",\"aliases121.com\",\"campaign.gov.uk\",\"service.gov.uk\",\"independent-commission.uk\",\"independent-inquest.uk\",\"independent-inquiry.uk\",\"independent-panel.uk\",\"independent-review.uk\",\"public-inquiry.uk\",\"royal-commission.uk\",\"gehirn.ne.jp\",\"usercontent.jp\",\"gentapps.com\",\"gentlentapis.com\",\"lab.ms\",\"cdn-edges.net\",\"localcert.net\",\"localhostcert.net\",\"gsj.bz\",\"githubusercontent.com\",\"githubpreview.dev\",\"github.io\",\"gitlab.io\",\"gitapp.si\",\"gitpage.si\",\"glitch.me\",\"nog.community\",\"co.ro\",\"shop.ro\",\"lolipop.io\",\"angry.jp\",\"babyblue.jp\",\"babymilk.jp\",\"backdrop.jp\",\"bambina.jp\",\"bitter.jp\",\"blush.jp\",\"boo.jp\",\"boy.jp\",\"boyfriend.jp\",\"but.jp\",\"candypop.jp\",\"capoo.jp\",\"catfood.jp\",\"cheap.jp\",\"chicappa.jp\",\"chillout.jp\",\"chips.jp\",\"chowder.jp\",\"chu.jp\",\"ciao.jp\",\"cocotte.jp\",\"coolblog.jp\",\"cranky.jp\",\"cutegirl.jp\",\"daa.jp\",\"deca.jp\",\"deci.jp\",\"digick.jp\",\"egoism.jp\",\"fakefur.jp\",\"fem.jp\",\"flier.jp\",\"floppy.jp\",\"fool.jp\",\"frenchkiss.jp\",\"girlfriend.jp\",\"girly.jp\",\"gloomy.jp\",\"gonna.jp\",\"greater.jp\",\"hacca.jp\",\"heavy.jp\",\"her.jp\",\"hiho.jp\",\"hippy.jp\",\"holy.jp\",\"hungry.jp\",\"icurus.jp\",\"itigo.jp\",\"jellybean.jp\",\"kikirara.jp\",\"kill.jp\",\"kilo.jp\",\"kuron.jp\",\"littlestar.jp\",\"lolipopmc.jp\",\"lolitapunk.jp\",\"lomo.jp\",\"lovepop.jp\",\"lovesick.jp\",\"main.jp\",\"mods.jp\",\"mond.jp\",\"mongolian.jp\",\"moo.jp\",\"namaste.jp\",\"nikita.jp\",\"nobushi.jp\",\"noor.jp\",\"oops.jp\",\"parallel.jp\",\"parasite.jp\",\"pecori.jp\",\"peewee.jp\",\"penne.jp\",\"pepper.jp\",\"perma.jp\",\"pigboat.jp\",\"pinoko.jp\",\"punyu.jp\",\"pupu.jp\",\"pussycat.jp\",\"pya.jp\",\"raindrop.jp\",\"readymade.jp\",\"sadist.jp\",\"schoolbus.jp\",\"secret.jp\",\"staba.jp\",\"stripper.jp\",\"sub.jp\",\"sunnyday.jp\",\"thick.jp\",\"tonkotsu.jp\",\"under.jp\",\"upper.jp\",\"velvet.jp\",\"verse.jp\",\"versus.jp\",\"vivian.jp\",\"watson.jp\",\"weblike.jp\",\"whitesnow.jp\",\"zombie.jp\",\"heteml.net\",\"graphic.design\",\"goip.de\",\"blogspot.ae\",\"blogspot.al\",\"blogspot.am\",\"*.hosted.app\",\"*.run.app\",\"web.app\",\"blogspot.com.ar\",\"blogspot.co.at\",\"blogspot.com.au\",\"blogspot.ba\",\"blogspot.be\",\"blogspot.bg\",\"blogspot.bj\",\"blogspot.com.br\",\"blogspot.com.by\",\"blogspot.ca\",\"blogspot.cf\",\"blogspot.ch\",\"blogspot.cl\",\"blogspot.com.co\",\"*.0emm.com\",\"appspot.com\",\"*.r.appspot.com\",\"blogspot.com\",\"codespot.com\",\"googleapis.com\",\"googlecode.com\",\"pagespeedmobilizer.com\",\"withgoogle.com\",\"withyoutube.com\",\"blogspot.cv\",\"blogspot.com.cy\",\"blogspot.cz\",\"blogspot.de\",\"*.gateway.dev\",\"blogspot.dk\",\"blogspot.com.ee\",\"blogspot.com.eg\",\"blogspot.com.es\",\"blogspot.fi\",\"blogspot.fr\",\"cloud.goog\",\"translate.goog\",\"*.usercontent.goog\",\"blogspot.gr\",\"blogspot.hk\",\"blogspot.hr\",\"blogspot.hu\",\"blogspot.co.id\",\"blogspot.ie\",\"blogspot.co.il\",\"blogspot.in\",\"blogspot.is\",\"blogspot.it\",\"blogspot.jp\",\"blogspot.co.ke\",\"blogspot.kr\",\"blogspot.li\",\"blogspot.lt\",\"blogspot.lu\",\"blogspot.md\",\"blogspot.mk\",\"blogspot.com.mt\",\"blogspot.mx\",\"blogspot.my\",\"cloudfunctions.net\",\"blogspot.com.ng\",\"blogspot.nl\",\"blogspot.no\",\"blogspot.co.nz\",\"blogspot.pe\",\"blogspot.pt\",\"blogspot.qa\",\"blogspot.re\",\"blogspot.ro\",\"blogspot.rs\",\"blogspot.ru\",\"blogspot.se\",\"blogspot.sg\",\"blogspot.si\",\"blogspot.sk\",\"blogspot.sn\",\"blogspot.td\",\"blogspot.com.tr\",\"blogspot.tw\",\"blogspot.ug\",\"blogspot.co.uk\",\"blogspot.com.uy\",\"blogspot.vn\",\"blogspot.co.za\",\"goupile.fr\",\"pymnt.uk\",\"cloudapps.digital\",\"london.cloudapps.digital\",\"gov.nl\",\"grafana-dev.net\",\"grayjayleagues.com\",\"günstigbestellen.de\",\"günstigliefern.de\",\"fin.ci\",\"free.hr\",\"caa.li\",\"ua.rs\",\"conf.se\",\"häkkinen.fi\",\"hrsn.dev\",\"hashbang.sh\",\"hasura.app\",\"hasura-app.io\",\"hatenablog.com\",\"hatenadiary.com\",\"hateblo.jp\",\"hatenablog.jp\",\"hatenadiary.jp\",\"hatenadiary.org\",\"pages.it.hs-heilbronn.de\",\"pages-research.it.hs-heilbronn.de\",\"heiyu.space\",\"helioho.st\",\"heliohost.us\",\"hepforge.org\",\"herokuapp.com\",\"herokussl.com\",\"heyflow.page\",\"heyflow.site\",\"ravendb.cloud\",\"ravendb.community\",\"development.run\",\"ravendb.run\",\"homesklep.pl\",\"*.kin.one\",\"*.id.pub\",\"*.kin.pub\",\"secaas.hk\",\"hoplix.shop\",\"orx.biz\",\"biz.gl\",\"biz.ng\",\"co.biz.ng\",\"dl.biz.ng\",\"go.biz.ng\",\"lg.biz.ng\",\"on.biz.ng\",\"col.ng\",\"firm.ng\",\"gen.ng\",\"ltd.ng\",\"ngo.ng\",\"plc.ng\",\"ie.ua\",\"hostyhosting.io\",\"hf.space\",\"static.hf.space\",\"hypernode.io\",\"iobb.net\",\"co.cz\",\"*.moonscale.io\",\"moonscale.net\",\"gr.com\",\"iki.fi\",\"ibxos.it\",\"iliadboxos.it\",\"smushcdn.com\",\"wphostedmail.com\",\"wpmucdn.com\",\"tempurl.host\",\"wpmudev.host\",\"dyn-berlin.de\",\"in-berlin.de\",\"in-brb.de\",\"in-butter.de\",\"in-dsl.de\",\"in-vpn.de\",\"in-dsl.net\",\"in-vpn.net\",\"in-dsl.org\",\"in-vpn.org\",\"biz.at\",\"info.at\",\"info.cx\",\"ac.leg.br\",\"al.leg.br\",\"am.leg.br\",\"ap.leg.br\",\"ba.leg.br\",\"ce.leg.br\",\"df.leg.br\",\"es.leg.br\",\"go.leg.br\",\"ma.leg.br\",\"mg.leg.br\",\"ms.leg.br\",\"mt.leg.br\",\"pa.leg.br\",\"pb.leg.br\",\"pe.leg.br\",\"pi.leg.br\",\"pr.leg.br\",\"rj.leg.br\",\"rn.leg.br\",\"ro.leg.br\",\"rr.leg.br\",\"rs.leg.br\",\"sc.leg.br\",\"se.leg.br\",\"sp.leg.br\",\"to.leg.br\",\"pixolino.com\",\"na4u.ru\",\"apps-1and1.com\",\"live-website.com\",\"apps-1and1.net\",\"websitebuilder.online\",\"app-ionos.space\",\"iopsys.se\",\"*.dweb.link\",\"ipifony.net\",\"ir.md\",\"is-a-good.dev\",\"is-a.dev\",\"iservschule.de\",\"mein-iserv.de\",\"schulplattform.de\",\"schulserver.de\",\"test-iserv.de\",\"iserv.dev\",\"mel.cloudlets.com.au\",\"cloud.interhostsolutions.be\",\"alp1.ae.flow.ch\",\"appengine.flow.ch\",\"es-1.axarnet.cloud\",\"diadem.cloud\",\"vip.jelastic.cloud\",\"jele.cloud\",\"it1.eur.aruba.jenv-aruba.cloud\",\"it1.jenv-aruba.cloud\",\"keliweb.cloud\",\"cs.keliweb.cloud\",\"oxa.cloud\",\"tn.oxa.cloud\",\"uk.oxa.cloud\",\"primetel.cloud\",\"uk.primetel.cloud\",\"ca.reclaim.cloud\",\"uk.reclaim.cloud\",\"us.reclaim.cloud\",\"ch.trendhosting.cloud\",\"de.trendhosting.cloud\",\"jele.club\",\"dopaas.com\",\"paas.hosted-by-previder.com\",\"rag-cloud.hosteur.com\",\"rag-cloud-ch.hosteur.com\",\"jcloud.ik-server.com\",\"jcloud-ver-jpc.ik-server.com\",\"demo.jelastic.com\",\"paas.massivegrid.com\",\"jed.wafaicloud.com\",\"ryd.wafaicloud.com\",\"j.scaleforce.com.cy\",\"jelastic.dogado.eu\",\"fi.cloudplatform.fi\",\"demo.datacenter.fi\",\"paas.datacenter.fi\",\"jele.host\",\"mircloud.host\",\"paas.beebyte.io\",\"sekd1.beebyteapp.io\",\"jele.io\",\"jc.neen.it\",\"jcloud.kz\",\"cloudjiffy.net\",\"fra1-de.cloudjiffy.net\",\"west1-us.cloudjiffy.net\",\"jls-sto1.elastx.net\",\"jls-sto2.elastx.net\",\"jls-sto3.elastx.net\",\"fr-1.paas.massivegrid.net\",\"lon-1.paas.massivegrid.net\",\"lon-2.paas.massivegrid.net\",\"ny-1.paas.massivegrid.net\",\"ny-2.paas.massivegrid.net\",\"sg-1.paas.massivegrid.net\",\"jelastic.saveincloud.net\",\"nordeste-idc.saveincloud.net\",\"j.scaleforce.net\",\"sdscloud.pl\",\"unicloud.pl\",\"mircloud.ru\",\"enscaled.sg\",\"jele.site\",\"jelastic.team\",\"orangecloud.tn\",\"j.layershift.co.uk\",\"phx.enscaled.us\",\"mircloud.us\",\"myjino.ru\",\"*.hosting.myjino.ru\",\"*.landing.myjino.ru\",\"*.spectrum.myjino.ru\",\"*.vps.myjino.ru\",\"jotelulu.cloud\",\"webadorsite.com\",\"jouwweb.site\",\"*.cns.joyent.com\",\"*.triton.zone\",\"js.org\",\"kaas.gg\",\"khplay.nl\",\"kapsi.fi\",\"ezproxy.kuleuven.be\",\"kuleuven.cloud\",\"keymachine.de\",\"kinghost.net\",\"uni5.net\",\"knightpoint.systems\",\"koobin.events\",\"webthings.io\",\"krellian.net\",\"oya.to\",\"git-repos.de\",\"lcube-server.de\",\"svn-repos.de\",\"leadpages.co\",\"lpages.co\",\"lpusercontent.com\",\"lelux.site\",\"libp2p.direct\",\"runcontainers.dev\",\"co.business\",\"co.education\",\"co.events\",\"co.financial\",\"co.network\",\"co.place\",\"co.technology\",\"linkyard-cloud.ch\",\"linkyard.cloud\",\"members.linode.com\",\"*.nodebalancer.linode.com\",\"*.linodeobjects.com\",\"ip.linodeusercontent.com\",\"we.bs\",\"filegear-sg.me\",\"ggff.net\",\"*.user.localcert.dev\",\"lodz.pl\",\"pabianice.pl\",\"plock.pl\",\"sieradz.pl\",\"skierniewice.pl\",\"zgierz.pl\",\"loginline.app\",\"loginline.dev\",\"loginline.io\",\"loginline.services\",\"loginline.site\",\"lohmus.me\",\"servers.run\",\"krasnik.pl\",\"leczna.pl\",\"lubartow.pl\",\"lublin.pl\",\"poniatowa.pl\",\"swidnik.pl\",\"glug.org.uk\",\"lug.org.uk\",\"lugs.org.uk\",\"barsy.bg\",\"barsy.club\",\"barsycenter.com\",\"barsyonline.com\",\"barsy.de\",\"barsy.dev\",\"barsy.eu\",\"barsy.gr\",\"barsy.in\",\"barsy.info\",\"barsy.io\",\"barsy.me\",\"barsy.menu\",\"barsyonline.menu\",\"barsy.mobi\",\"barsy.net\",\"barsy.online\",\"barsy.org\",\"barsy.pro\",\"barsy.pub\",\"barsy.ro\",\"barsy.rs\",\"barsy.shop\",\"barsyonline.shop\",\"barsy.site\",\"barsy.store\",\"barsy.support\",\"barsy.uk\",\"barsy.co.uk\",\"barsyonline.co.uk\",\"*.magentosite.cloud\",\"hb.cldmail.ru\",\"matlab.cloud\",\"modelscape.com\",\"mwcloudnonprod.com\",\"polyspace.com\",\"mayfirst.info\",\"mayfirst.org\",\"mazeplay.com\",\"mcdir.me\",\"mcdir.ru\",\"vps.mcdir.ru\",\"mcpre.ru\",\"mediatech.by\",\"mediatech.dev\",\"hra.health\",\"medusajs.app\",\"miniserver.com\",\"memset.net\",\"messerli.app\",\"atmeta.com\",\"apps.fbsbx.com\",\"*.cloud.metacentrum.cz\",\"custom.metacentrum.cz\",\"flt.cloud.muni.cz\",\"usr.cloud.muni.cz\",\"meteorapp.com\",\"eu.meteorapp.com\",\"co.pl\",\"*.azurecontainer.io\",\"azure-api.net\",\"azure-mobile.net\",\"azureedge.net\",\"azurefd.net\",\"azurestaticapps.net\",\"1.azurestaticapps.net\",\"2.azurestaticapps.net\",\"3.azurestaticapps.net\",\"4.azurestaticapps.net\",\"5.azurestaticapps.net\",\"6.azurestaticapps.net\",\"7.azurestaticapps.net\",\"centralus.azurestaticapps.net\",\"eastasia.azurestaticapps.net\",\"eastus2.azurestaticapps.net\",\"westeurope.azurestaticapps.net\",\"westus2.azurestaticapps.net\",\"azurewebsites.net\",\"cloudapp.net\",\"trafficmanager.net\",\"blob.core.windows.net\",\"servicebus.windows.net\",\"routingthecloud.com\",\"sn.mynetname.net\",\"routingthecloud.net\",\"routingthecloud.org\",\"csx.cc\",\"mydbserver.com\",\"webspaceconfig.de\",\"mittwald.info\",\"mittwaldserver.info\",\"typo3server.info\",\"project.space\",\"modx.dev\",\"bmoattachments.org\",\"net.ru\",\"org.ru\",\"pp.ru\",\"hostedpi.com\",\"caracal.mythic-beasts.com\",\"customer.mythic-beasts.com\",\"fentiger.mythic-beasts.com\",\"lynx.mythic-beasts.com\",\"ocelot.mythic-beasts.com\",\"oncilla.mythic-beasts.com\",\"onza.mythic-beasts.com\",\"sphinx.mythic-beasts.com\",\"vs.mythic-beasts.com\",\"x.mythic-beasts.com\",\"yali.mythic-beasts.com\",\"cust.retrosnub.co.uk\",\"ui.nabu.casa\",\"cloud.nospamproxy.com\",\"netfy.app\",\"netlify.app\",\"4u.com\",\"nfshost.com\",\"ipfs.nftstorage.link\",\"ngo.us\",\"ngrok.app\",\"ngrok-free.app\",\"ngrok.dev\",\"ngrok-free.dev\",\"ngrok.io\",\"ap.ngrok.io\",\"au.ngrok.io\",\"eu.ngrok.io\",\"in.ngrok.io\",\"jp.ngrok.io\",\"sa.ngrok.io\",\"us.ngrok.io\",\"ngrok.pizza\",\"ngrok.pro\",\"torun.pl\",\"nh-serv.co.uk\",\"nimsite.uk\",\"mmafan.biz\",\"myftp.biz\",\"no-ip.biz\",\"no-ip.ca\",\"fantasyleague.cc\",\"gotdns.ch\",\"3utilities.com\",\"blogsyte.com\",\"ciscofreak.com\",\"damnserver.com\",\"ddnsking.com\",\"ditchyourip.com\",\"dnsiskinky.com\",\"dynns.com\",\"geekgalaxy.com\",\"health-carereform.com\",\"homesecuritymac.com\",\"homesecuritypc.com\",\"myactivedirectory.com\",\"mysecuritycamera.com\",\"myvnc.com\",\"net-freaks.com\",\"onthewifi.com\",\"point2this.com\",\"quicksytes.com\",\"securitytactics.com\",\"servebeer.com\",\"servecounterstrike.com\",\"serveexchange.com\",\"serveftp.com\",\"servegame.com\",\"servehalflife.com\",\"servehttp.com\",\"servehumour.com\",\"serveirc.com\",\"servemp3.com\",\"servep2p.com\",\"servepics.com\",\"servequake.com\",\"servesarcasm.com\",\"stufftoread.com\",\"unusualperson.com\",\"workisboring.com\",\"dvrcam.info\",\"ilovecollege.info\",\"no-ip.info\",\"brasilia.me\",\"ddns.me\",\"dnsfor.me\",\"hopto.me\",\"loginto.me\",\"noip.me\",\"webhop.me\",\"bounceme.net\",\"ddns.net\",\"eating-organic.net\",\"mydissent.net\",\"myeffect.net\",\"mymediapc.net\",\"mypsx.net\",\"mysecuritycamera.net\",\"nhlfan.net\",\"no-ip.net\",\"pgafan.net\",\"privatizehealthinsurance.net\",\"redirectme.net\",\"serveblog.net\",\"serveminecraft.net\",\"sytes.net\",\"cable-modem.org\",\"collegefan.org\",\"couchpotatofries.org\",\"hopto.org\",\"mlbfan.org\",\"myftp.org\",\"mysecuritycamera.org\",\"nflfan.org\",\"no-ip.org\",\"read-books.org\",\"ufcfan.org\",\"zapto.org\",\"no-ip.co.uk\",\"golffan.us\",\"noip.us\",\"pointto.us\",\"stage.nodeart.io\",\"*.developer.app\",\"noop.app\",\"*.northflank.app\",\"*.build.run\",\"*.code.run\",\"*.database.run\",\"*.migration.run\",\"noticeable.news\",\"notion.site\",\"dnsking.ch\",\"mypi.co\",\"n4t.co\",\"001www.com\",\"myiphost.com\",\"forumz.info\",\"soundcast.me\",\"tcp4.me\",\"dnsup.net\",\"hicam.net\",\"now-dns.net\",\"ownip.net\",\"vpndns.net\",\"dynserv.org\",\"now-dns.org\",\"x443.pw\",\"now-dns.top\",\"ntdll.top\",\"freeddns.us\",\"nsupdate.info\",\"nerdpol.ovh\",\"nyc.mn\",\"prvcy.page\",\"obl.ong\",\"observablehq.cloud\",\"static.observableusercontent.com\",\"omg.lol\",\"cloudycluster.net\",\"omniwe.site\",\"123webseite.at\",\"123website.be\",\"simplesite.com.br\",\"123website.ch\",\"simplesite.com\",\"123webseite.de\",\"123hjemmeside.dk\",\"123miweb.es\",\"123kotisivu.fi\",\"123siteweb.fr\",\"simplesite.gr\",\"123homepage.it\",\"123website.lu\",\"123website.nl\",\"123hjemmeside.no\",\"service.one\",\"simplesite.pl\",\"123paginaweb.pt\",\"123minsida.se\",\"is-a-fullstack.dev\",\"is-cool.dev\",\"is-not-a.dev\",\"localplayer.dev\",\"is-local.org\",\"opensocial.site\",\"opencraft.hosting\",\"16-b.it\",\"32-b.it\",\"64-b.it\",\"orsites.com\",\"operaunite.com\",\"*.customer-oci.com\",\"*.oci.customer-oci.com\",\"*.ocp.customer-oci.com\",\"*.ocs.customer-oci.com\",\"*.oraclecloudapps.com\",\"*.oraclegovcloudapps.com\",\"*.oraclegovcloudapps.uk\",\"tech.orange\",\"can.re\",\"authgear-staging.com\",\"authgearapps.com\",\"skygearapp.com\",\"outsystemscloud.com\",\"*.hosting.ovh.net\",\"*.webpaas.ovh.net\",\"ownprovider.com\",\"own.pm\",\"*.owo.codes\",\"ox.rs\",\"oy.lc\",\"pgfog.com\",\"pagexl.com\",\"gotpantheon.com\",\"pantheonsite.io\",\"*.paywhirl.com\",\"*.xmit.co\",\"xmit.dev\",\"madethis.site\",\"srv.us\",\"gh.srv.us\",\"gl.srv.us\",\"lk3.ru\",\"mypep.link\",\"perspecta.cloud\",\"on-web.fr\",\"*.upsun.app\",\"upsunapp.com\",\"ent.platform.sh\",\"eu.platform.sh\",\"us.platform.sh\",\"*.platformsh.site\",\"*.tst.site\",\"platter-app.com\",\"platter-app.dev\",\"platterp.us\",\"pley.games\",\"onporter.run\",\"co.bn\",\"postman-echo.com\",\"pstmn.io\",\"mock.pstmn.io\",\"httpbin.org\",\"prequalifyme.today\",\"xen.prgmr.com\",\"priv.at\",\"protonet.io\",\"chirurgiens-dentistes-en-france.fr\",\"byen.site\",\"pubtls.org\",\"pythonanywhere.com\",\"eu.pythonanywhere.com\",\"qa2.com\",\"qcx.io\",\"*.sys.qcx.io\",\"myqnapcloud.cn\",\"alpha-myqnapcloud.com\",\"dev-myqnapcloud.com\",\"mycloudnas.com\",\"mynascloud.com\",\"myqnapcloud.com\",\"qoto.io\",\"qualifioapp.com\",\"ladesk.com\",\"qbuser.com\",\"*.quipelements.com\",\"vapor.cloud\",\"vaporcloud.io\",\"rackmaze.com\",\"rackmaze.net\",\"cloudsite.builders\",\"myradweb.net\",\"servername.us\",\"web.in\",\"in.net\",\"myrdbx.io\",\"site.rb-hosting.io\",\"*.on-rancher.cloud\",\"*.on-k3s.io\",\"*.on-rio.io\",\"ravpage.co.il\",\"readthedocs-hosted.com\",\"readthedocs.io\",\"rhcloud.com\",\"instances.spawn.cc\",\"onrender.com\",\"app.render.com\",\"replit.app\",\"id.replit.app\",\"firewalledreplit.co\",\"id.firewalledreplit.co\",\"repl.co\",\"id.repl.co\",\"replit.dev\",\"archer.replit.dev\",\"bones.replit.dev\",\"canary.replit.dev\",\"global.replit.dev\",\"hacker.replit.dev\",\"id.replit.dev\",\"janeway.replit.dev\",\"kim.replit.dev\",\"kira.replit.dev\",\"kirk.replit.dev\",\"odo.replit.dev\",\"paris.replit.dev\",\"picard.replit.dev\",\"pike.replit.dev\",\"prerelease.replit.dev\",\"reed.replit.dev\",\"riker.replit.dev\",\"sisko.replit.dev\",\"spock.replit.dev\",\"staging.replit.dev\",\"sulu.replit.dev\",\"tarpit.replit.dev\",\"teams.replit.dev\",\"tucker.replit.dev\",\"wesley.replit.dev\",\"worf.replit.dev\",\"repl.run\",\"resindevice.io\",\"devices.resinstaging.io\",\"hzc.io\",\"adimo.co.uk\",\"itcouldbewor.se\",\"aus.basketball\",\"nz.basketball\",\"git-pages.rit.edu\",\"rocky.page\",\"rub.de\",\"ruhr-uni-bochum.de\",\"io.noc.ruhr-uni-bochum.de\",\"биз.рус\",\"ком.рус\",\"крым.рус\",\"мир.рус\",\"мск.рус\",\"орг.рус\",\"самара.рус\",\"сочи.рус\",\"спб.рус\",\"я.рус\",\"ras.ru\",\"nyat.app\",\"180r.com\",\"dojin.com\",\"sakuratan.com\",\"sakuraweb.com\",\"x0.com\",\"2-d.jp\",\"bona.jp\",\"crap.jp\",\"daynight.jp\",\"eek.jp\",\"flop.jp\",\"halfmoon.jp\",\"jeez.jp\",\"matrix.jp\",\"mimoza.jp\",\"ivory.ne.jp\",\"mail-box.ne.jp\",\"mints.ne.jp\",\"mokuren.ne.jp\",\"opal.ne.jp\",\"sakura.ne.jp\",\"sumomo.ne.jp\",\"topaz.ne.jp\",\"netgamers.jp\",\"nyanta.jp\",\"o0o0.jp\",\"rdy.jp\",\"rgr.jp\",\"rulez.jp\",\"s3.isk01.sakurastorage.jp\",\"s3.isk02.sakurastorage.jp\",\"saloon.jp\",\"sblo.jp\",\"skr.jp\",\"tank.jp\",\"uh-oh.jp\",\"undo.jp\",\"rs.webaccel.jp\",\"user.webaccel.jp\",\"websozai.jp\",\"xii.jp\",\"squares.net\",\"jpn.org\",\"kirara.st\",\"x0.to\",\"from.tv\",\"sakura.tv\",\"*.builder.code.com\",\"*.dev-builder.code.com\",\"*.stg-builder.code.com\",\"*.001.test.code-builder-stg.platform.salesforce.com\",\"*.d.crm.dev\",\"*.w.crm.dev\",\"*.wa.crm.dev\",\"*.wb.crm.dev\",\"*.wc.crm.dev\",\"*.wd.crm.dev\",\"*.we.crm.dev\",\"*.wf.crm.dev\",\"sandcats.io\",\"logoip.com\",\"logoip.de\",\"fr-par-1.baremetal.scw.cloud\",\"fr-par-2.baremetal.scw.cloud\",\"nl-ams-1.baremetal.scw.cloud\",\"cockpit.fr-par.scw.cloud\",\"fnc.fr-par.scw.cloud\",\"functions.fnc.fr-par.scw.cloud\",\"k8s.fr-par.scw.cloud\",\"nodes.k8s.fr-par.scw.cloud\",\"s3.fr-par.scw.cloud\",\"s3-website.fr-par.scw.cloud\",\"whm.fr-par.scw.cloud\",\"priv.instances.scw.cloud\",\"pub.instances.scw.cloud\",\"k8s.scw.cloud\",\"cockpit.nl-ams.scw.cloud\",\"k8s.nl-ams.scw.cloud\",\"nodes.k8s.nl-ams.scw.cloud\",\"s3.nl-ams.scw.cloud\",\"s3-website.nl-ams.scw.cloud\",\"whm.nl-ams.scw.cloud\",\"cockpit.pl-waw.scw.cloud\",\"k8s.pl-waw.scw.cloud\",\"nodes.k8s.pl-waw.scw.cloud\",\"s3.pl-waw.scw.cloud\",\"s3-website.pl-waw.scw.cloud\",\"scalebook.scw.cloud\",\"smartlabeling.scw.cloud\",\"dedibox.fr\",\"schokokeks.net\",\"gov.scot\",\"service.gov.scot\",\"scrysec.com\",\"client.scrypted.io\",\"firewall-gateway.com\",\"firewall-gateway.de\",\"my-gateway.de\",\"my-router.de\",\"spdns.de\",\"spdns.eu\",\"firewall-gateway.net\",\"my-firewall.org\",\"myfirewall.org\",\"spdns.org\",\"seidat.net\",\"sellfy.store\",\"minisite.ms\",\"senseering.net\",\"servebolt.cloud\",\"biz.ua\",\"co.ua\",\"pp.ua\",\"as.sh.cn\",\"sheezy.games\",\"shiftedit.io\",\"myshopblocks.com\",\"myshopify.com\",\"shopitsite.com\",\"shopware.shop\",\"shopware.store\",\"mo-siemens.io\",\"1kapp.com\",\"appchizi.com\",\"applinzi.com\",\"sinaapp.com\",\"vipsinaapp.com\",\"siteleaf.net\",\"small-web.org\",\"aeroport.fr\",\"avocat.fr\",\"chambagri.fr\",\"chirurgiens-dentistes.fr\",\"experts-comptables.fr\",\"medecin.fr\",\"notaires.fr\",\"pharmacien.fr\",\"port.fr\",\"veterinaire.fr\",\"vp4.me\",\"*.snowflake.app\",\"*.privatelink.snowflake.app\",\"streamlit.app\",\"streamlitapp.com\",\"try-snowplow.com\",\"mafelo.net\",\"playstation-cloud.com\",\"srht.site\",\"apps.lair.io\",\"*.stolos.io\",\"spacekit.io\",\"ind.mom\",\"customer.speedpartner.de\",\"myspreadshop.at\",\"myspreadshop.com.au\",\"myspreadshop.be\",\"myspreadshop.ca\",\"myspreadshop.ch\",\"myspreadshop.com\",\"myspreadshop.de\",\"myspreadshop.dk\",\"myspreadshop.es\",\"myspreadshop.fi\",\"myspreadshop.fr\",\"myspreadshop.ie\",\"myspreadshop.it\",\"myspreadshop.net\",\"myspreadshop.nl\",\"myspreadshop.no\",\"myspreadshop.pl\",\"myspreadshop.se\",\"myspreadshop.co.uk\",\"w-corp-staticblitz.com\",\"w-credentialless-staticblitz.com\",\"w-staticblitz.com\",\"stackhero-network.com\",\"runs.onstackit.cloud\",\"stackit.gg\",\"stackit.rocks\",\"stackit.run\",\"stackit.zone\",\"musician.io\",\"novecore.site\",\"api.stdlib.com\",\"feedback.ac\",\"forms.ac\",\"assessments.cx\",\"calculators.cx\",\"funnels.cx\",\"paynow.cx\",\"quizzes.cx\",\"researched.cx\",\"tests.cx\",\"surveys.so\",\"storebase.store\",\"storipress.app\",\"storj.farm\",\"strapiapp.com\",\"media.strapiapp.com\",\"vps-host.net\",\"atl.jelastic.vps-host.net\",\"njs.jelastic.vps-host.net\",\"ric.jelastic.vps-host.net\",\"streak-link.com\",\"streaklinks.com\",\"streakusercontent.com\",\"soc.srcf.net\",\"user.srcf.net\",\"utwente.io\",\"temp-dns.com\",\"supabase.co\",\"supabase.in\",\"supabase.net\",\"syncloud.it\",\"dscloud.biz\",\"direct.quickconnect.cn\",\"dsmynas.com\",\"familyds.com\",\"diskstation.me\",\"dscloud.me\",\"i234.me\",\"myds.me\",\"synology.me\",\"dscloud.mobi\",\"dsmynas.net\",\"familyds.net\",\"dsmynas.org\",\"familyds.org\",\"direct.quickconnect.to\",\"vpnplus.to\",\"mytabit.com\",\"mytabit.co.il\",\"tabitorder.co.il\",\"taifun-dns.de\",\"ts.net\",\"*.c.ts.net\",\"gda.pl\",\"gdansk.pl\",\"gdynia.pl\",\"med.pl\",\"sopot.pl\",\"taveusercontent.com\",\"p.tawk.email\",\"p.tawkto.email\",\"site.tb-hosting.com\",\"edugit.io\",\"s3.teckids.org\",\"telebit.app\",\"telebit.io\",\"*.telebit.xyz\",\"*.firenet.ch\",\"*.svc.firenet.ch\",\"reservd.com\",\"thingdustdata.com\",\"cust.dev.thingdust.io\",\"reservd.dev.thingdust.io\",\"cust.disrec.thingdust.io\",\"reservd.disrec.thingdust.io\",\"cust.prod.thingdust.io\",\"cust.testing.thingdust.io\",\"reservd.testing.thingdust.io\",\"tickets.io\",\"arvo.network\",\"azimuth.network\",\"tlon.network\",\"torproject.net\",\"pages.torproject.net\",\"townnews-staging.com\",\"12hp.at\",\"2ix.at\",\"4lima.at\",\"lima-city.at\",\"12hp.ch\",\"2ix.ch\",\"4lima.ch\",\"lima-city.ch\",\"trafficplex.cloud\",\"de.cool\",\"12hp.de\",\"2ix.de\",\"4lima.de\",\"lima-city.de\",\"1337.pictures\",\"clan.rip\",\"lima-city.rocks\",\"webspace.rocks\",\"lima.zone\",\"*.transurl.be\",\"*.transurl.eu\",\"site.transip.me\",\"*.transurl.nl\",\"tuxfamily.org\",\"dd-dns.de\",\"dray-dns.de\",\"draydns.de\",\"dyn-vpn.de\",\"dynvpn.de\",\"mein-vigor.de\",\"my-vigor.de\",\"my-wan.de\",\"syno-ds.de\",\"synology-diskstation.de\",\"synology-ds.de\",\"diskstation.eu\",\"diskstation.org\",\"typedream.app\",\"pro.typeform.com\",\"*.uberspace.de\",\"uber.space\",\"hk.com\",\"inc.hk\",\"ltd.hk\",\"hk.org\",\"it.com\",\"unison-services.cloud\",\"virtual-user.de\",\"virtualuser.de\",\"name.pm\",\"sch.tf\",\"biz.wf\",\"sch.wf\",\"org.yt\",\"rs.ba\",\"bielsko.pl\",\"upli.io\",\"urown.cloud\",\"dnsupdate.info\",\"us.org\",\"v.ua\",\"express.val.run\",\"web.val.run\",\"vercel.app\",\"v0.build\",\"vercel.dev\",\"vusercontent.net\",\"now.sh\",\"2038.io\",\"router.management\",\"v-info.info\",\"voorloper.cloud\",\"*.vultrobjects.com\",\"wafflecell.com\",\"webflow.io\",\"webflowtest.io\",\"*.webhare.dev\",\"bookonline.app\",\"hotelwithflight.com\",\"reserve-online.com\",\"reserve-online.net\",\"cprapid.com\",\"pleskns.com\",\"wp2.host\",\"pdns.page\",\"plesk.page\",\"wpsquared.site\",\"*.wadl.top\",\"remotewd.com\",\"box.ca\",\"pages.wiardweb.com\",\"toolforge.org\",\"wmcloud.org\",\"wmflabs.org\",\"wdh.app\",\"panel.gg\",\"daemon.panel.gg\",\"wixsite.com\",\"wixstudio.com\",\"editorx.io\",\"wixstudio.io\",\"wix.run\",\"messwithdns.com\",\"woltlab-demo.com\",\"myforum.community\",\"community-pro.de\",\"diskussionsbereich.de\",\"community-pro.net\",\"meinforum.net\",\"affinitylottery.org.uk\",\"raffleentry.org.uk\",\"weeklylottery.org.uk\",\"wpenginepowered.com\",\"js.wpenginepowered.com\",\"half.host\",\"xnbay.com\",\"u2.xnbay.com\",\"u2-local.xnbay.com\",\"cistron.nl\",\"demon.nl\",\"xs4all.space\",\"yandexcloud.net\",\"storage.yandexcloud.net\",\"website.yandexcloud.net\",\"official.academy\",\"yolasite.com\",\"yombo.me\",\"ynh.fr\",\"nohost.me\",\"noho.st\",\"za.net\",\"za.org\",\"zap.cloud\",\"zeabur.app\",\"bss.design\",\"basicserver.io\",\"virtualserver.io\",\"enterprisecloud.nu\"],Z=Y.reduce((e,s)=>{const c=s.replace(/^(\\*\\.|\\!)/,\"\"),o=A.toASCII(c),t=s.charAt(0);if(e.has(o))throw new Error(`Multiple rules found for ${s} (${o})`);return e.set(o,{rule:s,suffix:c,punySuffix:o,wildcard:t===\"*\",exception:t===\"!\"}),e},new Map),aa=e=>{const c=A.toASCII(e).split(\".\");for(let o=0;o<c.length;o++){const t=c.slice(o).join(\".\"),d=Z.get(t);if(d)return d}return null},H={DOMAIN_TOO_SHORT:\"Domain name too short.\",DOMAIN_TOO_LONG:\"Domain name too long. It should be no more than 255 chars.\",LABEL_STARTS_WITH_DASH:\"Domain name label can not start with a dash.\",LABEL_ENDS_WITH_DASH:\"Domain name label can not end with a dash.\",LABEL_TOO_LONG:\"Domain name label should be at most 63 chars long.\",LABEL_TOO_SHORT:\"Domain name label should be at least 1 character long.\",LABEL_INVALID_CHARS:\"Domain name label can only contain alphanumeric characters or dashes.\"},oa=e=>{const s=A.toASCII(e);if(s.length<1)return\"DOMAIN_TOO_SHORT\";if(s.length>255)return\"DOMAIN_TOO_LONG\";const c=s.split(\".\");let o;for(let t=0;t<c.length;++t){if(o=c[t],!o.length)return\"LABEL_TOO_SHORT\";if(o.length>63)return\"LABEL_TOO_LONG\";if(o.charAt(0)===\"-\")return\"LABEL_STARTS_WITH_DASH\";if(o.charAt(o.length-1)===\"-\")return\"LABEL_ENDS_WITH_DASH\";if(!/^[a-z0-9\\-_]+$/.test(o))return\"LABEL_INVALID_CHARS\"}},_=e=>{if(typeof e!=\"string\")throw new TypeError(\"Domain name must be a string.\");let s=e.slice(0).toLowerCase();s.charAt(s.length-1)===\".\"&&(s=s.slice(0,s.length-1));const c=oa(s);if(c)return{input:e,error:{message:H[c],code:c}};const o={input:e,tld:null,sld:null,domain:null,subdomain:null,listed:!1},t=s.split(\".\");if(t[t.length-1]===\"local\")return o;const d=()=>(/xn--/.test(s)&&(o.domain&&(o.domain=A.toASCII(o.domain)),o.subdomain&&(o.subdomain=A.toASCII(o.subdomain))),o),z=aa(s);if(!z)return t.length<2?o:(o.tld=t.pop(),o.sld=t.pop(),o.domain=[o.sld,o.tld].join(\".\"),t.length&&(o.subdomain=t.pop()),d());o.listed=!0;const y=z.suffix.split(\".\"),g=t.slice(0,t.length-y.length);return z.exception&&g.push(y.shift()),o.tld=y.join(\".\"),!g.length||(z.wildcard&&(y.unshift(g.pop()),o.tld=y.join(\".\")),!g.length)||(o.sld=g.pop(),o.domain=[o.sld,o.tld].join(\".\"),g.length&&(o.subdomain=g.join(\".\"))),d()},N=e=>e&&_(e).domain||null,R=e=>{const s=_(e);return!!(s.domain&&s.listed)},sa={parse:_,get:N,isValid:R};exports.default=sa;exports.errorCodes=H;exports.get=N;exports.isValid=R;exports.parse=_;\n","/*!\n * Copyright (c) 2018, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\"use strict\";\nconst psl = require(\"psl\");\n\n// RFC 6761\nconst SPECIAL_USE_DOMAINS = [\n  \"local\",\n  \"example\",\n  \"invalid\",\n  \"localhost\",\n  \"test\"\n];\n\nconst SPECIAL_TREATMENT_DOMAINS = [\"localhost\", \"invalid\"];\n\nfunction getPublicSuffix(domain, options = {}) {\n  const domainParts = domain.split(\".\");\n  const topLevelDomain = domainParts[domainParts.length - 1];\n  const allowSpecialUseDomain = !!options.allowSpecialUseDomain;\n  const ignoreError = !!options.ignoreError;\n\n  if (allowSpecialUseDomain && SPECIAL_USE_DOMAINS.includes(topLevelDomain)) {\n    if (domainParts.length > 1) {\n      const secondLevelDomain = domainParts[domainParts.length - 2];\n      // In aforementioned example, the eTLD/pubSuf will be apple.localhost\n      return `${secondLevelDomain}.${topLevelDomain}`;\n    } else if (SPECIAL_TREATMENT_DOMAINS.includes(topLevelDomain)) {\n      // For a single word special use domain, e.g. 'localhost' or 'invalid', per RFC 6761,\n      // \"Application software MAY recognize {localhost/invalid} names as special, or\n      // MAY pass them to name resolution APIs as they would for other domain names.\"\n      return `${topLevelDomain}`;\n    }\n  }\n\n  if (\n    !ignoreError &&\n    !allowSpecialUseDomain &&\n    SPECIAL_USE_DOMAINS.includes(topLevelDomain)\n  ) {\n    throw new Error(\n      `Cookie has domain set to the public suffix \"${topLevelDomain}\" which is a special use domain. To allow this, configure your CookieJar with {allowSpecialUseDomain:true, rejectPublicSuffixes: false}.`\n    );\n  }\n\n  return psl.get(domain);\n}\n\nexports.getPublicSuffix = getPublicSuffix;\n","/*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\"use strict\";\n/*jshint unused:false */\n\nclass Store {\n  constructor() {\n    this.synchronous = false;\n  }\n\n  findCookie(domain, path, key, cb) {\n    throw new Error(\"findCookie is not implemented\");\n  }\n\n  findCookies(domain, path, allowSpecialUseDomain, cb) {\n    throw new Error(\"findCookies is not implemented\");\n  }\n\n  putCookie(cookie, cb) {\n    throw new Error(\"putCookie is not implemented\");\n  }\n\n  updateCookie(oldCookie, newCookie, cb) {\n    // recommended default implementation:\n    // return this.putCookie(newCookie, cb);\n    throw new Error(\"updateCookie is not implemented\");\n  }\n\n  removeCookie(domain, path, key, cb) {\n    throw new Error(\"removeCookie is not implemented\");\n  }\n\n  removeCookies(domain, path, cb) {\n    throw new Error(\"removeCookies is not implemented\");\n  }\n\n  removeAllCookies(cb) {\n    throw new Error(\"removeAllCookies is not implemented\");\n  }\n\n  getAllCookies(cb) {\n    throw new Error(\n      \"getAllCookies is not implemented (therefore jar cannot be serialized)\"\n    );\n  }\n}\n\nexports.Store = Store;\n","'use strict'\n\nexports.fromCallback = function (fn) {\n  return Object.defineProperty(function () {\n    if (typeof arguments[arguments.length - 1] === 'function') fn.apply(this, arguments)\n    else {\n      return new Promise((resolve, reject) => {\n        arguments[arguments.length] = (err, res) => {\n          if (err) return reject(err)\n          resolve(res)\n        }\n        arguments.length++\n        fn.apply(this, arguments)\n      })\n    }\n  }, 'name', { value: fn.name })\n}\n\nexports.fromPromise = function (fn) {\n  return Object.defineProperty(function () {\n    const cb = arguments[arguments.length - 1]\n    if (typeof cb !== 'function') return fn.apply(this, arguments)\n    else {\n      delete arguments[arguments.length - 1]\n      arguments.length--\n      fn.apply(this, arguments).then(r => cb(null, r), cb)\n    }\n  }, 'name', { value: fn.name })\n}\n","/*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\"use strict\";\nconst pubsuffix = require(\"./pubsuffix-psl\");\n\n// Gives the permutation of all possible domainMatch()es of a given domain. The\n// array is in shortest-to-longest order.  Handy for indexing.\n\nfunction permuteDomain(domain, allowSpecialUseDomain) {\n  const pubSuf = pubsuffix.getPublicSuffix(domain, {\n    allowSpecialUseDomain: allowSpecialUseDomain\n  });\n\n  if (!pubSuf) {\n    return null;\n  }\n  if (pubSuf == domain) {\n    return [domain];\n  }\n\n  // Nuke trailing dot\n  if (domain.slice(-1) == \".\") {\n    domain = domain.slice(0, -1);\n  }\n\n  const prefix = domain.slice(0, -(pubSuf.length + 1)); // \".example.com\"\n  const parts = prefix.split(\".\").reverse();\n  let cur = pubSuf;\n  const permutations = [cur];\n  while (parts.length) {\n    cur = `${parts.shift()}.${cur}`;\n    permutations.push(cur);\n  }\n  return permutations;\n}\n\nexports.permuteDomain = permuteDomain;\n","/*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\"use strict\";\n/*\n * \"A request-path path-matches a given cookie-path if at least one of the\n * following conditions holds:\"\n */\nfunction pathMatch(reqPath, cookiePath) {\n  // \"o  The cookie-path and the request-path are identical.\"\n  if (cookiePath === reqPath) {\n    return true;\n  }\n\n  const idx = reqPath.indexOf(cookiePath);\n  if (idx === 0) {\n    // \"o  The cookie-path is a prefix of the request-path, and the last\n    // character of the cookie-path is %x2F (\"/\").\"\n    if (cookiePath.substr(-1) === \"/\") {\n      return true;\n    }\n\n    // \" o  The cookie-path is a prefix of the request-path, and the first\n    // character of the request-path that is not included in the cookie- path\n    // is a %x2F (\"/\") character.\"\n    if (reqPath.substr(cookiePath.length, 1) === \"/\") {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexports.pathMatch = pathMatch;\n","function requireUtil() {\n  try {\n    // eslint-disable-next-line no-restricted-modules\n    return require(\"util\");\n  } catch (e) {\n    return null;\n  }\n}\n\n// for v10.12.0+\nfunction lookupCustomInspectSymbol() {\n  return Symbol.for(\"nodejs.util.inspect.custom\");\n}\n\n// for older node environments\nfunction tryReadingCustomSymbolFromUtilInspect(options) {\n  const _requireUtil = options.requireUtil || requireUtil;\n  const util = _requireUtil();\n  return util ? util.inspect.custom : null;\n}\n\nexports.getUtilInspect = function getUtilInspect(fallback, options = {}) {\n  const _requireUtil = options.requireUtil || requireUtil;\n  const util = _requireUtil();\n  return function inspect(value, showHidden, depth) {\n    return util ? util.inspect(value, showHidden, depth) : fallback(value);\n  };\n};\n\nexports.getCustomInspectSymbol = function getCustomInspectSymbol(options = {}) {\n  const _lookupCustomInspectSymbol =\n    options.lookupCustomInspectSymbol || lookupCustomInspectSymbol;\n\n  // get custom inspect symbol for node environments\n  return (\n    _lookupCustomInspectSymbol() ||\n    tryReadingCustomSymbolFromUtilInspect(options)\n  );\n};\n","/*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\"use strict\";\nconst { fromCallback } = require(\"universalify\");\nconst Store = require(\"./store\").Store;\nconst permuteDomain = require(\"./permuteDomain\").permuteDomain;\nconst pathMatch = require(\"./pathMatch\").pathMatch;\nconst { getCustomInspectSymbol, getUtilInspect } = require(\"./utilHelper\");\n\nclass MemoryCookieStore extends Store {\n  constructor() {\n    super();\n    this.synchronous = true;\n    this.idx = Object.create(null);\n    const customInspectSymbol = getCustomInspectSymbol();\n    if (customInspectSymbol) {\n      this[customInspectSymbol] = this.inspect;\n    }\n  }\n\n  inspect() {\n    const util = { inspect: getUtilInspect(inspectFallback) };\n    return `{ idx: ${util.inspect(this.idx, false, 2)} }`;\n  }\n\n  findCookie(domain, path, key, cb) {\n    if (!this.idx[domain]) {\n      return cb(null, undefined);\n    }\n    if (!this.idx[domain][path]) {\n      return cb(null, undefined);\n    }\n    return cb(null, this.idx[domain][path][key] || null);\n  }\n  findCookies(domain, path, allowSpecialUseDomain, cb) {\n    const results = [];\n    if (typeof allowSpecialUseDomain === \"function\") {\n      cb = allowSpecialUseDomain;\n      allowSpecialUseDomain = true;\n    }\n    if (!domain) {\n      return cb(null, []);\n    }\n\n    let pathMatcher;\n    if (!path) {\n      // null means \"all paths\"\n      pathMatcher = function matchAll(domainIndex) {\n        for (const curPath in domainIndex) {\n          const pathIndex = domainIndex[curPath];\n          for (const key in pathIndex) {\n            results.push(pathIndex[key]);\n          }\n        }\n      };\n    } else {\n      pathMatcher = function matchRFC(domainIndex) {\n        //NOTE: we should use path-match algorithm from S5.1.4 here\n        //(see : https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/canonical_cookie.cc#L299)\n        Object.keys(domainIndex).forEach(cookiePath => {\n          if (pathMatch(path, cookiePath)) {\n            const pathIndex = domainIndex[cookiePath];\n            for (const key in pathIndex) {\n              results.push(pathIndex[key]);\n            }\n          }\n        });\n      };\n    }\n\n    const domains = permuteDomain(domain, allowSpecialUseDomain) || [domain];\n    const idx = this.idx;\n    domains.forEach(curDomain => {\n      const domainIndex = idx[curDomain];\n      if (!domainIndex) {\n        return;\n      }\n      pathMatcher(domainIndex);\n    });\n\n    cb(null, results);\n  }\n\n  putCookie(cookie, cb) {\n    if (!this.idx[cookie.domain]) {\n      this.idx[cookie.domain] = Object.create(null);\n    }\n    if (!this.idx[cookie.domain][cookie.path]) {\n      this.idx[cookie.domain][cookie.path] = Object.create(null);\n    }\n    this.idx[cookie.domain][cookie.path][cookie.key] = cookie;\n    cb(null);\n  }\n  updateCookie(oldCookie, newCookie, cb) {\n    // updateCookie() may avoid updating cookies that are identical.  For example,\n    // lastAccessed may not be important to some stores and an equality\n    // comparison could exclude that field.\n    this.putCookie(newCookie, cb);\n  }\n  removeCookie(domain, path, key, cb) {\n    if (\n      this.idx[domain] &&\n      this.idx[domain][path] &&\n      this.idx[domain][path][key]\n    ) {\n      delete this.idx[domain][path][key];\n    }\n    cb(null);\n  }\n  removeCookies(domain, path, cb) {\n    if (this.idx[domain]) {\n      if (path) {\n        delete this.idx[domain][path];\n      } else {\n        delete this.idx[domain];\n      }\n    }\n    return cb(null);\n  }\n  removeAllCookies(cb) {\n    this.idx = Object.create(null);\n    return cb(null);\n  }\n  getAllCookies(cb) {\n    const cookies = [];\n    const idx = this.idx;\n\n    const domains = Object.keys(idx);\n    domains.forEach(domain => {\n      const paths = Object.keys(idx[domain]);\n      paths.forEach(path => {\n        const keys = Object.keys(idx[domain][path]);\n        keys.forEach(key => {\n          if (key !== null) {\n            cookies.push(idx[domain][path][key]);\n          }\n        });\n      });\n    });\n\n    // Sort by creationIndex so deserializing retains the creation order.\n    // When implementing your own store, this SHOULD retain the order too\n    cookies.sort((a, b) => {\n      return (a.creationIndex || 0) - (b.creationIndex || 0);\n    });\n\n    cb(null, cookies);\n  }\n}\n\n[\n  \"findCookie\",\n  \"findCookies\",\n  \"putCookie\",\n  \"updateCookie\",\n  \"removeCookie\",\n  \"removeCookies\",\n  \"removeAllCookies\",\n  \"getAllCookies\"\n].forEach(name => {\n  MemoryCookieStore.prototype[name] = fromCallback(\n    MemoryCookieStore.prototype[name]\n  );\n});\n\nexports.MemoryCookieStore = MemoryCookieStore;\n\nfunction inspectFallback(val) {\n  const domains = Object.keys(val);\n  if (domains.length === 0) {\n    return \"[Object: null prototype] {}\";\n  }\n  let result = \"[Object: null prototype] {\\n\";\n  Object.keys(val).forEach((domain, i) => {\n    result += formatDomain(domain, val[domain]);\n    if (i < domains.length - 1) {\n      result += \",\";\n    }\n    result += \"\\n\";\n  });\n  result += \"}\";\n  return result;\n}\n\nfunction formatDomain(domainName, domainValue) {\n  const indent = \"  \";\n  let result = `${indent}'${domainName}': [Object: null prototype] {\\n`;\n  Object.keys(domainValue).forEach((path, i, paths) => {\n    result += formatPath(path, domainValue[path]);\n    if (i < paths.length - 1) {\n      result += \",\";\n    }\n    result += \"\\n\";\n  });\n  result += `${indent}}`;\n  return result;\n}\n\nfunction formatPath(pathName, pathValue) {\n  const indent = \"    \";\n  let result = `${indent}'${pathName}': [Object: null prototype] {\\n`;\n  Object.keys(pathValue).forEach((cookieName, i, cookieNames) => {\n    const cookie = pathValue[cookieName];\n    result += `      ${cookieName}: ${cookie.inspect()}`;\n    if (i < cookieNames.length - 1) {\n      result += \",\";\n    }\n    result += \"\\n\";\n  });\n  result += `${indent}}`;\n  return result;\n}\n\nexports.inspectFallback = inspectFallback;\n","/* ************************************************************************************\nExtracted from check-types.js\nhttps://gitlab.com/philbooth/check-types.js\n\nMIT License\n\nCopyright (c) 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Phil Booth\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n************************************************************************************ */\n\"use strict\";\n\n/* Validation functions copied from check-types package - https://www.npmjs.com/package/check-types */\nfunction isFunction(data) {\n  return typeof data === \"function\";\n}\n\nfunction isNonEmptyString(data) {\n  return isString(data) && data !== \"\";\n}\n\nfunction isDate(data) {\n  return isInstanceStrict(data, Date) && isInteger(data.getTime());\n}\n\nfunction isEmptyString(data) {\n  return data === \"\" || (data instanceof String && data.toString() === \"\");\n}\n\nfunction isString(data) {\n  return typeof data === \"string\" || data instanceof String;\n}\n\nfunction isObject(data) {\n  return toString.call(data) === \"[object Object]\";\n}\nfunction isInstanceStrict(data, prototype) {\n  try {\n    return data instanceof prototype;\n  } catch (error) {\n    return false;\n  }\n}\n\nfunction isUrlStringOrObject(data) {\n  return (\n    isNonEmptyString(data) ||\n    isObject(data) || // TODO: Check for URL properties that are used.\n    isInstanceStrict(data, URL)\n  );\n}\n\nfunction isInteger(data) {\n  return typeof data === \"number\" && data % 1 === 0;\n}\n/* End validation functions */\n\nfunction validate(bool, cb, options) {\n  if (!isFunction(cb)) {\n    options = cb;\n    cb = null;\n  }\n  if (!isObject(options)) options = { Error: \"Failed Check\" };\n  if (!bool) {\n    if (cb) {\n      cb(new ParameterError(options));\n    } else {\n      throw new ParameterError(options);\n    }\n  }\n}\n\nclass ParameterError extends Error {\n  constructor(...params) {\n    super(...params);\n  }\n}\n\nexports.ParameterError = ParameterError;\nexports.isFunction = isFunction;\nexports.isNonEmptyString = isNonEmptyString;\nexports.isDate = isDate;\nexports.isEmptyString = isEmptyString;\nexports.isString = isString;\nexports.isObject = isObject;\nexports.isUrlStringOrObject = isUrlStringOrObject;\nexports.validate = validate;\n","// generated by genversion\nmodule.exports = '4.1.3-postman.1'\n","/*!\n * Copyright (c) 2015-2020, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\"use strict\";\nconst punycode = require(\"punycode/\");\nconst urlParse = require(\"url-parse\");\nconst pubsuffix = require(\"./pubsuffix-psl\");\nconst Store = require(\"./store\").Store;\nconst MemoryCookieStore = require(\"./memstore\").MemoryCookieStore;\nconst pathMatch = require(\"./pathMatch\").pathMatch;\nconst validators = require(\"./validators.js\");\nconst VERSION = require(\"./version\");\nconst { fromCallback } = require(\"universalify\");\nconst { getCustomInspectSymbol } = require(\"./utilHelper\");\n\n// From RFC6265 S4.1.1\n// note that it excludes \\x3B \";\"\nconst COOKIE_OCTETS = /^[\\x21\\x23-\\x2B\\x2D-\\x3A\\x3C-\\x5B\\x5D-\\x7E]+$/;\n\nconst CONTROL_CHARS = /[\\x00-\\x1F]/;\n\n// From Chromium // '\\r', '\\n' and '\\0' should be treated as a terminator in\n// the \"relaxed\" mode, see:\n// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60\nconst TERMINATORS = [\"\\n\", \"\\r\", \"\\0\"];\n\n// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or \";\"'\n// Note ';' is \\x3B\nconst PATH_VALUE = /[\\x20-\\x3A\\x3C-\\x7E]+/;\n\n// date-time parsing constants (RFC6265 S5.1.1)\n\nconst DATE_DELIM = /[\\x09\\x20-\\x2F\\x3B-\\x40\\x5B-\\x60\\x7B-\\x7E]/;\n\nconst MONTH_TO_NUM = {\n  jan: 0,\n  feb: 1,\n  mar: 2,\n  apr: 3,\n  may: 4,\n  jun: 5,\n  jul: 6,\n  aug: 7,\n  sep: 8,\n  oct: 9,\n  nov: 10,\n  dec: 11\n};\n\nconst MAX_TIME = 2147483647000; // 31-bit max\nconst MIN_TIME = 0; // 31-bit min\nconst SAME_SITE_CONTEXT_VAL_ERR =\n  'Invalid sameSiteContext option for getCookies(); expected one of \"strict\", \"lax\", or \"none\"';\n\nfunction checkSameSiteContext(value) {\n  validators.validate(validators.isNonEmptyString(value), value);\n  const context = String(value).toLowerCase();\n  if (context === \"none\" || context === \"lax\" || context === \"strict\") {\n    return context;\n  } else {\n    return null;\n  }\n}\n\nconst PrefixSecurityEnum = Object.freeze({\n  SILENT: \"silent\",\n  STRICT: \"strict\",\n  DISABLED: \"unsafe-disabled\"\n});\n\n// Dumped from ip-regex@4.0.0, with the following changes:\n// * all capturing groups converted to non-capturing -- \"(?:)\"\n// * support for IPv6 Scoped Literal (\"%eth1\") removed\n// * lowercase hexadecimal only\nconst IP_REGEX_LOWERCASE = /(?:^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$)|(?:^(?:(?:[a-f\\d]{1,4}:){7}(?:[a-f\\d]{1,4}|:)|(?:[a-f\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-f\\d]{1,4}|:)|(?:[a-f\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-f\\d]{1,4}){1,2}|:)|(?:[a-f\\d]{1,4}:){4}(?:(?::[a-f\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-f\\d]{1,4}){1,3}|:)|(?:[a-f\\d]{1,4}:){3}(?:(?::[a-f\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-f\\d]{1,4}){1,4}|:)|(?:[a-f\\d]{1,4}:){2}(?:(?::[a-f\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-f\\d]{1,4}){1,5}|:)|(?:[a-f\\d]{1,4}:){1}(?:(?::[a-f\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-f\\d]{1,4}){1,6}|:)|(?::(?:(?::[a-f\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-f\\d]{1,4}){1,7}|:)))$)/;\nconst IP_V6_REGEX = `\n\\\\[?(?:\n(?:[a-fA-F\\\\d]{1,4}:){7}(?:[a-fA-F\\\\d]{1,4}|:)|\n(?:[a-fA-F\\\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|:[a-fA-F\\\\d]{1,4}|:)|\n(?:[a-fA-F\\\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,2}|:)|\n(?:[a-fA-F\\\\d]{1,4}:){4}(?:(?::[a-fA-F\\\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,3}|:)|\n(?:[a-fA-F\\\\d]{1,4}:){3}(?:(?::[a-fA-F\\\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,4}|:)|\n(?:[a-fA-F\\\\d]{1,4}:){2}(?:(?::[a-fA-F\\\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,5}|:)|\n(?:[a-fA-F\\\\d]{1,4}:){1}(?:(?::[a-fA-F\\\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,6}|:)|\n(?::(?:(?::[a-fA-F\\\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,7}|:))\n)(?:%[0-9a-zA-Z]{1,})?\\\\]?\n`\n  .replace(/\\s*\\/\\/.*$/gm, \"\")\n  .replace(/\\n/g, \"\")\n  .trim();\nconst IP_V6_REGEX_OBJECT = new RegExp(`^${IP_V6_REGEX}$`);\n\n/*\n * Parses a Natural number (i.e., non-negative integer) with either the\n *    <min>*<max>DIGIT ( non-digit *OCTET )\n * or\n *    <min>*<max>DIGIT\n * grammar (RFC6265 S5.1.1).\n *\n * The \"trailingOK\" boolean controls if the grammar accepts a\n * \"( non-digit *OCTET )\" trailer.\n */\nfunction parseDigits(token, minDigits, maxDigits, trailingOK) {\n  let count = 0;\n  while (count < token.length) {\n    const c = token.charCodeAt(count);\n    // \"non-digit = %x00-2F / %x3A-FF\"\n    if (c <= 0x2f || c >= 0x3a) {\n      break;\n    }\n    count++;\n  }\n\n  // constrain to a minimum and maximum number of digits.\n  if (count < minDigits || count > maxDigits) {\n    return null;\n  }\n\n  if (!trailingOK && count != token.length) {\n    return null;\n  }\n\n  return parseInt(token.substr(0, count), 10);\n}\n\nfunction parseTime(token) {\n  const parts = token.split(\":\");\n  const result = [0, 0, 0];\n\n  /* RF6256 S5.1.1:\n   *      time            = hms-time ( non-digit *OCTET )\n   *      hms-time        = time-field \":\" time-field \":\" time-field\n   *      time-field      = 1*2DIGIT\n   */\n\n  if (parts.length !== 3) {\n    return null;\n  }\n\n  for (let i = 0; i < 3; i++) {\n    // \"time-field\" must be strictly \"1*2DIGIT\", HOWEVER, \"hms-time\" can be\n    // followed by \"( non-digit *OCTET )\" so therefore the last time-field can\n    // have a trailer\n    const trailingOK = i == 2;\n    const num = parseDigits(parts[i], 1, 2, trailingOK);\n    if (num === null) {\n      return null;\n    }\n    result[i] = num;\n  }\n\n  return result;\n}\n\nfunction parseMonth(token) {\n  token = String(token)\n    .substr(0, 3)\n    .toLowerCase();\n  const num = MONTH_TO_NUM[token];\n  return num >= 0 ? num : null;\n}\n\n/*\n * RFC6265 S5.1.1 date parser (see RFC for full grammar)\n */\nfunction parseDate(str) {\n  if (!str) {\n    return;\n  }\n\n  /* RFC6265 S5.1.1:\n   * 2. Process each date-token sequentially in the order the date-tokens\n   * appear in the cookie-date\n   */\n  const tokens = str.split(DATE_DELIM);\n  if (!tokens) {\n    return;\n  }\n\n  let hour = null;\n  let minute = null;\n  let second = null;\n  let dayOfMonth = null;\n  let month = null;\n  let year = null;\n\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i].trim();\n    if (!token.length) {\n      continue;\n    }\n\n    let result;\n\n    /* 2.1. If the found-time flag is not set and the token matches the time\n     * production, set the found-time flag and set the hour- value,\n     * minute-value, and second-value to the numbers denoted by the digits in\n     * the date-token, respectively.  Skip the remaining sub-steps and continue\n     * to the next date-token.\n     */\n    if (second === null) {\n      result = parseTime(token);\n      if (result) {\n        hour = result[0];\n        minute = result[1];\n        second = result[2];\n        continue;\n      }\n    }\n\n    /* 2.2. If the found-day-of-month flag is not set and the date-token matches\n     * the day-of-month production, set the found-day-of- month flag and set\n     * the day-of-month-value to the number denoted by the date-token.  Skip\n     * the remaining sub-steps and continue to the next date-token.\n     */\n    if (dayOfMonth === null) {\n      // \"day-of-month = 1*2DIGIT ( non-digit *OCTET )\"\n      result = parseDigits(token, 1, 2, true);\n      if (result !== null) {\n        dayOfMonth = result;\n        continue;\n      }\n    }\n\n    /* 2.3. If the found-month flag is not set and the date-token matches the\n     * month production, set the found-month flag and set the month-value to\n     * the month denoted by the date-token.  Skip the remaining sub-steps and\n     * continue to the next date-token.\n     */\n    if (month === null) {\n      result = parseMonth(token);\n      if (result !== null) {\n        month = result;\n        continue;\n      }\n    }\n\n    /* 2.4. If the found-year flag is not set and the date-token matches the\n     * year production, set the found-year flag and set the year-value to the\n     * number denoted by the date-token.  Skip the remaining sub-steps and\n     * continue to the next date-token.\n     */\n    if (year === null) {\n      // \"year = 2*4DIGIT ( non-digit *OCTET )\"\n      result = parseDigits(token, 2, 4, true);\n      if (result !== null) {\n        year = result;\n        /* From S5.1.1:\n         * 3.  If the year-value is greater than or equal to 70 and less\n         * than or equal to 99, increment the year-value by 1900.\n         * 4.  If the year-value is greater than or equal to 0 and less\n         * than or equal to 69, increment the year-value by 2000.\n         */\n        if (year >= 70 && year <= 99) {\n          year += 1900;\n        } else if (year >= 0 && year <= 69) {\n          year += 2000;\n        }\n      }\n    }\n  }\n\n  /* RFC 6265 S5.1.1\n   * \"5. Abort these steps and fail to parse the cookie-date if:\n   *     *  at least one of the found-day-of-month, found-month, found-\n   *        year, or found-time flags is not set,\n   *     *  the day-of-month-value is less than 1 or greater than 31,\n   *     *  the year-value is less than 1601,\n   *     *  the hour-value is greater than 23,\n   *     *  the minute-value is greater than 59, or\n   *     *  the second-value is greater than 59.\n   *     (Note that leap seconds cannot be represented in this syntax.)\"\n   *\n   * So, in order as above:\n   */\n  if (\n    dayOfMonth === null ||\n    month === null ||\n    year === null ||\n    second === null ||\n    dayOfMonth < 1 ||\n    dayOfMonth > 31 ||\n    year < 1601 ||\n    hour > 23 ||\n    minute > 59 ||\n    second > 59\n  ) {\n    return;\n  }\n\n  return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));\n}\n\nfunction formatDate(date) {\n  validators.validate(validators.isDate(date), date);\n  return date.toUTCString();\n}\n\n// S5.1.2 Canonicalized Host Names\nfunction canonicalDomain(str) {\n  if (str == null) {\n    return null;\n  }\n  str = str.trim().replace(/^\\./, \"\"); // S4.1.2.3 & S5.2.3: ignore leading .\n\n  if (IP_V6_REGEX_OBJECT.test(str)) {\n    str = str.replace(\"[\", \"\").replace(\"]\", \"\");\n  }\n\n  // convert to IDN if any non-ASCII characters\n  if (punycode && /[^\\u0001-\\u007f]/.test(str)) {\n    str = punycode.toASCII(str);\n  }\n\n  return str.toLowerCase();\n}\n\n// S5.1.3 Domain Matching\nfunction domainMatch(str, domStr, canonicalize) {\n  if (str == null || domStr == null) {\n    return null;\n  }\n  if (canonicalize !== false) {\n    str = canonicalDomain(str);\n    domStr = canonicalDomain(domStr);\n  }\n\n  /*\n   * S5.1.3:\n   * \"A string domain-matches a given domain string if at least one of the\n   * following conditions hold:\"\n   *\n   * \" o The domain string and the string are identical. (Note that both the\n   * domain string and the string will have been canonicalized to lower case at\n   * this point)\"\n   */\n  if (str == domStr) {\n    return true;\n  }\n\n  /* \" o All of the following [three] conditions hold:\" */\n\n  /* \"* The domain string is a suffix of the string\" */\n  const idx = str.lastIndexOf(domStr);\n  if (idx <= 0) {\n    return false; // it's a non-match (-1) or prefix (0)\n  }\n\n  // next, check it's a proper suffix\n  // e.g., \"a.b.c\".indexOf(\"b.c\") === 2\n  // 5 === 3+2\n  if (str.length !== domStr.length + idx) {\n    return false; // it's not a suffix\n  }\n\n  /* \"  * The last character of the string that is not included in the\n   * domain string is a %x2E (\".\") character.\" */\n  if (str.substr(idx - 1, 1) !== \".\") {\n    return false; // doesn't align on \".\"\n  }\n\n  /* \"  * The string is a host name (i.e., not an IP address).\" */\n  if (IP_REGEX_LOWERCASE.test(str)) {\n    return false; // it's an IP address\n  }\n\n  return true;\n}\n\n// RFC6265 S5.1.4 Paths and Path-Match\n\n/*\n * \"The user agent MUST use an algorithm equivalent to the following algorithm\n * to compute the default-path of a cookie:\"\n *\n * Assumption: the path (and not query part or absolute uri) is passed in.\n */\nfunction defaultPath(path) {\n  // \"2. If the uri-path is empty or if the first character of the uri-path is not\n  // a %x2F (\"/\") character, output %x2F (\"/\") and skip the remaining steps.\n  if (!path || path.substr(0, 1) !== \"/\") {\n    return \"/\";\n  }\n\n  // \"3. If the uri-path contains no more than one %x2F (\"/\") character, output\n  // %x2F (\"/\") and skip the remaining step.\"\n  if (path === \"/\") {\n    return path;\n  }\n\n  const rightSlash = path.lastIndexOf(\"/\");\n  if (rightSlash === 0) {\n    return \"/\";\n  }\n\n  // \"4. Output the characters of the uri-path from the first character up to,\n  // but not including, the right-most %x2F (\"/\").\"\n  return path.slice(0, rightSlash);\n}\n\nfunction trimTerminator(str) {\n  if (validators.isEmptyString(str)) return str;\n  for (let t = 0; t < TERMINATORS.length; t++) {\n    const terminatorIdx = str.indexOf(TERMINATORS[t]);\n    if (terminatorIdx !== -1) {\n      str = str.substr(0, terminatorIdx);\n    }\n  }\n\n  return str;\n}\n\nfunction parseCookiePair(cookiePair, looseMode) {\n  cookiePair = trimTerminator(cookiePair);\n  validators.validate(validators.isString(cookiePair), cookiePair);\n\n  let firstEq = cookiePair.indexOf(\"=\");\n  if (looseMode) {\n    if (firstEq === 0) {\n      // '=' is immediately at start\n      cookiePair = cookiePair.substr(1);\n      firstEq = cookiePair.indexOf(\"=\"); // might still need to split on '='\n    }\n  } else {\n    // non-loose mode\n    if (firstEq <= 0) {\n      // no '=' or is at start\n      return; // needs to have non-empty \"cookie-name\"\n    }\n  }\n\n  let cookieName, cookieValue;\n  if (firstEq <= 0) {\n    cookieName = \"\";\n    cookieValue = cookiePair.trim();\n  } else {\n    cookieName = cookiePair.substr(0, firstEq).trim();\n    cookieValue = cookiePair.substr(firstEq + 1).trim();\n  }\n\n  if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {\n    return;\n  }\n\n  const c = new Cookie();\n  c.key = cookieName;\n  c.value = cookieValue;\n  return c;\n}\n\nfunction parse(str, options) {\n  if (!options || typeof options !== \"object\") {\n    options = {};\n  }\n\n  if (validators.isEmptyString(str) || !validators.isString(str)) {\n    return null;\n  }\n\n  str = str.trim();\n\n  // We use a regex to parse the \"name-value-pair\" part of S5.2\n  const firstSemi = str.indexOf(\";\"); // S5.2 step 1\n  const cookiePair = firstSemi === -1 ? str : str.substr(0, firstSemi);\n  const c = parseCookiePair(cookiePair, !!options.loose);\n  if (!c) {\n    return;\n  }\n\n  if (firstSemi === -1) {\n    return c;\n  }\n\n  // S5.2.3 \"unparsed-attributes consist of the remainder of the set-cookie-string\n  // (including the %x3B (\";\") in question).\" plus later on in the same section\n  // \"discard the first \";\" and trim\".\n  const unparsed = str.slice(firstSemi + 1).trim();\n\n  // \"If the unparsed-attributes string is empty, skip the rest of these\n  // steps.\"\n  if (unparsed.length === 0) {\n    return c;\n  }\n\n  /*\n   * S5.2 says that when looping over the items \"[p]rocess the attribute-name\n   * and attribute-value according to the requirements in the following\n   * subsections\" for every item.  Plus, for many of the individual attributes\n   * in S5.3 it says to use the \"attribute-value of the last attribute in the\n   * cookie-attribute-list\".  Therefore, in this implementation, we overwrite\n   * the previous value.\n   */\n  const cookie_avs = unparsed.split(\";\");\n  while (cookie_avs.length) {\n    const av = cookie_avs.shift().trim();\n    if (av.length === 0) {\n      // happens if \";;\" appears\n      continue;\n    }\n    const av_sep = av.indexOf(\"=\");\n    let av_key, av_value;\n\n    if (av_sep === -1) {\n      av_key = av;\n      av_value = null;\n    } else {\n      av_key = av.substr(0, av_sep);\n      av_value = av.substr(av_sep + 1);\n    }\n\n    av_key = av_key.trim().toLowerCase();\n\n    if (av_value) {\n      av_value = av_value.trim();\n    }\n\n    switch (av_key) {\n      case \"expires\": // S5.2.1\n        if (av_value) {\n          const exp = parseDate(av_value);\n          // \"If the attribute-value failed to parse as a cookie date, ignore the\n          // cookie-av.\"\n          if (exp) {\n            // over and underflow not realistically a concern: V8's getTime() seems to\n            // store something larger than a 32-bit time_t (even with 32-bit node)\n            c.expires = exp;\n          }\n        }\n        break;\n\n      case \"max-age\": // S5.2.2\n        if (av_value) {\n          // \"If the first character of the attribute-value is not a DIGIT or a \"-\"\n          // character ...[or]... If the remainder of attribute-value contains a\n          // non-DIGIT character, ignore the cookie-av.\"\n          if (/^-?[0-9]+$/.test(av_value)) {\n            const delta = parseInt(av_value, 10);\n            // \"If delta-seconds is less than or equal to zero (0), let expiry-time\n            // be the earliest representable date and time.\"\n            c.setMaxAge(delta);\n          }\n        }\n        break;\n\n      case \"domain\": // S5.2.3\n        // \"If the attribute-value is empty, the behavior is undefined.  However,\n        // the user agent SHOULD ignore the cookie-av entirely.\"\n        if (av_value) {\n          // S5.2.3 \"Let cookie-domain be the attribute-value without the leading %x2E\n          // (\".\") character.\"\n          const domain = av_value.trim().replace(/^\\./, \"\");\n          if (domain) {\n            // \"Convert the cookie-domain to lower case.\"\n            c.domain = domain.toLowerCase();\n          }\n        }\n        break;\n\n      case \"path\": // S5.2.4\n        /*\n         * \"If the attribute-value is empty or if the first character of the\n         * attribute-value is not %x2F (\"/\"):\n         *   Let cookie-path be the default-path.\n         * Otherwise:\n         *   Let cookie-path be the attribute-value.\"\n         *\n         * We'll represent the default-path as null since it depends on the\n         * context of the parsing.\n         */\n        c.path = av_value && av_value[0] === \"/\" ? av_value : null;\n        break;\n\n      case \"secure\": // S5.2.5\n        /*\n         * \"If the attribute-name case-insensitively matches the string \"Secure\",\n         * the user agent MUST append an attribute to the cookie-attribute-list\n         * with an attribute-name of Secure and an empty attribute-value.\"\n         */\n        c.secure = true;\n        break;\n\n      case \"httponly\": // S5.2.6 -- effectively the same as 'secure'\n        c.httpOnly = true;\n        break;\n\n      case \"samesite\": // RFC6265bis-02 S5.3.7\n        const enforcement = av_value ? av_value.toLowerCase() : \"\";\n        switch (enforcement) {\n          case \"strict\":\n            c.sameSite = \"strict\";\n            break;\n          case \"lax\":\n            c.sameSite = \"lax\";\n            break;\n          case \"none\":\n            c.sameSite = \"none\";\n            break;\n          default:\n            c.sameSite = undefined;\n            break;\n        }\n        break;\n\n      default:\n        c.extensions = c.extensions || [];\n        c.extensions.push(av);\n        break;\n    }\n  }\n\n  return c;\n}\n\n/**\n *  If the cookie-name begins with a case-sensitive match for the\n *  string \"__Secure-\", abort these steps and ignore the cookie\n *  entirely unless the cookie's secure-only-flag is true.\n * @param cookie\n * @returns boolean\n */\nfunction isSecurePrefixConditionMet(cookie) {\n  validators.validate(validators.isObject(cookie), cookie);\n  return !cookie.key.startsWith(\"__Secure-\") || cookie.secure;\n}\n\n/**\n *  If the cookie-name begins with a case-sensitive match for the\n *  string \"__Host-\", abort these steps and ignore the cookie\n *  entirely unless the cookie meets all the following criteria:\n *    1.  The cookie's secure-only-flag is true.\n *    2.  The cookie's host-only-flag is true.\n *    3.  The cookie-attribute-list contains an attribute with an\n *        attribute-name of \"Path\", and the cookie's path is \"/\".\n * @param cookie\n * @returns boolean\n */\nfunction isHostPrefixConditionMet(cookie) {\n  validators.validate(validators.isObject(cookie));\n  return (\n    !cookie.key.startsWith(\"__Host-\") ||\n    (cookie.secure &&\n      cookie.hostOnly &&\n      cookie.path != null &&\n      cookie.path === \"/\")\n  );\n}\n\n// avoid the V8 deoptimization monster!\nfunction jsonParse(str) {\n  let obj;\n  try {\n    obj = JSON.parse(str);\n  } catch (e) {\n    return e;\n  }\n  return obj;\n}\n\nfunction fromJSON(str) {\n  if (!str || validators.isEmptyString(str)) {\n    return null;\n  }\n\n  let obj;\n  if (typeof str === \"string\") {\n    obj = jsonParse(str);\n    if (obj instanceof Error) {\n      return null;\n    }\n  } else {\n    // assume it's an Object\n    obj = str;\n  }\n\n  const c = new Cookie();\n  for (let i = 0; i < Cookie.serializableProperties.length; i++) {\n    const prop = Cookie.serializableProperties[i];\n    if (obj[prop] === undefined || obj[prop] === cookieDefaults[prop]) {\n      continue; // leave as prototype default\n    }\n\n    if (prop === \"expires\" || prop === \"creation\" || prop === \"lastAccessed\") {\n      if (obj[prop] === null) {\n        c[prop] = null;\n      } else {\n        c[prop] = obj[prop] == \"Infinity\" ? \"Infinity\" : new Date(obj[prop]);\n      }\n    } else {\n      c[prop] = obj[prop];\n    }\n  }\n\n  return c;\n}\n\n/* Section 5.4 part 2:\n * \"*  Cookies with longer paths are listed before cookies with\n *     shorter paths.\n *\n *  *  Among cookies that have equal-length path fields, cookies with\n *     earlier creation-times are listed before cookies with later\n *     creation-times.\"\n */\n\nfunction cookieCompare(a, b) {\n  validators.validate(validators.isObject(a), a);\n  validators.validate(validators.isObject(b), b);\n  let cmp = 0;\n\n  // descending for length: b CMP a\n  const aPathLen = a.path ? a.path.length : 0;\n  const bPathLen = b.path ? b.path.length : 0;\n  cmp = bPathLen - aPathLen;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  // ascending for time: a CMP b\n  const aTime = a.creation ? a.creation.getTime() : MAX_TIME;\n  const bTime = b.creation ? b.creation.getTime() : MAX_TIME;\n  cmp = aTime - bTime;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  // break ties for the same millisecond (precision of JavaScript's clock)\n  cmp = a.creationIndex - b.creationIndex;\n\n  return cmp;\n}\n\n// Gives the permutation of all possible pathMatch()es of a given path. The\n// array is in longest-to-shortest order.  Handy for indexing.\nfunction permutePath(path) {\n  validators.validate(validators.isString(path));\n  if (path === \"/\") {\n    return [\"/\"];\n  }\n  const permutations = [path];\n  while (path.length > 1) {\n    const lindex = path.lastIndexOf(\"/\");\n    if (lindex === 0) {\n      break;\n    }\n    path = path.substr(0, lindex);\n    permutations.push(path);\n  }\n  permutations.push(\"/\");\n  return permutations;\n}\n\nfunction getCookieContext(url) {\n  if (url instanceof Object) {\n    return url;\n  }\n  // NOTE: decodeURI will throw on malformed URIs (see GH-32).\n  // Therefore, we will just skip decoding for such URIs.\n  try {\n    url = decodeURI(url);\n  } catch (err) {\n    // Silently swallow error\n  }\n\n  return urlParse(url);\n}\n\nfunction isLocalhost(host) {\n  if (!(host && typeof host === \"string\")) {\n    return false;\n  }\n\n  if (host === \"localhost\" || host.endsWith(\".localhost\")) {\n    return true;\n  }\n\n  // check if IPv6 loopback address\n  if (host === \"::1\") {\n    return true;\n  }\n\n  // check if IPv4 loopback address\n  if (IP_REGEX_LOWERCASE.test(host)) {\n    return host.startsWith(\"127.\");\n  }\n\n  return false;\n}\n\nconst cookieDefaults = {\n  // the order in which the RFC has them:\n  key: \"\",\n  value: \"\",\n  expires: \"Infinity\",\n  maxAge: null,\n  domain: null,\n  path: null,\n  secure: false,\n  httpOnly: false,\n  extensions: null,\n  // set by the CookieJar:\n  hostOnly: null,\n  pathIsDefault: null,\n  creation: null,\n  lastAccessed: null,\n  sameSite: undefined\n};\n\nclass Cookie {\n  constructor(options = {}) {\n    const customInspectSymbol = getCustomInspectSymbol();\n    if (customInspectSymbol) {\n      this[customInspectSymbol] = this.inspect;\n    }\n\n    Object.assign(this, cookieDefaults, options);\n    this.creation = this.creation || new Date();\n\n    // used to break creation ties in cookieCompare():\n    Object.defineProperty(this, \"creationIndex\", {\n      configurable: false,\n      enumerable: false, // important for assert.deepEqual checks\n      writable: true,\n      value: ++Cookie.cookiesCreated\n    });\n  }\n\n  inspect() {\n    const now = Date.now();\n    const hostOnly = this.hostOnly != null ? this.hostOnly : \"?\";\n    const createAge = this.creation\n      ? `${now - this.creation.getTime()}ms`\n      : \"?\";\n    const accessAge = this.lastAccessed\n      ? `${now - this.lastAccessed.getTime()}ms`\n      : \"?\";\n    return `Cookie=\"${this.toString()}; hostOnly=${hostOnly}; aAge=${accessAge}; cAge=${createAge}\"`;\n  }\n\n  toJSON() {\n    const obj = {};\n\n    for (const prop of Cookie.serializableProperties) {\n      if (this[prop] === cookieDefaults[prop]) {\n        continue; // leave as prototype default\n      }\n\n      if (\n        prop === \"expires\" ||\n        prop === \"creation\" ||\n        prop === \"lastAccessed\"\n      ) {\n        if (this[prop] === null) {\n          obj[prop] = null;\n        } else {\n          obj[prop] =\n            this[prop] == \"Infinity\" // intentionally not ===\n              ? \"Infinity\"\n              : this[prop].toISOString();\n        }\n      } else if (prop === \"maxAge\") {\n        if (this[prop] !== null) {\n          // again, intentionally not ===\n          obj[prop] =\n            this[prop] == Infinity || this[prop] == -Infinity\n              ? this[prop].toString()\n              : this[prop];\n        }\n      } else {\n        if (this[prop] !== cookieDefaults[prop]) {\n          obj[prop] = this[prop];\n        }\n      }\n    }\n\n    return obj;\n  }\n\n  clone() {\n    return fromJSON(this.toJSON());\n  }\n\n  validate() {\n    if (!COOKIE_OCTETS.test(this.value)) {\n      return false;\n    }\n    if (\n      this.expires != Infinity &&\n      !(this.expires instanceof Date) &&\n      !parseDate(this.expires)\n    ) {\n      return false;\n    }\n    if (this.maxAge != null && this.maxAge <= 0) {\n      return false; // \"Max-Age=\" non-zero-digit *DIGIT\n    }\n    if (this.path != null && !PATH_VALUE.test(this.path)) {\n      return false;\n    }\n\n    const cdomain = this.cdomain();\n    if (cdomain) {\n      if (cdomain.match(/\\.$/)) {\n        return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this\n      }\n      const suffix = pubsuffix.getPublicSuffix(cdomain);\n      if (suffix == null) {\n        // it's a public suffix\n        return false;\n      }\n    }\n    return true;\n  }\n\n  setExpires(exp) {\n    if (exp instanceof Date) {\n      this.expires = exp;\n    } else {\n      this.expires = parseDate(exp) || \"Infinity\";\n    }\n  }\n\n  setMaxAge(age) {\n    if (age === Infinity || age === -Infinity) {\n      this.maxAge = age.toString(); // so JSON.stringify() works\n    } else {\n      this.maxAge = age;\n    }\n  }\n\n  cookieString() {\n    let val = this.value;\n    if (val == null) {\n      val = \"\";\n    }\n    if (this.key === \"\") {\n      return val;\n    }\n    return `${this.key}=${val}`;\n  }\n\n  // gives Set-Cookie header format\n  toString() {\n    let str = this.cookieString();\n\n    if (this.expires != Infinity) {\n      if (this.expires instanceof Date) {\n        str += `; Expires=${formatDate(this.expires)}`;\n      } else {\n        str += `; Expires=${this.expires}`;\n      }\n    }\n\n    if (this.maxAge != null && this.maxAge != Infinity) {\n      str += `; Max-Age=${this.maxAge}`;\n    }\n\n    if (this.domain && !this.hostOnly) {\n      str += `; Domain=${this.domain}`;\n    }\n    if (this.path) {\n      str += `; Path=${this.path}`;\n    }\n\n    if (this.secure) {\n      str += \"; Secure\";\n    }\n    if (this.httpOnly) {\n      str += \"; HttpOnly\";\n    }\n    if (this.sameSite && this.sameSite !== \"none\") {\n      const ssCanon = Cookie.sameSiteCanonical[this.sameSite.toLowerCase()];\n      str += `; SameSite=${ssCanon ? ssCanon : this.sameSite}`;\n    }\n    if (this.extensions) {\n      this.extensions.forEach(ext => {\n        str += `; ${ext}`;\n      });\n    }\n\n    return str;\n  }\n\n  // TTL() partially replaces the \"expiry-time\" parts of S5.3 step 3 (setCookie()\n  // elsewhere)\n  // S5.3 says to give the \"latest representable date\" for which we use Infinity\n  // For \"expired\" we use 0\n  TTL(now) {\n    /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires\n     * attribute, the Max-Age attribute has precedence and controls the\n     * expiration date of the cookie.\n     * (Concurs with S5.3 step 3)\n     */\n    if (this.maxAge != null) {\n      return this.maxAge <= 0 ? 0 : this.maxAge * 1000;\n    }\n\n    let expires = this.expires;\n    if (expires != Infinity) {\n      if (!(expires instanceof Date)) {\n        expires = parseDate(expires) || Infinity;\n      }\n\n      if (expires == Infinity) {\n        return Infinity;\n      }\n\n      return expires.getTime() - (now || Date.now());\n    }\n\n    return Infinity;\n  }\n\n  // expiryTime() replaces the \"expiry-time\" parts of S5.3 step 3 (setCookie()\n  // elsewhere)\n  expiryTime(now) {\n    if (this.maxAge != null) {\n      const relativeTo = now || this.creation || new Date();\n      const age = this.maxAge <= 0 ? -Infinity : this.maxAge * 1000;\n      return relativeTo.getTime() + age;\n    }\n\n    if (this.expires == Infinity) {\n      return Infinity;\n    }\n    return this.expires.getTime();\n  }\n\n  // expiryDate() replaces the \"expiry-time\" parts of S5.3 step 3 (setCookie()\n  // elsewhere), except it returns a Date\n  expiryDate(now) {\n    const millisec = this.expiryTime(now);\n    if (millisec == Infinity) {\n      return new Date(MAX_TIME);\n    } else if (millisec == -Infinity) {\n      return new Date(MIN_TIME);\n    } else {\n      return new Date(millisec);\n    }\n  }\n\n  // This replaces the \"persistent-flag\" parts of S5.3 step 3\n  isPersistent() {\n    return this.maxAge != null || this.expires != Infinity;\n  }\n\n  // Mostly S5.1.2 and S5.2.3:\n  canonicalizedDomain() {\n    if (this.domain == null) {\n      return null;\n    }\n    return canonicalDomain(this.domain);\n  }\n\n  cdomain() {\n    return this.canonicalizedDomain();\n  }\n}\n\nCookie.cookiesCreated = 0;\nCookie.parse = parse;\nCookie.fromJSON = fromJSON;\nCookie.serializableProperties = Object.keys(cookieDefaults);\nCookie.sameSiteLevel = {\n  strict: 3,\n  lax: 2,\n  none: 1\n};\n\nCookie.sameSiteCanonical = {\n  strict: \"Strict\",\n  lax: \"Lax\"\n};\n\nfunction getNormalizedPrefixSecurity(prefixSecurity) {\n  if (prefixSecurity != null) {\n    const normalizedPrefixSecurity = prefixSecurity.toLowerCase();\n    /* The three supported options */\n    switch (normalizedPrefixSecurity) {\n      case PrefixSecurityEnum.STRICT:\n      case PrefixSecurityEnum.SILENT:\n      case PrefixSecurityEnum.DISABLED:\n        return normalizedPrefixSecurity;\n    }\n  }\n  /* Default is SILENT */\n  return PrefixSecurityEnum.SILENT;\n}\n\nclass CookieJar {\n  constructor(store, options = { rejectPublicSuffixes: true }) {\n    if (typeof options === \"boolean\") {\n      options = { rejectPublicSuffixes: options };\n    }\n    validators.validate(validators.isObject(options), options);\n    this.rejectPublicSuffixes = options.rejectPublicSuffixes;\n    this.enableLooseMode = !!options.looseMode;\n    this.allowSpecialUseDomain =\n      typeof options.allowSpecialUseDomain === \"boolean\"\n        ? options.allowSpecialUseDomain\n        : true;\n    this.store = store || new MemoryCookieStore();\n    this.prefixSecurity = getNormalizedPrefixSecurity(options.prefixSecurity);\n    this._cloneSync = syncWrap(\"clone\");\n    this._importCookiesSync = syncWrap(\"_importCookies\");\n    this.getCookiesSync = syncWrap(\"getCookies\");\n    this.getCookieStringSync = syncWrap(\"getCookieString\");\n    this.getSetCookieStringsSync = syncWrap(\"getSetCookieStrings\");\n    this.removeAllCookiesSync = syncWrap(\"removeAllCookies\");\n    this.setCookieSync = syncWrap(\"setCookie\");\n    this.serializeSync = syncWrap(\"serialize\");\n  }\n\n  setCookie(cookie, url, options, cb) {\n    validators.validate(validators.isUrlStringOrObject(url), cb, options);\n\n    let err;\n\n    if (validators.isFunction(url)) {\n      cb = url;\n      return cb(new Error(\"No URL was specified\"));\n    }\n\n    const context = getCookieContext(url);\n    if (validators.isFunction(options)) {\n      cb = options;\n      options = {};\n    }\n\n    validators.validate(validators.isFunction(cb), cb);\n\n    if (\n      !validators.isNonEmptyString(cookie) &&\n      !validators.isObject(cookie) &&\n      cookie instanceof String &&\n      cookie.length == 0\n    ) {\n      return cb(null);\n    }\n\n    const host = canonicalDomain(context.hostname);\n    const loose = options.loose || this.enableLooseMode;\n\n    let sameSiteContext = null;\n    if (options.sameSiteContext) {\n      sameSiteContext = checkSameSiteContext(options.sameSiteContext);\n      if (!sameSiteContext) {\n        return cb(new Error(SAME_SITE_CONTEXT_VAL_ERR));\n      }\n    }\n\n    // S5.3 step 1\n    if (typeof cookie === \"string\" || cookie instanceof String) {\n      cookie = Cookie.parse(cookie, { loose: loose });\n      if (!cookie) {\n        err = new Error(\"Cookie failed to parse\");\n        return cb(options.ignoreError ? null : err);\n      }\n    } else if (!(cookie instanceof Cookie)) {\n      // If you're seeing this error, and are passing in a Cookie object,\n      // it *might* be a Cookie object from another loaded version of tough-cookie.\n      err = new Error(\n        \"First argument to setCookie must be a Cookie object or string\"\n      );\n      return cb(options.ignoreError ? null : err);\n    }\n\n    // S5.3 step 2\n    const now = options.now || new Date(); // will assign later to save effort in the face of errors\n\n    // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie()\n\n    // S5.3 step 4: NOOP; domain is null by default\n\n    // S5.3 step 5: public suffixes\n    if (this.rejectPublicSuffixes && cookie.domain) {\n      const suffix = pubsuffix.getPublicSuffix(cookie.cdomain(), {\n        allowSpecialUseDomain: this.allowSpecialUseDomain,\n        ignoreError: options.ignoreError\n      });\n      if (suffix == null && !IP_V6_REGEX_OBJECT.test(cookie.domain)) {\n        // e.g. \"com\"\n        err = new Error(\"Cookie has domain set to a public suffix\");\n        return cb(options.ignoreError ? null : err);\n      }\n    }\n\n    // S5.3 step 6:\n    if (cookie.domain) {\n      if (!domainMatch(host, cookie.cdomain(), false)) {\n        err = new Error(\n          `Cookie not in this host's domain. Cookie:${cookie.cdomain()} Request:${host}`\n        );\n        return cb(options.ignoreError ? null : err);\n      }\n\n      if (cookie.hostOnly == null) {\n        // don't reset if already set\n        cookie.hostOnly = false;\n      }\n    } else {\n      cookie.hostOnly = true;\n      cookie.domain = host;\n    }\n\n    //S5.2.4 If the attribute-value is empty or if the first character of the\n    //attribute-value is not %x2F (\"/\"):\n    //Let cookie-path be the default-path.\n    if (!cookie.path || cookie.path[0] !== \"/\") {\n      cookie.path = defaultPath(context.pathname);\n      cookie.pathIsDefault = true;\n    }\n\n    // S5.3 step 8: NOOP; secure attribute\n    // S5.3 step 9: NOOP; httpOnly attribute\n\n    // S5.3 step 10\n    if (options.http === false && cookie.httpOnly) {\n      err = new Error(\"Cookie is HttpOnly and this isn't an HTTP API\");\n      return cb(options.ignoreError ? null : err);\n    }\n\n    // 6252bis-02 S5.4 Step 13 & 14:\n    if (\n      cookie.sameSite !== \"none\" &&\n      cookie.sameSite !== undefined &&\n      sameSiteContext\n    ) {\n      // \"If the cookie's \"same-site-flag\" is not \"None\", and the cookie\n      //  is being set from a context whose \"site for cookies\" is not an\n      //  exact match for request-uri's host's registered domain, then\n      //  abort these steps and ignore the newly created cookie entirely.\"\n      if (sameSiteContext === \"none\") {\n        err = new Error(\n          \"Cookie is SameSite but this is a cross-origin request\"\n        );\n        return cb(options.ignoreError ? null : err);\n      }\n    }\n\n    /* 6265bis-02 S5.4 Steps 15 & 16 */\n    const ignoreErrorForPrefixSecurity =\n      this.prefixSecurity === PrefixSecurityEnum.SILENT;\n    const prefixSecurityDisabled =\n      this.prefixSecurity === PrefixSecurityEnum.DISABLED;\n    /* If prefix checking is not disabled ...*/\n    if (!prefixSecurityDisabled) {\n      let errorFound = false;\n      let errorMsg;\n      /* Check secure prefix condition */\n      if (!isSecurePrefixConditionMet(cookie)) {\n        errorFound = true;\n        errorMsg = \"Cookie has __Secure prefix but Secure attribute is not set\";\n      } else if (!isHostPrefixConditionMet(cookie)) {\n        /* Check host prefix condition */\n        errorFound = true;\n        errorMsg =\n          \"Cookie has __Host prefix but either Secure or HostOnly attribute is not set or Path is not '/'\";\n      }\n      if (errorFound) {\n        return cb(\n          options.ignoreError || ignoreErrorForPrefixSecurity\n            ? null\n            : new Error(errorMsg)\n        );\n      }\n    }\n\n    const store = this.store;\n\n    if (!store.updateCookie) {\n      store.updateCookie = function(oldCookie, newCookie, cb) {\n        this.putCookie(newCookie, cb);\n      };\n    }\n\n    function withCookie(err, oldCookie) {\n      if (err) {\n        return cb(err);\n      }\n\n      const next = function(err) {\n        if (err) {\n          return cb(err);\n        } else {\n          cb(null, cookie);\n        }\n      };\n\n      if (oldCookie) {\n        // S5.3 step 11 - \"If the cookie store contains a cookie with the same name,\n        // domain, and path as the newly created cookie:\"\n        if (options.http === false && oldCookie.httpOnly) {\n          // step 11.2\n          err = new Error(\"old Cookie is HttpOnly and this isn't an HTTP API\");\n          return cb(options.ignoreError ? null : err);\n        }\n        cookie.creation = oldCookie.creation; // step 11.3\n        cookie.creationIndex = oldCookie.creationIndex; // preserve tie-breaker\n        cookie.lastAccessed = now;\n        // Step 11.4 (delete cookie) is implied by just setting the new one:\n        store.updateCookie(oldCookie, cookie, next); // step 12\n      } else {\n        cookie.creation = cookie.lastAccessed = now;\n        store.putCookie(cookie, next); // step 12\n      }\n    }\n\n    store.findCookie(cookie.domain, cookie.path, cookie.key, withCookie);\n  }\n\n  // RFC6365 S5.4\n  getCookies(url, options, cb) {\n    validators.validate(validators.isUrlStringOrObject(url), cb, url);\n\n    const context = getCookieContext(url);\n    if (validators.isFunction(options)) {\n      cb = options;\n      options = {};\n    }\n    validators.validate(validators.isObject(options), cb, options);\n    validators.validate(validators.isFunction(cb), cb);\n\n    const host = canonicalDomain(context.hostname);\n    const path = context.pathname || \"/\";\n\n    let secure = options.secure;\n    if (\n      secure == null &&\n      context.protocol &&\n      (context.protocol == \"https:\" || context.protocol == \"wss:\")\n    ) {\n      secure = true;\n    }\n\n    // Additional check for special domain as per RFC 6265 to treat localhost as secure channel\n    // https://www.rfc-editor.org/rfc/rfc6265#page-21\n    if (secure == null && isLocalhost(host)) {\n      secure = true;\n    }\n\n    let sameSiteLevel = 0;\n    if (options.sameSiteContext) {\n      const sameSiteContext = checkSameSiteContext(options.sameSiteContext);\n      sameSiteLevel = Cookie.sameSiteLevel[sameSiteContext];\n      if (!sameSiteLevel) {\n        return cb(new Error(SAME_SITE_CONTEXT_VAL_ERR));\n      }\n    }\n\n    let http = options.http;\n    if (http == null) {\n      http = true;\n    }\n\n    const now = options.now || Date.now();\n    const expireCheck = options.expire !== false;\n    const allPaths = !!options.allPaths;\n    const store = this.store;\n\n    function matchingCookie(c) {\n      // \"Either:\n      //   The cookie's host-only-flag is true and the canonicalized\n      //   request-host is identical to the cookie's domain.\n      // Or:\n      //   The cookie's host-only-flag is false and the canonicalized\n      //   request-host domain-matches the cookie's domain.\"\n      if (c.hostOnly) {\n        if (c.domain != host) {\n          return false;\n        }\n      } else {\n        if (!domainMatch(host, c.domain, false)) {\n          return false;\n        }\n      }\n\n      // \"The request-uri's path path-matches the cookie's path.\"\n      if (!allPaths && !pathMatch(path, c.path)) {\n        return false;\n      }\n\n      // \"If the cookie's secure-only-flag is true, then the request-uri's\n      // scheme must denote a \"secure\" protocol\"\n      if (c.secure && !secure) {\n        return false;\n      }\n\n      // \"If the cookie's http-only-flag is true, then exclude the cookie if the\n      // cookie-string is being generated for a \"non-HTTP\" API\"\n      if (c.httpOnly && !http) {\n        return false;\n      }\n\n      // RFC6265bis-02 S5.3.7\n      if (sameSiteLevel) {\n        const cookieLevel = Cookie.sameSiteLevel[c.sameSite || \"none\"];\n        if (cookieLevel > sameSiteLevel) {\n          // only allow cookies at or below the request level\n          return false;\n        }\n      }\n\n      // deferred from S5.3\n      // non-RFC: allow retention of expired cookies by choice\n      if (expireCheck && c.expiryTime() <= now) {\n        store.removeCookie(c.domain, c.path, c.key, () => {}); // result ignored\n        return false;\n      }\n\n      return true;\n    }\n\n    store.findCookies(\n      host,\n      allPaths ? null : path,\n      this.allowSpecialUseDomain,\n      (err, cookies) => {\n        if (err) {\n          return cb(err);\n        }\n\n        cookies = cookies.filter(matchingCookie);\n\n        // sorting of S5.4 part 2\n        if (options.sort !== false) {\n          cookies = cookies.sort(cookieCompare);\n        }\n\n        // S5.4 part 3\n        const now = new Date();\n        for (const cookie of cookies) {\n          cookie.lastAccessed = now;\n        }\n        // TODO persist lastAccessed\n\n        cb(null, cookies);\n      }\n    );\n  }\n\n  getCookieString(...args) {\n    const cb = args.pop();\n    validators.validate(validators.isFunction(cb), cb);\n    const next = function(err, cookies) {\n      if (err) {\n        cb(err);\n      } else {\n        cb(\n          null,\n          cookies\n            .sort(cookieCompare)\n            .map(c => c.cookieString())\n            .join(\"; \")\n        );\n      }\n    };\n    args.push(next);\n    this.getCookies.apply(this, args);\n  }\n\n  getSetCookieStrings(...args) {\n    const cb = args.pop();\n    validators.validate(validators.isFunction(cb), cb);\n    const next = function(err, cookies) {\n      if (err) {\n        cb(err);\n      } else {\n        cb(\n          null,\n          cookies.map(c => {\n            return c.toString();\n          })\n        );\n      }\n    };\n    args.push(next);\n    this.getCookies.apply(this, args);\n  }\n\n  serialize(cb) {\n    validators.validate(validators.isFunction(cb), cb);\n    let type = this.store.constructor.name;\n    if (validators.isObject(type)) {\n      type = null;\n    }\n\n    // update README.md \"Serialization Format\" if you change this, please!\n    const serialized = {\n      // The version of tough-cookie that serialized this jar. Generally a good\n      // practice since future versions can make data import decisions based on\n      // known past behavior. When/if this matters, use `semver`.\n      version: `tough-cookie@${VERSION}`,\n\n      // add the store type, to make humans happy:\n      storeType: type,\n\n      // CookieJar configuration:\n      rejectPublicSuffixes: !!this.rejectPublicSuffixes,\n      enableLooseMode: !!this.enableLooseMode,\n      allowSpecialUseDomain: !!this.allowSpecialUseDomain,\n      prefixSecurity: getNormalizedPrefixSecurity(this.prefixSecurity),\n\n      // this gets filled from getAllCookies:\n      cookies: []\n    };\n\n    if (\n      !(\n        this.store.getAllCookies &&\n        typeof this.store.getAllCookies === \"function\"\n      )\n    ) {\n      return cb(\n        new Error(\n          \"store does not support getAllCookies and cannot be serialized\"\n        )\n      );\n    }\n\n    this.store.getAllCookies((err, cookies) => {\n      if (err) {\n        return cb(err);\n      }\n\n      serialized.cookies = cookies.map(cookie => {\n        // convert to serialized 'raw' cookies\n        cookie = cookie instanceof Cookie ? cookie.toJSON() : cookie;\n\n        // Remove the index so new ones get assigned during deserialization\n        delete cookie.creationIndex;\n\n        return cookie;\n      });\n\n      return cb(null, serialized);\n    });\n  }\n\n  toJSON() {\n    return this.serializeSync();\n  }\n\n  // use the class method CookieJar.deserialize instead of calling this directly\n  _importCookies(serialized, cb) {\n    let cookies = serialized.cookies;\n    if (!cookies || !Array.isArray(cookies)) {\n      return cb(new Error(\"serialized jar has no cookies array\"));\n    }\n    cookies = cookies.slice(); // do not modify the original\n\n    const putNext = err => {\n      if (err) {\n        return cb(err);\n      }\n\n      if (!cookies.length) {\n        return cb(err, this);\n      }\n\n      let cookie;\n      try {\n        cookie = fromJSON(cookies.shift());\n      } catch (e) {\n        return cb(e);\n      }\n\n      if (cookie === null) {\n        return putNext(null); // skip this cookie\n      }\n\n      this.store.putCookie(cookie, putNext);\n    };\n\n    putNext();\n  }\n\n  clone(newStore, cb) {\n    if (arguments.length === 1) {\n      cb = newStore;\n      newStore = null;\n    }\n\n    this.serialize((err, serialized) => {\n      if (err) {\n        return cb(err);\n      }\n      CookieJar.deserialize(serialized, newStore, cb);\n    });\n  }\n\n  cloneSync(newStore) {\n    if (arguments.length === 0) {\n      return this._cloneSync();\n    }\n    if (!newStore.synchronous) {\n      throw new Error(\n        \"CookieJar clone destination store is not synchronous; use async API instead.\"\n      );\n    }\n    return this._cloneSync(newStore);\n  }\n\n  removeAllCookies(cb) {\n    validators.validate(validators.isFunction(cb), cb);\n    const store = this.store;\n\n    // Check that the store implements its own removeAllCookies(). The default\n    // implementation in Store will immediately call the callback with a \"not\n    // implemented\" Error.\n    if (\n      typeof store.removeAllCookies === \"function\" &&\n      store.removeAllCookies !== Store.prototype.removeAllCookies\n    ) {\n      return store.removeAllCookies(cb);\n    }\n\n    store.getAllCookies((err, cookies) => {\n      if (err) {\n        return cb(err);\n      }\n\n      if (cookies.length === 0) {\n        return cb(null);\n      }\n\n      let completedCount = 0;\n      const removeErrors = [];\n\n      function removeCookieCb(removeErr) {\n        if (removeErr) {\n          removeErrors.push(removeErr);\n        }\n\n        completedCount++;\n\n        if (completedCount === cookies.length) {\n          return cb(removeErrors.length ? removeErrors[0] : null);\n        }\n      }\n\n      cookies.forEach(cookie => {\n        store.removeCookie(\n          cookie.domain,\n          cookie.path,\n          cookie.key,\n          removeCookieCb\n        );\n      });\n    });\n  }\n\n  static deserialize(strOrObj, store, cb) {\n    if (arguments.length !== 3) {\n      // store is optional\n      cb = store;\n      store = null;\n    }\n    validators.validate(validators.isFunction(cb), cb);\n\n    let serialized;\n    if (typeof strOrObj === \"string\") {\n      serialized = jsonParse(strOrObj);\n      if (serialized instanceof Error) {\n        return cb(serialized);\n      }\n    } else {\n      serialized = strOrObj;\n    }\n\n    const jar = new CookieJar(store, {\n      rejectPublicSuffixes: serialized.rejectPublicSuffixes,\n      looseMode: serialized.enableLooseMode,\n      allowSpecialUseDomain: serialized.allowSpecialUseDomain,\n      prefixSecurity: serialized.prefixSecurity\n    });\n    jar._importCookies(serialized, err => {\n      if (err) {\n        return cb(err);\n      }\n      cb(null, jar);\n    });\n  }\n\n  static deserializeSync(strOrObj, store) {\n    const serialized =\n      typeof strOrObj === \"string\" ? JSON.parse(strOrObj) : strOrObj;\n    const jar = new CookieJar(store, {\n      rejectPublicSuffixes: serialized.rejectPublicSuffixes,\n      looseMode: serialized.enableLooseMode\n    });\n\n    // catch this mistake early:\n    if (!jar.store.synchronous) {\n      throw new Error(\n        \"CookieJar store is not synchronous; use async API instead.\"\n      );\n    }\n\n    jar._importCookiesSync(serialized);\n    return jar;\n  }\n}\nCookieJar.fromJSON = CookieJar.deserializeSync;\n\n[\n  \"_importCookies\",\n  \"clone\",\n  \"getCookies\",\n  \"getCookieString\",\n  \"getSetCookieStrings\",\n  \"removeAllCookies\",\n  \"serialize\",\n  \"setCookie\"\n].forEach(name => {\n  CookieJar.prototype[name] = fromCallback(CookieJar.prototype[name]);\n});\nCookieJar.deserialize = fromCallback(CookieJar.deserialize);\n\n// Use a closure to provide a true imperative API for synchronous stores.\nfunction syncWrap(method) {\n  return function(...args) {\n    if (!this.store.synchronous) {\n      throw new Error(\n        \"CookieJar store is not synchronous; use async API instead.\"\n      );\n    }\n\n    let syncErr, syncResult;\n    this[method](...args, (err, result) => {\n      syncErr = err;\n      syncResult = result;\n    });\n\n    if (syncErr) {\n      throw syncErr;\n    }\n    return syncResult;\n  };\n}\n\nexports.version = VERSION;\nexports.CookieJar = CookieJar;\nexports.Cookie = Cookie;\nexports.Store = Store;\nexports.MemoryCookieStore = MemoryCookieStore;\nexports.parseDate = parseDate;\nexports.formatDate = formatDate;\nexports.parse = parse;\nexports.fromJSON = fromJSON;\nexports.domainMatch = domainMatch;\nexports.defaultPath = defaultPath;\nexports.pathMatch = pathMatch;\nexports.getPublicSuffix = pubsuffix.getPublicSuffix;\nexports.cookieCompare = cookieCompare;\nexports.permuteDomain = require(\"./permuteDomain\").permuteDomain;\nexports.permutePath = permutePath;\nexports.canonicalDomain = canonicalDomain;\nexports.PrefixSecurityEnum = PrefixSecurityEnum;\nexports.ParameterError = validators.ParameterError;\n","'use strict'\n\nvar tough = require('@postman/tough-cookie')\n\nvar Cookie = tough.Cookie\nvar CookieJar = tough.CookieJar\n\nexports.parse = function (str) {\n  if (str && str.uri) {\n    str = str.uri\n  }\n  if (typeof str !== 'string') {\n    throw new Error('The cookie function only accepts STRING as param')\n  }\n  return Cookie.parse(str, {loose: true})\n}\n\nexports.jar = function (store) {\n  return new CookieJar(store, {looseMode: true})\n}\n","/*\n   * This function has been referenced from Node.js HTTPS Agent implementation\n   * Ref: v20.15.0 https://github.com/nodejs/node/blob/6bf148e12b00a3ec596f4c123ec35445a48ab209/lib/https.js\n   */\nfunction getName (options) {\n  let name = options.host || 'localhost'\n\n  name += ':'\n  if (options.port) { name += options.port }\n\n  name += ':'\n  if (options.localAddress) { name += options.localAddress }\n  if (options.socketPath) { name += `:${options.socketPath}` }\n\n  name += ':'\n  if (options.ca) { name += options.ca }\n\n  name += ':'\n  if (options.extraCA) { name += options.extraCA }\n\n  name += ':'\n  if (options.cert) { name += options.cert }\n\n  name += ':'\n  if (options.clientCertEngine) { name += options.clientCertEngine }\n\n  name += ':'\n  if (options.ciphers) { name += options.ciphers }\n\n  name += ':'\n  if (options.key) { name += options.key }\n\n  name += ':'\n  if (options.pfx) { name += options.pfx }\n\n  name += ':'\n  if (options.rejectUnauthorized !== undefined) { name += options.rejectUnauthorized }\n\n  name += ':'\n  if (options.servername && options.servername !== options.host) { name += options.servername }\n\n  name += ':'\n  if (options.minVersion) { name += options.minVersion }\n\n  name += ':'\n  if (options.maxVersion) { name += options.maxVersion }\n\n  name += ':'\n  if (options.secureProtocol) { name += options.secureProtocol }\n\n  name += ':'\n  if (options.crl) { name += options.crl }\n\n  name += ':'\n  if (options.honorCipherOrder !== undefined) { name += options.honorCipherOrder }\n\n  name += ':'\n  if (options.ecdhCurve) { name += options.ecdhCurve }\n\n  name += ':'\n  if (options.dhparam) { name += options.dhparam }\n\n  name += ':'\n  if (options.secureOptions !== undefined) { name += options.secureOptions }\n\n  name += ':'\n  if (options.sessionIdContext) { name += options.sessionIdContext }\n\n  name += ':'\n  if (options.sigalgs) { name += JSON.stringify(options.sigalgs) }\n\n  name += ':'\n  if (options.privateKeyIdentifier) { name += options.privateKeyIdentifier }\n\n  name += ':'\n  if (options.privateKeyEngine) { name += options.privateKeyEngine }\n\n    // Create new connection since previous connection cannot be reused since it will not emit secureConnect event which will not set the session data\n  name += ':' + Boolean(options.verbose)\n\n  return name\n}\n\nmodule.exports = {\n  getName\n}\n","const { EventEmitter } = require('events')\nconst http2 = require('http2')\nconst { getName: getConnectionName } = require('../autohttp/requestName')\n\nclass Http2Agent extends EventEmitter {\n  constructor (options) {\n    super()\n    this.options = options\n    this.connections = {}\n  }\n\n  createConnection (req, uri, options, socket) {\n    const _options = {\n      ...options,\n      ...this.options\n    }\n\n    const name = getConnectionName(_options)\n    let connection = this.connections[name]\n\n    // Force create a new connection if the connection is destroyed or closed or a new socket object is supplied\n    if (!connection || connection.destroyed || connection.closed || socket) {\n      const connectionOptions = {\n        ..._options,\n        port: _options.port || 443,\n        settings: {\n          enablePush: false\n        }\n      }\n\n      // check if a socket is supplied\n      if (socket) {\n        connectionOptions.createConnection = () => socket\n      }\n\n      connection = http2.connect(uri, connectionOptions)\n      // Connection is created in an unreferenced state and is referenced when a stream is created\n      // This is to prevent the connection from keeping the event loop alive\n      connection.unref()\n\n      // Counting semaphore, but since node is single-threaded, this is just a counter\n      // Multiple streams can be active on a connection\n      // Each stream refs the connection at the start, and unrefs it on end\n      // The connection should terminate if no streams are active on it\n      // Could be refactored into something prettier\n      const oldRef = connection.ref\n      const oldUnref = connection.unref\n\n      const timeoutHandler = () => {\n        delete connectionsMap[name]\n        connection.close()\n      }\n\n      connection.refCount = 0\n      connection.ref = function () {\n        this.refCount++\n        oldRef.call(this)\n        connection.off('timeout', timeoutHandler)\n        connection.setTimeout(0)\n      }\n      const connectionsMap = this.connections\n      connection.unref = function () {\n        this.refCount--\n        if (this.refCount === 0) {\n          oldUnref.call(this)\n          if (_options.timeout) {\n            connection.setTimeout(_options.timeout, timeoutHandler)\n          }\n        }\n      }\n\n      // Add a default error listener to HTTP2 session object to transparently swallow errors incase no streams are active\n      // Remove the connection from the connections map if the connection has errored out\n      connection.on('error', () => {\n        delete this.connections[name]\n      })\n\n      connection.once('close', () => {\n        delete this.connections[name]\n      })\n\n      this.connections[name] = connection\n    }\n\n    return connection\n  }\n}\n\nmodule.exports = {\n  Http2Agent,\n  globalAgent: new Http2Agent({})\n}\n","const {constants = {}} = require('http2')\n\n// Referenced from https://github.com/nodejs/node/blob/0bf200b49a9a6eacdea6d5e5939cc2466506d532/lib/internal/http2/util.js#L107\nconst kValidPseudoHeaders = new Set([\n  constants.HTTP2_HEADER_STATUS,\n  constants.HTTP2_HEADER_METHOD,\n  constants.HTTP2_HEADER_AUTHORITY,\n  constants.HTTP2_HEADER_SCHEME,\n  constants.HTTP2_HEADER_PATH\n])\n\n// Referenced from https://github.com/nodejs/node/blob/0bf200b49a9a6eacdea6d5e5939cc2466506d532/lib/internal/http2/util.js#L573\nfunction assertValidPseudoHeader (header) {\n  if (!kValidPseudoHeaders.has(header)) {\n    throw new Error('Invalid PseudoHeader ' + header)\n  }\n}\n\n// Referenced from https://github.com/nodejs/node/blob/0bf200b49a9a6eacdea6d5e5939cc2466506d532/lib/_http_common.js#L206\nconst tokenRegExp = /^[\\^_`a-zA-Z\\-0-9!#$%&'*+.|~]+$/\nfunction checkIsHttpToken (token) {\n  return RegExp(tokenRegExp).exec(token) !== null\n}\n\n// Referenced from https://github.com/nodejs/node/blob/0bf200b49a9a6eacdea6d5e5939cc2466506d532/lib/internal/http2/core.js#L1763\nfunction validateRequestHeaders (headers) {\n  if (headers !== null && headers !== undefined) {\n    const keys = Object.keys(headers)\n    for (let i = 0; i < keys.length; i++) {\n      const header = keys[i]\n      if (header[0] === ':') {\n        assertValidPseudoHeader(header)\n      } else if (header && !checkIsHttpToken(header)) { throw new Error('Invalid HTTP Token: Header name' + header) }\n    }\n  }\n}\n\nmodule.exports = {\n  validateRequestHeaders\n}\n","const url = require('url')\nconst http2 = require('http2')\nconst { EventEmitter } = require('events')\nconst { globalAgent } = require('./agent')\nconst { validateRequestHeaders } = require('../autohttp/headerValidations')\n\nconst kHeadersFlushed = Symbol('kHeadersFlushed')\n// Connection headers that should not be set by the user. Ref; https://datatracker.ietf.org/doc/html/rfc9113#name-connection-specific-header-\nconst connectionHeaders = ['connection', 'host', 'proxy-connection', 'keep-alive', 'transfer-encoding', 'upgrade']\n\n// HTTP/2 error codes. Moving to a separate variable to prevent browser builds from breaking\nconst http2Constants = http2.constants || {}\nconst rstErrorCodesMap = {\n  [http2Constants.NGHTTP2_NO_ERROR]: 'NGHTTP2_NO_ERROR',\n  [http2Constants.NGHTTP2_PROTOCOL_ERROR]: 'NGHTTP2_PROTOCOL_ERROR',\n  [http2Constants.NGHTTP2_INTERNAL_ERROR]: 'NGHTTP2_INTERNAL_ERROR',\n  [http2Constants.NGHTTP2_FLOW_CONTROL_ERROR]: 'NGHTTP2_FLOW_CONTROL_ERROR',\n  [http2Constants.NGHTTP2_SETTINGS_TIMEOUT]: 'NGHTTP2_SETTINGS_TIMEOUT',\n  [http2Constants.NGHTTP2_STREAM_CLOSED]: 'NGHTTP2_STREAM_CLOSED',\n  [http2Constants.NGHTTP2_FRAME_SIZE_ERROR]: 'NGHTTP2_FRAME_SIZE_ERROR',\n  [http2Constants.NGHTTP2_REFUSED_STREAM]: 'NGHTTP2_REFUSED_STREAM',\n  [http2Constants.NGHTTP2_CANCEL]: 'NGHTTP2_CANCEL',\n  [http2Constants.NGHTTP2_COMPRESSION_ERROR]: 'NGHTTP2_COMPRESSION_ERROR',\n  [http2Constants.NGHTTP2_CONNECT_ERROR]: 'NGHTTP2_CONNECT_ERROR',\n  [http2Constants.NGHTTP2_ENHANCE_YOUR_CALM]: 'NGHTTP2_ENHANCE_YOUR_CALM',\n  [http2Constants.NGHTTP2_INADEQUATE_SECURITY]: 'NGHTTP2_INADEQUATE_SECURITY',\n  [http2Constants.NGHTTP2_HTTP_1_1_REQUIRED]: 'NGHTTP2_HTTP_1_1_REQUIRED'\n}\n\nfunction httpOptionsToUri (options) {\n  return url.format({\n    protocol: 'https',\n    host: options.host || 'localhost'\n  })\n}\n\nclass Http2Request extends EventEmitter {\n  constructor (options) {\n    super()\n    this.onError = this.onError.bind(this)\n    this.onDrain = this.onDrain.bind(this)\n    this.onClose = this.onClose.bind(this)\n    this.onResponse = this.onResponse.bind(this)\n    this.onEnd = this.onEnd.bind(this)\n    this.onTimeout = this.onTimeout.bind(this)\n\n    this.registerListeners = this.registerListeners.bind(this)\n    this._flushHeaders = this._flushHeaders.bind(this)\n    this[kHeadersFlushed] = false\n\n    const uri = httpOptionsToUri(options)\n    const _options = {\n      ...options,\n      port: Number(options.port || 443),\n      path: undefined,\n      host: options.hostname || options.host || 'localhost'\n    }\n\n    if (options.socketPath) {\n      _options.path = options.socketPath\n    }\n\n    const agent = options.agent || globalAgent\n\n    this._client = agent.createConnection(this, uri, _options)\n\n    const headers = options.headers || {}\n\n    this.requestHeaders = {\n      ...headers,\n      [http2.constants.HTTP2_HEADER_PATH]: options.path || '/',\n      [http2.constants.HTTP2_HEADER_METHOD]: _options.method,\n      [http2.constants.HTTP2_HEADER_AUTHORITY]: _options.host + (_options.port !== 443 ? ':' + options.port : '')\n    }\n\n    if (options.uri.isUnix || headers['host'] === 'unix' || _options.host === 'unix') {\n      // The authority field needs to be set to 'localhost' when using unix sockets.\n      // The default URL parser supplies the isUnix flag when the host is 'unix'. Added other checks incase using a different parser like WHATWG URL (new URL()).\n      // See: https://github.com/nodejs/node/issues/32326\n      this.requestHeaders = {\n        ...this.requestHeaders,\n        [http2.constants.HTTP2_HEADER_AUTHORITY]: 'localhost'\n      }\n    }\n\n    this.socket = this._client.socket\n    this._client.once('error', this.onError)\n  }\n\n  get _header () {\n    return '\\r\\n' + Object.entries(this.stream.sentHeaders)\n      .map(([key, value]) => `${key}: ${value}`)\n      .join('\\r\\n') + '\\r\\n\\r\\n'\n  }\n\n  get httpVersion () {\n    return '2.0'\n  }\n\n  registerListeners () {\n    this.stream.on('drain', this.onDrain)\n    this.stream.on('error', this.onError)\n    this.stream.on('close', this.onClose)\n    this.stream.on('response', this.onResponse)\n    this.stream.on('end', this.onEnd)\n    this.stream.on('timeout', this.onTimeout)\n  }\n\n  onDrain (...args) {\n    this.emit('drain', ...args)\n  }\n\n  onError (e) {\n    this.emit('error', e)\n  }\n\n  onResponse (response) {\n    this.emit('response', new ResponseProxy(response, this.stream))\n  }\n\n  onEnd () {\n    this.emit('end')\n  }\n\n  onTimeout () {\n    this.stream.close()\n  }\n\n  onClose (...args) {\n    if (this.stream.rstCode) {\n      // Emit error message in case of abnormal stream closure\n      // It is fine if the error is emitted multiple times, since the callback has checks to prevent multiple invocations\n      this.onError(new Error(`HTTP/2 Stream closed with error code ${rstErrorCodesMap[this.stream.rstCode]}`))\n    }\n\n    this.emit('close', ...args)\n\n    this._client.off('error', this.onError)\n    this.stream.off('drain', this.onDrain)\n    this.stream.off('error', this.onError)\n    this.stream.off('response', this.onResponse)\n    this.stream.off('end', this.onEnd)\n    this.stream.off('close', this.onClose)\n    this.stream.off('timeout', this.onTimeout)\n\n    this.removeAllListeners()\n  }\n\n  setDefaultEncoding (encoding) {\n    if (!this[kHeadersFlushed]) {\n      this._flushHeaders()\n    }\n\n    this.stream.setDefaultEncoding(encoding)\n    return this\n  }\n\n  setEncoding (encoding) {\n    if (!this[kHeadersFlushed]) {\n      this._flushHeaders()\n    }\n\n    this.stream.setEncoding(encoding)\n    return this\n  }\n\n  write (chunk) {\n    if (!this[kHeadersFlushed]) {\n      this._flushHeaders()\n    }\n\n    return this.stream.write(chunk)\n  }\n\n  _flushHeaders (endStream = false) {\n    if (this[kHeadersFlushed]) {\n      throw new Error('Headers already flushed')\n    }\n\n    this.requestHeaders = Object.fromEntries(\n      Object.entries(this.requestHeaders)\n        .filter(([key]) => !connectionHeaders.includes(key.toLowerCase()))\n    )\n\n    // The client was created in an unreferenced state and is referenced when a stream is created\n    this._client.ref()\n    this.stream = this._client.request(this.requestHeaders, {endStream})\n\n    const unreferenceFn = () => {\n      this._client.unref()\n      this.stream.off('close', unreferenceFn)\n    }\n\n    this.stream.on('close', unreferenceFn)\n\n    this.registerListeners()\n\n    this[kHeadersFlushed] = true\n  }\n\n  pipe (dest) {\n    if (!this[kHeadersFlushed]) {\n      this._flushHeaders()\n    }\n    this.stream.pipe(dest)\n\n    return dest\n  }\n\n  on (eventName, listener) {\n    if (eventName === 'socket') {\n      listener(this.socket)\n      return this\n    }\n\n    return super.on(eventName, listener)\n  }\n\n  abort () {\n    if (!this[kHeadersFlushed]) {\n      this._flushHeaders()\n    }\n    this.stream.destroy()\n\n    return this\n  }\n\n  end () {\n    if (!this[kHeadersFlushed]) {\n      this._flushHeaders(true)\n    }\n    this.stream.end()\n\n    return this\n  }\n\n  setTimeout (timeout, cb) {\n    if (!this[kHeadersFlushed]) {\n      this._flushHeaders()\n    }\n    this.stream.setTimeout(timeout, cb)\n\n    return this\n  }\n\n  removeHeader (headerKey) {\n    if (this[kHeadersFlushed]) {\n      throw new Error('Headers already flushed. Cannot remove header')\n    }\n\n    if (headerKey.startsWith(':')) {\n      return\n    }\n\n    delete this.requestHeaders[headerKey]\n\n    return this\n  }\n\n  setHeader (headerKey, headerValue) {\n    if (this[kHeadersFlushed]) {\n      throw new Error('Headers already flushed. Cannot set header')\n    }\n\n    if (headerKey.startsWith(':')) {\n      return\n    }\n\n    this.requestHeaders[headerKey] = headerValue\n\n    return this\n  }\n}\n\nfunction request (options) {\n  // HTTP/2 internal implementation sucks. In case of an invalid HTTP/2 header, it destroys the entire session and\n  // emits an error asynchronously, instead of throwing it synchronously. Hence, it makes more sense to perform all\n  // validations before sending the request.\n  validateRequestHeaders(options.headers)\n\n  return new Http2Request(options)\n}\n\nclass ResponseProxy extends EventEmitter {\n  constructor (response, stream) {\n    super()\n    this.httpVersion = '2.0'\n    this.reqStream = stream\n    this.response = response\n    this.on = this.on.bind(this)\n    this.registerRequestListeners()\n    this.socket = this.reqStream.session.socket\n  }\n\n  registerRequestListeners () {\n    this.reqStream.on('error', (e) => this.emit('error', e))\n    this.reqStream.on('close', () => {\n      this.emit('close')\n    })\n  }\n\n  on (eventName, listener) {\n    super.on(eventName, listener)\n    if (eventName === 'data') {\n      // Attach the data listener to the request stream only when there is a listener.\n      // This is because the data event is emitted by the request stream and the response stream is a proxy\n      // that forwards the data event to the response object.\n      // If there is no listener attached and we use the event forwarding pattern above, the data event will still be emitted\n      // but with no listeners attached to it, thus causing data loss.\n      this.reqStream.on('data', (chunk) => {\n        this.emit('data', chunk)\n      })\n    }\n\n    if (eventName === 'end') {\n      // Incase of bodies with no data, the end event is emitted immediately after the response event. In such cases, the consumer might not have attached the end listener yet. (eg: postman-echo.com/gets)\n      // Thus, when the end event is emitted, we check if the request stream has already ended. If it has, we emit the end event immediately.\n      // Otherwise, we wait for the request stream to end and then emit the end event.\n      if (this.reqStream.readableEnded) {\n        process.nextTick(listener)\n      } else {\n        this.reqStream.on('end', listener)\n      }\n    }\n    return this\n  }\n\n  get statusCode () {\n    return this.response[http2.constants.HTTP2_HEADER_STATUS]\n  }\n\n  get rawHeaders () {\n    return Object.entries(this.response).flat()\n  }\n\n  get headers () {\n    return Object.fromEntries(Object.entries(this.response))\n  }\n\n  pause () {\n    this.reqStream.pause()\n    return this\n  }\n\n  resume () {\n    this.reqStream.resume()\n    return this\n  }\n\n  pipe (dest) {\n    this.reqStream.pipe(dest)\n    return dest\n  }\n\n  setEncoding (encoding) {\n    this.reqStream.setEncoding(encoding)\n    return this\n  }\n\n  destroy () {\n    this.reqStream.destroy()\n    return this\n  }\n}\n\nmodule.exports = {\n  request,\n  Http2Request\n}\n","const { Http2Agent, globalAgent } = require('./agent')\nconst { request } = require('./request')\n\nmodule.exports = {\n  Agent: Http2Agent,\n  request,\n  globalAgent\n}\n","const { Agent: Http2Agent } = require('../http2')\nconst https = require('https')\nconst tls = require('tls')\nconst { EventEmitter } = require('events')\nconst net = require('net')\nconst { getName: getSocketName } = require('../autohttp/requestName')\n\n// All valid options defined at https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids\nconst supportedProtocols = ['h2', 'http/1.1', 'http/1.0', 'http/0.9']\n\n// Referenced from https://github.com/nodejs/node/blob/0bf200b49a9a6eacdea6d5e5939cc2466506d532/lib/_http_agent.js#L350\nfunction calculateServerName (options) {\n  let servername = options.host || ''\n  const hostHeader = options.headers && options.headers.host\n\n  if (hostHeader) {\n    if (typeof hostHeader !== 'string') {\n      throw new TypeError(\n        'host header content must be a string, received' + hostHeader\n      )\n    }\n\n    // abc => abc\n    // abc:123 => abc\n    // [::1] => ::1\n    // [::1]:123 => ::1\n    if (hostHeader.startsWith('[')) {\n      const index = hostHeader.indexOf(']')\n      if (index === -1) {\n        // Leading '[', but no ']'. Need to do something...\n        servername = hostHeader\n      } else {\n        servername = hostHeader.substring(1, index)\n      }\n    } else {\n      servername = hostHeader.split(':', 1)[0]\n    }\n  }\n  // Don't implicitly set invalid (IP) servernames.\n  if (net.isIP(servername)) servername = ''\n  return servername\n}\n\nclass AutoHttp2Agent extends EventEmitter {\n  constructor (options) {\n    super()\n    this.http2Agent = new Http2Agent(options)\n    this.httpsAgent = new https.Agent(options)\n    this.ALPNCache = new Map()\n    this.options = options\n    this.defaultPort = 443\n  }\n\n  createConnection (\n    req,\n    reqOptions,\n    cb,\n    socketCb\n  ) {\n    const options = {\n      ...reqOptions,\n      ...this.options,\n      port: Number(reqOptions.port || this.options.port || this.defaultPort),\n      host: reqOptions.hostname || reqOptions.host || 'localhost'\n    }\n\n    // check if ALPN is cached\n    const name = getSocketName(options)\n    const [protocol, cachedSocket] = this.ALPNCache.get(name) || []\n\n    if (!protocol || !cachedSocket || cachedSocket.closed || cachedSocket.destroyed) {\n      // No cache exists or the initial socket used to establish the connection has been closed. Perform ALPN again.\n      this.ALPNCache.delete(name)\n      this.createNewSocketConnection(req, options, cb, socketCb)\n      return\n    }\n\n    // No need to pass the cachedSocket since the respective protocol's agents will reuse the socket that was initially\n    // passed during ALPN Negotiation\n    if (protocol === 'h2') {\n      const http2Options = {\n        ...options,\n        path: options.socketPath\n      }\n\n      let connection\n      try {\n        const uri = options.uri\n        connection = this.http2Agent.createConnection(req, uri, http2Options)\n      } catch (e) {\n        cb(e)\n        connection && connection.socket && socketCb(connection.socket)\n        return\n      }\n\n      cb(null, 'http2', connection)\n      socketCb(connection.socket)\n\n      return\n    }\n\n    const http1RequestOptions = {\n      ...options,\n      agent: this.httpsAgent\n    }\n\n    let request\n    try {\n      request = https.request(http1RequestOptions)\n    } catch (e) {\n      cb(e)\n      return\n    }\n\n    request.on('socket', (socket) => socketCb(socket))\n    cb(null, 'http1', request)\n  }\n\n  createNewSocketConnection (req, options, cb, socketCb) {\n    const uri = options.uri\n    const name = getSocketName(options)\n\n    const socket = tls.connect({\n      ...options,\n      path: options.socketPath,\n      ALPNProtocols: supportedProtocols,\n      servername: options.servername || calculateServerName(options)\n    })\n    socketCb(socket)\n\n    const socketConnectionErrorHandler = (e) => {\n      cb(e)\n    }\n    socket.on('error', socketConnectionErrorHandler)\n\n    socket.once('secureConnect', () => {\n      socket.removeListener('error', socketConnectionErrorHandler)\n\n      const protocol = socket.alpnProtocol || 'http/1.1'\n\n      if (!supportedProtocols.includes(protocol)) {\n        cb(new Error('Unknown protocol' + protocol))\n        return\n      }\n\n      // Update the cache\n      this.ALPNCache.set(name, [protocol, socket])\n\n      socket.once('close', () => {\n        // Clean the cache when the socket closes\n        this.ALPNCache.delete(name)\n      })\n\n      if (protocol === 'h2') {\n        const http2Options = {\n          ...options,\n          path: options.socketPath\n        }\n        try {\n          const connection = this.http2Agent.createConnection(\n            req,\n            uri,\n            http2Options,\n            socket\n          )\n          cb(null, 'http2', connection)\n        } catch (e) {\n          cb(e)\n        }\n        return\n      }\n\n      // Protocol is http1, using the built in agent\n      // We need to release all free sockets so that new connection is created using the overridden createconnection\n      // forcing the agent to reuse the socket used for alpn\n\n      // This reassignment works, since all code so far is sync, and happens in the same tick, hence there will be no\n      // race conditions\n      const oldCreateConnection = this.httpsAgent.createConnection\n\n      this.httpsAgent.createConnection = () => {\n        return socket\n      }\n\n      const http1RequestOptions = {\n        ...options,\n        agent: this.httpsAgent\n      }\n      let request\n      try {\n        request = https.request(http1RequestOptions)\n      } catch (e) {\n        cb(e)\n        return\n      } finally {\n        this.httpsAgent.createConnection = oldCreateConnection\n      }\n      cb(null, 'http1', request)\n    })\n  }\n}\n\nmodule.exports = {\n  AutoHttp2Agent,\n  globalAgent: new AutoHttp2Agent({})\n}\n","const { EventEmitter } = require('events')\nconst { Http2Request: HTTP2Request } = require('../../lib/http2/request')\nconst { globalAgent } = require('./agent')\nconst { validateRequestHeaders } = require('./headerValidations')\n\nconst kJobs = Symbol('kJobs')\n\nclass MultiProtocolRequest extends EventEmitter {\n  constructor (options) {\n    super()\n    this[kJobs] = []\n    this.options = options\n    this.options.host = options.hostname || options.host || 'localhost'\n\n    const agent = options.agent || globalAgent\n    // Request agent to perform alpn and return either an http agent or https agent\n    // Pass the request to the agent, the agent then calls the callback with http or http2 argument based on the result\n    // of alpn negotiation\n    agent.createConnection(this, options, (err, proto, req) => {\n      if (err) {\n        this.emit('error', err)\n        return\n      }\n      if (proto === 'http2') {\n        this.onHttp2(req)\n      }\n      if (proto === 'http1') {\n        this.onHttp(req)\n      }\n    }, (socket) => {\n      // Need to register callback after this tick, after the on socket handlers have been registered.\n      // Node also does something similar when emitting the socket event.\n      process.nextTick(() => this.emit('socket', socket))\n      this.socket = socket\n    })\n  }\n\n  onHttp2 (connection) {\n    const options = {\n      ...this.options,\n      agent: {\n        createConnection: () => connection\n      }\n    }\n\n    let req\n    try {\n      req = new HTTP2Request(options)\n    } catch (e) {\n      this.emit('error', e)\n      return\n    }\n    this.registerCallbacks(req)\n    this._req = req\n    this.processQueuedOpens()\n  }\n\n  onHttp (req) {\n    this.registerCallbacks(req)\n    this._req = req\n    this.processQueuedOpens()\n  }\n\n  registerCallbacks (ob) {\n    ob.on('drain', (...args) => this.emit('drain', ...args))\n    ob.on('end', (...args) => this.emit('end', ...args))\n    ob.on('close', (...args) => this.emit('close', ...args))\n    ob.on('response', (...args) => this.emit('response', ...args))\n    ob.on('error', (...args) => this.emit('error', ...args))\n  }\n\n  processQueuedOpens () {\n    this[kJobs].forEach((action) => {\n      action()\n    })\n    this[kJobs] = []\n  }\n\n  write (data) {\n    const action = () => this._req.write(data)\n    if (this._req) {\n      action()\n      return true\n    }\n    this[kJobs].push(action)\n    return true\n  }\n\n  end (data) {\n    const action = () => {\n      this._req.end(data)\n    }\n    if (this._req) {\n      action()\n      return this\n    }\n    this[kJobs].push(action)\n    return this\n  }\n\n  setDefaultEncoding (encoding) {\n    const action = () => this._req.setDefaultEncoding(encoding)\n    if (this._req) {\n      action()\n      return this\n    }\n\n    this[kJobs].push(action)\n    return this\n  }\n\n  get _header () {\n    if (this._req && this._req._header) {\n      return this._req._header\n    }\n    return new Promise((resolve) => {\n      const action = () => resolve(this._req._header)\n      this[kJobs].push(action)\n    })\n  }\n\n  pipe (destination, options) {\n    const action = () => this._req.pipe(destination, options)\n    if (this._req) {\n      action()\n      return destination\n    }\n    this[kJobs].push(action)\n    return destination\n  }\n\n  setTimeout (timeout, callback) {\n    const action = () => this._req.setTimeout(timeout, callback)\n    if (this._req) {\n      action()\n      return this\n    }\n    this[kJobs].push(action)\n    return this\n  }\n\n  abort () {\n    const action = () => this._req.abort()\n    if (this._req) {\n      action()\n      return this\n    }\n    this[kJobs].push(action)\n    return this\n  }\n\n  setHeader (name, value) {\n    const action = () => this._req.setHeader(name, value)\n    if (this._req) {\n      action()\n      return this\n    }\n    this[kJobs].push(action)\n    return this\n  }\n\n  removeHeader (name) {\n    const action = () => this._req.removeHeader(name)\n    if (this._req) {\n      action()\n      return this\n    }\n    this[kJobs].push(action)\n    return this\n  }\n}\n\nfunction request (options) {\n  // request was received here, that means protocol is auto, that means priority order is http2, http\n  // There can be 2 cases\n\n  // 1. We have performed ALPN negotiation before for this host/port with the same agent options\n  // 2. We need to perform ALPN negotiation, add the socket used to perform negotiation to the appropriate agent\n  // 2.1 Add the agent to the pool if it didn't already exist\n\n  // HTTP/2 internal implementation sucks. In case of an invalid HTTP/2 header, it destroys the entire session and\n  // emits an error asynchronously, instead of throwing it synchronously. Hence, it makes more sense to perform all\n  // validations before sending the request.\n  validateRequestHeaders(options.headers)\n\n  return new MultiProtocolRequest(options)\n}\n\nmodule.exports = {\n  request,\n  MultiProtocolRequest\n}\n","const { AutoHttp2Agent, globalAgent } = require('./agent')\nconst { request } = require('./request')\n\nmodule.exports = {\n  Agent: AutoHttp2Agent,\n  request,\n  globalAgent\n}\n","\n/*!\n *  Copyright 2010 LearnBoost <dev@learnboost.com>\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Module dependencies.\n */\n\nvar crypto = require('crypto')\n  , parse = require('url').parse\n  ;\n\n/**\n * Valid keys.\n */\n\nvar keys = \n  [ 'acl'\n  , 'location'\n  , 'logging'\n  , 'notification'\n  , 'partNumber'\n  , 'policy'\n  , 'requestPayment'\n  , 'torrent'\n  , 'uploadId'\n  , 'uploads'\n  , 'versionId'\n  , 'versioning'\n  , 'versions'\n  , 'website'\n  ]\n\n/**\n * Return an \"Authorization\" header value with the given `options`\n * in the form of \"AWS <key>:<signature>\"\n *\n * @param {Object} options\n * @return {String}\n * @api private\n */\n\nfunction authorization (options) {\n  return 'AWS ' + options.key + ':' + sign(options)\n}\n\nmodule.exports = authorization\nmodule.exports.authorization = authorization\n\n/**\n * Simple HMAC-SHA1 Wrapper\n *\n * @param {Object} options\n * @return {String}\n * @api private\n */ \n\nfunction hmacSha1 (options) {\n  return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64')\n}\n\nmodule.exports.hmacSha1 = hmacSha1\n\n/**\n * Create a base64 sha1 HMAC for `options`. \n * \n * @param {Object} options\n * @return {String}\n * @api private\n */\n\nfunction sign (options) {\n  options.message = stringToSign(options)\n  return hmacSha1(options)\n}\nmodule.exports.sign = sign\n\n/**\n * Create a base64 sha1 HMAC for `options`. \n *\n * Specifically to be used with S3 presigned URLs\n * \n * @param {Object} options\n * @return {String}\n * @api private\n */\n\nfunction signQuery (options) {\n  options.message = queryStringToSign(options)\n  return hmacSha1(options)\n}\nmodule.exports.signQuery= signQuery\n\n/**\n * Return a string for sign() with the given `options`.\n *\n * Spec:\n * \n *    <verb>\\n\n *    <md5>\\n\n *    <content-type>\\n\n *    <date>\\n\n *    [headers\\n]\n *    <resource>\n *\n * @param {Object} options\n * @return {String}\n * @api private\n */\n\nfunction stringToSign (options) {\n  var headers = options.amazonHeaders || ''\n  if (headers) headers += '\\n'\n  var r = \n    [ options.verb\n    , options.md5\n    , options.contentType\n    , options.date ? options.date.toUTCString() : ''\n    , headers + options.resource\n    ]\n  return r.join('\\n')\n}\nmodule.exports.stringToSign = stringToSign\n\n/**\n * Return a string for sign() with the given `options`, but is meant exclusively\n * for S3 presigned URLs\n *\n * Spec:\n * \n *    <date>\\n\n *    <resource>\n *\n * @param {Object} options\n * @return {String}\n * @api private\n */\n\nfunction queryStringToSign (options){\n  return 'GET\\n\\n\\n' + options.date + '\\n' + options.resource\n}\nmodule.exports.queryStringToSign = queryStringToSign\n\n/**\n * Perform the following:\n *\n *  - ignore non-amazon headers\n *  - lowercase fields\n *  - sort lexicographically\n *  - trim whitespace between \":\"\n *  - join with newline\n *\n * @param {Object} headers\n * @return {String}\n * @api private\n */\n\nfunction canonicalizeHeaders (headers) {\n  var buf = []\n    , fields = Object.keys(headers)\n    ;\n  for (var i = 0, len = fields.length; i < len; ++i) {\n    var field = fields[i]\n      , val = headers[field]\n      , field = field.toLowerCase()\n      ;\n    if (0 !== field.indexOf('x-amz')) continue\n    buf.push(field + ':' + val)\n  }\n  return buf.sort().join('\\n')\n}\nmodule.exports.canonicalizeHeaders = canonicalizeHeaders\n\n/**\n * Perform the following:\n *\n *  - ignore non sub-resources\n *  - sort lexicographically\n *\n * @param {String} resource\n * @return {String}\n * @api private\n */\n\nfunction canonicalizeResource (resource) {\n  var url = parse(resource, true)\n    , path = url.pathname\n    , buf = []\n    ;\n\n  Object.keys(url.query).forEach(function(key){\n    if (!~keys.indexOf(key)) return\n    var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key])\n    buf.push(key + val)\n  })\n\n  return path + (buf.length ? '?' + buf.sort().join('&') : '')\n}\nmodule.exports.canonicalizeResource = canonicalizeResource\n","module.exports = function(size) {\n  return new LruCache(size)\n}\n\nfunction LruCache(size) {\n  this.capacity = size | 0\n  this.map = Object.create(null)\n  this.list = new DoublyLinkedList()\n}\n\nLruCache.prototype.get = function(key) {\n  var node = this.map[key]\n  if (node == null) return undefined\n  this.used(node)\n  return node.val\n}\n\nLruCache.prototype.set = function(key, val) {\n  var node = this.map[key]\n  if (node != null) {\n    node.val = val\n  } else {\n    if (!this.capacity) this.prune()\n    if (!this.capacity) return false\n    node = new DoublyLinkedNode(key, val)\n    this.map[key] = node\n    this.capacity--\n  }\n  this.used(node)\n  return true\n}\n\nLruCache.prototype.used = function(node) {\n  this.list.moveToFront(node)\n}\n\nLruCache.prototype.prune = function() {\n  var node = this.list.pop()\n  if (node != null) {\n    delete this.map[node.key]\n    this.capacity++\n  }\n}\n\n\nfunction DoublyLinkedList() {\n  this.firstNode = null\n  this.lastNode = null\n}\n\nDoublyLinkedList.prototype.moveToFront = function(node) {\n  if (this.firstNode == node) return\n\n  this.remove(node)\n\n  if (this.firstNode == null) {\n    this.firstNode = node\n    this.lastNode = node\n    node.prev = null\n    node.next = null\n  } else {\n    node.prev = null\n    node.next = this.firstNode\n    node.next.prev = node\n    this.firstNode = node\n  }\n}\n\nDoublyLinkedList.prototype.pop = function() {\n  var lastNode = this.lastNode\n  if (lastNode != null) {\n    this.remove(lastNode)\n  }\n  return lastNode\n}\n\nDoublyLinkedList.prototype.remove = function(node) {\n  if (this.firstNode == node) {\n    this.firstNode = node.next\n  } else if (node.prev != null) {\n    node.prev.next = node.next\n  }\n  if (this.lastNode == node) {\n    this.lastNode = node.prev\n  } else if (node.next != null) {\n    node.next.prev = node.prev\n  }\n}\n\n\nfunction DoublyLinkedNode(key, val) {\n  this.key = key\n  this.val = val\n  this.prev = null\n  this.next = null\n}\n","var aws4 = exports,\n    url = require('url'),\n    querystring = require('querystring'),\n    crypto = require('crypto'),\n    lru = require('./lru'),\n    credentialsCache = lru(1000)\n\n// http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html\n\nfunction hmac(key, string, encoding) {\n  return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding)\n}\n\nfunction hash(string, encoding) {\n  return crypto.createHash('sha256').update(string, 'utf8').digest(encoding)\n}\n\n// This function assumes the string has already been percent encoded\nfunction encodeRfc3986(urlEncodedString) {\n  return urlEncodedString.replace(/[!'()*]/g, function(c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\nfunction encodeRfc3986Full(str) {\n  return encodeRfc3986(encodeURIComponent(str))\n}\n\n// A bit of a combination of:\n// https://github.com/aws/aws-sdk-java-v2/blob/dc695de6ab49ad03934e1b02e7263abbd2354be0/core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/AbstractAws4Signer.java#L59\n// https://github.com/aws/aws-sdk-js/blob/18cb7e5b463b46239f9fdd4a65e2ff8c81831e8f/lib/signers/v4.js#L191-L199\n// https://github.com/mhart/aws4fetch/blob/b3aed16b6f17384cf36ea33bcba3c1e9f3bdfefd/src/main.js#L25-L34\nvar HEADERS_TO_IGNORE = {\n  'authorization': true,\n  'connection': true,\n  'x-amzn-trace-id': true,\n  'user-agent': true,\n  'expect': true,\n  'presigned-expires': true,\n  'range': true,\n}\n\n// request: { path | body, [host], [method], [headers], [service], [region] }\n// credentials: { accessKeyId, secretAccessKey, [sessionToken] }\nfunction RequestSigner(request, credentials) {\n\n  if (typeof request === 'string') request = url.parse(request)\n\n  var headers = request.headers = Object.assign({}, (request.headers || {})),\n      hostParts = (!this.service || !this.region) && this.matchHost(request.hostname || request.host || headers.Host || headers.host)\n\n  this.request = request\n  this.credentials = credentials || this.defaultCredentials()\n\n  this.service = request.service || hostParts[0] || ''\n  this.region = request.region || hostParts[1] || 'us-east-1'\n\n  // SES uses a different domain from the service name\n  if (this.service === 'email') this.service = 'ses'\n\n  if (!request.method && request.body)\n    request.method = 'POST'\n\n  if (!headers.Host && !headers.host) {\n    headers.Host = request.hostname || request.host || this.createHost()\n\n    // If a port is specified explicitly, use it as is\n    if (request.port)\n      headers.Host += ':' + request.port\n  }\n  if (!request.hostname && !request.host)\n    request.hostname = headers.Host || headers.host\n\n  this.isCodeCommitGit = this.service === 'codecommit' && request.method === 'GIT'\n\n  this.extraHeadersToIgnore = request.extraHeadersToIgnore || Object.create(null)\n  this.extraHeadersToInclude = request.extraHeadersToInclude || Object.create(null)\n}\n\nRequestSigner.prototype.matchHost = function(host) {\n  var match = (host || '').match(/([^\\.]{1,63})\\.(?:([^\\.]{0,63})\\.)?amazonaws\\.com(\\.cn)?$/)\n  var hostParts = (match || []).slice(1, 3)\n\n  // ES's hostParts are sometimes the other way round, if the value that is expected\n  // to be region equals ‘es’ switch them back\n  // e.g. search-cluster-name-aaaa00aaaa0aaa0aaaaaaa0aaa.us-east-1.es.amazonaws.com\n  if (hostParts[1] === 'es' || hostParts[1] === 'aoss')\n    hostParts = hostParts.reverse()\n\n  if (hostParts[1] == 's3') {\n    hostParts[0] = 's3'\n    hostParts[1] = 'us-east-1'\n  } else {\n    for (var i = 0; i < 2; i++) {\n      if (/^s3-/.test(hostParts[i])) {\n        hostParts[1] = hostParts[i].slice(3)\n        hostParts[0] = 's3'\n        break\n      }\n    }\n  }\n\n  return hostParts\n}\n\n// http://docs.aws.amazon.com/general/latest/gr/rande.html\nRequestSigner.prototype.isSingleRegion = function() {\n  // Special case for S3 and SimpleDB in us-east-1\n  if (['s3', 'sdb'].indexOf(this.service) >= 0 && this.region === 'us-east-1') return true\n\n  return ['cloudfront', 'ls', 'route53', 'iam', 'importexport', 'sts']\n    .indexOf(this.service) >= 0\n}\n\nRequestSigner.prototype.createHost = function() {\n  var region = this.isSingleRegion() ? '' : '.' + this.region,\n      subdomain = this.service === 'ses' ? 'email' : this.service\n  return subdomain + region + '.amazonaws.com'\n}\n\nRequestSigner.prototype.prepareRequest = function() {\n  this.parsePath()\n\n  var request = this.request, headers = request.headers, query\n\n  if (request.signQuery) {\n\n    this.parsedPath.query = query = this.parsedPath.query || {}\n\n    if (this.credentials.sessionToken)\n      query['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n    if (this.service === 's3' && !query['X-Amz-Expires'])\n      query['X-Amz-Expires'] = 86400\n\n    if (query['X-Amz-Date'])\n      this.datetime = query['X-Amz-Date']\n    else\n      query['X-Amz-Date'] = this.getDateTime()\n\n    query['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256'\n    query['X-Amz-Credential'] = this.credentials.accessKeyId + '/' + this.credentialString()\n    query['X-Amz-SignedHeaders'] = this.signedHeaders()\n\n  } else {\n\n    if (!request.doNotModifyHeaders && !this.isCodeCommitGit) {\n      if (request.body && !headers['Content-Type'] && !headers['content-type'])\n        headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'\n\n      if (request.body && !headers['Content-Length'] && !headers['content-length'])\n        headers['Content-Length'] = Buffer.byteLength(request.body)\n\n      if (this.credentials.sessionToken && !headers['X-Amz-Security-Token'] && !headers['x-amz-security-token'])\n        headers['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n      if (this.service === 's3' && !headers['X-Amz-Content-Sha256'] && !headers['x-amz-content-sha256'])\n        headers['X-Amz-Content-Sha256'] = hash(this.request.body || '', 'hex')\n\n      if (headers['X-Amz-Date'] || headers['x-amz-date'])\n        this.datetime = headers['X-Amz-Date'] || headers['x-amz-date']\n      else\n        headers['X-Amz-Date'] = this.getDateTime()\n    }\n\n    delete headers.Authorization\n    delete headers.authorization\n  }\n}\n\nRequestSigner.prototype.sign = function() {\n  if (!this.parsedPath) this.prepareRequest()\n\n  if (this.request.signQuery) {\n    this.parsedPath.query['X-Amz-Signature'] = this.signature()\n  } else {\n    this.request.headers.Authorization = this.authHeader()\n  }\n\n  this.request.path = this.formatPath()\n\n  return this.request\n}\n\nRequestSigner.prototype.getDateTime = function() {\n  if (!this.datetime) {\n    var headers = this.request.headers,\n      date = new Date(headers.Date || headers.date || new Date)\n\n    this.datetime = date.toISOString().replace(/[:\\-]|\\.\\d{3}/g, '')\n\n    // Remove the trailing 'Z' on the timestamp string for CodeCommit git access\n    if (this.isCodeCommitGit) this.datetime = this.datetime.slice(0, -1)\n  }\n  return this.datetime\n}\n\nRequestSigner.prototype.getDate = function() {\n  return this.getDateTime().substr(0, 8)\n}\n\nRequestSigner.prototype.authHeader = function() {\n  return [\n    'AWS4-HMAC-SHA256 Credential=' + this.credentials.accessKeyId + '/' + this.credentialString(),\n    'SignedHeaders=' + this.signedHeaders(),\n    'Signature=' + this.signature(),\n  ].join(', ')\n}\n\nRequestSigner.prototype.signature = function() {\n  var date = this.getDate(),\n      cacheKey = [this.credentials.secretAccessKey, date, this.region, this.service].join(),\n      kDate, kRegion, kService, kCredentials = credentialsCache.get(cacheKey)\n  if (!kCredentials) {\n    kDate = hmac('AWS4' + this.credentials.secretAccessKey, date)\n    kRegion = hmac(kDate, this.region)\n    kService = hmac(kRegion, this.service)\n    kCredentials = hmac(kService, 'aws4_request')\n    credentialsCache.set(cacheKey, kCredentials)\n  }\n  return hmac(kCredentials, this.stringToSign(), 'hex')\n}\n\nRequestSigner.prototype.stringToSign = function() {\n  return [\n    'AWS4-HMAC-SHA256',\n    this.getDateTime(),\n    this.credentialString(),\n    hash(this.canonicalString(), 'hex'),\n  ].join('\\n')\n}\n\nRequestSigner.prototype.canonicalString = function() {\n  if (!this.parsedPath) this.prepareRequest()\n\n  var pathStr = this.parsedPath.path,\n      query = this.parsedPath.query,\n      headers = this.request.headers,\n      queryStr = '',\n      normalizePath = this.service !== 's3',\n      decodePath = this.service === 's3' || this.request.doNotEncodePath,\n      decodeSlashesInPath = this.service === 's3',\n      firstValOnly = this.service === 's3',\n      bodyHash\n\n  if (this.service === 's3' && this.request.signQuery) {\n    bodyHash = 'UNSIGNED-PAYLOAD'\n  } else if (this.isCodeCommitGit) {\n    bodyHash = ''\n  } else {\n    bodyHash = headers['X-Amz-Content-Sha256'] || headers['x-amz-content-sha256'] ||\n      hash(this.request.body || '', 'hex')\n  }\n\n  if (query) {\n    var reducedQuery = Object.keys(query).reduce(function(obj, key) {\n      if (!key) return obj\n      obj[encodeRfc3986Full(key)] = !Array.isArray(query[key]) ? query[key] :\n        (firstValOnly ? query[key][0] : query[key])\n      return obj\n    }, {})\n    var encodedQueryPieces = []\n    Object.keys(reducedQuery).sort().forEach(function(key) {\n      if (!Array.isArray(reducedQuery[key])) {\n        encodedQueryPieces.push(key + '=' + encodeRfc3986Full(reducedQuery[key]))\n      } else {\n        reducedQuery[key].map(encodeRfc3986Full).sort()\n          .forEach(function(val) { encodedQueryPieces.push(key + '=' + val) })\n      }\n    })\n    queryStr = encodedQueryPieces.join('&')\n  }\n  if (pathStr !== '/') {\n    if (normalizePath) pathStr = pathStr.replace(/\\/{2,}/g, '/')\n    pathStr = pathStr.split('/').reduce(function(path, piece) {\n      if (normalizePath && piece === '..') {\n        path.pop()\n      } else if (!normalizePath || piece !== '.') {\n        if (decodePath) piece = decodeURIComponent(piece.replace(/\\+/g, ' '))\n        path.push(encodeRfc3986Full(piece))\n      }\n      return path\n    }, []).join('/')\n    if (pathStr[0] !== '/') pathStr = '/' + pathStr\n    if (decodeSlashesInPath) pathStr = pathStr.replace(/%2F/g, '/')\n  }\n\n  return [\n    this.request.method || 'GET',\n    pathStr,\n    queryStr,\n    this.canonicalHeaders() + '\\n',\n    this.signedHeaders(),\n    bodyHash,\n  ].join('\\n')\n}\n\nRequestSigner.prototype.filterHeaders = function() {\n  var headers = this.request.headers,\n      extraHeadersToInclude = this.extraHeadersToInclude,\n      extraHeadersToIgnore = this.extraHeadersToIgnore\n  this.filteredHeaders = Object.keys(headers)\n    .map(function(key) { return [key.toLowerCase(), headers[key]] })\n    .filter(function(entry) {\n      return extraHeadersToInclude[entry[0]] ||\n        (HEADERS_TO_IGNORE[entry[0]] == null && !extraHeadersToIgnore[entry[0]])\n    })\n    .sort(function(a, b) { return a[0] < b[0] ? -1 : 1 })\n}\n\nRequestSigner.prototype.canonicalHeaders = function() {\n  if (!this.filteredHeaders) this.filterHeaders()\n\n  return this.filteredHeaders.map(function(entry) {\n    return entry[0] + ':' + entry[1].toString().trim().replace(/\\s+/g, ' ')\n  }).join('\\n')\n}\n\nRequestSigner.prototype.signedHeaders = function() {\n  if (!this.filteredHeaders) this.filterHeaders()\n\n  return this.filteredHeaders.map(function(entry) { return entry[0] }).join(';')\n}\n\nRequestSigner.prototype.credentialString = function() {\n  return [\n    this.getDate(),\n    this.region,\n    this.service,\n    'aws4_request',\n  ].join('/')\n}\n\nRequestSigner.prototype.defaultCredentials = function() {\n  var env = process.env\n  return {\n    accessKeyId: env.AWS_ACCESS_KEY_ID || env.AWS_ACCESS_KEY,\n    secretAccessKey: env.AWS_SECRET_ACCESS_KEY || env.AWS_SECRET_KEY,\n    sessionToken: env.AWS_SESSION_TOKEN,\n  }\n}\n\nRequestSigner.prototype.parsePath = function() {\n  var path = this.request.path || '/'\n\n  // S3 doesn't always encode characters > 127 correctly and\n  // all services don't encode characters > 255 correctly\n  // So if there are non-reserved chars (and it's not already all % encoded), just encode them all\n  if (/[^0-9A-Za-z;,/?:@&=+$\\-_.!~*'()#%]/.test(path)) {\n    path = encodeURI(decodeURI(path))\n  }\n\n  var queryIx = path.indexOf('?'),\n      query = null\n\n  if (queryIx >= 0) {\n    query = querystring.parse(path.slice(queryIx + 1))\n    path = path.slice(0, queryIx)\n  }\n\n  this.parsedPath = {\n    path: path,\n    query: query,\n  }\n}\n\nRequestSigner.prototype.formatPath = function() {\n  var path = this.parsedPath.path,\n      query = this.parsedPath.query\n\n  if (!query) return path\n\n  // Services don't support empty query string keys\n  if (query[''] != null) delete query['']\n\n  return path + '?' + encodeRfc3986(querystring.stringify(query))\n}\n\naws4.RequestSigner = RequestSigner\n\naws4.sign = function(request, credentials) {\n  return new RequestSigner(request, credentials).sign()\n}\n","import crypto from 'crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n  if (poolPtr > rnds8Pool.length - 16) {\n    crypto.randomFillSync(rnds8Pool);\n    poolPtr = 0;\n  }\n\n  return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n  return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  const uuid = (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(); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n  let i = buf && offset || 0;\n  const b = buf || new Array(16);\n  options = options || {};\n  let node = options.node || _nodeId;\n  let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n\n  if (node == null || clockseq == null) {\n    const seedBytes = options.random || (options.rng || rng)();\n\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n    }\n\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n  let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n\n  let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n  const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n\n\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n  if (nsecs >= 10000) {\n    throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n  msecs += 12219292800000; // `time_low`\n\n  const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff; // `time_mid`\n\n  const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff; // `time_high_and_version`\n\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n  b[i++] = clockseq & 0xff; // `node`\n\n  for (let n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n  if (!validate(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  let v;\n  const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n  arr[1] = v >>> 16 & 0xff;\n  arr[2] = v >>> 8 & 0xff;\n  arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n  arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n  arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n  arr[9] = v & 0xff; // Parse ........-....-....-....-############\n  // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n  arr[11] = v / 0x100000000 & 0xff;\n  arr[12] = v >>> 24 & 0xff;\n  arr[13] = v >>> 16 & 0xff;\n  arr[14] = v >>> 8 & 0xff;\n  arr[15] = v & 0xff;\n  return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n  str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n  const bytes = [];\n\n  for (let i = 0; i < str.length; ++i) {\n    bytes.push(str.charCodeAt(i));\n  }\n\n  return bytes;\n}\n\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n  function generateUUID(value, namespace, buf, offset) {\n    if (typeof value === 'string') {\n      value = stringToBytes(value);\n    }\n\n    if (typeof namespace === 'string') {\n      namespace = parse(namespace);\n    }\n\n    if (namespace.length !== 16) {\n      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    } // Compute hash of namespace and value, Per 4.3\n    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n    // hashfunc([...namespace, ... value])`\n\n\n    let bytes = new Uint8Array(16 + value.length);\n    bytes.set(namespace);\n    bytes.set(value, namespace.length);\n    bytes = hashfunc(bytes);\n    bytes[6] = bytes[6] & 0x0f | version;\n    bytes[8] = bytes[8] & 0x3f | 0x80;\n\n    if (buf) {\n      offset = offset || 0;\n\n      for (let i = 0; i < 16; ++i) {\n        buf[offset + i] = bytes[i];\n      }\n\n      return buf;\n    }\n\n    return stringify(bytes);\n  } // Function#name is not settable on some platforms (#270)\n\n\n  try {\n    generateUUID.name = name; // eslint-disable-next-line no-empty\n  } catch (err) {} // For CommonJS default export support\n\n\n  generateUUID.DNS = DNS;\n  generateUUID.URL = URL;\n  return generateUUID;\n}","import crypto from 'crypto';\n\nfunction md5(bytes) {\n  if (Array.isArray(bytes)) {\n    bytes = Buffer.from(bytes);\n  } else if (typeof bytes === 'string') {\n    bytes = Buffer.from(bytes, 'utf8');\n  }\n\n  return crypto.createHash('md5').update(bytes).digest();\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nconst v3 = v35('v3', 0x30, md5);\nexport default v3;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  options = options || {};\n  const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return stringify(rnds);\n}\n\nexport default v4;","import crypto from 'crypto';\n\nfunction sha1(bytes) {\n  if (Array.isArray(bytes)) {\n    bytes = Buffer.from(bytes);\n  } else if (typeof bytes === 'string') {\n    bytes = Buffer.from(bytes, 'utf8');\n  }\n\n  return crypto.createHash('sha1').update(bytes).digest();\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nconst v5 = v35('v5', 0x50, sha1);\nexport default v5;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n  if (!validate(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","export { default as v1 } from './v1.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as NIL } from './nil.js';\nexport { default as version } from './version.js';\nexport { default as validate } from './validate.js';\nexport { default as stringify } from './stringify.js';\nexport { default as parse } from './parse.js';","// Copyright (c) 2012, Mark Cavage. All rights reserved.\n// Copyright 2015 Joyent, Inc.\n\nvar assert = require('assert');\nvar Stream = require('stream').Stream;\nvar util = require('util');\n\n\n///--- Globals\n\n/* JSSTYLED */\nvar UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/;\n\n\n///--- Internal\n\nfunction _capitalize(str) {\n    return (str.charAt(0).toUpperCase() + str.slice(1));\n}\n\nfunction _toss(name, expected, oper, arg, actual) {\n    throw new assert.AssertionError({\n        message: util.format('%s (%s) is required', name, expected),\n        actual: (actual === undefined) ? typeof (arg) : actual(arg),\n        expected: expected,\n        operator: oper || '===',\n        stackStartFunction: _toss.caller\n    });\n}\n\nfunction _getClass(arg) {\n    return (Object.prototype.toString.call(arg).slice(8, -1));\n}\n\nfunction noop() {\n    // Why even bother with asserts?\n}\n\n\n///--- Exports\n\nvar types = {\n    bool: {\n        check: function (arg) { return typeof (arg) === 'boolean'; }\n    },\n    func: {\n        check: function (arg) { return typeof (arg) === 'function'; }\n    },\n    string: {\n        check: function (arg) { return typeof (arg) === 'string'; }\n    },\n    object: {\n        check: function (arg) {\n            return typeof (arg) === 'object' && arg !== null;\n        }\n    },\n    number: {\n        check: function (arg) {\n            return typeof (arg) === 'number' && !isNaN(arg);\n        }\n    },\n    finite: {\n        check: function (arg) {\n            return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg);\n        }\n    },\n    buffer: {\n        check: function (arg) { return Buffer.isBuffer(arg); },\n        operator: 'Buffer.isBuffer'\n    },\n    array: {\n        check: function (arg) { return Array.isArray(arg); },\n        operator: 'Array.isArray'\n    },\n    stream: {\n        check: function (arg) { return arg instanceof Stream; },\n        operator: 'instanceof',\n        actual: _getClass\n    },\n    date: {\n        check: function (arg) { return arg instanceof Date; },\n        operator: 'instanceof',\n        actual: _getClass\n    },\n    regexp: {\n        check: function (arg) { return arg instanceof RegExp; },\n        operator: 'instanceof',\n        actual: _getClass\n    },\n    uuid: {\n        check: function (arg) {\n            return typeof (arg) === 'string' && UUID_REGEXP.test(arg);\n        },\n        operator: 'isUUID'\n    }\n};\n\nfunction _setExports(ndebug) {\n    var keys = Object.keys(types);\n    var out;\n\n    /* re-export standard assert */\n    if (process.env.NODE_NDEBUG) {\n        out = noop;\n    } else {\n        out = function (arg, msg) {\n            if (!arg) {\n                _toss(msg, 'true', arg);\n            }\n        };\n    }\n\n    /* standard checks */\n    keys.forEach(function (k) {\n        if (ndebug) {\n            out[k] = noop;\n            return;\n        }\n        var type = types[k];\n        out[k] = function (arg, msg) {\n            if (!type.check(arg)) {\n                _toss(msg, k, type.operator, arg, type.actual);\n            }\n        };\n    });\n\n    /* optional checks */\n    keys.forEach(function (k) {\n        var name = 'optional' + _capitalize(k);\n        if (ndebug) {\n            out[name] = noop;\n            return;\n        }\n        var type = types[k];\n        out[name] = function (arg, msg) {\n            if (arg === undefined || arg === null) {\n                return;\n            }\n            if (!type.check(arg)) {\n                _toss(msg, k, type.operator, arg, type.actual);\n            }\n        };\n    });\n\n    /* arrayOf checks */\n    keys.forEach(function (k) {\n        var name = 'arrayOf' + _capitalize(k);\n        if (ndebug) {\n            out[name] = noop;\n            return;\n        }\n        var type = types[k];\n        var expected = '[' + k + ']';\n        out[name] = function (arg, msg) {\n            if (!Array.isArray(arg)) {\n                _toss(msg, expected, type.operator, arg, type.actual);\n            }\n            var i;\n            for (i = 0; i < arg.length; i++) {\n                if (!type.check(arg[i])) {\n                    _toss(msg, expected, type.operator, arg, type.actual);\n                }\n            }\n        };\n    });\n\n    /* optionalArrayOf checks */\n    keys.forEach(function (k) {\n        var name = 'optionalArrayOf' + _capitalize(k);\n        if (ndebug) {\n            out[name] = noop;\n            return;\n        }\n        var type = types[k];\n        var expected = '[' + k + ']';\n        out[name] = function (arg, msg) {\n            if (arg === undefined || arg === null) {\n                return;\n            }\n            if (!Array.isArray(arg)) {\n                _toss(msg, expected, type.operator, arg, type.actual);\n            }\n            var i;\n            for (i = 0; i < arg.length; i++) {\n                if (!type.check(arg[i])) {\n                    _toss(msg, expected, type.operator, arg, type.actual);\n                }\n            }\n        };\n    });\n\n    /* re-export built-in assertions */\n    Object.keys(assert).forEach(function (k) {\n        if (k === 'AssertionError') {\n            out[k] = assert[k];\n            return;\n        }\n        if (ndebug) {\n            out[k] = noop;\n            return;\n        }\n        out[k] = assert[k];\n    });\n\n    /* export ourselves (for unit tests _only_) */\n    out._setExports = _setExports;\n\n    return out;\n}\n\nmodule.exports = _setExports(process.env.NODE_NDEBUG);\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue\n  if (key === 'SlowBuffer' || key === 'Buffer') continue\n  safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n  Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n    }\n    return Buffer(value, encodingOrOffset, length)\n  }\n}\n\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    var buf = Buffer(size)\n    if (!fill || fill.length === 0) {\n      buf.fill(0)\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n    return buf\n  }\n}\n\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\n\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  }\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n  }\n}\n\nmodule.exports = safer\n","// Copyright 2015 Joyent, Inc.\n\nvar Buffer = require('safer-buffer').Buffer;\n\nvar algInfo = {\n\t'dsa': {\n\t\tparts: ['p', 'q', 'g', 'y'],\n\t\tsizePart: 'p'\n\t},\n\t'rsa': {\n\t\tparts: ['e', 'n'],\n\t\tsizePart: 'n'\n\t},\n\t'ecdsa': {\n\t\tparts: ['curve', 'Q'],\n\t\tsizePart: 'Q'\n\t},\n\t'ed25519': {\n\t\tparts: ['A'],\n\t\tsizePart: 'A'\n\t}\n};\nalgInfo['curve25519'] = algInfo['ed25519'];\n\nvar algPrivInfo = {\n\t'dsa': {\n\t\tparts: ['p', 'q', 'g', 'y', 'x']\n\t},\n\t'rsa': {\n\t\tparts: ['n', 'e', 'd', 'iqmp', 'p', 'q']\n\t},\n\t'ecdsa': {\n\t\tparts: ['curve', 'Q', 'd']\n\t},\n\t'ed25519': {\n\t\tparts: ['A', 'k']\n\t}\n};\nalgPrivInfo['curve25519'] = algPrivInfo['ed25519'];\n\nvar hashAlgs = {\n\t'md5': true,\n\t'sha1': true,\n\t'sha256': true,\n\t'sha384': true,\n\t'sha512': true\n};\n\n/*\n * Taken from\n * http://csrc.nist.gov/groups/ST/toolkit/documents/dss/NISTReCur.pdf\n */\nvar curves = {\n\t'nistp256': {\n\t\tsize: 256,\n\t\tpkcs8oid: '1.2.840.10045.3.1.7',\n\t\tp: Buffer.from(('00' +\n\t\t    'ffffffff 00000001 00000000 00000000' +\n\t\t    '00000000 ffffffff ffffffff ffffffff').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\ta: Buffer.from(('00' +\n\t\t    'FFFFFFFF 00000001 00000000 00000000' +\n\t\t    '00000000 FFFFFFFF FFFFFFFF FFFFFFFC').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\tb: Buffer.from((\n\t\t    '5ac635d8 aa3a93e7 b3ebbd55 769886bc' +\n\t\t    '651d06b0 cc53b0f6 3bce3c3e 27d2604b').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\ts: Buffer.from(('00' +\n\t\t    'c49d3608 86e70493 6a6678e1 139d26b7' +\n\t\t    '819f7e90').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\tn: Buffer.from(('00' +\n\t\t    'ffffffff 00000000 ffffffff ffffffff' +\n\t\t    'bce6faad a7179e84 f3b9cac2 fc632551').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\tG: Buffer.from(('04' +\n\t\t    '6b17d1f2 e12c4247 f8bce6e5 63a440f2' +\n\t\t    '77037d81 2deb33a0 f4a13945 d898c296' +\n\t\t    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16' +\n\t\t    '2bce3357 6b315ece cbb64068 37bf51f5').\n\t\t    replace(/ /g, ''), 'hex')\n\t},\n\t'nistp384': {\n\t\tsize: 384,\n\t\tpkcs8oid: '1.3.132.0.34',\n\t\tp: Buffer.from(('00' +\n\t\t    'ffffffff ffffffff ffffffff ffffffff' +\n\t\t    'ffffffff ffffffff ffffffff fffffffe' +\n\t\t    'ffffffff 00000000 00000000 ffffffff').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\ta: Buffer.from(('00' +\n\t\t    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +\n\t\t    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE' +\n\t\t    'FFFFFFFF 00000000 00000000 FFFFFFFC').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\tb: Buffer.from((\n\t\t    'b3312fa7 e23ee7e4 988e056b e3f82d19' +\n\t\t    '181d9c6e fe814112 0314088f 5013875a' +\n\t\t    'c656398d 8a2ed19d 2a85c8ed d3ec2aef').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\ts: Buffer.from(('00' +\n\t\t    'a335926a a319a27a 1d00896a 6773a482' +\n\t\t    '7acdac73').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\tn: Buffer.from(('00' +\n\t\t    'ffffffff ffffffff ffffffff ffffffff' +\n\t\t    'ffffffff ffffffff c7634d81 f4372ddf' +\n\t\t    '581a0db2 48b0a77a ecec196a ccc52973').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\tG: Buffer.from(('04' +\n\t\t    'aa87ca22 be8b0537 8eb1c71e f320ad74' +\n\t\t    '6e1d3b62 8ba79b98 59f741e0 82542a38' +\n\t\t    '5502f25d bf55296c 3a545e38 72760ab7' +\n\t\t    '3617de4a 96262c6f 5d9e98bf 9292dc29' +\n\t\t    'f8f41dbd 289a147c e9da3113 b5f0b8c0' +\n\t\t    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f').\n\t\t    replace(/ /g, ''), 'hex')\n\t},\n\t'nistp521': {\n\t\tsize: 521,\n\t\tpkcs8oid: '1.3.132.0.35',\n\t\tp: Buffer.from((\n\t\t    '01ffffff ffffffff ffffffff ffffffff' +\n\t\t    'ffffffff ffffffff ffffffff ffffffff' +\n\t\t    'ffffffff ffffffff ffffffff ffffffff' +\n\t\t    'ffffffff ffffffff ffffffff ffffffff' +\n\t\t    'ffff').replace(/ /g, ''), 'hex'),\n\t\ta: Buffer.from(('01FF' +\n\t\t    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +\n\t\t    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +\n\t\t    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +\n\t\t    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFC').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\tb: Buffer.from(('51' +\n\t\t    '953eb961 8e1c9a1f 929a21a0 b68540ee' +\n\t\t    'a2da725b 99b315f3 b8b48991 8ef109e1' +\n\t\t    '56193951 ec7e937b 1652c0bd 3bb1bf07' +\n\t\t    '3573df88 3d2c34f1 ef451fd4 6b503f00').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\ts: Buffer.from(('00' +\n\t\t    'd09e8800 291cb853 96cc6717 393284aa' +\n\t\t    'a0da64ba').replace(/ /g, ''), 'hex'),\n\t\tn: Buffer.from(('01ff' +\n\t\t    'ffffffff ffffffff ffffffff ffffffff' +\n\t\t    'ffffffff ffffffff ffffffff fffffffa' +\n\t\t    '51868783 bf2f966b 7fcc0148 f709a5d0' +\n\t\t    '3bb5c9b8 899c47ae bb6fb71e 91386409').\n\t\t    replace(/ /g, ''), 'hex'),\n\t\tG: Buffer.from(('04' +\n\t\t    '00c6 858e06b7 0404e9cd 9e3ecb66 2395b442' +\n\t\t         '9c648139 053fb521 f828af60 6b4d3dba' +\n\t\t         'a14b5e77 efe75928 fe1dc127 a2ffa8de' +\n\t\t         '3348b3c1 856a429b f97e7e31 c2e5bd66' +\n\t\t    '0118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9' +\n\t\t         '98f54449 579b4468 17afbd17 273e662c' +\n\t\t         '97ee7299 5ef42640 c550b901 3fad0761' +\n\t\t         '353c7086 a272c240 88be9476 9fd16650').\n\t\t    replace(/ /g, ''), 'hex')\n\t}\n};\n\nmodule.exports = {\n\tinfo: algInfo,\n\tprivInfo: algPrivInfo,\n\thashAlgs: hashAlgs,\n\tcurves: curves\n};\n","// Copyright 2015 Joyent, Inc.\n\nvar assert = require('assert-plus');\nvar util = require('util');\n\nfunction FingerprintFormatError(fp, format) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, FingerprintFormatError);\n\tthis.name = 'FingerprintFormatError';\n\tthis.fingerprint = fp;\n\tthis.format = format;\n\tthis.message = 'Fingerprint format is not supported, or is invalid: ';\n\tif (fp !== undefined)\n\t\tthis.message += ' fingerprint = ' + fp;\n\tif (format !== undefined)\n\t\tthis.message += ' format = ' + format;\n}\nutil.inherits(FingerprintFormatError, Error);\n\nfunction InvalidAlgorithmError(alg) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, InvalidAlgorithmError);\n\tthis.name = 'InvalidAlgorithmError';\n\tthis.algorithm = alg;\n\tthis.message = 'Algorithm \"' + alg + '\" is not supported';\n}\nutil.inherits(InvalidAlgorithmError, Error);\n\nfunction KeyParseError(name, format, innerErr) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, KeyParseError);\n\tthis.name = 'KeyParseError';\n\tthis.format = format;\n\tthis.keyName = name;\n\tthis.innerErr = innerErr;\n\tthis.message = 'Failed to parse ' + name + ' as a valid ' + format +\n\t    ' format key: ' + innerErr.message;\n}\nutil.inherits(KeyParseError, Error);\n\nfunction SignatureParseError(type, format, innerErr) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, SignatureParseError);\n\tthis.name = 'SignatureParseError';\n\tthis.type = type;\n\tthis.format = format;\n\tthis.innerErr = innerErr;\n\tthis.message = 'Failed to parse the given data as a ' + type +\n\t    ' signature in ' + format + ' format: ' + innerErr.message;\n}\nutil.inherits(SignatureParseError, Error);\n\nfunction CertificateParseError(name, format, innerErr) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, CertificateParseError);\n\tthis.name = 'CertificateParseError';\n\tthis.format = format;\n\tthis.certName = name;\n\tthis.innerErr = innerErr;\n\tthis.message = 'Failed to parse ' + name + ' as a valid ' + format +\n\t    ' format certificate: ' + innerErr.message;\n}\nutil.inherits(CertificateParseError, Error);\n\nfunction KeyEncryptedError(name, format) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, KeyEncryptedError);\n\tthis.name = 'KeyEncryptedError';\n\tthis.format = format;\n\tthis.keyName = name;\n\tthis.message = 'The ' + format + ' format key ' + name + ' is ' +\n\t    'encrypted (password-protected), and no passphrase was ' +\n\t    'provided in `options`';\n}\nutil.inherits(KeyEncryptedError, Error);\n\nmodule.exports = {\n\tFingerprintFormatError: FingerprintFormatError,\n\tInvalidAlgorithmError: InvalidAlgorithmError,\n\tKeyParseError: KeyParseError,\n\tSignatureParseError: SignatureParseError,\n\tKeyEncryptedError: KeyEncryptedError,\n\tCertificateParseError: CertificateParseError\n};\n","// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.\n\n\nmodule.exports = {\n\n  newInvalidAsn1Error: function (msg) {\n    var e = new Error();\n    e.name = 'InvalidAsn1Error';\n    e.message = msg || '';\n    return e;\n  }\n\n};\n","// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.\n\n\nmodule.exports = {\n  EOC: 0,\n  Boolean: 1,\n  Integer: 2,\n  BitString: 3,\n  OctetString: 4,\n  Null: 5,\n  OID: 6,\n  ObjectDescriptor: 7,\n  External: 8,\n  Real: 9, // float\n  Enumeration: 10,\n  PDV: 11,\n  Utf8String: 12,\n  RelativeOID: 13,\n  Sequence: 16,\n  Set: 17,\n  NumericString: 18,\n  PrintableString: 19,\n  T61String: 20,\n  VideotexString: 21,\n  IA5String: 22,\n  UTCTime: 23,\n  GeneralizedTime: 24,\n  GraphicString: 25,\n  VisibleString: 26,\n  GeneralString: 28,\n  UniversalString: 29,\n  CharacterString: 30,\n  BMPString: 31,\n  Constructor: 32,\n  Context: 128\n};\n","// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.\n\nvar assert = require('assert');\nvar Buffer = require('safer-buffer').Buffer;\n\nvar ASN1 = require('./types');\nvar errors = require('./errors');\n\n\n// --- Globals\n\nvar newInvalidAsn1Error = errors.newInvalidAsn1Error;\n\n\n\n// --- API\n\nfunction Reader(data) {\n  if (!data || !Buffer.isBuffer(data))\n    throw new TypeError('data must be a node Buffer');\n\n  this._buf = data;\n  this._size = data.length;\n\n  // These hold the \"current\" state\n  this._len = 0;\n  this._offset = 0;\n}\n\nObject.defineProperty(Reader.prototype, 'length', {\n  enumerable: true,\n  get: function () { return (this._len); }\n});\n\nObject.defineProperty(Reader.prototype, 'offset', {\n  enumerable: true,\n  get: function () { return (this._offset); }\n});\n\nObject.defineProperty(Reader.prototype, 'remain', {\n  get: function () { return (this._size - this._offset); }\n});\n\nObject.defineProperty(Reader.prototype, 'buffer', {\n  get: function () { return (this._buf.slice(this._offset)); }\n});\n\n\n/**\n * Reads a single byte and advances offset; you can pass in `true` to make this\n * a \"peek\" operation (i.e., get the byte, but don't advance the offset).\n *\n * @param {Boolean} peek true means don't move offset.\n * @return {Number} the next byte, null if not enough data.\n */\nReader.prototype.readByte = function (peek) {\n  if (this._size - this._offset < 1)\n    return null;\n\n  var b = this._buf[this._offset] & 0xff;\n\n  if (!peek)\n    this._offset += 1;\n\n  return b;\n};\n\n\nReader.prototype.peek = function () {\n  return this.readByte(true);\n};\n\n\n/**\n * Reads a (potentially) variable length off the BER buffer.  This call is\n * not really meant to be called directly, as callers have to manipulate\n * the internal buffer afterwards.\n *\n * As a result of this call, you can call `Reader.length`, until the\n * next thing called that does a readLength.\n *\n * @return {Number} the amount of offset to advance the buffer.\n * @throws {InvalidAsn1Error} on bad ASN.1\n */\nReader.prototype.readLength = function (offset) {\n  if (offset === undefined)\n    offset = this._offset;\n\n  if (offset >= this._size)\n    return null;\n\n  var lenB = this._buf[offset++] & 0xff;\n  if (lenB === null)\n    return null;\n\n  if ((lenB & 0x80) === 0x80) {\n    lenB &= 0x7f;\n\n    if (lenB === 0)\n      throw newInvalidAsn1Error('Indefinite length not supported');\n\n    if (lenB > 4)\n      throw newInvalidAsn1Error('encoding too long');\n\n    if (this._size - offset < lenB)\n      return null;\n\n    this._len = 0;\n    for (var i = 0; i < lenB; i++)\n      this._len = (this._len << 8) + (this._buf[offset++] & 0xff);\n\n  } else {\n    // Wasn't a variable length\n    this._len = lenB;\n  }\n\n  return offset;\n};\n\n\n/**\n * Parses the next sequence in this BER buffer.\n *\n * To get the length of the sequence, call `Reader.length`.\n *\n * @return {Number} the sequence's tag.\n */\nReader.prototype.readSequence = function (tag) {\n  var seq = this.peek();\n  if (seq === null)\n    return null;\n  if (tag !== undefined && tag !== seq)\n    throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n                              ': got 0x' + seq.toString(16));\n\n  var o = this.readLength(this._offset + 1); // stored in `length`\n  if (o === null)\n    return null;\n\n  this._offset = o;\n  return seq;\n};\n\n\nReader.prototype.readInt = function () {\n  return this._readTag(ASN1.Integer);\n};\n\n\nReader.prototype.readBoolean = function () {\n  return (this._readTag(ASN1.Boolean) === 0 ? false : true);\n};\n\n\nReader.prototype.readEnumeration = function () {\n  return this._readTag(ASN1.Enumeration);\n};\n\n\nReader.prototype.readString = function (tag, retbuf) {\n  if (!tag)\n    tag = ASN1.OctetString;\n\n  var b = this.peek();\n  if (b === null)\n    return null;\n\n  if (b !== tag)\n    throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n                              ': got 0x' + b.toString(16));\n\n  var o = this.readLength(this._offset + 1); // stored in `length`\n\n  if (o === null)\n    return null;\n\n  if (this.length > this._size - o)\n    return null;\n\n  this._offset = o;\n\n  if (this.length === 0)\n    return retbuf ? Buffer.alloc(0) : '';\n\n  var str = this._buf.slice(this._offset, this._offset + this.length);\n  this._offset += this.length;\n\n  return retbuf ? str : str.toString('utf8');\n};\n\nReader.prototype.readOID = function (tag) {\n  if (!tag)\n    tag = ASN1.OID;\n\n  var b = this.readString(tag, true);\n  if (b === null)\n    return null;\n\n  var values = [];\n  var value = 0;\n\n  for (var i = 0; i < b.length; i++) {\n    var byte = b[i] & 0xff;\n\n    value <<= 7;\n    value += byte & 0x7f;\n    if ((byte & 0x80) === 0) {\n      values.push(value);\n      value = 0;\n    }\n  }\n\n  value = values.shift();\n  values.unshift(value % 40);\n  values.unshift((value / 40) >> 0);\n\n  return values.join('.');\n};\n\n\nReader.prototype._readTag = function (tag) {\n  assert.ok(tag !== undefined);\n\n  var b = this.peek();\n\n  if (b === null)\n    return null;\n\n  if (b !== tag)\n    throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n                              ': got 0x' + b.toString(16));\n\n  var o = this.readLength(this._offset + 1); // stored in `length`\n  if (o === null)\n    return null;\n\n  if (this.length > 4)\n    throw newInvalidAsn1Error('Integer too long: ' + this.length);\n\n  if (this.length > this._size - o)\n    return null;\n  this._offset = o;\n\n  var fb = this._buf[this._offset];\n  var value = 0;\n\n  for (var i = 0; i < this.length; i++) {\n    value <<= 8;\n    value |= (this._buf[this._offset++] & 0xff);\n  }\n\n  if ((fb & 0x80) === 0x80 && i !== 4)\n    value -= (1 << (i * 8));\n\n  return value >> 0;\n};\n\n\n\n// --- Exported API\n\nmodule.exports = Reader;\n","// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.\n\nvar assert = require('assert');\nvar Buffer = require('safer-buffer').Buffer;\nvar ASN1 = require('./types');\nvar errors = require('./errors');\n\n\n// --- Globals\n\nvar newInvalidAsn1Error = errors.newInvalidAsn1Error;\n\nvar DEFAULT_OPTS = {\n  size: 1024,\n  growthFactor: 8\n};\n\n\n// --- Helpers\n\nfunction merge(from, to) {\n  assert.ok(from);\n  assert.equal(typeof (from), 'object');\n  assert.ok(to);\n  assert.equal(typeof (to), 'object');\n\n  var keys = Object.getOwnPropertyNames(from);\n  keys.forEach(function (key) {\n    if (to[key])\n      return;\n\n    var value = Object.getOwnPropertyDescriptor(from, key);\n    Object.defineProperty(to, key, value);\n  });\n\n  return to;\n}\n\n\n\n// --- API\n\nfunction Writer(options) {\n  options = merge(DEFAULT_OPTS, options || {});\n\n  this._buf = Buffer.alloc(options.size || 1024);\n  this._size = this._buf.length;\n  this._offset = 0;\n  this._options = options;\n\n  // A list of offsets in the buffer where we need to insert\n  // sequence tag/len pairs.\n  this._seq = [];\n}\n\nObject.defineProperty(Writer.prototype, 'buffer', {\n  get: function () {\n    if (this._seq.length)\n      throw newInvalidAsn1Error(this._seq.length + ' unended sequence(s)');\n\n    return (this._buf.slice(0, this._offset));\n  }\n});\n\nWriter.prototype.writeByte = function (b) {\n  if (typeof (b) !== 'number')\n    throw new TypeError('argument must be a Number');\n\n  this._ensure(1);\n  this._buf[this._offset++] = b;\n};\n\n\nWriter.prototype.writeInt = function (i, tag) {\n  if (typeof (i) !== 'number')\n    throw new TypeError('argument must be a Number');\n  if (typeof (tag) !== 'number')\n    tag = ASN1.Integer;\n\n  var sz = 4;\n\n  while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000 >> 0)) &&\n        (sz > 1)) {\n    sz--;\n    i <<= 8;\n  }\n\n  if (sz > 4)\n    throw newInvalidAsn1Error('BER ints cannot be > 0xffffffff');\n\n  this._ensure(2 + sz);\n  this._buf[this._offset++] = tag;\n  this._buf[this._offset++] = sz;\n\n  while (sz-- > 0) {\n    this._buf[this._offset++] = ((i & 0xff000000) >>> 24);\n    i <<= 8;\n  }\n\n};\n\n\nWriter.prototype.writeNull = function () {\n  this.writeByte(ASN1.Null);\n  this.writeByte(0x00);\n};\n\n\nWriter.prototype.writeEnumeration = function (i, tag) {\n  if (typeof (i) !== 'number')\n    throw new TypeError('argument must be a Number');\n  if (typeof (tag) !== 'number')\n    tag = ASN1.Enumeration;\n\n  return this.writeInt(i, tag);\n};\n\n\nWriter.prototype.writeBoolean = function (b, tag) {\n  if (typeof (b) !== 'boolean')\n    throw new TypeError('argument must be a Boolean');\n  if (typeof (tag) !== 'number')\n    tag = ASN1.Boolean;\n\n  this._ensure(3);\n  this._buf[this._offset++] = tag;\n  this._buf[this._offset++] = 0x01;\n  this._buf[this._offset++] = b ? 0xff : 0x00;\n};\n\n\nWriter.prototype.writeString = function (s, tag) {\n  if (typeof (s) !== 'string')\n    throw new TypeError('argument must be a string (was: ' + typeof (s) + ')');\n  if (typeof (tag) !== 'number')\n    tag = ASN1.OctetString;\n\n  var len = Buffer.byteLength(s);\n  this.writeByte(tag);\n  this.writeLength(len);\n  if (len) {\n    this._ensure(len);\n    this._buf.write(s, this._offset);\n    this._offset += len;\n  }\n};\n\n\nWriter.prototype.writeBuffer = function (buf, tag) {\n  if (typeof (tag) !== 'number')\n    throw new TypeError('tag must be a number');\n  if (!Buffer.isBuffer(buf))\n    throw new TypeError('argument must be a buffer');\n\n  this.writeByte(tag);\n  this.writeLength(buf.length);\n  this._ensure(buf.length);\n  buf.copy(this._buf, this._offset, 0, buf.length);\n  this._offset += buf.length;\n};\n\n\nWriter.prototype.writeStringArray = function (strings) {\n  if ((!strings instanceof Array))\n    throw new TypeError('argument must be an Array[String]');\n\n  var self = this;\n  strings.forEach(function (s) {\n    self.writeString(s);\n  });\n};\n\n// This is really to solve DER cases, but whatever for now\nWriter.prototype.writeOID = function (s, tag) {\n  if (typeof (s) !== 'string')\n    throw new TypeError('argument must be a string');\n  if (typeof (tag) !== 'number')\n    tag = ASN1.OID;\n\n  if (!/^([0-9]+\\.){3,}[0-9]+$/.test(s))\n    throw new Error('argument is not a valid OID string');\n\n  function encodeOctet(bytes, octet) {\n    if (octet < 128) {\n        bytes.push(octet);\n    } else if (octet < 16384) {\n        bytes.push((octet >>> 7) | 0x80);\n        bytes.push(octet & 0x7F);\n    } else if (octet < 2097152) {\n      bytes.push((octet >>> 14) | 0x80);\n      bytes.push(((octet >>> 7) | 0x80) & 0xFF);\n      bytes.push(octet & 0x7F);\n    } else if (octet < 268435456) {\n      bytes.push((octet >>> 21) | 0x80);\n      bytes.push(((octet >>> 14) | 0x80) & 0xFF);\n      bytes.push(((octet >>> 7) | 0x80) & 0xFF);\n      bytes.push(octet & 0x7F);\n    } else {\n      bytes.push(((octet >>> 28) | 0x80) & 0xFF);\n      bytes.push(((octet >>> 21) | 0x80) & 0xFF);\n      bytes.push(((octet >>> 14) | 0x80) & 0xFF);\n      bytes.push(((octet >>> 7) | 0x80) & 0xFF);\n      bytes.push(octet & 0x7F);\n    }\n  }\n\n  var tmp = s.split('.');\n  var bytes = [];\n  bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10));\n  tmp.slice(2).forEach(function (b) {\n    encodeOctet(bytes, parseInt(b, 10));\n  });\n\n  var self = this;\n  this._ensure(2 + bytes.length);\n  this.writeByte(tag);\n  this.writeLength(bytes.length);\n  bytes.forEach(function (b) {\n    self.writeByte(b);\n  });\n};\n\n\nWriter.prototype.writeLength = function (len) {\n  if (typeof (len) !== 'number')\n    throw new TypeError('argument must be a Number');\n\n  this._ensure(4);\n\n  if (len <= 0x7f) {\n    this._buf[this._offset++] = len;\n  } else if (len <= 0xff) {\n    this._buf[this._offset++] = 0x81;\n    this._buf[this._offset++] = len;\n  } else if (len <= 0xffff) {\n    this._buf[this._offset++] = 0x82;\n    this._buf[this._offset++] = len >> 8;\n    this._buf[this._offset++] = len;\n  } else if (len <= 0xffffff) {\n    this._buf[this._offset++] = 0x83;\n    this._buf[this._offset++] = len >> 16;\n    this._buf[this._offset++] = len >> 8;\n    this._buf[this._offset++] = len;\n  } else {\n    throw newInvalidAsn1Error('Length too long (> 4 bytes)');\n  }\n};\n\nWriter.prototype.startSequence = function (tag) {\n  if (typeof (tag) !== 'number')\n    tag = ASN1.Sequence | ASN1.Constructor;\n\n  this.writeByte(tag);\n  this._seq.push(this._offset);\n  this._ensure(3);\n  this._offset += 3;\n};\n\n\nWriter.prototype.endSequence = function () {\n  var seq = this._seq.pop();\n  var start = seq + 3;\n  var len = this._offset - start;\n\n  if (len <= 0x7f) {\n    this._shift(start, len, -2);\n    this._buf[seq] = len;\n  } else if (len <= 0xff) {\n    this._shift(start, len, -1);\n    this._buf[seq] = 0x81;\n    this._buf[seq + 1] = len;\n  } else if (len <= 0xffff) {\n    this._buf[seq] = 0x82;\n    this._buf[seq + 1] = len >> 8;\n    this._buf[seq + 2] = len;\n  } else if (len <= 0xffffff) {\n    this._shift(start, len, 1);\n    this._buf[seq] = 0x83;\n    this._buf[seq + 1] = len >> 16;\n    this._buf[seq + 2] = len >> 8;\n    this._buf[seq + 3] = len;\n  } else {\n    throw newInvalidAsn1Error('Sequence too long');\n  }\n};\n\n\nWriter.prototype._shift = function (start, len, shift) {\n  assert.ok(start !== undefined);\n  assert.ok(len !== undefined);\n  assert.ok(shift);\n\n  this._buf.copy(this._buf, start + shift, start, start + len);\n  this._offset += shift;\n};\n\nWriter.prototype._ensure = function (len) {\n  assert.ok(len);\n\n  if (this._size - this._offset < len) {\n    var sz = this._size * this._options.growthFactor;\n    if (sz - this._offset < len)\n      sz += len;\n\n    var buf = Buffer.alloc(sz);\n\n    this._buf.copy(buf, 0, 0, this._offset);\n    this._buf = buf;\n    this._size = sz;\n  }\n};\n\n\n\n// --- Exported API\n\nmodule.exports = Writer;\n","// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.\n\nvar errors = require('./errors');\nvar types = require('./types');\n\nvar Reader = require('./reader');\nvar Writer = require('./writer');\n\n\n// --- Exports\n\nmodule.exports = {\n\n  Reader: Reader,\n\n  Writer: Writer\n\n};\n\nfor (var t in types) {\n  if (types.hasOwnProperty(t))\n    module.exports[t] = types[t];\n}\nfor (var e in errors) {\n  if (errors.hasOwnProperty(e))\n    module.exports[e] = errors[e];\n}\n","// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.\n\n// If you have no idea what ASN.1 or BER is, see this:\n// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc\n\nvar Ber = require('./ber/index');\n\n\n\n// --- Exported API\n\nmodule.exports = {\n\n  Ber: Ber,\n\n  BerReader: Ber.Reader,\n\n  BerWriter: Ber.Writer\n\n};\n","(function(){\n\n    // Copyright (c) 2005  Tom Wu\n    // All Rights Reserved.\n    // See \"LICENSE\" for details.\n\n    // Basic JavaScript BN library - subset useful for RSA encryption.\n\n    // Bits per digit\n    var dbits;\n\n    // JavaScript engine analysis\n    var canary = 0xdeadbeefcafe;\n    var j_lm = ((canary&0xffffff)==0xefcafe);\n\n    // (public) Constructor\n    function BigInteger(a,b,c) {\n      if(a != null)\n        if(\"number\" == typeof a) this.fromNumber(a,b,c);\n        else if(b == null && \"string\" != typeof a) this.fromString(a,256);\n        else this.fromString(a,b);\n    }\n\n    // return new, unset BigInteger\n    function nbi() { return new BigInteger(null); }\n\n    // am: Compute w_j += (x*this_i), propagate carries,\n    // c is initial carry, returns final carry.\n    // c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n    // We need to select the fastest one that works in this environment.\n\n    // am1: use a single mult and divide to get the high bits,\n    // max digit bits should be 26 because\n    // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n    function am1(i,x,w,j,c,n) {\n      while(--n >= 0) {\n        var v = x*this[i++]+w[j]+c;\n        c = Math.floor(v/0x4000000);\n        w[j++] = v&0x3ffffff;\n      }\n      return c;\n    }\n    // am2 avoids a big mult-and-extract completely.\n    // Max digit bits should be <= 30 because we do bitwise ops\n    // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n    function am2(i,x,w,j,c,n) {\n      var xl = x&0x7fff, xh = x>>15;\n      while(--n >= 0) {\n        var l = this[i]&0x7fff;\n        var h = this[i++]>>15;\n        var m = xh*l+h*xl;\n        l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);\n        c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);\n        w[j++] = l&0x3fffffff;\n      }\n      return c;\n    }\n    // Alternately, set max digit bits to 28 since some\n    // browsers slow down when dealing with 32-bit numbers.\n    function am3(i,x,w,j,c,n) {\n      var xl = x&0x3fff, xh = x>>14;\n      while(--n >= 0) {\n        var l = this[i]&0x3fff;\n        var h = this[i++]>>14;\n        var m = xh*l+h*xl;\n        l = xl*l+((m&0x3fff)<<14)+w[j]+c;\n        c = (l>>28)+(m>>14)+xh*h;\n        w[j++] = l&0xfffffff;\n      }\n      return c;\n    }\n    var inBrowser = typeof navigator !== \"undefined\";\n    if(inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n      BigInteger.prototype.am = am2;\n      dbits = 30;\n    }\n    else if(inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n      BigInteger.prototype.am = am1;\n      dbits = 26;\n    }\n    else { // Mozilla/Netscape seems to prefer am3\n      BigInteger.prototype.am = am3;\n      dbits = 28;\n    }\n\n    BigInteger.prototype.DB = dbits;\n    BigInteger.prototype.DM = ((1<<dbits)-1);\n    BigInteger.prototype.DV = (1<<dbits);\n\n    var BI_FP = 52;\n    BigInteger.prototype.FV = Math.pow(2,BI_FP);\n    BigInteger.prototype.F1 = BI_FP-dbits;\n    BigInteger.prototype.F2 = 2*dbits-BI_FP;\n\n    // Digit conversions\n    var BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n    var BI_RC = new Array();\n    var rr,vv;\n    rr = \"0\".charCodeAt(0);\n    for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;\n    rr = \"a\".charCodeAt(0);\n    for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\n    rr = \"A\".charCodeAt(0);\n    for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\n\n    function int2char(n) { return BI_RM.charAt(n); }\n    function intAt(s,i) {\n      var c = BI_RC[s.charCodeAt(i)];\n      return (c==null)?-1:c;\n    }\n\n    // (protected) copy this to r\n    function bnpCopyTo(r) {\n      for(var i = this.t-1; i >= 0; --i) r[i] = this[i];\n      r.t = this.t;\n      r.s = this.s;\n    }\n\n    // (protected) set from integer value x, -DV <= x < DV\n    function bnpFromInt(x) {\n      this.t = 1;\n      this.s = (x<0)?-1:0;\n      if(x > 0) this[0] = x;\n      else if(x < -1) this[0] = x+this.DV;\n      else this.t = 0;\n    }\n\n    // return bigint initialized to value\n    function nbv(i) { var r = nbi(); r.fromInt(i); return r; }\n\n    // (protected) set from string and radix\n    function bnpFromString(s,b) {\n      var k;\n      if(b == 16) k = 4;\n      else if(b == 8) k = 3;\n      else if(b == 256) k = 8; // byte array\n      else if(b == 2) k = 1;\n      else if(b == 32) k = 5;\n      else if(b == 4) k = 2;\n      else { this.fromRadix(s,b); return; }\n      this.t = 0;\n      this.s = 0;\n      var i = s.length, mi = false, sh = 0;\n      while(--i >= 0) {\n        var x = (k==8)?s[i]&0xff:intAt(s,i);\n        if(x < 0) {\n          if(s.charAt(i) == \"-\") mi = true;\n          continue;\n        }\n        mi = false;\n        if(sh == 0)\n          this[this.t++] = x;\n        else if(sh+k > this.DB) {\n          this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<<sh;\n          this[this.t++] = (x>>(this.DB-sh));\n        }\n        else\n          this[this.t-1] |= x<<sh;\n        sh += k;\n        if(sh >= this.DB) sh -= this.DB;\n      }\n      if(k == 8 && (s[0]&0x80) != 0) {\n        this.s = -1;\n        if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)<<sh;\n      }\n      this.clamp();\n      if(mi) BigInteger.ZERO.subTo(this,this);\n    }\n\n    // (protected) clamp off excess high words\n    function bnpClamp() {\n      var c = this.s&this.DM;\n      while(this.t > 0 && this[this.t-1] == c) --this.t;\n    }\n\n    // (public) return string representation in given radix\n    function bnToString(b) {\n      if(this.s < 0) return \"-\"+this.negate().toString(b);\n      var k;\n      if(b == 16) k = 4;\n      else if(b == 8) k = 3;\n      else if(b == 2) k = 1;\n      else if(b == 32) k = 5;\n      else if(b == 4) k = 2;\n      else return this.toRadix(b);\n      var km = (1<<k)-1, d, m = false, r = \"\", i = this.t;\n      var p = this.DB-(i*this.DB)%k;\n      if(i-- > 0) {\n        if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }\n        while(i >= 0) {\n          if(p < k) {\n            d = (this[i]&((1<<p)-1))<<(k-p);\n            d |= this[--i]>>(p+=this.DB-k);\n          }\n          else {\n            d = (this[i]>>(p-=k))&km;\n            if(p <= 0) { p += this.DB; --i; }\n          }\n          if(d > 0) m = true;\n          if(m) r += int2char(d);\n        }\n      }\n      return m?r:\"0\";\n    }\n\n    // (public) -this\n    function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }\n\n    // (public) |this|\n    function bnAbs() { return (this.s<0)?this.negate():this; }\n\n    // (public) return + if this > a, - if this < a, 0 if equal\n    function bnCompareTo(a) {\n      var r = this.s-a.s;\n      if(r != 0) return r;\n      var i = this.t;\n      r = i-a.t;\n      if(r != 0) return (this.s<0)?-r:r;\n      while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;\n      return 0;\n    }\n\n    // returns bit length of the integer x\n    function nbits(x) {\n      var r = 1, t;\n      if((t=x>>>16) != 0) { x = t; r += 16; }\n      if((t=x>>8) != 0) { x = t; r += 8; }\n      if((t=x>>4) != 0) { x = t; r += 4; }\n      if((t=x>>2) != 0) { x = t; r += 2; }\n      if((t=x>>1) != 0) { x = t; r += 1; }\n      return r;\n    }\n\n    // (public) return the number of bits in \"this\"\n    function bnBitLength() {\n      if(this.t <= 0) return 0;\n      return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));\n    }\n\n    // (protected) r = this << n*DB\n    function bnpDLShiftTo(n,r) {\n      var i;\n      for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];\n      for(i = n-1; i >= 0; --i) r[i] = 0;\n      r.t = this.t+n;\n      r.s = this.s;\n    }\n\n    // (protected) r = this >> n*DB\n    function bnpDRShiftTo(n,r) {\n      for(var i = n; i < this.t; ++i) r[i-n] = this[i];\n      r.t = Math.max(this.t-n,0);\n      r.s = this.s;\n    }\n\n    // (protected) r = this << n\n    function bnpLShiftTo(n,r) {\n      var bs = n%this.DB;\n      var cbs = this.DB-bs;\n      var bm = (1<<cbs)-1;\n      var ds = Math.floor(n/this.DB), c = (this.s<<bs)&this.DM, i;\n      for(i = this.t-1; i >= 0; --i) {\n        r[i+ds+1] = (this[i]>>cbs)|c;\n        c = (this[i]&bm)<<bs;\n      }\n      for(i = ds-1; i >= 0; --i) r[i] = 0;\n      r[ds] = c;\n      r.t = this.t+ds+1;\n      r.s = this.s;\n      r.clamp();\n    }\n\n    // (protected) r = this >> n\n    function bnpRShiftTo(n,r) {\n      r.s = this.s;\n      var ds = Math.floor(n/this.DB);\n      if(ds >= this.t) { r.t = 0; return; }\n      var bs = n%this.DB;\n      var cbs = this.DB-bs;\n      var bm = (1<<bs)-1;\n      r[0] = this[ds]>>bs;\n      for(var i = ds+1; i < this.t; ++i) {\n        r[i-ds-1] |= (this[i]&bm)<<cbs;\n        r[i-ds] = this[i]>>bs;\n      }\n      if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<<cbs;\n      r.t = this.t-ds;\n      r.clamp();\n    }\n\n    // (protected) r = this - a\n    function bnpSubTo(a,r) {\n      var i = 0, c = 0, m = Math.min(a.t,this.t);\n      while(i < m) {\n        c += this[i]-a[i];\n        r[i++] = c&this.DM;\n        c >>= this.DB;\n      }\n      if(a.t < this.t) {\n        c -= a.s;\n        while(i < this.t) {\n          c += this[i];\n          r[i++] = c&this.DM;\n          c >>= this.DB;\n        }\n        c += this.s;\n      }\n      else {\n        c += this.s;\n        while(i < a.t) {\n          c -= a[i];\n          r[i++] = c&this.DM;\n          c >>= this.DB;\n        }\n        c -= a.s;\n      }\n      r.s = (c<0)?-1:0;\n      if(c < -1) r[i++] = this.DV+c;\n      else if(c > 0) r[i++] = c;\n      r.t = i;\n      r.clamp();\n    }\n\n    // (protected) r = this * a, r != this,a (HAC 14.12)\n    // \"this\" should be the larger one if appropriate.\n    function bnpMultiplyTo(a,r) {\n      var x = this.abs(), y = a.abs();\n      var i = x.t;\n      r.t = i+y.t;\n      while(--i >= 0) r[i] = 0;\n      for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);\n      r.s = 0;\n      r.clamp();\n      if(this.s != a.s) BigInteger.ZERO.subTo(r,r);\n    }\n\n    // (protected) r = this^2, r != this (HAC 14.16)\n    function bnpSquareTo(r) {\n      var x = this.abs();\n      var i = r.t = 2*x.t;\n      while(--i >= 0) r[i] = 0;\n      for(i = 0; i < x.t-1; ++i) {\n        var c = x.am(i,x[i],r,2*i,0,1);\n        if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {\n          r[i+x.t] -= x.DV;\n          r[i+x.t+1] = 1;\n        }\n      }\n      if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);\n      r.s = 0;\n      r.clamp();\n    }\n\n    // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n    // r != q, this != m.  q or r may be null.\n    function bnpDivRemTo(m,q,r) {\n      var pm = m.abs();\n      if(pm.t <= 0) return;\n      var pt = this.abs();\n      if(pt.t < pm.t) {\n        if(q != null) q.fromInt(0);\n        if(r != null) this.copyTo(r);\n        return;\n      }\n      if(r == null) r = nbi();\n      var y = nbi(), ts = this.s, ms = m.s;\n      var nsh = this.DB-nbits(pm[pm.t-1]);   // normalize modulus\n      if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }\n      else { pm.copyTo(y); pt.copyTo(r); }\n      var ys = y.t;\n      var y0 = y[ys-1];\n      if(y0 == 0) return;\n      var yt = y0*(1<<this.F1)+((ys>1)?y[ys-2]>>this.F2:0);\n      var d1 = this.FV/yt, d2 = (1<<this.F1)/yt, e = 1<<this.F2;\n      var i = r.t, j = i-ys, t = (q==null)?nbi():q;\n      y.dlShiftTo(j,t);\n      if(r.compareTo(t) >= 0) {\n        r[r.t++] = 1;\n        r.subTo(t,r);\n      }\n      BigInteger.ONE.dlShiftTo(ys,t);\n      t.subTo(y,y);  // \"negative\" y so we can replace sub with am later\n      while(y.t < ys) y[y.t++] = 0;\n      while(--j >= 0) {\n        // Estimate quotient digit\n        var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);\n        if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) {   // Try it out\n          y.dlShiftTo(j,t);\n          r.subTo(t,r);\n          while(r[i] < --qd) r.subTo(t,r);\n        }\n      }\n      if(q != null) {\n        r.drShiftTo(ys,q);\n        if(ts != ms) BigInteger.ZERO.subTo(q,q);\n      }\n      r.t = ys;\n      r.clamp();\n      if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder\n      if(ts < 0) BigInteger.ZERO.subTo(r,r);\n    }\n\n    // (public) this mod a\n    function bnMod(a) {\n      var r = nbi();\n      this.abs().divRemTo(a,null,r);\n      if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);\n      return r;\n    }\n\n    // Modular reduction using \"classic\" algorithm\n    function Classic(m) { this.m = m; }\n    function cConvert(x) {\n      if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n      else return x;\n    }\n    function cRevert(x) { return x; }\n    function cReduce(x) { x.divRemTo(this.m,null,x); }\n    function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n    function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n    Classic.prototype.convert = cConvert;\n    Classic.prototype.revert = cRevert;\n    Classic.prototype.reduce = cReduce;\n    Classic.prototype.mulTo = cMulTo;\n    Classic.prototype.sqrTo = cSqrTo;\n\n    // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n    // justification:\n    //         xy == 1 (mod m)\n    //         xy =  1+km\n    //   xy(2-xy) = (1+km)(1-km)\n    // x[y(2-xy)] = 1-k^2m^2\n    // x[y(2-xy)] == 1 (mod m^2)\n    // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n    // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n    // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n    function bnpInvDigit() {\n      if(this.t < 1) return 0;\n      var x = this[0];\n      if((x&1) == 0) return 0;\n      var y = x&3;       // y == 1/x mod 2^2\n      y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4\n      y = (y*(2-(x&0xff)*y))&0xff;   // y == 1/x mod 2^8\n      y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;    // y == 1/x mod 2^16\n      // last step - calculate inverse mod DV directly;\n      // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n      y = (y*(2-x*y%this.DV))%this.DV;       // y == 1/x mod 2^dbits\n      // we really want the negative inverse, and -DV < y < DV\n      return (y>0)?this.DV-y:-y;\n    }\n\n    // Montgomery reduction\n    function Montgomery(m) {\n      this.m = m;\n      this.mp = m.invDigit();\n      this.mpl = this.mp&0x7fff;\n      this.mph = this.mp>>15;\n      this.um = (1<<(m.DB-15))-1;\n      this.mt2 = 2*m.t;\n    }\n\n    // xR mod m\n    function montConvert(x) {\n      var r = nbi();\n      x.abs().dlShiftTo(this.m.t,r);\n      r.divRemTo(this.m,null,r);\n      if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);\n      return r;\n    }\n\n    // x/R mod m\n    function montRevert(x) {\n      var r = nbi();\n      x.copyTo(r);\n      this.reduce(r);\n      return r;\n    }\n\n    // x = x/R mod m (HAC 14.32)\n    function montReduce(x) {\n      while(x.t <= this.mt2) // pad x so am has enough room later\n        x[x.t++] = 0;\n      for(var i = 0; i < this.m.t; ++i) {\n        // faster way of calculating u0 = x[i]*mp mod DV\n        var j = x[i]&0x7fff;\n        var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;\n        // use am to combine the multiply-shift-add into one call\n        j = i+this.m.t;\n        x[j] += this.m.am(0,u0,x,i,0,this.m.t);\n        // propagate carry\n        while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }\n      }\n      x.clamp();\n      x.drShiftTo(this.m.t,x);\n      if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n    }\n\n    // r = \"x^2/R mod m\"; x != r\n    function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n    // r = \"xy/R mod m\"; x,y != r\n    function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\n    Montgomery.prototype.convert = montConvert;\n    Montgomery.prototype.revert = montRevert;\n    Montgomery.prototype.reduce = montReduce;\n    Montgomery.prototype.mulTo = montMulTo;\n    Montgomery.prototype.sqrTo = montSqrTo;\n\n    // (protected) true iff this is even\n    function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }\n\n    // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n    function bnpExp(e,z) {\n      if(e > 0xffffffff || e < 1) return BigInteger.ONE;\n      var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;\n      g.copyTo(r);\n      while(--i >= 0) {\n        z.sqrTo(r,r2);\n        if((e&(1<<i)) > 0) z.mulTo(r2,g,r);\n        else { var t = r; r = r2; r2 = t; }\n      }\n      return z.revert(r);\n    }\n\n    // (public) this^e % m, 0 <= e < 2^32\n    function bnModPowInt(e,m) {\n      var z;\n      if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);\n      return this.exp(e,z);\n    }\n\n    // protected\n    BigInteger.prototype.copyTo = bnpCopyTo;\n    BigInteger.prototype.fromInt = bnpFromInt;\n    BigInteger.prototype.fromString = bnpFromString;\n    BigInteger.prototype.clamp = bnpClamp;\n    BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n    BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n    BigInteger.prototype.lShiftTo = bnpLShiftTo;\n    BigInteger.prototype.rShiftTo = bnpRShiftTo;\n    BigInteger.prototype.subTo = bnpSubTo;\n    BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n    BigInteger.prototype.squareTo = bnpSquareTo;\n    BigInteger.prototype.divRemTo = bnpDivRemTo;\n    BigInteger.prototype.invDigit = bnpInvDigit;\n    BigInteger.prototype.isEven = bnpIsEven;\n    BigInteger.prototype.exp = bnpExp;\n\n    // public\n    BigInteger.prototype.toString = bnToString;\n    BigInteger.prototype.negate = bnNegate;\n    BigInteger.prototype.abs = bnAbs;\n    BigInteger.prototype.compareTo = bnCompareTo;\n    BigInteger.prototype.bitLength = bnBitLength;\n    BigInteger.prototype.mod = bnMod;\n    BigInteger.prototype.modPowInt = bnModPowInt;\n\n    // \"constants\"\n    BigInteger.ZERO = nbv(0);\n    BigInteger.ONE = nbv(1);\n\n    // Copyright (c) 2005-2009  Tom Wu\n    // All Rights Reserved.\n    // See \"LICENSE\" for details.\n\n    // Extended JavaScript BN functions, required for RSA private ops.\n\n    // Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\n    // Version 1.2: square() API, isProbablePrime fix\n\n    // (public)\n    function bnClone() { var r = nbi(); this.copyTo(r); return r; }\n\n    // (public) return value as integer\n    function bnIntValue() {\n      if(this.s < 0) {\n        if(this.t == 1) return this[0]-this.DV;\n        else if(this.t == 0) return -1;\n      }\n      else if(this.t == 1) return this[0];\n      else if(this.t == 0) return 0;\n      // assumes 16 < DB < 32\n      return ((this[1]&((1<<(32-this.DB))-1))<<this.DB)|this[0];\n    }\n\n    // (public) return value as byte\n    function bnByteValue() { return (this.t==0)?this.s:(this[0]<<24)>>24; }\n\n    // (public) return value as short (assumes DB>=16)\n    function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }\n\n    // (protected) return x s.t. r^x < DV\n    function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }\n\n    // (public) 0 if this == 0, 1 if this > 0\n    function bnSigNum() {\n      if(this.s < 0) return -1;\n      else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;\n      else return 1;\n    }\n\n    // (protected) convert to radix string\n    function bnpToRadix(b) {\n      if(b == null) b = 10;\n      if(this.signum() == 0 || b < 2 || b > 36) return \"0\";\n      var cs = this.chunkSize(b);\n      var a = Math.pow(b,cs);\n      var d = nbv(a), y = nbi(), z = nbi(), r = \"\";\n      this.divRemTo(d,y,z);\n      while(y.signum() > 0) {\n        r = (a+z.intValue()).toString(b).substr(1) + r;\n        y.divRemTo(d,y,z);\n      }\n      return z.intValue().toString(b) + r;\n    }\n\n    // (protected) convert from radix string\n    function bnpFromRadix(s,b) {\n      this.fromInt(0);\n      if(b == null) b = 10;\n      var cs = this.chunkSize(b);\n      var d = Math.pow(b,cs), mi = false, j = 0, w = 0;\n      for(var i = 0; i < s.length; ++i) {\n        var x = intAt(s,i);\n        if(x < 0) {\n          if(s.charAt(i) == \"-\" && this.signum() == 0) mi = true;\n          continue;\n        }\n        w = b*w+x;\n        if(++j >= cs) {\n          this.dMultiply(d);\n          this.dAddOffset(w,0);\n          j = 0;\n          w = 0;\n        }\n      }\n      if(j > 0) {\n        this.dMultiply(Math.pow(b,j));\n        this.dAddOffset(w,0);\n      }\n      if(mi) BigInteger.ZERO.subTo(this,this);\n    }\n\n    // (protected) alternate constructor\n    function bnpFromNumber(a,b,c) {\n      if(\"number\" == typeof b) {\n        // new BigInteger(int,int,RNG)\n        if(a < 2) this.fromInt(1);\n        else {\n          this.fromNumber(a,c);\n          if(!this.testBit(a-1))\t// force MSB set\n            this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);\n          if(this.isEven()) this.dAddOffset(1,0); // force odd\n          while(!this.isProbablePrime(b)) {\n            this.dAddOffset(2,0);\n            if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);\n          }\n        }\n      }\n      else {\n        // new BigInteger(int,RNG)\n        var x = new Array(), t = a&7;\n        x.length = (a>>3)+1;\n        b.nextBytes(x);\n        if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;\n        this.fromString(x,256);\n      }\n    }\n\n    // (public) convert to bigendian byte array\n    function bnToByteArray() {\n      var i = this.t, r = new Array();\n      r[0] = this.s;\n      var p = this.DB-(i*this.DB)%8, d, k = 0;\n      if(i-- > 0) {\n        if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p)\n          r[k++] = d|(this.s<<(this.DB-p));\n        while(i >= 0) {\n          if(p < 8) {\n            d = (this[i]&((1<<p)-1))<<(8-p);\n            d |= this[--i]>>(p+=this.DB-8);\n          }\n          else {\n            d = (this[i]>>(p-=8))&0xff;\n            if(p <= 0) { p += this.DB; --i; }\n          }\n          if((d&0x80) != 0) d |= -256;\n          if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;\n          if(k > 0 || d != this.s) r[k++] = d;\n        }\n      }\n      return r;\n    }\n\n    function bnEquals(a) { return(this.compareTo(a)==0); }\n    function bnMin(a) { return(this.compareTo(a)<0)?this:a; }\n    function bnMax(a) { return(this.compareTo(a)>0)?this:a; }\n\n    // (protected) r = this op a (bitwise)\n    function bnpBitwiseTo(a,op,r) {\n      var i, f, m = Math.min(a.t,this.t);\n      for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]);\n      if(a.t < this.t) {\n        f = a.s&this.DM;\n        for(i = m; i < this.t; ++i) r[i] = op(this[i],f);\n        r.t = this.t;\n      }\n      else {\n        f = this.s&this.DM;\n        for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);\n        r.t = a.t;\n      }\n      r.s = op(this.s,a.s);\n      r.clamp();\n    }\n\n    // (public) this & a\n    function op_and(x,y) { return x&y; }\n    function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }\n\n    // (public) this | a\n    function op_or(x,y) { return x|y; }\n    function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }\n\n    // (public) this ^ a\n    function op_xor(x,y) { return x^y; }\n    function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }\n\n    // (public) this & ~a\n    function op_andnot(x,y) { return x&~y; }\n    function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }\n\n    // (public) ~this\n    function bnNot() {\n      var r = nbi();\n      for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];\n      r.t = this.t;\n      r.s = ~this.s;\n      return r;\n    }\n\n    // (public) this << n\n    function bnShiftLeft(n) {\n      var r = nbi();\n      if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);\n      return r;\n    }\n\n    // (public) this >> n\n    function bnShiftRight(n) {\n      var r = nbi();\n      if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);\n      return r;\n    }\n\n    // return index of lowest 1-bit in x, x < 2^31\n    function lbit(x) {\n      if(x == 0) return -1;\n      var r = 0;\n      if((x&0xffff) == 0) { x >>= 16; r += 16; }\n      if((x&0xff) == 0) { x >>= 8; r += 8; }\n      if((x&0xf) == 0) { x >>= 4; r += 4; }\n      if((x&3) == 0) { x >>= 2; r += 2; }\n      if((x&1) == 0) ++r;\n      return r;\n    }\n\n    // (public) returns index of lowest 1-bit (or -1 if none)\n    function bnGetLowestSetBit() {\n      for(var i = 0; i < this.t; ++i)\n        if(this[i] != 0) return i*this.DB+lbit(this[i]);\n      if(this.s < 0) return this.t*this.DB;\n      return -1;\n    }\n\n    // return number of 1 bits in x\n    function cbit(x) {\n      var r = 0;\n      while(x != 0) { x &= x-1; ++r; }\n      return r;\n    }\n\n    // (public) return number of set bits\n    function bnBitCount() {\n      var r = 0, x = this.s&this.DM;\n      for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);\n      return r;\n    }\n\n    // (public) true iff nth bit is set\n    function bnTestBit(n) {\n      var j = Math.floor(n/this.DB);\n      if(j >= this.t) return(this.s!=0);\n      return((this[j]&(1<<(n%this.DB)))!=0);\n    }\n\n    // (protected) this op (1<<n)\n    function bnpChangeBit(n,op) {\n      var r = BigInteger.ONE.shiftLeft(n);\n      this.bitwiseTo(r,op,r);\n      return r;\n    }\n\n    // (public) this | (1<<n)\n    function bnSetBit(n) { return this.changeBit(n,op_or); }\n\n    // (public) this & ~(1<<n)\n    function bnClearBit(n) { return this.changeBit(n,op_andnot); }\n\n    // (public) this ^ (1<<n)\n    function bnFlipBit(n) { return this.changeBit(n,op_xor); }\n\n    // (protected) r = this + a\n    function bnpAddTo(a,r) {\n      var i = 0, c = 0, m = Math.min(a.t,this.t);\n      while(i < m) {\n        c += this[i]+a[i];\n        r[i++] = c&this.DM;\n        c >>= this.DB;\n      }\n      if(a.t < this.t) {\n        c += a.s;\n        while(i < this.t) {\n          c += this[i];\n          r[i++] = c&this.DM;\n          c >>= this.DB;\n        }\n        c += this.s;\n      }\n      else {\n        c += this.s;\n        while(i < a.t) {\n          c += a[i];\n          r[i++] = c&this.DM;\n          c >>= this.DB;\n        }\n        c += a.s;\n      }\n      r.s = (c<0)?-1:0;\n      if(c > 0) r[i++] = c;\n      else if(c < -1) r[i++] = this.DV+c;\n      r.t = i;\n      r.clamp();\n    }\n\n    // (public) this + a\n    function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }\n\n    // (public) this - a\n    function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }\n\n    // (public) this * a\n    function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }\n\n    // (public) this^2\n    function bnSquare() { var r = nbi(); this.squareTo(r); return r; }\n\n    // (public) this / a\n    function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }\n\n    // (public) this % a\n    function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }\n\n    // (public) [this/a,this%a]\n    function bnDivideAndRemainder(a) {\n      var q = nbi(), r = nbi();\n      this.divRemTo(a,q,r);\n      return new Array(q,r);\n    }\n\n    // (protected) this *= n, this >= 0, 1 < n < DV\n    function bnpDMultiply(n) {\n      this[this.t] = this.am(0,n-1,this,0,0,this.t);\n      ++this.t;\n      this.clamp();\n    }\n\n    // (protected) this += n << w words, this >= 0\n    function bnpDAddOffset(n,w) {\n      if(n == 0) return;\n      while(this.t <= w) this[this.t++] = 0;\n      this[w] += n;\n      while(this[w] >= this.DV) {\n        this[w] -= this.DV;\n        if(++w >= this.t) this[this.t++] = 0;\n        ++this[w];\n      }\n    }\n\n    // A \"null\" reducer\n    function NullExp() {}\n    function nNop(x) { return x; }\n    function nMulTo(x,y,r) { x.multiplyTo(y,r); }\n    function nSqrTo(x,r) { x.squareTo(r); }\n\n    NullExp.prototype.convert = nNop;\n    NullExp.prototype.revert = nNop;\n    NullExp.prototype.mulTo = nMulTo;\n    NullExp.prototype.sqrTo = nSqrTo;\n\n    // (public) this^e\n    function bnPow(e) { return this.exp(e,new NullExp()); }\n\n    // (protected) r = lower n words of \"this * a\", a.t <= n\n    // \"this\" should be the larger one if appropriate.\n    function bnpMultiplyLowerTo(a,n,r) {\n      var i = Math.min(this.t+a.t,n);\n      r.s = 0; // assumes a,this >= 0\n      r.t = i;\n      while(i > 0) r[--i] = 0;\n      var j;\n      for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t);\n      for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i);\n      r.clamp();\n    }\n\n    // (protected) r = \"this * a\" without lower n words, n > 0\n    // \"this\" should be the larger one if appropriate.\n    function bnpMultiplyUpperTo(a,n,r) {\n      --n;\n      var i = r.t = this.t+a.t-n;\n      r.s = 0; // assumes a,this >= 0\n      while(--i >= 0) r[i] = 0;\n      for(i = Math.max(n-this.t,0); i < a.t; ++i)\n        r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n);\n      r.clamp();\n      r.drShiftTo(1,r);\n    }\n\n    // Barrett modular reduction\n    function Barrett(m) {\n      // setup Barrett\n      this.r2 = nbi();\n      this.q3 = nbi();\n      BigInteger.ONE.dlShiftTo(2*m.t,this.r2);\n      this.mu = this.r2.divide(m);\n      this.m = m;\n    }\n\n    function barrettConvert(x) {\n      if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);\n      else if(x.compareTo(this.m) < 0) return x;\n      else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }\n    }\n\n    function barrettRevert(x) { return x; }\n\n    // x = x mod m (HAC 14.42)\n    function barrettReduce(x) {\n      x.drShiftTo(this.m.t-1,this.r2);\n      if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }\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(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);\n      x.subTo(this.r2,x);\n      while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n    }\n\n    // r = x^2 mod m; x != r\n    function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n    // r = x*y mod m; x,y != r\n    function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\n    Barrett.prototype.convert = barrettConvert;\n    Barrett.prototype.revert = barrettRevert;\n    Barrett.prototype.reduce = barrettReduce;\n    Barrett.prototype.mulTo = barrettMulTo;\n    Barrett.prototype.sqrTo = barrettSqrTo;\n\n    // (public) this^e % m (HAC 14.85)\n    function bnModPow(e,m) {\n      var i = e.bitLength(), k, r = nbv(1), z;\n      if(i <= 0) return r;\n      else if(i < 18) k = 1;\n      else if(i < 48) k = 3;\n      else if(i < 144) k = 4;\n      else if(i < 768) k = 5;\n      else k = 6;\n      if(i < 8)\n        z = new Classic(m);\n      else if(m.isEven())\n        z = new Barrett(m);\n      else\n        z = new Montgomery(m);\n\n      // precomputation\n      var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;\n      g[1] = z.convert(this);\n      if(k > 1) {\n        var g2 = nbi();\n        z.sqrTo(g[1],g2);\n        while(n <= km) {\n          g[n] = nbi();\n          z.mulTo(g2,g[n-2],g[n]);\n          n += 2;\n        }\n      }\n\n      var j = e.t-1, w, is1 = true, r2 = nbi(), t;\n      i = nbits(e[j])-1;\n      while(j >= 0) {\n        if(i >= k1) w = (e[j]>>(i-k1))&km;\n        else {\n          w = (e[j]&((1<<(i+1))-1))<<(k1-i);\n          if(j > 0) w |= e[j-1]>>(this.DB+i-k1);\n        }\n\n        n = k;\n        while((w&1) == 0) { w >>= 1; --n; }\n        if((i -= n) < 0) { i += this.DB; --j; }\n        if(is1) {\t// ret == 1, don't bother squaring or multiplying it\n          g[w].copyTo(r);\n          is1 = false;\n        }\n        else {\n          while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }\n          if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }\n          z.mulTo(r2,g[w],r);\n        }\n\n        while(j >= 0 && (e[j]&(1<<i)) == 0) {\n          z.sqrTo(r,r2); t = r; r = r2; r2 = t;\n          if(--i < 0) { i = this.DB-1; --j; }\n        }\n      }\n      return z.revert(r);\n    }\n\n    // (public) gcd(this,a) (HAC 14.54)\n    function bnGCD(a) {\n      var x = (this.s<0)?this.negate():this.clone();\n      var y = (a.s<0)?a.negate():a.clone();\n      if(x.compareTo(y) < 0) { var t = x; x = y; y = t; }\n      var i = x.getLowestSetBit(), g = y.getLowestSetBit();\n      if(g < 0) return x;\n      if(i < g) g = i;\n      if(g > 0) {\n        x.rShiftTo(g,x);\n        y.rShiftTo(g,y);\n      }\n      while(x.signum() > 0) {\n        if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);\n        if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);\n        if(x.compareTo(y) >= 0) {\n          x.subTo(y,x);\n          x.rShiftTo(1,x);\n        }\n        else {\n          y.subTo(x,y);\n          y.rShiftTo(1,y);\n        }\n      }\n      if(g > 0) y.lShiftTo(g,y);\n      return y;\n    }\n\n    // (protected) this % n, n < 2^26\n    function bnpModInt(n) {\n      if(n <= 0) return 0;\n      var d = this.DV%n, r = (this.s<0)?n-1:0;\n      if(this.t > 0)\n        if(d == 0) r = this[0]%n;\n        else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n;\n      return r;\n    }\n\n    // (public) 1/this % m (HAC 14.61)\n    function bnModInverse(m) {\n      var ac = m.isEven();\n      if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\n      var u = m.clone(), v = this.clone();\n      var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\n      while(u.signum() != 0) {\n        while(u.isEven()) {\n          u.rShiftTo(1,u);\n          if(ac) {\n            if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }\n            a.rShiftTo(1,a);\n          }\n          else if(!b.isEven()) b.subTo(m,b);\n          b.rShiftTo(1,b);\n        }\n        while(v.isEven()) {\n          v.rShiftTo(1,v);\n          if(ac) {\n            if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }\n            c.rShiftTo(1,c);\n          }\n          else if(!d.isEven()) d.subTo(m,d);\n          d.rShiftTo(1,d);\n        }\n        if(u.compareTo(v) >= 0) {\n          u.subTo(v,u);\n          if(ac) a.subTo(c,a);\n          b.subTo(d,b);\n        }\n        else {\n          v.subTo(u,v);\n          if(ac) c.subTo(a,c);\n          d.subTo(b,d);\n        }\n      }\n      if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\n      if(d.compareTo(m) >= 0) return d.subtract(m);\n      if(d.signum() < 0) d.addTo(m,d); else return d;\n      if(d.signum() < 0) return d.add(m); else return d;\n    }\n\n    var 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];\n    var lplim = (1<<26)/lowprimes[lowprimes.length-1];\n\n    // (public) test primality with certainty >= 1-.5^t\n    function bnIsProbablePrime(t) {\n      var i, x = this.abs();\n      if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) {\n        for(i = 0; i < lowprimes.length; ++i)\n          if(x[0] == lowprimes[i]) return true;\n        return false;\n      }\n      if(x.isEven()) return false;\n      i = 1;\n      while(i < lowprimes.length) {\n        var m = lowprimes[i], j = i+1;\n        while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];\n        m = x.modInt(m);\n        while(i < j) if(m%lowprimes[i++] == 0) return false;\n      }\n      return x.millerRabin(t);\n    }\n\n    // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n    function bnpMillerRabin(t) {\n      var n1 = this.subtract(BigInteger.ONE);\n      var k = n1.getLowestSetBit();\n      if(k <= 0) return false;\n      var r = n1.shiftRight(k);\n      t = (t+1)>>1;\n      if(t > lowprimes.length) t = lowprimes.length;\n      var a = nbi();\n      for(var i = 0; i < t; ++i) {\n        //Pick bases at random, instead of starting at 2\n        a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);\n        var y = a.modPow(r,this);\n        if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n          var j = 1;\n          while(j++ < k && y.compareTo(n1) != 0) {\n            y = y.modPowInt(2,this);\n            if(y.compareTo(BigInteger.ONE) == 0) return false;\n          }\n          if(y.compareTo(n1) != 0) return false;\n        }\n      }\n      return true;\n    }\n\n    // protected\n    BigInteger.prototype.chunkSize = bnpChunkSize;\n    BigInteger.prototype.toRadix = bnpToRadix;\n    BigInteger.prototype.fromRadix = bnpFromRadix;\n    BigInteger.prototype.fromNumber = bnpFromNumber;\n    BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n    BigInteger.prototype.changeBit = bnpChangeBit;\n    BigInteger.prototype.addTo = bnpAddTo;\n    BigInteger.prototype.dMultiply = bnpDMultiply;\n    BigInteger.prototype.dAddOffset = bnpDAddOffset;\n    BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n    BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n    BigInteger.prototype.modInt = bnpModInt;\n    BigInteger.prototype.millerRabin = bnpMillerRabin;\n\n    // public\n    BigInteger.prototype.clone = bnClone;\n    BigInteger.prototype.intValue = bnIntValue;\n    BigInteger.prototype.byteValue = bnByteValue;\n    BigInteger.prototype.shortValue = bnShortValue;\n    BigInteger.prototype.signum = bnSigNum;\n    BigInteger.prototype.toByteArray = bnToByteArray;\n    BigInteger.prototype.equals = bnEquals;\n    BigInteger.prototype.min = bnMin;\n    BigInteger.prototype.max = bnMax;\n    BigInteger.prototype.and = bnAnd;\n    BigInteger.prototype.or = bnOr;\n    BigInteger.prototype.xor = bnXor;\n    BigInteger.prototype.andNot = bnAndNot;\n    BigInteger.prototype.not = bnNot;\n    BigInteger.prototype.shiftLeft = bnShiftLeft;\n    BigInteger.prototype.shiftRight = bnShiftRight;\n    BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n    BigInteger.prototype.bitCount = bnBitCount;\n    BigInteger.prototype.testBit = bnTestBit;\n    BigInteger.prototype.setBit = bnSetBit;\n    BigInteger.prototype.clearBit = bnClearBit;\n    BigInteger.prototype.flipBit = bnFlipBit;\n    BigInteger.prototype.add = bnAdd;\n    BigInteger.prototype.subtract = bnSubtract;\n    BigInteger.prototype.multiply = bnMultiply;\n    BigInteger.prototype.divide = bnDivide;\n    BigInteger.prototype.remainder = bnRemainder;\n    BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\n    BigInteger.prototype.modPow = bnModPow;\n    BigInteger.prototype.modInverse = bnModInverse;\n    BigInteger.prototype.pow = bnPow;\n    BigInteger.prototype.gcd = bnGCD;\n    BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n\n    // JSBN-specific extension\n    BigInteger.prototype.square = bnSquare;\n\n    // Expose the Barrett function\n    BigInteger.prototype.Barrett = Barrett\n\n    // BigInteger interfaces not implemented in jsbn:\n\n    // BigInteger(int signum, byte[] magnitude)\n    // double doubleValue()\n    // float floatValue()\n    // int hashCode()\n    // long longValue()\n    // static BigInteger valueOf(long val)\n\n\t// Random number generator - requires a PRNG backend, e.g. prng4.js\n\n\t// For best results, put code like\n\t// <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>\n\t// in your main HTML document.\n\n\tvar rng_state;\n\tvar rng_pool;\n\tvar rng_pptr;\n\n\t// Mix in a 32-bit integer into the pool\n\tfunction rng_seed_int(x) {\n\t  rng_pool[rng_pptr++] ^= x & 255;\n\t  rng_pool[rng_pptr++] ^= (x >> 8) & 255;\n\t  rng_pool[rng_pptr++] ^= (x >> 16) & 255;\n\t  rng_pool[rng_pptr++] ^= (x >> 24) & 255;\n\t  if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;\n\t}\n\n\t// Mix in the current time (w/milliseconds) into the pool\n\tfunction rng_seed_time() {\n\t  rng_seed_int(new Date().getTime());\n\t}\n\n\t// Initialize the pool with junk if needed.\n\tif(rng_pool == null) {\n\t  rng_pool = new Array();\n\t  rng_pptr = 0;\n\t  var t;\n\t  if(typeof window !== \"undefined\" && window.crypto) {\n\t\tif (window.crypto.getRandomValues) {\n\t\t  // Use webcrypto if available\n\t\t  var ua = new Uint8Array(32);\n\t\t  window.crypto.getRandomValues(ua);\n\t\t  for(t = 0; t < 32; ++t)\n\t\t\trng_pool[rng_pptr++] = ua[t];\n\t\t}\n\t\telse if(navigator.appName == \"Netscape\" && navigator.appVersion < \"5\") {\n\t\t  // Extract entropy (256 bits) from NS4 RNG if available\n\t\t  var z = window.crypto.random(32);\n\t\t  for(t = 0; t < z.length; ++t)\n\t\t\trng_pool[rng_pptr++] = z.charCodeAt(t) & 255;\n\t\t}\n\t  }\n\t  while(rng_pptr < rng_psize) {  // extract some randomness from Math.random()\n\t\tt = Math.floor(65536 * Math.random());\n\t\trng_pool[rng_pptr++] = t >>> 8;\n\t\trng_pool[rng_pptr++] = t & 255;\n\t  }\n\t  rng_pptr = 0;\n\t  rng_seed_time();\n\t  //rng_seed_int(window.screenX);\n\t  //rng_seed_int(window.screenY);\n\t}\n\n\tfunction rng_get_byte() {\n\t  if(rng_state == null) {\n\t\trng_seed_time();\n\t\trng_state = prng_newstate();\n\t\trng_state.init(rng_pool);\n\t\tfor(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)\n\t\t  rng_pool[rng_pptr] = 0;\n\t\trng_pptr = 0;\n\t\t//rng_pool = null;\n\t  }\n\t  // TODO: allow reseeding after first request\n\t  return rng_state.next();\n\t}\n\n\tfunction rng_get_bytes(ba) {\n\t  var i;\n\t  for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();\n\t}\n\n\tfunction SecureRandom() {}\n\n\tSecureRandom.prototype.nextBytes = rng_get_bytes;\n\n\t// prng4.js - uses Arcfour as a PRNG\n\n\tfunction Arcfour() {\n\t  this.i = 0;\n\t  this.j = 0;\n\t  this.S = new Array();\n\t}\n\n\t// Initialize arcfour context from key, an array of ints, each from [0..255]\n\tfunction ARC4init(key) {\n\t  var i, j, t;\n\t  for(i = 0; i < 256; ++i)\n\t\tthis.S[i] = i;\n\t  j = 0;\n\t  for(i = 0; i < 256; ++i) {\n\t\tj = (j + this.S[i] + key[i % key.length]) & 255;\n\t\tt = this.S[i];\n\t\tthis.S[i] = this.S[j];\n\t\tthis.S[j] = t;\n\t  }\n\t  this.i = 0;\n\t  this.j = 0;\n\t}\n\n\tfunction ARC4next() {\n\t  var t;\n\t  this.i = (this.i + 1) & 255;\n\t  this.j = (this.j + this.S[this.i]) & 255;\n\t  t = this.S[this.i];\n\t  this.S[this.i] = this.S[this.j];\n\t  this.S[this.j] = t;\n\t  return this.S[(t + this.S[this.i]) & 255];\n\t}\n\n\tArcfour.prototype.init = ARC4init;\n\tArcfour.prototype.next = ARC4next;\n\n\t// Plug in your RNG constructor here\n\tfunction prng_newstate() {\n\t  return new Arcfour();\n\t}\n\n\t// Pool size must be a multiple of 4 and greater than 32.\n\t// An array of bytes the size of the pool will be passed to init()\n\tvar rng_psize = 256;\n\n  BigInteger.SecureRandom = SecureRandom;\n  BigInteger.BigInteger = BigInteger;\n  if (typeof exports !== 'undefined') {\n    exports = module.exports = BigInteger;\n  } else {\n    this.BigInteger = BigInteger;\n    this.SecureRandom = SecureRandom;\n  }\n\n}).call(this);\n","// Basic Javascript Elliptic Curve implementation\n// Ported loosely from BouncyCastle's Java EC code\n// Only Fp curves implemented for now\n\n// Requires jsbn.js and jsbn2.js\nvar BigInteger = require('jsbn').BigInteger\nvar Barrett = BigInteger.prototype.Barrett\n\n// ----------------\n// ECFieldElementFp\n\n// constructor\nfunction ECFieldElementFp(q,x) {\n    this.x = x;\n    // TODO if(x.compareTo(q) >= 0) error\n    this.q = q;\n}\n\nfunction feFpEquals(other) {\n    if(other == this) return true;\n    return (this.q.equals(other.q) && this.x.equals(other.x));\n}\n\nfunction feFpToBigInteger() {\n    return this.x;\n}\n\nfunction feFpNegate() {\n    return new ECFieldElementFp(this.q, this.x.negate().mod(this.q));\n}\n\nfunction feFpAdd(b) {\n    return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q));\n}\n\nfunction feFpSubtract(b) {\n    return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q));\n}\n\nfunction feFpMultiply(b) {\n    return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q));\n}\n\nfunction feFpSquare() {\n    return new ECFieldElementFp(this.q, this.x.square().mod(this.q));\n}\n\nfunction feFpDivide(b) {\n    return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q));\n}\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;\n\n// ----------------\n// ECPointFp\n\n// constructor\nfunction ECPointFp(curve,x,y,z) {\n    this.curve = curve;\n    this.x = x;\n    this.y = y;\n    // Projective coordinates: either zinv == null or z * zinv == 1\n    // z and zinv are just BigIntegers, not fieldElements\n    if(z == null) {\n      this.z = BigInteger.ONE;\n    }\n    else {\n      this.z = z;\n    }\n    this.zinv = null;\n    //TODO: compression flag\n}\n\nfunction pointFpGetX() {\n    if(this.zinv == null) {\n      this.zinv = this.z.modInverse(this.curve.q);\n    }\n    var r = this.x.toBigInteger().multiply(this.zinv);\n    this.curve.reduce(r);\n    return this.curve.fromBigInteger(r);\n}\n\nfunction pointFpGetY() {\n    if(this.zinv == null) {\n      this.zinv = this.z.modInverse(this.curve.q);\n    }\n    var r = this.y.toBigInteger().multiply(this.zinv);\n    this.curve.reduce(r);\n    return this.curve.fromBigInteger(r);\n}\n\nfunction pointFpEquals(other) {\n    if(other == this) return true;\n    if(this.isInfinity()) return other.isInfinity();\n    if(other.isInfinity()) return this.isInfinity();\n    var u, v;\n    // u = Y2 * Z1 - Y1 * Z2\n    u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q);\n    if(!u.equals(BigInteger.ZERO)) return false;\n    // v = X2 * Z1 - X1 * Z2\n    v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q);\n    return v.equals(BigInteger.ZERO);\n}\n\nfunction pointFpIsInfinity() {\n    if((this.x == null) && (this.y == null)) return true;\n    return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO);\n}\n\nfunction pointFpNegate() {\n    return new ECPointFp(this.curve, this.x, this.y.negate(), this.z);\n}\n\nfunction pointFpAdd(b) {\n    if(this.isInfinity()) return b;\n    if(b.isInfinity()) return this;\n\n    // u = Y2 * Z1 - Y1 * Z2\n    var u = b.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(b.z)).mod(this.curve.q);\n    // v = X2 * Z1 - X1 * Z2\n    var v = b.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(b.z)).mod(this.curve.q);\n\n    if(BigInteger.ZERO.equals(v)) {\n        if(BigInteger.ZERO.equals(u)) {\n            return this.twice(); // this == b, so double\n        }\n\treturn this.curve.getInfinity(); // this = -b, so infinity\n    }\n\n    var THREE = new BigInteger(\"3\");\n    var x1 = this.x.toBigInteger();\n    var y1 = this.y.toBigInteger();\n    var x2 = b.x.toBigInteger();\n    var y2 = b.y.toBigInteger();\n\n    var v2 = v.square();\n    var v3 = v2.multiply(v);\n    var x1v2 = x1.multiply(v2);\n    var zu2 = u.square().multiply(this.z);\n\n    // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)\n    var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.q);\n    // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3\n    var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.q);\n    // z3 = v^3 * z1 * z2\n    var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.q);\n\n    return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);\n}\n\nfunction pointFpTwice() {\n    if(this.isInfinity()) return this;\n    if(this.y.toBigInteger().signum() == 0) return this.curve.getInfinity();\n\n    // TODO: optimized handling of constants\n    var THREE = new BigInteger(\"3\");\n    var x1 = this.x.toBigInteger();\n    var y1 = this.y.toBigInteger();\n\n    var y1z1 = y1.multiply(this.z);\n    var y1sqz1 = y1z1.multiply(y1).mod(this.curve.q);\n    var a = this.curve.a.toBigInteger();\n\n    // w = 3 * x1^2 + a * z1^2\n    var w = x1.square().multiply(THREE);\n    if(!BigInteger.ZERO.equals(a)) {\n      w = w.add(this.z.square().multiply(a));\n    }\n    w = w.mod(this.curve.q);\n    //this.curve.reduce(w);\n    // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)\n    var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.q);\n    // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3\n    var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.square().multiply(w)).mod(this.curve.q);\n    // z3 = 8 * (y1 * z1)^3\n    var z3 = y1z1.square().multiply(y1z1).shiftLeft(3).mod(this.curve.q);\n\n    return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);\n}\n\n// Simple NAF (Non-Adjacent Form) multiplication algorithm\n// TODO: modularize the multiplication algorithm\nfunction pointFpMultiply(k) {\n    if(this.isInfinity()) return this;\n    if(k.signum() == 0) return this.curve.getInfinity();\n\n    var e = k;\n    var h = e.multiply(new BigInteger(\"3\"));\n\n    var neg = this.negate();\n    var R = this;\n\n    var i;\n    for(i = h.bitLength() - 2; i > 0; --i) {\n\tR = R.twice();\n\n\tvar hBit = h.testBit(i);\n\tvar eBit = e.testBit(i);\n\n\tif (hBit != eBit) {\n\t    R = R.add(hBit ? this : neg);\n\t}\n    }\n\n    return R;\n}\n\n// Compute this*j + x*k (simultaneous multiplication)\nfunction pointFpMultiplyTwo(j,x,k) {\n  var i;\n  if(j.bitLength() > k.bitLength())\n    i = j.bitLength() - 1;\n  else\n    i = k.bitLength() - 1;\n\n  var R = this.curve.getInfinity();\n  var both = this.add(x);\n  while(i >= 0) {\n    R = R.twice();\n    if(j.testBit(i)) {\n      if(k.testBit(i)) {\n        R = R.add(both);\n      }\n      else {\n        R = R.add(this);\n      }\n    }\n    else {\n      if(k.testBit(i)) {\n        R = R.add(x);\n      }\n    }\n    --i;\n  }\n\n  return R;\n}\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;\n\n// ----------------\n// ECCurveFp\n\n// constructor\nfunction ECCurveFp(q,a,b) {\n    this.q = q;\n    this.a = this.fromBigInteger(a);\n    this.b = this.fromBigInteger(b);\n    this.infinity = new ECPointFp(this, null, null);\n    this.reducer = new Barrett(this.q);\n}\n\nfunction curveFpGetQ() {\n    return this.q;\n}\n\nfunction curveFpGetA() {\n    return this.a;\n}\n\nfunction curveFpGetB() {\n    return this.b;\n}\n\nfunction curveFpEquals(other) {\n    if(other == this) return true;\n    return(this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b));\n}\n\nfunction curveFpGetInfinity() {\n    return this.infinity;\n}\n\nfunction curveFpFromBigInteger(x) {\n    return new ECFieldElementFp(this.q, x);\n}\n\nfunction curveReduce(x) {\n    this.reducer.reduce(x);\n}\n\n// for now, work with hex strings because they're easier in JS\nfunction curveFpDecodePointHex(s) {\n    switch(parseInt(s.substr(0,2), 16)) { // first byte\n    case 0:\n\treturn this.infinity;\n    case 2:\n    case 3:\n\t// point compression not supported yet\n\treturn null;\n    case 4:\n    case 6:\n    case 7:\n\tvar len = (s.length - 2) / 2;\n\tvar xHex = s.substr(2, len);\n\tvar yHex = s.substr(len+2, len);\n\n\treturn new ECPointFp(this,\n\t\t\t     this.fromBigInteger(new BigInteger(xHex, 16)),\n\t\t\t     this.fromBigInteger(new BigInteger(yHex, 16)));\n\n    default: // unsupported\n\treturn null;\n    }\n}\n\nfunction curveFpEncodePointHex(p) {\n\tif (p.isInfinity()) return \"00\";\n\tvar xHex = p.getX().toBigInteger().toString(16);\n\tvar yHex = p.getY().toBigInteger().toString(16);\n\tvar oLen = this.getQ().toString(16).length;\n\tif ((oLen % 2) != 0) oLen++;\n\twhile (xHex.length < oLen) {\n\t\txHex = \"0\" + xHex;\n\t}\n\twhile (yHex.length < oLen) {\n\t\tyHex = \"0\" + yHex;\n\t}\n\treturn \"04\" + xHex + yHex;\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.reduce = curveReduce;\n//ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex;\nECCurveFp.prototype.encodePointHex = curveFpEncodePointHex;\n\n// from: https://github.com/kaielvin/jsbn-ec-point-compression\nECCurveFp.prototype.decodePointHex = function(s)\n{\n\tvar yIsEven;\n    switch(parseInt(s.substr(0,2), 16)) { // first byte\n    case 0:\n\treturn this.infinity;\n    case 2:\n\tyIsEven = false;\n    case 3:\n\tif(yIsEven == undefined) yIsEven = true;\n\tvar len = s.length - 2;\n\tvar xHex = s.substr(2, len);\n\tvar x = this.fromBigInteger(new BigInteger(xHex,16));\n\tvar alpha = x.multiply(x.square().add(this.getA())).add(this.getB());\n\tvar beta = alpha.sqrt();\n\n    if (beta == null) throw \"Invalid point compression\";\n\n    var betaValue = beta.toBigInteger();\n    if (betaValue.testBit(0) != yIsEven)\n    {\n        // Use the other root\n        beta = this.fromBigInteger(this.getQ().subtract(betaValue));\n    }\n    return new ECPointFp(this,x,beta);\n    case 4:\n    case 6:\n    case 7:\n\tvar len = (s.length - 2) / 2;\n\tvar xHex = s.substr(2, len);\n\tvar yHex = s.substr(len+2, len);\n\n\treturn new ECPointFp(this,\n\t\t\t     this.fromBigInteger(new BigInteger(xHex, 16)),\n\t\t\t     this.fromBigInteger(new BigInteger(yHex, 16)));\n\n    default: // unsupported\n\treturn null;\n    }\n}\nECCurveFp.prototype.encodeCompressedPointHex = function(p)\n{\n\tif (p.isInfinity()) return \"00\";\n\tvar xHex = p.getX().toBigInteger().toString(16);\n\tvar oLen = this.getQ().toString(16).length;\n\tif ((oLen % 2) != 0) oLen++;\n\twhile (xHex.length < oLen)\n\t\txHex = \"0\" + xHex;\n\tvar yPrefix;\n\tif(p.getY().toBigInteger().isEven()) yPrefix = \"02\";\n\telse                                 yPrefix = \"03\";\n\n\treturn yPrefix + xHex;\n}\n\n\nECFieldElementFp.prototype.getR = function()\n{\n\tif(this.r != undefined) return this.r;\n\n    this.r = null;\n    var bitLength = this.q.bitLength();\n    if (bitLength > 128)\n    {\n        var firstWord = this.q.shiftRight(bitLength - 64);\n        if (firstWord.intValue() == -1)\n        {\n            this.r = BigInteger.ONE.shiftLeft(bitLength).subtract(this.q);\n        }\n    }\n    return this.r;\n}\nECFieldElementFp.prototype.modMult = function(x1,x2)\n{\n    return this.modReduce(x1.multiply(x2));\n}\nECFieldElementFp.prototype.modReduce = function(x)\n{\n    if (this.getR() != null)\n    {\n        var qLen = q.bitLength();\n        while (x.bitLength() > (qLen + 1))\n        {\n            var u = x.shiftRight(qLen);\n            var v = x.subtract(u.shiftLeft(qLen));\n            if (!this.getR().equals(BigInteger.ONE))\n            {\n                u = u.multiply(this.getR());\n            }\n            x = u.add(v); \n        }\n        while (x.compareTo(q) >= 0)\n        {\n            x = x.subtract(q);\n        }\n    }\n    else\n    {\n        x = x.mod(q);\n    }\n    return x;\n}\nECFieldElementFp.prototype.sqrt = function()\n{\n    if (!this.q.testBit(0)) throw \"unsupported\";\n\n    // p mod 4 == 3\n    if (this.q.testBit(1))\n    {\n    \tvar z = new ECFieldElementFp(this.q,this.x.modPow(this.q.shiftRight(2).add(BigInteger.ONE),this.q));\n    \treturn z.square().equals(this) ? z : null;\n    }\n\n    // p mod 4 == 1\n    var qMinusOne = this.q.subtract(BigInteger.ONE);\n\n    var legendreExponent = qMinusOne.shiftRight(1);\n    if (!(this.x.modPow(legendreExponent, this.q).equals(BigInteger.ONE)))\n    {\n        return null;\n    }\n\n    var u = qMinusOne.shiftRight(2);\n    var k = u.shiftLeft(1).add(BigInteger.ONE);\n\n    var Q = this.x;\n    var fourQ = modDouble(modDouble(Q));\n\n    var U, V;\n    do\n    {\n        var P;\n        do\n        {\n            P = new BigInteger(this.q.bitLength(), new SecureRandom());\n        }\n        while (P.compareTo(this.q) >= 0\n            || !(P.multiply(P).subtract(fourQ).modPow(legendreExponent, this.q).equals(qMinusOne)));\n\n        var result = this.lucasSequence(P, Q, k);\n        U = result[0];\n        V = result[1];\n\n        if (this.modMult(V, V).equals(fourQ))\n        {\n            // Integer division by 2, mod q\n            if (V.testBit(0))\n            {\n                V = V.add(q);\n            }\n\n            V = V.shiftRight(1);\n\n            return new ECFieldElementFp(q,V);\n        }\n    }\n    while (U.equals(BigInteger.ONE) || U.equals(qMinusOne));\n\n    return null;\n}\nECFieldElementFp.prototype.lucasSequence = function(P,Q,k)\n{\n    var n = k.bitLength();\n    var s = k.getLowestSetBit();\n\n    var Uh = BigInteger.ONE;\n    var Vl = BigInteger.TWO;\n    var Vh = P;\n    var Ql = BigInteger.ONE;\n    var Qh = BigInteger.ONE;\n\n    for (var j = n - 1; j >= s + 1; --j)\n    {\n        Ql = this.modMult(Ql, Qh);\n\n        if (k.testBit(j))\n        {\n            Qh = this.modMult(Ql, Q);\n            Uh = this.modMult(Uh, Vh);\n            Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));\n            Vh = this.modReduce(Vh.multiply(Vh).subtract(Qh.shiftLeft(1)));\n        }\n        else\n        {\n            Qh = Ql;\n            Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql));\n            Vh = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));\n            Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1)));\n        }\n    }\n\n    Ql = this.modMult(Ql, Qh);\n    Qh = this.modMult(Ql, Q);\n    Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql));\n    Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));\n    Ql = this.modMult(Ql, Qh);\n\n    for (var j = 1; j <= s; ++j)\n    {\n        Uh = this.modMult(Uh, Vl);\n        Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1)));\n        Ql = this.modMult(Ql, Ql);\n    }\n\n    return [ Uh, Vl ];\n}\n\nvar exports = {\n  ECCurveFp: ECCurveFp,\n  ECPointFp: ECPointFp,\n  ECFieldElementFp: ECFieldElementFp\n}\n\nmodule.exports = exports\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n  var i, r = new Float64Array(16);\n  if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n  return r;\n};\n\n//  Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n    gf1 = gf([1]),\n    _121665 = gf([0xdb41, 1]),\n    D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n    D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n    X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n    Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n    I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n  x[i]   = (h >> 24) & 0xff;\n  x[i+1] = (h >> 16) & 0xff;\n  x[i+2] = (h >>  8) & 0xff;\n  x[i+3] = h & 0xff;\n  x[i+4] = (l >> 24)  & 0xff;\n  x[i+5] = (l >> 16)  & 0xff;\n  x[i+6] = (l >>  8)  & 0xff;\n  x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n  var i,d = 0;\n  for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n  return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n  return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n  return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n  var j0  = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n      j1  = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n      j2  = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n      j3  = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n      j4  = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n      j5  = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n      j6  = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n      j7  = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n      j8  = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n      j9  = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n      j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n      j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n      j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n      j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n      j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n      j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n  var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u;\n\n  for (var i = 0; i < 20; i += 2) {\n    u = x0 + x12 | 0;\n    x4 ^= u<<7 | u>>>(32-7);\n    u = x4 + x0 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x4 | 0;\n    x12 ^= u<<13 | u>>>(32-13);\n    u = x12 + x8 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x1 | 0;\n    x9 ^= u<<7 | u>>>(32-7);\n    u = x9 + x5 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x9 | 0;\n    x1 ^= u<<13 | u>>>(32-13);\n    u = x1 + x13 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x6 | 0;\n    x14 ^= u<<7 | u>>>(32-7);\n    u = x14 + x10 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x14 | 0;\n    x6 ^= u<<13 | u>>>(32-13);\n    u = x6 + x2 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x11 | 0;\n    x3 ^= u<<7 | u>>>(32-7);\n    u = x3 + x15 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x3 | 0;\n    x11 ^= u<<13 | u>>>(32-13);\n    u = x11 + x7 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n\n    u = x0 + x3 | 0;\n    x1 ^= u<<7 | u>>>(32-7);\n    u = x1 + x0 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x1 | 0;\n    x3 ^= u<<13 | u>>>(32-13);\n    u = x3 + x2 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x4 | 0;\n    x6 ^= u<<7 | u>>>(32-7);\n    u = x6 + x5 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x6 | 0;\n    x4 ^= u<<13 | u>>>(32-13);\n    u = x4 + x7 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x9 | 0;\n    x11 ^= u<<7 | u>>>(32-7);\n    u = x11 + x10 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x11 | 0;\n    x9 ^= u<<13 | u>>>(32-13);\n    u = x9 + x8 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x14 | 0;\n    x12 ^= u<<7 | u>>>(32-7);\n    u = x12 + x15 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x12 | 0;\n    x14 ^= u<<13 | u>>>(32-13);\n    u = x14 + x13 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n  }\n   x0 =  x0 +  j0 | 0;\n   x1 =  x1 +  j1 | 0;\n   x2 =  x2 +  j2 | 0;\n   x3 =  x3 +  j3 | 0;\n   x4 =  x4 +  j4 | 0;\n   x5 =  x5 +  j5 | 0;\n   x6 =  x6 +  j6 | 0;\n   x7 =  x7 +  j7 | 0;\n   x8 =  x8 +  j8 | 0;\n   x9 =  x9 +  j9 | 0;\n  x10 = x10 + j10 | 0;\n  x11 = x11 + j11 | 0;\n  x12 = x12 + j12 | 0;\n  x13 = x13 + j13 | 0;\n  x14 = x14 + j14 | 0;\n  x15 = x15 + j15 | 0;\n\n  o[ 0] = x0 >>>  0 & 0xff;\n  o[ 1] = x0 >>>  8 & 0xff;\n  o[ 2] = x0 >>> 16 & 0xff;\n  o[ 3] = x0 >>> 24 & 0xff;\n\n  o[ 4] = x1 >>>  0 & 0xff;\n  o[ 5] = x1 >>>  8 & 0xff;\n  o[ 6] = x1 >>> 16 & 0xff;\n  o[ 7] = x1 >>> 24 & 0xff;\n\n  o[ 8] = x2 >>>  0 & 0xff;\n  o[ 9] = x2 >>>  8 & 0xff;\n  o[10] = x2 >>> 16 & 0xff;\n  o[11] = x2 >>> 24 & 0xff;\n\n  o[12] = x3 >>>  0 & 0xff;\n  o[13] = x3 >>>  8 & 0xff;\n  o[14] = x3 >>> 16 & 0xff;\n  o[15] = x3 >>> 24 & 0xff;\n\n  o[16] = x4 >>>  0 & 0xff;\n  o[17] = x4 >>>  8 & 0xff;\n  o[18] = x4 >>> 16 & 0xff;\n  o[19] = x4 >>> 24 & 0xff;\n\n  o[20] = x5 >>>  0 & 0xff;\n  o[21] = x5 >>>  8 & 0xff;\n  o[22] = x5 >>> 16 & 0xff;\n  o[23] = x5 >>> 24 & 0xff;\n\n  o[24] = x6 >>>  0 & 0xff;\n  o[25] = x6 >>>  8 & 0xff;\n  o[26] = x6 >>> 16 & 0xff;\n  o[27] = x6 >>> 24 & 0xff;\n\n  o[28] = x7 >>>  0 & 0xff;\n  o[29] = x7 >>>  8 & 0xff;\n  o[30] = x7 >>> 16 & 0xff;\n  o[31] = x7 >>> 24 & 0xff;\n\n  o[32] = x8 >>>  0 & 0xff;\n  o[33] = x8 >>>  8 & 0xff;\n  o[34] = x8 >>> 16 & 0xff;\n  o[35] = x8 >>> 24 & 0xff;\n\n  o[36] = x9 >>>  0 & 0xff;\n  o[37] = x9 >>>  8 & 0xff;\n  o[38] = x9 >>> 16 & 0xff;\n  o[39] = x9 >>> 24 & 0xff;\n\n  o[40] = x10 >>>  0 & 0xff;\n  o[41] = x10 >>>  8 & 0xff;\n  o[42] = x10 >>> 16 & 0xff;\n  o[43] = x10 >>> 24 & 0xff;\n\n  o[44] = x11 >>>  0 & 0xff;\n  o[45] = x11 >>>  8 & 0xff;\n  o[46] = x11 >>> 16 & 0xff;\n  o[47] = x11 >>> 24 & 0xff;\n\n  o[48] = x12 >>>  0 & 0xff;\n  o[49] = x12 >>>  8 & 0xff;\n  o[50] = x12 >>> 16 & 0xff;\n  o[51] = x12 >>> 24 & 0xff;\n\n  o[52] = x13 >>>  0 & 0xff;\n  o[53] = x13 >>>  8 & 0xff;\n  o[54] = x13 >>> 16 & 0xff;\n  o[55] = x13 >>> 24 & 0xff;\n\n  o[56] = x14 >>>  0 & 0xff;\n  o[57] = x14 >>>  8 & 0xff;\n  o[58] = x14 >>> 16 & 0xff;\n  o[59] = x14 >>> 24 & 0xff;\n\n  o[60] = x15 >>>  0 & 0xff;\n  o[61] = x15 >>>  8 & 0xff;\n  o[62] = x15 >>> 16 & 0xff;\n  o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n  var j0  = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n      j1  = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n      j2  = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n      j3  = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n      j4  = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n      j5  = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n      j6  = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n      j7  = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n      j8  = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n      j9  = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n      j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n      j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n      j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n      j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n      j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n      j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n  var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u;\n\n  for (var i = 0; i < 20; i += 2) {\n    u = x0 + x12 | 0;\n    x4 ^= u<<7 | u>>>(32-7);\n    u = x4 + x0 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x4 | 0;\n    x12 ^= u<<13 | u>>>(32-13);\n    u = x12 + x8 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x1 | 0;\n    x9 ^= u<<7 | u>>>(32-7);\n    u = x9 + x5 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x9 | 0;\n    x1 ^= u<<13 | u>>>(32-13);\n    u = x1 + x13 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x6 | 0;\n    x14 ^= u<<7 | u>>>(32-7);\n    u = x14 + x10 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x14 | 0;\n    x6 ^= u<<13 | u>>>(32-13);\n    u = x6 + x2 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x11 | 0;\n    x3 ^= u<<7 | u>>>(32-7);\n    u = x3 + x15 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x3 | 0;\n    x11 ^= u<<13 | u>>>(32-13);\n    u = x11 + x7 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n\n    u = x0 + x3 | 0;\n    x1 ^= u<<7 | u>>>(32-7);\n    u = x1 + x0 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x1 | 0;\n    x3 ^= u<<13 | u>>>(32-13);\n    u = x3 + x2 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x4 | 0;\n    x6 ^= u<<7 | u>>>(32-7);\n    u = x6 + x5 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x6 | 0;\n    x4 ^= u<<13 | u>>>(32-13);\n    u = x4 + x7 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x9 | 0;\n    x11 ^= u<<7 | u>>>(32-7);\n    u = x11 + x10 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x11 | 0;\n    x9 ^= u<<13 | u>>>(32-13);\n    u = x9 + x8 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x14 | 0;\n    x12 ^= u<<7 | u>>>(32-7);\n    u = x12 + x15 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x12 | 0;\n    x14 ^= u<<13 | u>>>(32-13);\n    u = x14 + x13 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n  }\n\n  o[ 0] = x0 >>>  0 & 0xff;\n  o[ 1] = x0 >>>  8 & 0xff;\n  o[ 2] = x0 >>> 16 & 0xff;\n  o[ 3] = x0 >>> 24 & 0xff;\n\n  o[ 4] = x5 >>>  0 & 0xff;\n  o[ 5] = x5 >>>  8 & 0xff;\n  o[ 6] = x5 >>> 16 & 0xff;\n  o[ 7] = x5 >>> 24 & 0xff;\n\n  o[ 8] = x10 >>>  0 & 0xff;\n  o[ 9] = x10 >>>  8 & 0xff;\n  o[10] = x10 >>> 16 & 0xff;\n  o[11] = x10 >>> 24 & 0xff;\n\n  o[12] = x15 >>>  0 & 0xff;\n  o[13] = x15 >>>  8 & 0xff;\n  o[14] = x15 >>> 16 & 0xff;\n  o[15] = x15 >>> 24 & 0xff;\n\n  o[16] = x6 >>>  0 & 0xff;\n  o[17] = x6 >>>  8 & 0xff;\n  o[18] = x6 >>> 16 & 0xff;\n  o[19] = x6 >>> 24 & 0xff;\n\n  o[20] = x7 >>>  0 & 0xff;\n  o[21] = x7 >>>  8 & 0xff;\n  o[22] = x7 >>> 16 & 0xff;\n  o[23] = x7 >>> 24 & 0xff;\n\n  o[24] = x8 >>>  0 & 0xff;\n  o[25] = x8 >>>  8 & 0xff;\n  o[26] = x8 >>> 16 & 0xff;\n  o[27] = x8 >>> 24 & 0xff;\n\n  o[28] = x9 >>>  0 & 0xff;\n  o[29] = x9 >>>  8 & 0xff;\n  o[30] = x9 >>> 16 & 0xff;\n  o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n  core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n  core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n            // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n  var z = new Uint8Array(16), x = new Uint8Array(64);\n  var u, i;\n  for (i = 0; i < 16; i++) z[i] = 0;\n  for (i = 0; i < 8; i++) z[i] = n[i];\n  while (b >= 64) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n    u = 1;\n    for (i = 8; i < 16; i++) {\n      u = u + (z[i] & 0xff) | 0;\n      z[i] = u & 0xff;\n      u >>>= 8;\n    }\n    b -= 64;\n    cpos += 64;\n    mpos += 64;\n  }\n  if (b > 0) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n  }\n  return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n  var z = new Uint8Array(16), x = new Uint8Array(64);\n  var u, i;\n  for (i = 0; i < 16; i++) z[i] = 0;\n  for (i = 0; i < 8; i++) z[i] = n[i];\n  while (b >= 64) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n    u = 1;\n    for (i = 8; i < 16; i++) {\n      u = u + (z[i] & 0xff) | 0;\n      z[i] = u & 0xff;\n      u >>>= 8;\n    }\n    b -= 64;\n    cpos += 64;\n  }\n  if (b > 0) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < b; i++) c[cpos+i] = x[i];\n  }\n  return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n  var s = new Uint8Array(32);\n  crypto_core_hsalsa20(s,n,k,sigma);\n  var sn = new Uint8Array(8);\n  for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n  return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n  var s = new Uint8Array(32);\n  crypto_core_hsalsa20(s,n,k,sigma);\n  var sn = new Uint8Array(8);\n  for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n  return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n  this.buffer = new Uint8Array(16);\n  this.r = new Uint16Array(10);\n  this.h = new Uint16Array(10);\n  this.pad = new Uint16Array(8);\n  this.leftover = 0;\n  this.fin = 0;\n\n  var t0, t1, t2, t3, t4, t5, t6, t7;\n\n  t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0                     ) & 0x1fff;\n  t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;\n  t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 <<  6)) & 0x1f03;\n  t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;\n  t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>>  4) | (t4 << 12)) & 0x00ff;\n  this.r[5] = ((t4 >>>  1)) & 0x1ffe;\n  t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;\n  t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 <<  5)) & 0x1f81;\n  t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;\n  this.r[9] = ((t7 >>>  5)) & 0x007f;\n\n  this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n  this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n  this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n  this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n  this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n  this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n  this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n  this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n  var hibit = this.fin ? 0 : (1 << 11);\n  var t0, t1, t2, t3, t4, t5, t6, t7, c;\n  var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n  var h0 = this.h[0],\n      h1 = this.h[1],\n      h2 = this.h[2],\n      h3 = this.h[3],\n      h4 = this.h[4],\n      h5 = this.h[5],\n      h6 = this.h[6],\n      h7 = this.h[7],\n      h8 = this.h[8],\n      h9 = this.h[9];\n\n  var r0 = this.r[0],\n      r1 = this.r[1],\n      r2 = this.r[2],\n      r3 = this.r[3],\n      r4 = this.r[4],\n      r5 = this.r[5],\n      r6 = this.r[6],\n      r7 = this.r[7],\n      r8 = this.r[8],\n      r9 = this.r[9];\n\n  while (bytes >= 16) {\n    t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0                     ) & 0x1fff;\n    t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;\n    t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 <<  6)) & 0x1fff;\n    t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;\n    t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>>  4) | (t4 << 12)) & 0x1fff;\n    h5 += ((t4 >>>  1)) & 0x1fff;\n    t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;\n    t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 <<  5)) & 0x1fff;\n    t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;\n    h9 += ((t7 >>> 5)) | hibit;\n\n    c = 0;\n\n    d0 = c;\n    d0 += h0 * r0;\n    d0 += h1 * (5 * r9);\n    d0 += h2 * (5 * r8);\n    d0 += h3 * (5 * r7);\n    d0 += h4 * (5 * r6);\n    c = (d0 >>> 13); d0 &= 0x1fff;\n    d0 += h5 * (5 * r5);\n    d0 += h6 * (5 * r4);\n    d0 += h7 * (5 * r3);\n    d0 += h8 * (5 * r2);\n    d0 += h9 * (5 * r1);\n    c += (d0 >>> 13); d0 &= 0x1fff;\n\n    d1 = c;\n    d1 += h0 * r1;\n    d1 += h1 * r0;\n    d1 += h2 * (5 * r9);\n    d1 += h3 * (5 * r8);\n    d1 += h4 * (5 * r7);\n    c = (d1 >>> 13); d1 &= 0x1fff;\n    d1 += h5 * (5 * r6);\n    d1 += h6 * (5 * r5);\n    d1 += h7 * (5 * r4);\n    d1 += h8 * (5 * r3);\n    d1 += h9 * (5 * r2);\n    c += (d1 >>> 13); d1 &= 0x1fff;\n\n    d2 = c;\n    d2 += h0 * r2;\n    d2 += h1 * r1;\n    d2 += h2 * r0;\n    d2 += h3 * (5 * r9);\n    d2 += h4 * (5 * r8);\n    c = (d2 >>> 13); d2 &= 0x1fff;\n    d2 += h5 * (5 * r7);\n    d2 += h6 * (5 * r6);\n    d2 += h7 * (5 * r5);\n    d2 += h8 * (5 * r4);\n    d2 += h9 * (5 * r3);\n    c += (d2 >>> 13); d2 &= 0x1fff;\n\n    d3 = c;\n    d3 += h0 * r3;\n    d3 += h1 * r2;\n    d3 += h2 * r1;\n    d3 += h3 * r0;\n    d3 += h4 * (5 * r9);\n    c = (d3 >>> 13); d3 &= 0x1fff;\n    d3 += h5 * (5 * r8);\n    d3 += h6 * (5 * r7);\n    d3 += h7 * (5 * r6);\n    d3 += h8 * (5 * r5);\n    d3 += h9 * (5 * r4);\n    c += (d3 >>> 13); d3 &= 0x1fff;\n\n    d4 = c;\n    d4 += h0 * r4;\n    d4 += h1 * r3;\n    d4 += h2 * r2;\n    d4 += h3 * r1;\n    d4 += h4 * r0;\n    c = (d4 >>> 13); d4 &= 0x1fff;\n    d4 += h5 * (5 * r9);\n    d4 += h6 * (5 * r8);\n    d4 += h7 * (5 * r7);\n    d4 += h8 * (5 * r6);\n    d4 += h9 * (5 * r5);\n    c += (d4 >>> 13); d4 &= 0x1fff;\n\n    d5 = c;\n    d5 += h0 * r5;\n    d5 += h1 * r4;\n    d5 += h2 * r3;\n    d5 += h3 * r2;\n    d5 += h4 * r1;\n    c = (d5 >>> 13); d5 &= 0x1fff;\n    d5 += h5 * r0;\n    d5 += h6 * (5 * r9);\n    d5 += h7 * (5 * r8);\n    d5 += h8 * (5 * r7);\n    d5 += h9 * (5 * r6);\n    c += (d5 >>> 13); d5 &= 0x1fff;\n\n    d6 = c;\n    d6 += h0 * r6;\n    d6 += h1 * r5;\n    d6 += h2 * r4;\n    d6 += h3 * r3;\n    d6 += h4 * r2;\n    c = (d6 >>> 13); d6 &= 0x1fff;\n    d6 += h5 * r1;\n    d6 += h6 * r0;\n    d6 += h7 * (5 * r9);\n    d6 += h8 * (5 * r8);\n    d6 += h9 * (5 * r7);\n    c += (d6 >>> 13); d6 &= 0x1fff;\n\n    d7 = c;\n    d7 += h0 * r7;\n    d7 += h1 * r6;\n    d7 += h2 * r5;\n    d7 += h3 * r4;\n    d7 += h4 * r3;\n    c = (d7 >>> 13); d7 &= 0x1fff;\n    d7 += h5 * r2;\n    d7 += h6 * r1;\n    d7 += h7 * r0;\n    d7 += h8 * (5 * r9);\n    d7 += h9 * (5 * r8);\n    c += (d7 >>> 13); d7 &= 0x1fff;\n\n    d8 = c;\n    d8 += h0 * r8;\n    d8 += h1 * r7;\n    d8 += h2 * r6;\n    d8 += h3 * r5;\n    d8 += h4 * r4;\n    c = (d8 >>> 13); d8 &= 0x1fff;\n    d8 += h5 * r3;\n    d8 += h6 * r2;\n    d8 += h7 * r1;\n    d8 += h8 * r0;\n    d8 += h9 * (5 * r9);\n    c += (d8 >>> 13); d8 &= 0x1fff;\n\n    d9 = c;\n    d9 += h0 * r9;\n    d9 += h1 * r8;\n    d9 += h2 * r7;\n    d9 += h3 * r6;\n    d9 += h4 * r5;\n    c = (d9 >>> 13); d9 &= 0x1fff;\n    d9 += h5 * r4;\n    d9 += h6 * r3;\n    d9 += h7 * r2;\n    d9 += h8 * r1;\n    d9 += h9 * r0;\n    c += (d9 >>> 13); d9 &= 0x1fff;\n\n    c = (((c << 2) + c)) | 0;\n    c = (c + d0) | 0;\n    d0 = c & 0x1fff;\n    c = (c >>> 13);\n    d1 += c;\n\n    h0 = d0;\n    h1 = d1;\n    h2 = d2;\n    h3 = d3;\n    h4 = d4;\n    h5 = d5;\n    h6 = d6;\n    h7 = d7;\n    h8 = d8;\n    h9 = d9;\n\n    mpos += 16;\n    bytes -= 16;\n  }\n  this.h[0] = h0;\n  this.h[1] = h1;\n  this.h[2] = h2;\n  this.h[3] = h3;\n  this.h[4] = h4;\n  this.h[5] = h5;\n  this.h[6] = h6;\n  this.h[7] = h7;\n  this.h[8] = h8;\n  this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n  var g = new Uint16Array(10);\n  var c, mask, f, i;\n\n  if (this.leftover) {\n    i = this.leftover;\n    this.buffer[i++] = 1;\n    for (; i < 16; i++) this.buffer[i] = 0;\n    this.fin = 1;\n    this.blocks(this.buffer, 0, 16);\n  }\n\n  c = this.h[1] >>> 13;\n  this.h[1] &= 0x1fff;\n  for (i = 2; i < 10; i++) {\n    this.h[i] += c;\n    c = this.h[i] >>> 13;\n    this.h[i] &= 0x1fff;\n  }\n  this.h[0] += (c * 5);\n  c = this.h[0] >>> 13;\n  this.h[0] &= 0x1fff;\n  this.h[1] += c;\n  c = this.h[1] >>> 13;\n  this.h[1] &= 0x1fff;\n  this.h[2] += c;\n\n  g[0] = this.h[0] + 5;\n  c = g[0] >>> 13;\n  g[0] &= 0x1fff;\n  for (i = 1; i < 10; i++) {\n    g[i] = this.h[i] + c;\n    c = g[i] >>> 13;\n    g[i] &= 0x1fff;\n  }\n  g[9] -= (1 << 13);\n\n  mask = (c ^ 1) - 1;\n  for (i = 0; i < 10; i++) g[i] &= mask;\n  mask = ~mask;\n  for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n  this.h[0] = ((this.h[0]       ) | (this.h[1] << 13)                    ) & 0xffff;\n  this.h[1] = ((this.h[1] >>>  3) | (this.h[2] << 10)                    ) & 0xffff;\n  this.h[2] = ((this.h[2] >>>  6) | (this.h[3] <<  7)                    ) & 0xffff;\n  this.h[3] = ((this.h[3] >>>  9) | (this.h[4] <<  4)                    ) & 0xffff;\n  this.h[4] = ((this.h[4] >>> 12) | (this.h[5] <<  1) | (this.h[6] << 14)) & 0xffff;\n  this.h[5] = ((this.h[6] >>>  2) | (this.h[7] << 11)                    ) & 0xffff;\n  this.h[6] = ((this.h[7] >>>  5) | (this.h[8] <<  8)                    ) & 0xffff;\n  this.h[7] = ((this.h[8] >>>  8) | (this.h[9] <<  5)                    ) & 0xffff;\n\n  f = this.h[0] + this.pad[0];\n  this.h[0] = f & 0xffff;\n  for (i = 1; i < 8; i++) {\n    f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n    this.h[i] = f & 0xffff;\n  }\n\n  mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n  mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n  mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n  mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n  mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n  mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n  mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n  mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n  mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n  mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n  mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n  mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n  mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n  mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n  mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n  mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n  var i, want;\n\n  if (this.leftover) {\n    want = (16 - this.leftover);\n    if (want > bytes)\n      want = bytes;\n    for (i = 0; i < want; i++)\n      this.buffer[this.leftover + i] = m[mpos+i];\n    bytes -= want;\n    mpos += want;\n    this.leftover += want;\n    if (this.leftover < 16)\n      return;\n    this.blocks(this.buffer, 0, 16);\n    this.leftover = 0;\n  }\n\n  if (bytes >= 16) {\n    want = bytes - (bytes % 16);\n    this.blocks(m, mpos, want);\n    mpos += want;\n    bytes -= want;\n  }\n\n  if (bytes) {\n    for (i = 0; i < bytes; i++)\n      this.buffer[this.leftover + i] = m[mpos+i];\n    this.leftover += bytes;\n  }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n  var s = new poly1305(k);\n  s.update(m, mpos, n);\n  s.finish(out, outpos);\n  return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n  var x = new Uint8Array(16);\n  crypto_onetimeauth(x,0,m,mpos,n,k);\n  return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n  var i;\n  if (d < 32) return -1;\n  crypto_stream_xor(c,0,m,0,d,n,k);\n  crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n  for (i = 0; i < 16; i++) c[i] = 0;\n  return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n  var i;\n  var x = new Uint8Array(32);\n  if (d < 32) return -1;\n  crypto_stream(x,0,32,n,k);\n  if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n  crypto_stream_xor(m,0,c,0,d,n,k);\n  for (i = 0; i < 32; i++) m[i] = 0;\n  return 0;\n}\n\nfunction set25519(r, a) {\n  var i;\n  for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n  var i, v, c = 1;\n  for (i = 0; i < 16; i++) {\n    v = o[i] + c + 65535;\n    c = Math.floor(v / 65536);\n    o[i] = v - c * 65536;\n  }\n  o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n  var t, c = ~(b-1);\n  for (var i = 0; i < 16; i++) {\n    t = c & (p[i] ^ q[i]);\n    p[i] ^= t;\n    q[i] ^= t;\n  }\n}\n\nfunction pack25519(o, n) {\n  var i, j, b;\n  var m = gf(), t = gf();\n  for (i = 0; i < 16; i++) t[i] = n[i];\n  car25519(t);\n  car25519(t);\n  car25519(t);\n  for (j = 0; j < 2; j++) {\n    m[0] = t[0] - 0xffed;\n    for (i = 1; i < 15; i++) {\n      m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n      m[i-1] &= 0xffff;\n    }\n    m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n    b = (m[15]>>16) & 1;\n    m[14] &= 0xffff;\n    sel25519(t, m, 1-b);\n  }\n  for (i = 0; i < 16; i++) {\n    o[2*i] = t[i] & 0xff;\n    o[2*i+1] = t[i]>>8;\n  }\n}\n\nfunction neq25519(a, b) {\n  var c = new Uint8Array(32), d = new Uint8Array(32);\n  pack25519(c, a);\n  pack25519(d, b);\n  return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n  var d = new Uint8Array(32);\n  pack25519(d, a);\n  return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n  var i;\n  for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n  o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n  for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n  for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n  var v, c,\n     t0 = 0,  t1 = 0,  t2 = 0,  t3 = 0,  t4 = 0,  t5 = 0,  t6 = 0,  t7 = 0,\n     t8 = 0,  t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n    t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n    t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n    b0 = b[0],\n    b1 = b[1],\n    b2 = b[2],\n    b3 = b[3],\n    b4 = b[4],\n    b5 = b[5],\n    b6 = b[6],\n    b7 = b[7],\n    b8 = b[8],\n    b9 = b[9],\n    b10 = b[10],\n    b11 = b[11],\n    b12 = b[12],\n    b13 = b[13],\n    b14 = b[14],\n    b15 = b[15];\n\n  v = a[0];\n  t0 += v * b0;\n  t1 += v * b1;\n  t2 += v * b2;\n  t3 += v * b3;\n  t4 += v * b4;\n  t5 += v * b5;\n  t6 += v * b6;\n  t7 += v * b7;\n  t8 += v * b8;\n  t9 += v * b9;\n  t10 += v * b10;\n  t11 += v * b11;\n  t12 += v * b12;\n  t13 += v * b13;\n  t14 += v * b14;\n  t15 += v * b15;\n  v = a[1];\n  t1 += v * b0;\n  t2 += v * b1;\n  t3 += v * b2;\n  t4 += v * b3;\n  t5 += v * b4;\n  t6 += v * b5;\n  t7 += v * b6;\n  t8 += v * b7;\n  t9 += v * b8;\n  t10 += v * b9;\n  t11 += v * b10;\n  t12 += v * b11;\n  t13 += v * b12;\n  t14 += v * b13;\n  t15 += v * b14;\n  t16 += v * b15;\n  v = a[2];\n  t2 += v * b0;\n  t3 += v * b1;\n  t4 += v * b2;\n  t5 += v * b3;\n  t6 += v * b4;\n  t7 += v * b5;\n  t8 += v * b6;\n  t9 += v * b7;\n  t10 += v * b8;\n  t11 += v * b9;\n  t12 += v * b10;\n  t13 += v * b11;\n  t14 += v * b12;\n  t15 += v * b13;\n  t16 += v * b14;\n  t17 += v * b15;\n  v = a[3];\n  t3 += v * b0;\n  t4 += v * b1;\n  t5 += v * b2;\n  t6 += v * b3;\n  t7 += v * b4;\n  t8 += v * b5;\n  t9 += v * b6;\n  t10 += v * b7;\n  t11 += v * b8;\n  t12 += v * b9;\n  t13 += v * b10;\n  t14 += v * b11;\n  t15 += v * b12;\n  t16 += v * b13;\n  t17 += v * b14;\n  t18 += v * b15;\n  v = a[4];\n  t4 += v * b0;\n  t5 += v * b1;\n  t6 += v * b2;\n  t7 += v * b3;\n  t8 += v * b4;\n  t9 += v * b5;\n  t10 += v * b6;\n  t11 += v * b7;\n  t12 += v * b8;\n  t13 += v * b9;\n  t14 += v * b10;\n  t15 += v * b11;\n  t16 += v * b12;\n  t17 += v * b13;\n  t18 += v * b14;\n  t19 += v * b15;\n  v = a[5];\n  t5 += v * b0;\n  t6 += v * b1;\n  t7 += v * b2;\n  t8 += v * b3;\n  t9 += v * b4;\n  t10 += v * b5;\n  t11 += v * b6;\n  t12 += v * b7;\n  t13 += v * b8;\n  t14 += v * b9;\n  t15 += v * b10;\n  t16 += v * b11;\n  t17 += v * b12;\n  t18 += v * b13;\n  t19 += v * b14;\n  t20 += v * b15;\n  v = a[6];\n  t6 += v * b0;\n  t7 += v * b1;\n  t8 += v * b2;\n  t9 += v * b3;\n  t10 += v * b4;\n  t11 += v * b5;\n  t12 += v * b6;\n  t13 += v * b7;\n  t14 += v * b8;\n  t15 += v * b9;\n  t16 += v * b10;\n  t17 += v * b11;\n  t18 += v * b12;\n  t19 += v * b13;\n  t20 += v * b14;\n  t21 += v * b15;\n  v = a[7];\n  t7 += v * b0;\n  t8 += v * b1;\n  t9 += v * b2;\n  t10 += v * b3;\n  t11 += v * b4;\n  t12 += v * b5;\n  t13 += v * b6;\n  t14 += v * b7;\n  t15 += v * b8;\n  t16 += v * b9;\n  t17 += v * b10;\n  t18 += v * b11;\n  t19 += v * b12;\n  t20 += v * b13;\n  t21 += v * b14;\n  t22 += v * b15;\n  v = a[8];\n  t8 += v * b0;\n  t9 += v * b1;\n  t10 += v * b2;\n  t11 += v * b3;\n  t12 += v * b4;\n  t13 += v * b5;\n  t14 += v * b6;\n  t15 += v * b7;\n  t16 += v * b8;\n  t17 += v * b9;\n  t18 += v * b10;\n  t19 += v * b11;\n  t20 += v * b12;\n  t21 += v * b13;\n  t22 += v * b14;\n  t23 += v * b15;\n  v = a[9];\n  t9 += v * b0;\n  t10 += v * b1;\n  t11 += v * b2;\n  t12 += v * b3;\n  t13 += v * b4;\n  t14 += v * b5;\n  t15 += v * b6;\n  t16 += v * b7;\n  t17 += v * b8;\n  t18 += v * b9;\n  t19 += v * b10;\n  t20 += v * b11;\n  t21 += v * b12;\n  t22 += v * b13;\n  t23 += v * b14;\n  t24 += v * b15;\n  v = a[10];\n  t10 += v * b0;\n  t11 += v * b1;\n  t12 += v * b2;\n  t13 += v * b3;\n  t14 += v * b4;\n  t15 += v * b5;\n  t16 += v * b6;\n  t17 += v * b7;\n  t18 += v * b8;\n  t19 += v * b9;\n  t20 += v * b10;\n  t21 += v * b11;\n  t22 += v * b12;\n  t23 += v * b13;\n  t24 += v * b14;\n  t25 += v * b15;\n  v = a[11];\n  t11 += v * b0;\n  t12 += v * b1;\n  t13 += v * b2;\n  t14 += v * b3;\n  t15 += v * b4;\n  t16 += v * b5;\n  t17 += v * b6;\n  t18 += v * b7;\n  t19 += v * b8;\n  t20 += v * b9;\n  t21 += v * b10;\n  t22 += v * b11;\n  t23 += v * b12;\n  t24 += v * b13;\n  t25 += v * b14;\n  t26 += v * b15;\n  v = a[12];\n  t12 += v * b0;\n  t13 += v * b1;\n  t14 += v * b2;\n  t15 += v * b3;\n  t16 += v * b4;\n  t17 += v * b5;\n  t18 += v * b6;\n  t19 += v * b7;\n  t20 += v * b8;\n  t21 += v * b9;\n  t22 += v * b10;\n  t23 += v * b11;\n  t24 += v * b12;\n  t25 += v * b13;\n  t26 += v * b14;\n  t27 += v * b15;\n  v = a[13];\n  t13 += v * b0;\n  t14 += v * b1;\n  t15 += v * b2;\n  t16 += v * b3;\n  t17 += v * b4;\n  t18 += v * b5;\n  t19 += v * b6;\n  t20 += v * b7;\n  t21 += v * b8;\n  t22 += v * b9;\n  t23 += v * b10;\n  t24 += v * b11;\n  t25 += v * b12;\n  t26 += v * b13;\n  t27 += v * b14;\n  t28 += v * b15;\n  v = a[14];\n  t14 += v * b0;\n  t15 += v * b1;\n  t16 += v * b2;\n  t17 += v * b3;\n  t18 += v * b4;\n  t19 += v * b5;\n  t20 += v * b6;\n  t21 += v * b7;\n  t22 += v * b8;\n  t23 += v * b9;\n  t24 += v * b10;\n  t25 += v * b11;\n  t26 += v * b12;\n  t27 += v * b13;\n  t28 += v * b14;\n  t29 += v * b15;\n  v = a[15];\n  t15 += v * b0;\n  t16 += v * b1;\n  t17 += v * b2;\n  t18 += v * b3;\n  t19 += v * b4;\n  t20 += v * b5;\n  t21 += v * b6;\n  t22 += v * b7;\n  t23 += v * b8;\n  t24 += v * b9;\n  t25 += v * b10;\n  t26 += v * b11;\n  t27 += v * b12;\n  t28 += v * b13;\n  t29 += v * b14;\n  t30 += v * b15;\n\n  t0  += 38 * t16;\n  t1  += 38 * t17;\n  t2  += 38 * t18;\n  t3  += 38 * t19;\n  t4  += 38 * t20;\n  t5  += 38 * t21;\n  t6  += 38 * t22;\n  t7  += 38 * t23;\n  t8  += 38 * t24;\n  t9  += 38 * t25;\n  t10 += 38 * t26;\n  t11 += 38 * t27;\n  t12 += 38 * t28;\n  t13 += 38 * t29;\n  t14 += 38 * t30;\n  // t15 left as is\n\n  // first car\n  c = 1;\n  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;\n  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;\n  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;\n  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;\n  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;\n  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;\n  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;\n  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;\n  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;\n  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;\n  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n  t0 += c-1 + 37 * (c-1);\n\n  // second car\n  c = 1;\n  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;\n  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;\n  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;\n  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;\n  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;\n  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;\n  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;\n  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;\n  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;\n  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;\n  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n  t0 += c-1 + 37 * (c-1);\n\n  o[ 0] = t0;\n  o[ 1] = t1;\n  o[ 2] = t2;\n  o[ 3] = t3;\n  o[ 4] = t4;\n  o[ 5] = t5;\n  o[ 6] = t6;\n  o[ 7] = t7;\n  o[ 8] = t8;\n  o[ 9] = t9;\n  o[10] = t10;\n  o[11] = t11;\n  o[12] = t12;\n  o[13] = t13;\n  o[14] = t14;\n  o[15] = t15;\n}\n\nfunction S(o, a) {\n  M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n  var c = gf();\n  var a;\n  for (a = 0; a < 16; a++) c[a] = i[a];\n  for (a = 253; a >= 0; a--) {\n    S(c, c);\n    if(a !== 2 && a !== 4) M(c, c, i);\n  }\n  for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n  var c = gf();\n  var a;\n  for (a = 0; a < 16; a++) c[a] = i[a];\n  for (a = 250; a >= 0; a--) {\n      S(c, c);\n      if(a !== 1) M(c, c, i);\n  }\n  for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n  var z = new Uint8Array(32);\n  var x = new Float64Array(80), r, i;\n  var a = gf(), b = gf(), c = gf(),\n      d = gf(), e = gf(), f = gf();\n  for (i = 0; i < 31; i++) z[i] = n[i];\n  z[31]=(n[31]&127)|64;\n  z[0]&=248;\n  unpack25519(x,p);\n  for (i = 0; i < 16; i++) {\n    b[i]=x[i];\n    d[i]=a[i]=c[i]=0;\n  }\n  a[0]=d[0]=1;\n  for (i=254; i>=0; --i) {\n    r=(z[i>>>3]>>>(i&7))&1;\n    sel25519(a,b,r);\n    sel25519(c,d,r);\n    A(e,a,c);\n    Z(a,a,c);\n    A(c,b,d);\n    Z(b,b,d);\n    S(d,e);\n    S(f,a);\n    M(a,c,a);\n    M(c,b,e);\n    A(e,a,c);\n    Z(a,a,c);\n    S(b,a);\n    Z(c,d,f);\n    M(a,c,_121665);\n    A(a,a,d);\n    M(c,c,a);\n    M(a,d,f);\n    M(d,b,x);\n    S(b,e);\n    sel25519(a,b,r);\n    sel25519(c,d,r);\n  }\n  for (i = 0; i < 16; i++) {\n    x[i+16]=a[i];\n    x[i+32]=c[i];\n    x[i+48]=b[i];\n    x[i+64]=d[i];\n  }\n  var x32 = x.subarray(32);\n  var x16 = x.subarray(16);\n  inv25519(x32,x32);\n  M(x16,x16,x32);\n  pack25519(q,x16);\n  return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n  return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n  randombytes(x, 32);\n  return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n  var s = new Uint8Array(32);\n  crypto_scalarmult(s, x, y);\n  return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n  var k = new Uint8Array(32);\n  crypto_box_beforenm(k, y, x);\n  return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n  var k = new Uint8Array(32);\n  crypto_box_beforenm(k, y, x);\n  return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n  var wh = new Int32Array(16), wl = new Int32Array(16),\n      bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n      bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n      th, tl, i, j, h, l, a, b, c, d;\n\n  var ah0 = hh[0],\n      ah1 = hh[1],\n      ah2 = hh[2],\n      ah3 = hh[3],\n      ah4 = hh[4],\n      ah5 = hh[5],\n      ah6 = hh[6],\n      ah7 = hh[7],\n\n      al0 = hl[0],\n      al1 = hl[1],\n      al2 = hl[2],\n      al3 = hl[3],\n      al4 = hl[4],\n      al5 = hl[5],\n      al6 = hl[6],\n      al7 = hl[7];\n\n  var pos = 0;\n  while (n >= 128) {\n    for (i = 0; i < 16; i++) {\n      j = 8 * i + pos;\n      wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n      wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n    }\n    for (i = 0; i < 80; i++) {\n      bh0 = ah0;\n      bh1 = ah1;\n      bh2 = ah2;\n      bh3 = ah3;\n      bh4 = ah4;\n      bh5 = ah5;\n      bh6 = ah6;\n      bh7 = ah7;\n\n      bl0 = al0;\n      bl1 = al1;\n      bl2 = al2;\n      bl3 = al3;\n      bl4 = al4;\n      bl5 = al5;\n      bl6 = al6;\n      bl7 = al7;\n\n      // add\n      h = ah7;\n      l = al7;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      // Sigma1\n      h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n      l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // Ch\n      h = (ah4 & ah5) ^ (~ah4 & ah6);\n      l = (al4 & al5) ^ (~al4 & al6);\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // K\n      h = K[i*2];\n      l = K[i*2+1];\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // w\n      h = wh[i%16];\n      l = wl[i%16];\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      th = c & 0xffff | d << 16;\n      tl = a & 0xffff | b << 16;\n\n      // add\n      h = th;\n      l = tl;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      // Sigma0\n      h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n      l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // Maj\n      h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n      l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      bh7 = (c & 0xffff) | (d << 16);\n      bl7 = (a & 0xffff) | (b << 16);\n\n      // add\n      h = bh3;\n      l = bl3;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      h = th;\n      l = tl;\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      bh3 = (c & 0xffff) | (d << 16);\n      bl3 = (a & 0xffff) | (b << 16);\n\n      ah1 = bh0;\n      ah2 = bh1;\n      ah3 = bh2;\n      ah4 = bh3;\n      ah5 = bh4;\n      ah6 = bh5;\n      ah7 = bh6;\n      ah0 = bh7;\n\n      al1 = bl0;\n      al2 = bl1;\n      al3 = bl2;\n      al4 = bl3;\n      al5 = bl4;\n      al6 = bl5;\n      al7 = bl6;\n      al0 = bl7;\n\n      if (i%16 === 15) {\n        for (j = 0; j < 16; j++) {\n          // add\n          h = wh[j];\n          l = wl[j];\n\n          a = l & 0xffff; b = l >>> 16;\n          c = h & 0xffff; d = h >>> 16;\n\n          h = wh[(j+9)%16];\n          l = wl[(j+9)%16];\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          // sigma0\n          th = wh[(j+1)%16];\n          tl = wl[(j+1)%16];\n          h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n          l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          // sigma1\n          th = wh[(j+14)%16];\n          tl = wl[(j+14)%16];\n          h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n          l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          b += a >>> 16;\n          c += b >>> 16;\n          d += c >>> 16;\n\n          wh[j] = (c & 0xffff) | (d << 16);\n          wl[j] = (a & 0xffff) | (b << 16);\n        }\n      }\n    }\n\n    // add\n    h = ah0;\n    l = al0;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[0];\n    l = hl[0];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[0] = ah0 = (c & 0xffff) | (d << 16);\n    hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n    h = ah1;\n    l = al1;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[1];\n    l = hl[1];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[1] = ah1 = (c & 0xffff) | (d << 16);\n    hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n    h = ah2;\n    l = al2;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[2];\n    l = hl[2];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[2] = ah2 = (c & 0xffff) | (d << 16);\n    hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n    h = ah3;\n    l = al3;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[3];\n    l = hl[3];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[3] = ah3 = (c & 0xffff) | (d << 16);\n    hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n    h = ah4;\n    l = al4;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[4];\n    l = hl[4];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[4] = ah4 = (c & 0xffff) | (d << 16);\n    hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n    h = ah5;\n    l = al5;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[5];\n    l = hl[5];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[5] = ah5 = (c & 0xffff) | (d << 16);\n    hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n    h = ah6;\n    l = al6;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[6];\n    l = hl[6];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[6] = ah6 = (c & 0xffff) | (d << 16);\n    hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n    h = ah7;\n    l = al7;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[7];\n    l = hl[7];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[7] = ah7 = (c & 0xffff) | (d << 16);\n    hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n    pos += 128;\n    n -= 128;\n  }\n\n  return n;\n}\n\nfunction crypto_hash(out, m, n) {\n  var hh = new Int32Array(8),\n      hl = new Int32Array(8),\n      x = new Uint8Array(256),\n      i, b = n;\n\n  hh[0] = 0x6a09e667;\n  hh[1] = 0xbb67ae85;\n  hh[2] = 0x3c6ef372;\n  hh[3] = 0xa54ff53a;\n  hh[4] = 0x510e527f;\n  hh[5] = 0x9b05688c;\n  hh[6] = 0x1f83d9ab;\n  hh[7] = 0x5be0cd19;\n\n  hl[0] = 0xf3bcc908;\n  hl[1] = 0x84caa73b;\n  hl[2] = 0xfe94f82b;\n  hl[3] = 0x5f1d36f1;\n  hl[4] = 0xade682d1;\n  hl[5] = 0x2b3e6c1f;\n  hl[6] = 0xfb41bd6b;\n  hl[7] = 0x137e2179;\n\n  crypto_hashblocks_hl(hh, hl, m, n);\n  n %= 128;\n\n  for (i = 0; i < n; i++) x[i] = m[b-n+i];\n  x[n] = 128;\n\n  n = 256-128*(n<112?1:0);\n  x[n-9] = 0;\n  ts64(x, n-8,  (b / 0x20000000) | 0, b << 3);\n  crypto_hashblocks_hl(hh, hl, x, n);\n\n  for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n  return 0;\n}\n\nfunction add(p, q) {\n  var a = gf(), b = gf(), c = gf(),\n      d = gf(), e = gf(), f = gf(),\n      g = gf(), h = gf(), t = gf();\n\n  Z(a, p[1], p[0]);\n  Z(t, q[1], q[0]);\n  M(a, a, t);\n  A(b, p[0], p[1]);\n  A(t, q[0], q[1]);\n  M(b, b, t);\n  M(c, p[3], q[3]);\n  M(c, c, D2);\n  M(d, p[2], q[2]);\n  A(d, d, d);\n  Z(e, b, a);\n  Z(f, d, c);\n  A(g, d, c);\n  A(h, b, a);\n\n  M(p[0], e, f);\n  M(p[1], h, g);\n  M(p[2], g, f);\n  M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n  var i;\n  for (i = 0; i < 4; i++) {\n    sel25519(p[i], q[i], b);\n  }\n}\n\nfunction pack(r, p) {\n  var tx = gf(), ty = gf(), zi = gf();\n  inv25519(zi, p[2]);\n  M(tx, p[0], zi);\n  M(ty, p[1], zi);\n  pack25519(r, ty);\n  r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n  var b, i;\n  set25519(p[0], gf0);\n  set25519(p[1], gf1);\n  set25519(p[2], gf1);\n  set25519(p[3], gf0);\n  for (i = 255; i >= 0; --i) {\n    b = (s[(i/8)|0] >> (i&7)) & 1;\n    cswap(p, q, b);\n    add(q, p);\n    add(p, p);\n    cswap(p, q, b);\n  }\n}\n\nfunction scalarbase(p, s) {\n  var q = [gf(), gf(), gf(), gf()];\n  set25519(q[0], X);\n  set25519(q[1], Y);\n  set25519(q[2], gf1);\n  M(q[3], X, Y);\n  scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n  var d = new Uint8Array(64);\n  var p = [gf(), gf(), gf(), gf()];\n  var i;\n\n  if (!seeded) randombytes(sk, 32);\n  crypto_hash(d, sk, 32);\n  d[0] &= 248;\n  d[31] &= 127;\n  d[31] |= 64;\n\n  scalarbase(p, d);\n  pack(pk, p);\n\n  for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n  return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n  var carry, i, j, k;\n  for (i = 63; i >= 32; --i) {\n    carry = 0;\n    for (j = i - 32, k = i - 12; j < k; ++j) {\n      x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n      carry = (x[j] + 128) >> 8;\n      x[j] -= carry * 256;\n    }\n    x[j] += carry;\n    x[i] = 0;\n  }\n  carry = 0;\n  for (j = 0; j < 32; j++) {\n    x[j] += carry - (x[31] >> 4) * L[j];\n    carry = x[j] >> 8;\n    x[j] &= 255;\n  }\n  for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n  for (i = 0; i < 32; i++) {\n    x[i+1] += x[i] >> 8;\n    r[i] = x[i] & 255;\n  }\n}\n\nfunction reduce(r) {\n  var x = new Float64Array(64), i;\n  for (i = 0; i < 64; i++) x[i] = r[i];\n  for (i = 0; i < 64; i++) r[i] = 0;\n  modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n  var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n  var i, j, x = new Float64Array(64);\n  var p = [gf(), gf(), gf(), gf()];\n\n  crypto_hash(d, sk, 32);\n  d[0] &= 248;\n  d[31] &= 127;\n  d[31] |= 64;\n\n  var smlen = n + 64;\n  for (i = 0; i < n; i++) sm[64 + i] = m[i];\n  for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n  crypto_hash(r, sm.subarray(32), n+32);\n  reduce(r);\n  scalarbase(p, r);\n  pack(sm, p);\n\n  for (i = 32; i < 64; i++) sm[i] = sk[i];\n  crypto_hash(h, sm, n + 64);\n  reduce(h);\n\n  for (i = 0; i < 64; i++) x[i] = 0;\n  for (i = 0; i < 32; i++) x[i] = r[i];\n  for (i = 0; i < 32; i++) {\n    for (j = 0; j < 32; j++) {\n      x[i+j] += h[i] * d[j];\n    }\n  }\n\n  modL(sm.subarray(32), x);\n  return smlen;\n}\n\nfunction unpackneg(r, p) {\n  var t = gf(), chk = gf(), num = gf(),\n      den = gf(), den2 = gf(), den4 = gf(),\n      den6 = gf();\n\n  set25519(r[2], gf1);\n  unpack25519(r[1], p);\n  S(num, r[1]);\n  M(den, num, D);\n  Z(num, num, r[2]);\n  A(den, r[2], den);\n\n  S(den2, den);\n  S(den4, den2);\n  M(den6, den4, den2);\n  M(t, den6, num);\n  M(t, t, den);\n\n  pow2523(t, t);\n  M(t, t, num);\n  M(t, t, den);\n  M(t, t, den);\n  M(r[0], t, den);\n\n  S(chk, r[0]);\n  M(chk, chk, den);\n  if (neq25519(chk, num)) M(r[0], r[0], I);\n\n  S(chk, r[0]);\n  M(chk, chk, den);\n  if (neq25519(chk, num)) return -1;\n\n  if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n  M(r[3], r[0], r[1]);\n  return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n  var i, mlen;\n  var t = new Uint8Array(32), h = new Uint8Array(64);\n  var p = [gf(), gf(), gf(), gf()],\n      q = [gf(), gf(), gf(), gf()];\n\n  mlen = -1;\n  if (n < 64) return -1;\n\n  if (unpackneg(q, pk)) return -1;\n\n  for (i = 0; i < n; i++) m[i] = sm[i];\n  for (i = 0; i < 32; i++) m[i+32] = pk[i];\n  crypto_hash(h, m, n);\n  reduce(h);\n  scalarmult(p, q, h);\n\n  scalarbase(q, sm.subarray(32));\n  add(p, q);\n  pack(t, p);\n\n  n -= 64;\n  if (crypto_verify_32(sm, 0, t, 0)) {\n    for (i = 0; i < n; i++) m[i] = 0;\n    return -1;\n  }\n\n  for (i = 0; i < n; i++) m[i] = sm[i + 64];\n  mlen = n;\n  return mlen;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n    crypto_secretbox_NONCEBYTES = 24,\n    crypto_secretbox_ZEROBYTES = 32,\n    crypto_secretbox_BOXZEROBYTES = 16,\n    crypto_scalarmult_BYTES = 32,\n    crypto_scalarmult_SCALARBYTES = 32,\n    crypto_box_PUBLICKEYBYTES = 32,\n    crypto_box_SECRETKEYBYTES = 32,\n    crypto_box_BEFORENMBYTES = 32,\n    crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n    crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n    crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n    crypto_sign_BYTES = 64,\n    crypto_sign_PUBLICKEYBYTES = 32,\n    crypto_sign_SECRETKEYBYTES = 64,\n    crypto_sign_SEEDBYTES = 32,\n    crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n  crypto_core_hsalsa20: crypto_core_hsalsa20,\n  crypto_stream_xor: crypto_stream_xor,\n  crypto_stream: crypto_stream,\n  crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n  crypto_stream_salsa20: crypto_stream_salsa20,\n  crypto_onetimeauth: crypto_onetimeauth,\n  crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n  crypto_verify_16: crypto_verify_16,\n  crypto_verify_32: crypto_verify_32,\n  crypto_secretbox: crypto_secretbox,\n  crypto_secretbox_open: crypto_secretbox_open,\n  crypto_scalarmult: crypto_scalarmult,\n  crypto_scalarmult_base: crypto_scalarmult_base,\n  crypto_box_beforenm: crypto_box_beforenm,\n  crypto_box_afternm: crypto_box_afternm,\n  crypto_box: crypto_box,\n  crypto_box_open: crypto_box_open,\n  crypto_box_keypair: crypto_box_keypair,\n  crypto_hash: crypto_hash,\n  crypto_sign: crypto_sign,\n  crypto_sign_keypair: crypto_sign_keypair,\n  crypto_sign_open: crypto_sign_open,\n\n  crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n  crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n  crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n  crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n  crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n  crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n  crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n  crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n  crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n  crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n  crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n  crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n  crypto_sign_BYTES: crypto_sign_BYTES,\n  crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n  crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n  crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n  crypto_hash_BYTES: crypto_hash_BYTES\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n  if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n  if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n  if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n  if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n  var t, i;\n  for (i = 0; i < arguments.length; i++) {\n     if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]')\n       throw new TypeError('unexpected type ' + t + ', use Uint8Array');\n  }\n}\n\nfunction cleanup(arr) {\n  for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\n// TODO: Completely remove this in v0.15.\nif (!nacl.util) {\n  nacl.util = {};\n  nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() {\n    throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js');\n  };\n}\n\nnacl.randomBytes = function(n) {\n  var b = new Uint8Array(n);\n  randombytes(b, n);\n  return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n  checkArrayTypes(msg, nonce, key);\n  checkLengths(key, nonce);\n  var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n  var c = new Uint8Array(m.length);\n  for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n  crypto_secretbox(c, m, m.length, nonce, key);\n  return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n  checkArrayTypes(box, nonce, key);\n  checkLengths(key, nonce);\n  var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n  var m = new Uint8Array(c.length);\n  for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n  if (c.length < 32) return false;\n  if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false;\n  return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n  checkArrayTypes(n, p);\n  if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n  if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n  var q = new Uint8Array(crypto_scalarmult_BYTES);\n  crypto_scalarmult(q, n, p);\n  return q;\n};\n\nnacl.scalarMult.base = function(n) {\n  checkArrayTypes(n);\n  if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n  var q = new Uint8Array(crypto_scalarmult_BYTES);\n  crypto_scalarmult_base(q, n);\n  return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n  var k = nacl.box.before(publicKey, secretKey);\n  return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n  checkArrayTypes(publicKey, secretKey);\n  checkBoxLengths(publicKey, secretKey);\n  var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n  crypto_box_beforenm(k, publicKey, secretKey);\n  return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n  var k = nacl.box.before(publicKey, secretKey);\n  return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n  var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n  crypto_box_keypair(pk, sk);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n  checkArrayTypes(secretKey);\n  if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n  crypto_scalarmult_base(pk, secretKey);\n  return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n  checkArrayTypes(msg, secretKey);\n  if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n  crypto_sign(signedMsg, msg, msg.length, secretKey);\n  return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n  if (arguments.length !== 2)\n    throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?');\n  checkArrayTypes(signedMsg, publicKey);\n  if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n    throw new Error('bad public key size');\n  var tmp = new Uint8Array(signedMsg.length);\n  var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n  if (mlen < 0) return null;\n  var m = new Uint8Array(mlen);\n  for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n  return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n  var signedMsg = nacl.sign(msg, secretKey);\n  var sig = new Uint8Array(crypto_sign_BYTES);\n  for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n  return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n  checkArrayTypes(msg, sig, publicKey);\n  if (sig.length !== crypto_sign_BYTES)\n    throw new Error('bad signature size');\n  if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n    throw new Error('bad public key size');\n  var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n  var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n  var i;\n  for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n  for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n  return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n  crypto_sign_keypair(pk, sk);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n  checkArrayTypes(secretKey);\n  if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n  return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n  checkArrayTypes(seed);\n  if (seed.length !== crypto_sign_SEEDBYTES)\n    throw new Error('bad seed size');\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n  for (var i = 0; i < 32; i++) sk[i] = seed[i];\n  crypto_sign_keypair(pk, sk, true);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n  checkArrayTypes(msg);\n  var h = new Uint8Array(crypto_hash_BYTES);\n  crypto_hash(h, msg, msg.length);\n  return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n  checkArrayTypes(x, y);\n  // Zero length arguments are considered not equal.\n  if (x.length === 0 || y.length === 0) return false;\n  if (x.length !== y.length) return false;\n  return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n  randombytes = fn;\n};\n\n(function() {\n  // Initialize PRNG if environment provides CSPRNG.\n  // If not, methods calling randombytes will throw.\n  var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n  if (crypto && crypto.getRandomValues) {\n    // Browsers.\n    var QUOTA = 65536;\n    nacl.setPRNG(function(x, n) {\n      var i, v = new Uint8Array(n);\n      for (i = 0; i < n; i += QUOTA) {\n        crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n      }\n      for (i = 0; i < n; i++) x[i] = v[i];\n      cleanup(v);\n    });\n  } else if (typeof require !== 'undefined') {\n    // Node.js.\n    crypto = require('crypto');\n    if (crypto && crypto.randomBytes) {\n      nacl.setPRNG(function(x, n) {\n        var i, v = crypto.randomBytes(n);\n        for (i = 0; i < n; i++) x[i] = v[i];\n        cleanup(v);\n      });\n    }\n  }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tbufferSplit: bufferSplit,\n\taddRSAMissing: addRSAMissing,\n\tcalculateDSAPublic: calculateDSAPublic,\n\tcalculateED25519Public: calculateED25519Public,\n\tcalculateX25519Public: calculateX25519Public,\n\tmpNormalize: mpNormalize,\n\tmpDenormalize: mpDenormalize,\n\tecNormalize: ecNormalize,\n\tcountZeros: countZeros,\n\tassertCompatible: assertCompatible,\n\tisCompatible: isCompatible,\n\topensslKeyDeriv: opensslKeyDeriv,\n\topensshCipherInfo: opensshCipherInfo,\n\tpublicFromPrivateECDSA: publicFromPrivateECDSA,\n\tzeroPadToLength: zeroPadToLength,\n\twriteBitString: writeBitString,\n\treadBitString: readBitString,\n\tpbkdf2: pbkdf2\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar PrivateKey = require('./private-key');\nvar Key = require('./key');\nvar crypto = require('crypto');\nvar algs = require('./algs');\nvar asn1 = require('asn1');\n\nvar ec = require('ecc-jsbn/lib/ec');\nvar jsbn = require('jsbn').BigInteger;\nvar nacl = require('tweetnacl');\n\nvar MAX_CLASS_DEPTH = 3;\n\nfunction isCompatible(obj, klass, needVer) {\n\tif (obj === null || typeof (obj) !== 'object')\n\t\treturn (false);\n\tif (needVer === undefined)\n\t\tneedVer = klass.prototype._sshpkApiVersion;\n\tif (obj instanceof klass &&\n\t    klass.prototype._sshpkApiVersion[0] == needVer[0])\n\t\treturn (true);\n\tvar proto = Object.getPrototypeOf(obj);\n\tvar depth = 0;\n\twhile (proto.constructor.name !== klass.name) {\n\t\tproto = Object.getPrototypeOf(proto);\n\t\tif (!proto || ++depth > MAX_CLASS_DEPTH)\n\t\t\treturn (false);\n\t}\n\tif (proto.constructor.name !== klass.name)\n\t\treturn (false);\n\tvar ver = proto._sshpkApiVersion;\n\tif (ver === undefined)\n\t\tver = klass._oldVersionDetect(obj);\n\tif (ver[0] != needVer[0] || ver[1] < needVer[1])\n\t\treturn (false);\n\treturn (true);\n}\n\nfunction assertCompatible(obj, klass, needVer, name) {\n\tif (name === undefined)\n\t\tname = 'object';\n\tassert.ok(obj, name + ' must not be null');\n\tassert.object(obj, name + ' must be an object');\n\tif (needVer === undefined)\n\t\tneedVer = klass.prototype._sshpkApiVersion;\n\tif (obj instanceof klass &&\n\t    klass.prototype._sshpkApiVersion[0] == needVer[0])\n\t\treturn;\n\tvar proto = Object.getPrototypeOf(obj);\n\tvar depth = 0;\n\twhile (proto.constructor.name !== klass.name) {\n\t\tproto = Object.getPrototypeOf(proto);\n\t\tassert.ok(proto && ++depth <= MAX_CLASS_DEPTH,\n\t\t    name + ' must be a ' + klass.name + ' instance');\n\t}\n\tassert.strictEqual(proto.constructor.name, klass.name,\n\t    name + ' must be a ' + klass.name + ' instance');\n\tvar ver = proto._sshpkApiVersion;\n\tif (ver === undefined)\n\t\tver = klass._oldVersionDetect(obj);\n\tassert.ok(ver[0] == needVer[0] && ver[1] >= needVer[1],\n\t    name + ' must be compatible with ' + klass.name + ' klass ' +\n\t    'version ' + needVer[0] + '.' + needVer[1]);\n}\n\nvar CIPHER_LEN = {\n\t'des-ede3-cbc': { key: 24, iv: 8 },\n\t'aes-128-cbc': { key: 16, iv: 16 },\n\t'aes-256-cbc': { key: 32, iv: 16 }\n};\nvar PKCS5_SALT_LEN = 8;\n\nfunction opensslKeyDeriv(cipher, salt, passphrase, count) {\n\tassert.buffer(salt, 'salt');\n\tassert.buffer(passphrase, 'passphrase');\n\tassert.number(count, 'iteration count');\n\n\tvar clen = CIPHER_LEN[cipher];\n\tassert.object(clen, 'supported cipher');\n\n\tsalt = salt.slice(0, PKCS5_SALT_LEN);\n\n\tvar D, D_prev, bufs;\n\tvar material = Buffer.alloc(0);\n\twhile (material.length < clen.key + clen.iv) {\n\t\tbufs = [];\n\t\tif (D_prev)\n\t\t\tbufs.push(D_prev);\n\t\tbufs.push(passphrase);\n\t\tbufs.push(salt);\n\t\tD = Buffer.concat(bufs);\n\t\tfor (var j = 0; j < count; ++j)\n\t\t\tD = crypto.createHash('md5').update(D).digest();\n\t\tmaterial = Buffer.concat([material, D]);\n\t\tD_prev = D;\n\t}\n\n\treturn ({\n\t    key: material.slice(0, clen.key),\n\t    iv: material.slice(clen.key, clen.key + clen.iv)\n\t});\n}\n\n/* See: RFC2898 */\nfunction pbkdf2(hashAlg, salt, iterations, size, passphrase) {\n\tvar hkey = Buffer.alloc(salt.length + 4);\n\tsalt.copy(hkey);\n\n\tvar gen = 0, ts = [];\n\tvar i = 1;\n\twhile (gen < size) {\n\t\tvar t = T(i++);\n\t\tgen += t.length;\n\t\tts.push(t);\n\t}\n\treturn (Buffer.concat(ts).slice(0, size));\n\n\tfunction T(I) {\n\t\thkey.writeUInt32BE(I, hkey.length - 4);\n\n\t\tvar hmac = crypto.createHmac(hashAlg, passphrase);\n\t\thmac.update(hkey);\n\n\t\tvar Ti = hmac.digest();\n\t\tvar Uc = Ti;\n\t\tvar c = 1;\n\t\twhile (c++ < iterations) {\n\t\t\thmac = crypto.createHmac(hashAlg, passphrase);\n\t\t\thmac.update(Uc);\n\t\t\tUc = hmac.digest();\n\t\t\tfor (var x = 0; x < Ti.length; ++x)\n\t\t\t\tTi[x] ^= Uc[x];\n\t\t}\n\t\treturn (Ti);\n\t}\n}\n\n/* Count leading zero bits on a buffer */\nfunction countZeros(buf) {\n\tvar o = 0, obit = 8;\n\twhile (o < buf.length) {\n\t\tvar mask = (1 << obit);\n\t\tif ((buf[o] & mask) === mask)\n\t\t\tbreak;\n\t\tobit--;\n\t\tif (obit < 0) {\n\t\t\to++;\n\t\t\tobit = 8;\n\t\t}\n\t}\n\treturn (o*8 + (8 - obit) - 1);\n}\n\nfunction bufferSplit(buf, chr) {\n\tassert.buffer(buf);\n\tassert.string(chr);\n\n\tvar parts = [];\n\tvar lastPart = 0;\n\tvar matches = 0;\n\tfor (var i = 0; i < buf.length; ++i) {\n\t\tif (buf[i] === chr.charCodeAt(matches))\n\t\t\t++matches;\n\t\telse if (buf[i] === chr.charCodeAt(0))\n\t\t\tmatches = 1;\n\t\telse\n\t\t\tmatches = 0;\n\n\t\tif (matches >= chr.length) {\n\t\t\tvar newPart = i + 1;\n\t\t\tparts.push(buf.slice(lastPart, newPart - matches));\n\t\t\tlastPart = newPart;\n\t\t\tmatches = 0;\n\t\t}\n\t}\n\tif (lastPart <= buf.length)\n\t\tparts.push(buf.slice(lastPart, buf.length));\n\n\treturn (parts);\n}\n\nfunction ecNormalize(buf, addZero) {\n\tassert.buffer(buf);\n\tif (buf[0] === 0x00 && buf[1] === 0x04) {\n\t\tif (addZero)\n\t\t\treturn (buf);\n\t\treturn (buf.slice(1));\n\t} else if (buf[0] === 0x04) {\n\t\tif (!addZero)\n\t\t\treturn (buf);\n\t} else {\n\t\twhile (buf[0] === 0x00)\n\t\t\tbuf = buf.slice(1);\n\t\tif (buf[0] === 0x02 || buf[0] === 0x03)\n\t\t\tthrow (new Error('Compressed elliptic curve points ' +\n\t\t\t    'are not supported'));\n\t\tif (buf[0] !== 0x04)\n\t\t\tthrow (new Error('Not a valid elliptic curve point'));\n\t\tif (!addZero)\n\t\t\treturn (buf);\n\t}\n\tvar b = Buffer.alloc(buf.length + 1);\n\tb[0] = 0x0;\n\tbuf.copy(b, 1);\n\treturn (b);\n}\n\nfunction readBitString(der, tag) {\n\tif (tag === undefined)\n\t\ttag = asn1.Ber.BitString;\n\tvar buf = der.readString(tag, true);\n\tassert.strictEqual(buf[0], 0x00, 'bit strings with unused bits are ' +\n\t    'not supported (0x' + buf[0].toString(16) + ')');\n\treturn (buf.slice(1));\n}\n\nfunction writeBitString(der, buf, tag) {\n\tif (tag === undefined)\n\t\ttag = asn1.Ber.BitString;\n\tvar b = Buffer.alloc(buf.length + 1);\n\tb[0] = 0x00;\n\tbuf.copy(b, 1);\n\tder.writeBuffer(b, tag);\n}\n\nfunction mpNormalize(buf) {\n\tassert.buffer(buf);\n\twhile (buf.length > 1 && buf[0] === 0x00 && (buf[1] & 0x80) === 0x00)\n\t\tbuf = buf.slice(1);\n\tif ((buf[0] & 0x80) === 0x80) {\n\t\tvar b = Buffer.alloc(buf.length + 1);\n\t\tb[0] = 0x00;\n\t\tbuf.copy(b, 1);\n\t\tbuf = b;\n\t}\n\treturn (buf);\n}\n\nfunction mpDenormalize(buf) {\n\tassert.buffer(buf);\n\twhile (buf.length > 1 && buf[0] === 0x00)\n\t\tbuf = buf.slice(1);\n\treturn (buf);\n}\n\nfunction zeroPadToLength(buf, len) {\n\tassert.buffer(buf);\n\tassert.number(len);\n\twhile (buf.length > len) {\n\t\tassert.equal(buf[0], 0x00);\n\t\tbuf = buf.slice(1);\n\t}\n\twhile (buf.length < len) {\n\t\tvar b = Buffer.alloc(buf.length + 1);\n\t\tb[0] = 0x00;\n\t\tbuf.copy(b, 1);\n\t\tbuf = b;\n\t}\n\treturn (buf);\n}\n\nfunction bigintToMpBuf(bigint) {\n\tvar buf = Buffer.from(bigint.toByteArray());\n\tbuf = mpNormalize(buf);\n\treturn (buf);\n}\n\nfunction calculateDSAPublic(g, p, x) {\n\tassert.buffer(g);\n\tassert.buffer(p);\n\tassert.buffer(x);\n\tg = new jsbn(g);\n\tp = new jsbn(p);\n\tx = new jsbn(x);\n\tvar y = g.modPow(x, p);\n\tvar ybuf = bigintToMpBuf(y);\n\treturn (ybuf);\n}\n\nfunction calculateED25519Public(k) {\n\tassert.buffer(k);\n\n\tvar kp = nacl.sign.keyPair.fromSeed(new Uint8Array(k));\n\treturn (Buffer.from(kp.publicKey));\n}\n\nfunction calculateX25519Public(k) {\n\tassert.buffer(k);\n\n\tvar kp = nacl.box.keyPair.fromSeed(new Uint8Array(k));\n\treturn (Buffer.from(kp.publicKey));\n}\n\nfunction addRSAMissing(key) {\n\tassert.object(key);\n\tassertCompatible(key, PrivateKey, [1, 1]);\n\n\tvar d = new jsbn(key.part.d.data);\n\tvar buf;\n\n\tif (!key.part.dmodp) {\n\t\tvar p = new jsbn(key.part.p.data);\n\t\tvar dmodp = d.mod(p.subtract(1));\n\n\t\tbuf = bigintToMpBuf(dmodp);\n\t\tkey.part.dmodp = {name: 'dmodp', data: buf};\n\t\tkey.parts.push(key.part.dmodp);\n\t}\n\tif (!key.part.dmodq) {\n\t\tvar q = new jsbn(key.part.q.data);\n\t\tvar dmodq = d.mod(q.subtract(1));\n\n\t\tbuf = bigintToMpBuf(dmodq);\n\t\tkey.part.dmodq = {name: 'dmodq', data: buf};\n\t\tkey.parts.push(key.part.dmodq);\n\t}\n}\n\nfunction publicFromPrivateECDSA(curveName, priv) {\n\tassert.string(curveName, 'curveName');\n\tassert.buffer(priv);\n\tvar params = algs.curves[curveName];\n\tvar p = new jsbn(params.p);\n\tvar a = new jsbn(params.a);\n\tvar b = new jsbn(params.b);\n\tvar curve = new ec.ECCurveFp(p, a, b);\n\tvar G = curve.decodePointHex(params.G.toString('hex'));\n\n\tvar d = new jsbn(mpNormalize(priv));\n\tvar pub = G.multiply(d);\n\tpub = Buffer.from(curve.encodePointHex(pub), 'hex');\n\n\tvar parts = [];\n\tparts.push({name: 'curve', data: Buffer.from(curveName)});\n\tparts.push({name: 'Q', data: pub});\n\n\tvar key = new Key({type: 'ecdsa', curve: curve, parts: parts});\n\treturn (key);\n}\n\nfunction opensshCipherInfo(cipher) {\n\tvar inf = {};\n\tswitch (cipher) {\n\tcase '3des-cbc':\n\t\tinf.keySize = 24;\n\t\tinf.blockSize = 8;\n\t\tinf.opensslName = 'des-ede3-cbc';\n\t\tbreak;\n\tcase 'blowfish-cbc':\n\t\tinf.keySize = 16;\n\t\tinf.blockSize = 8;\n\t\tinf.opensslName = 'bf-cbc';\n\t\tbreak;\n\tcase 'aes128-cbc':\n\tcase 'aes128-ctr':\n\tcase 'aes128-gcm@openssh.com':\n\t\tinf.keySize = 16;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = 'aes-128-' + cipher.slice(7, 10);\n\t\tbreak;\n\tcase 'aes192-cbc':\n\tcase 'aes192-ctr':\n\tcase 'aes192-gcm@openssh.com':\n\t\tinf.keySize = 24;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = 'aes-192-' + cipher.slice(7, 10);\n\t\tbreak;\n\tcase 'aes256-cbc':\n\tcase 'aes256-ctr':\n\tcase 'aes256-gcm@openssh.com':\n\t\tinf.keySize = 32;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = 'aes-256-' + cipher.slice(7, 10);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error(\n\t\t    'Unsupported openssl cipher \"' + cipher + '\"'));\n\t}\n\treturn (inf);\n}\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = SSHBuffer;\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\n\nfunction SSHBuffer(opts) {\n\tassert.object(opts, 'options');\n\tif (opts.buffer !== undefined)\n\t\tassert.buffer(opts.buffer, 'options.buffer');\n\n\tthis._size = opts.buffer ? opts.buffer.length : 1024;\n\tthis._buffer = opts.buffer || Buffer.alloc(this._size);\n\tthis._offset = 0;\n}\n\nSSHBuffer.prototype.toBuffer = function () {\n\treturn (this._buffer.slice(0, this._offset));\n};\n\nSSHBuffer.prototype.atEnd = function () {\n\treturn (this._offset >= this._buffer.length);\n};\n\nSSHBuffer.prototype.remainder = function () {\n\treturn (this._buffer.slice(this._offset));\n};\n\nSSHBuffer.prototype.skip = function (n) {\n\tthis._offset += n;\n};\n\nSSHBuffer.prototype.expand = function () {\n\tthis._size *= 2;\n\tvar buf = Buffer.alloc(this._size);\n\tthis._buffer.copy(buf, 0);\n\tthis._buffer = buf;\n};\n\nSSHBuffer.prototype.readPart = function () {\n\treturn ({data: this.readBuffer()});\n};\n\nSSHBuffer.prototype.readBuffer = function () {\n\tvar len = this._buffer.readUInt32BE(this._offset);\n\tthis._offset += 4;\n\tassert.ok(this._offset + len <= this._buffer.length,\n\t    'length out of bounds at +0x' + this._offset.toString(16) +\n\t    ' (data truncated?)');\n\tvar buf = this._buffer.slice(this._offset, this._offset + len);\n\tthis._offset += len;\n\treturn (buf);\n};\n\nSSHBuffer.prototype.readString = function () {\n\treturn (this.readBuffer().toString());\n};\n\nSSHBuffer.prototype.readCString = function () {\n\tvar offset = this._offset;\n\twhile (offset < this._buffer.length &&\n\t    this._buffer[offset] !== 0x00)\n\t\toffset++;\n\tassert.ok(offset < this._buffer.length, 'c string does not terminate');\n\tvar str = this._buffer.slice(this._offset, offset).toString();\n\tthis._offset = offset + 1;\n\treturn (str);\n};\n\nSSHBuffer.prototype.readInt = function () {\n\tvar v = this._buffer.readUInt32BE(this._offset);\n\tthis._offset += 4;\n\treturn (v);\n};\n\nSSHBuffer.prototype.readInt64 = function () {\n\tassert.ok(this._offset + 8 < this._buffer.length,\n\t    'buffer not long enough to read Int64');\n\tvar v = this._buffer.slice(this._offset, this._offset + 8);\n\tthis._offset += 8;\n\treturn (v);\n};\n\nSSHBuffer.prototype.readChar = function () {\n\tvar v = this._buffer[this._offset++];\n\treturn (v);\n};\n\nSSHBuffer.prototype.writeBuffer = function (buf) {\n\twhile (this._offset + 4 + buf.length > this._size)\n\t\tthis.expand();\n\tthis._buffer.writeUInt32BE(buf.length, this._offset);\n\tthis._offset += 4;\n\tbuf.copy(this._buffer, this._offset);\n\tthis._offset += buf.length;\n};\n\nSSHBuffer.prototype.writeString = function (str) {\n\tthis.writeBuffer(Buffer.from(str, 'utf8'));\n};\n\nSSHBuffer.prototype.writeCString = function (str) {\n\twhile (this._offset + 1 + str.length > this._size)\n\t\tthis.expand();\n\tthis._buffer.write(str, this._offset);\n\tthis._offset += str.length;\n\tthis._buffer[this._offset++] = 0;\n};\n\nSSHBuffer.prototype.writeInt = function (v) {\n\twhile (this._offset + 4 > this._size)\n\t\tthis.expand();\n\tthis._buffer.writeUInt32BE(v, this._offset);\n\tthis._offset += 4;\n};\n\nSSHBuffer.prototype.writeInt64 = function (v) {\n\tassert.buffer(v, 'value');\n\tif (v.length > 8) {\n\t\tvar lead = v.slice(0, v.length - 8);\n\t\tfor (var i = 0; i < lead.length; ++i) {\n\t\t\tassert.strictEqual(lead[i], 0,\n\t\t\t    'must fit in 64 bits of precision');\n\t\t}\n\t\tv = v.slice(v.length - 8, v.length);\n\t}\n\twhile (this._offset + 8 > this._size)\n\t\tthis.expand();\n\tv.copy(this._buffer, this._offset);\n\tthis._offset += 8;\n};\n\nSSHBuffer.prototype.writeChar = function (v) {\n\twhile (this._offset + 1 > this._size)\n\t\tthis.expand();\n\tthis._buffer[this._offset++] = v;\n};\n\nSSHBuffer.prototype.writePart = function (p) {\n\tthis.writeBuffer(p.data);\n};\n\nSSHBuffer.prototype.write = function (buf) {\n\twhile (this._offset + buf.length > this._size)\n\t\tthis.expand();\n\tbuf.copy(this._buffer, this._offset);\n\tthis._offset += buf.length;\n};\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = Signature;\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar errs = require('./errors');\nvar utils = require('./utils');\nvar asn1 = require('asn1');\nvar SSHBuffer = require('./ssh-buffer');\n\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\nvar SignatureParseError = errs.SignatureParseError;\n\nfunction Signature(opts) {\n\tassert.object(opts, 'options');\n\tassert.arrayOfObject(opts.parts, 'options.parts');\n\tassert.string(opts.type, 'options.type');\n\n\tvar partLookup = {};\n\tfor (var i = 0; i < opts.parts.length; ++i) {\n\t\tvar part = opts.parts[i];\n\t\tpartLookup[part.name] = part;\n\t}\n\n\tthis.type = opts.type;\n\tthis.hashAlgorithm = opts.hashAlgo;\n\tthis.curve = opts.curve;\n\tthis.parts = opts.parts;\n\tthis.part = partLookup;\n}\n\nSignature.prototype.toBuffer = function (format) {\n\tif (format === undefined)\n\t\tformat = 'asn1';\n\tassert.string(format, 'format');\n\n\tvar buf;\n\tvar stype = 'ssh-' + this.type;\n\n\tswitch (this.type) {\n\tcase 'rsa':\n\t\tswitch (this.hashAlgorithm) {\n\t\tcase 'sha256':\n\t\t\tstype = 'rsa-sha2-256';\n\t\t\tbreak;\n\t\tcase 'sha512':\n\t\t\tstype = 'rsa-sha2-512';\n\t\t\tbreak;\n\t\tcase 'sha1':\n\t\tcase undefined:\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow (new Error('SSH signature ' +\n\t\t\t    'format does not support hash ' +\n\t\t\t    'algorithm ' + this.hashAlgorithm));\n\t\t}\n\t\tif (format === 'ssh') {\n\t\t\tbuf = new SSHBuffer({});\n\t\t\tbuf.writeString(stype);\n\t\t\tbuf.writePart(this.part.sig);\n\t\t\treturn (buf.toBuffer());\n\t\t} else {\n\t\t\treturn (this.part.sig.data);\n\t\t}\n\t\tbreak;\n\n\tcase 'ed25519':\n\t\tif (format === 'ssh') {\n\t\t\tbuf = new SSHBuffer({});\n\t\t\tbuf.writeString(stype);\n\t\t\tbuf.writePart(this.part.sig);\n\t\t\treturn (buf.toBuffer());\n\t\t} else {\n\t\t\treturn (this.part.sig.data);\n\t\t}\n\t\tbreak;\n\n\tcase 'dsa':\n\tcase 'ecdsa':\n\t\tvar r, s;\n\t\tif (format === 'asn1') {\n\t\t\tvar der = new asn1.BerWriter();\n\t\t\tder.startSequence();\n\t\t\tr = utils.mpNormalize(this.part.r.data);\n\t\t\ts = utils.mpNormalize(this.part.s.data);\n\t\t\tder.writeBuffer(r, asn1.Ber.Integer);\n\t\t\tder.writeBuffer(s, asn1.Ber.Integer);\n\t\t\tder.endSequence();\n\t\t\treturn (der.buffer);\n\t\t} else if (format === 'ssh' && this.type === 'dsa') {\n\t\t\tbuf = new SSHBuffer({});\n\t\t\tbuf.writeString('ssh-dss');\n\t\t\tr = this.part.r.data;\n\t\t\tif (r.length > 20 && r[0] === 0x00)\n\t\t\t\tr = r.slice(1);\n\t\t\ts = this.part.s.data;\n\t\t\tif (s.length > 20 && s[0] === 0x00)\n\t\t\t\ts = s.slice(1);\n\t\t\tif ((this.hashAlgorithm &&\n\t\t\t    this.hashAlgorithm !== 'sha1') ||\n\t\t\t    r.length + s.length !== 40) {\n\t\t\t\tthrow (new Error('OpenSSH only supports ' +\n\t\t\t\t    'DSA signatures with SHA1 hash'));\n\t\t\t}\n\t\t\tbuf.writeBuffer(Buffer.concat([r, s]));\n\t\t\treturn (buf.toBuffer());\n\t\t} else if (format === 'ssh' && this.type === 'ecdsa') {\n\t\t\tvar inner = new SSHBuffer({});\n\t\t\tr = this.part.r.data;\n\t\t\tinner.writeBuffer(r);\n\t\t\tinner.writePart(this.part.s);\n\n\t\t\tbuf = new SSHBuffer({});\n\t\t\t/* XXX: find a more proper way to do this? */\n\t\t\tvar curve;\n\t\t\tif (r[0] === 0x00)\n\t\t\t\tr = r.slice(1);\n\t\t\tvar sz = r.length * 8;\n\t\t\tif (sz === 256)\n\t\t\t\tcurve = 'nistp256';\n\t\t\telse if (sz === 384)\n\t\t\t\tcurve = 'nistp384';\n\t\t\telse if (sz === 528)\n\t\t\t\tcurve = 'nistp521';\n\t\t\tbuf.writeString('ecdsa-sha2-' + curve);\n\t\t\tbuf.writeBuffer(inner.toBuffer());\n\t\t\treturn (buf.toBuffer());\n\t\t}\n\t\tthrow (new Error('Invalid signature format'));\n\tdefault:\n\t\tthrow (new Error('Invalid signature data'));\n\t}\n};\n\nSignature.prototype.toString = function (format) {\n\tassert.optionalString(format, 'format');\n\treturn (this.toBuffer(format).toString('base64'));\n};\n\nSignature.parse = function (data, type, format) {\n\tif (typeof (data) === 'string')\n\t\tdata = Buffer.from(data, 'base64');\n\tassert.buffer(data, 'data');\n\tassert.string(format, 'format');\n\tassert.string(type, 'type');\n\n\tvar opts = {};\n\topts.type = type.toLowerCase();\n\topts.parts = [];\n\n\ttry {\n\t\tassert.ok(data.length > 0, 'signature must not be empty');\n\t\tswitch (opts.type) {\n\t\tcase 'rsa':\n\t\t\treturn (parseOneNum(data, type, format, opts));\n\t\tcase 'ed25519':\n\t\t\treturn (parseOneNum(data, type, format, opts));\n\n\t\tcase 'dsa':\n\t\tcase 'ecdsa':\n\t\t\tif (format === 'asn1')\n\t\t\t\treturn (parseDSAasn1(data, type, format, opts));\n\t\t\telse if (opts.type === 'dsa')\n\t\t\t\treturn (parseDSA(data, type, format, opts));\n\t\t\telse\n\t\t\t\treturn (parseECDSA(data, type, format, opts));\n\n\t\tdefault:\n\t\t\tthrow (new InvalidAlgorithmError(type));\n\t\t}\n\n\t} catch (e) {\n\t\tif (e instanceof InvalidAlgorithmError)\n\t\t\tthrow (e);\n\t\tthrow (new SignatureParseError(type, format, e));\n\t}\n};\n\nfunction parseOneNum(data, type, format, opts) {\n\tif (format === 'ssh') {\n\t\ttry {\n\t\t\tvar buf = new SSHBuffer({buffer: data});\n\t\t\tvar head = buf.readString();\n\t\t} catch (e) {\n\t\t\t/* fall through */\n\t\t}\n\t\tif (buf !== undefined) {\n\t\t\tvar msg = 'SSH signature does not match expected ' +\n\t\t\t    'type (expected ' + type + ', got ' + head + ')';\n\t\t\tswitch (head) {\n\t\t\tcase 'ssh-rsa':\n\t\t\t\tassert.strictEqual(type, 'rsa', msg);\n\t\t\t\topts.hashAlgo = 'sha1';\n\t\t\t\tbreak;\n\t\t\tcase 'rsa-sha2-256':\n\t\t\t\tassert.strictEqual(type, 'rsa', msg);\n\t\t\t\topts.hashAlgo = 'sha256';\n\t\t\t\tbreak;\n\t\t\tcase 'rsa-sha2-512':\n\t\t\t\tassert.strictEqual(type, 'rsa', msg);\n\t\t\t\topts.hashAlgo = 'sha512';\n\t\t\t\tbreak;\n\t\t\tcase 'ssh-ed25519':\n\t\t\t\tassert.strictEqual(type, 'ed25519', msg);\n\t\t\t\topts.hashAlgo = 'sha512';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow (new Error('Unknown SSH signature ' +\n\t\t\t\t    'type: ' + head));\n\t\t\t}\n\t\t\tvar sig = buf.readPart();\n\t\t\tassert.ok(buf.atEnd(), 'extra trailing bytes');\n\t\t\tsig.name = 'sig';\n\t\t\topts.parts.push(sig);\n\t\t\treturn (new Signature(opts));\n\t\t}\n\t}\n\topts.parts.push({name: 'sig', data: data});\n\treturn (new Signature(opts));\n}\n\nfunction parseDSAasn1(data, type, format, opts) {\n\tvar der = new asn1.BerReader(data);\n\tder.readSequence();\n\tvar r = der.readString(asn1.Ber.Integer, true);\n\tvar s = der.readString(asn1.Ber.Integer, true);\n\n\topts.parts.push({name: 'r', data: utils.mpNormalize(r)});\n\topts.parts.push({name: 's', data: utils.mpNormalize(s)});\n\n\treturn (new Signature(opts));\n}\n\nfunction parseDSA(data, type, format, opts) {\n\tif (data.length != 40) {\n\t\tvar buf = new SSHBuffer({buffer: data});\n\t\tvar d = buf.readBuffer();\n\t\tif (d.toString('ascii') === 'ssh-dss')\n\t\t\td = buf.readBuffer();\n\t\tassert.ok(buf.atEnd(), 'extra trailing bytes');\n\t\tassert.strictEqual(d.length, 40, 'invalid inner length');\n\t\tdata = d;\n\t}\n\topts.parts.push({name: 'r', data: data.slice(0, 20)});\n\topts.parts.push({name: 's', data: data.slice(20, 40)});\n\treturn (new Signature(opts));\n}\n\nfunction parseECDSA(data, type, format, opts) {\n\tvar buf = new SSHBuffer({buffer: data});\n\n\tvar r, s;\n\tvar inner = buf.readBuffer();\n\tvar stype = inner.toString('ascii');\n\tif (stype.slice(0, 6) === 'ecdsa-') {\n\t\tvar parts = stype.split('-');\n\t\tassert.strictEqual(parts[0], 'ecdsa');\n\t\tassert.strictEqual(parts[1], 'sha2');\n\t\topts.curve = parts[2];\n\t\tswitch (opts.curve) {\n\t\tcase 'nistp256':\n\t\t\topts.hashAlgo = 'sha256';\n\t\t\tbreak;\n\t\tcase 'nistp384':\n\t\t\topts.hashAlgo = 'sha384';\n\t\t\tbreak;\n\t\tcase 'nistp521':\n\t\t\topts.hashAlgo = 'sha512';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow (new Error('Unsupported ECDSA curve: ' +\n\t\t\t    opts.curve));\n\t\t}\n\t\tinner = buf.readBuffer();\n\t\tassert.ok(buf.atEnd(), 'extra trailing bytes on outer');\n\t\tbuf = new SSHBuffer({buffer: inner});\n\t\tr = buf.readPart();\n\t} else {\n\t\tr = {data: inner};\n\t}\n\n\ts = buf.readPart();\n\tassert.ok(buf.atEnd(), 'extra trailing bytes');\n\n\tr.name = 'r';\n\ts.name = 's';\n\n\topts.parts.push(r);\n\topts.parts.push(s);\n\treturn (new Signature(opts));\n}\n\nSignature.isSignature = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Signature, ver));\n};\n\n/*\n * API versions for Signature:\n * [1,0] -- initial ver\n * [2,0] -- support for rsa in full ssh format, compat with sshpk-agent\n *          hashAlgorithm property\n * [2,1] -- first tagged version\n */\nSignature.prototype._sshpkApiVersion = [2, 1];\n\nSignature._oldVersionDetect = function (obj) {\n\tassert.func(obj.toBuffer);\n\tif (obj.hasOwnProperty('hashAlgorithm'))\n\t\treturn ([2, 0]);\n\treturn ([1, 0]);\n};\n","// Named EC curves\n\n// Requires ec.js, jsbn.js, and jsbn2.js\nvar BigInteger = require('jsbn').BigInteger\nvar ECCurveFp = require('./ec.js').ECCurveFp\n\n\n// ----------------\n// X9ECParameters\n\n// constructor\nfunction X9ECParameters(curve,g,n,h) {\n    this.curve = curve;\n    this.g = g;\n    this.n = n;\n    this.h = h;\n}\n\nfunction x9getCurve() {\n    return this.curve;\n}\n\nfunction x9getG() {\n    return this.g;\n}\n\nfunction x9getN() {\n    return this.n;\n}\n\nfunction x9getH() {\n    return this.h;\n}\n\nX9ECParameters.prototype.getCurve = x9getCurve;\nX9ECParameters.prototype.getG = x9getG;\nX9ECParameters.prototype.getN = x9getN;\nX9ECParameters.prototype.getH = x9getH;\n\n// ----------------\n// SECNamedCurves\n\nfunction fromHex(s) { return new BigInteger(s, 16); }\n\nfunction secp128r1() {\n    // p = 2^128 - 2^97 - 1\n    var p = fromHex(\"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF\");\n    var a = fromHex(\"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC\");\n    var b = fromHex(\"E87579C11079F43DD824993C2CEE5ED3\");\n    //byte[] S = Hex.decode(\"000E0D4D696E6768756151750CC03A4473D03679\");\n    var n = fromHex(\"FFFFFFFE0000000075A30D1B9038A115\");\n    var h = BigInteger.ONE;\n    var curve = new ECCurveFp(p, a, b);\n    var G = curve.decodePointHex(\"04\"\n                + \"161FF7528B899B2D0C28607CA52C5B86\"\n\t\t+ \"CF5AC8395BAFEB13C02DA292DDED7A83\");\n    return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp160k1() {\n    // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1\n    var p = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73\");\n    var a = BigInteger.ZERO;\n    var b = fromHex(\"7\");\n    //byte[] S = null;\n    var n = fromHex(\"0100000000000000000001B8FA16DFAB9ACA16B6B3\");\n    var h = BigInteger.ONE;\n    var curve = new ECCurveFp(p, a, b);\n    var G = curve.decodePointHex(\"04\"\n                + \"3B4C382CE37AA192A4019E763036F4F5DD4D7EBB\"\n                + \"938CF935318FDCED6BC28286531733C3F03C4FEE\");\n    return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp160r1() {\n    // p = 2^160 - 2^31 - 1\n    var p = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF\");\n    var a = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC\");\n    var b = fromHex(\"1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45\");\n    //byte[] S = Hex.decode(\"1053CDE42C14D696E67687561517533BF3F83345\");\n    var n = fromHex(\"0100000000000000000001F4C8F927AED3CA752257\");\n    var h = BigInteger.ONE;\n    var curve = new ECCurveFp(p, a, b);\n    var G = curve.decodePointHex(\"04\"\n\t\t+ \"4A96B5688EF573284664698968C38BB913CBFC82\"\n\t\t+ \"23A628553168947D59DCC912042351377AC5FB32\");\n    return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp192k1() {\n    // p = 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1\n    var p = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37\");\n    var a = BigInteger.ZERO;\n    var b = fromHex(\"3\");\n    //byte[] S = null;\n    var n = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D\");\n    var h = BigInteger.ONE;\n    var curve = new ECCurveFp(p, a, b);\n    var G = curve.decodePointHex(\"04\"\n                + \"DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D\"\n                + \"9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D\");\n    return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp192r1() {\n    // p = 2^192 - 2^64 - 1\n    var p = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF\");\n    var a = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC\");\n    var b = fromHex(\"64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1\");\n    //byte[] S = Hex.decode(\"3045AE6FC8422F64ED579528D38120EAE12196D5\");\n    var n = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831\");\n    var h = BigInteger.ONE;\n    var curve = new ECCurveFp(p, a, b);\n    var G = curve.decodePointHex(\"04\"\n                + \"188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012\"\n                + \"07192B95FFC8DA78631011ED6B24CDD573F977A11E794811\");\n    return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp224r1() {\n    // p = 2^224 - 2^96 + 1\n    var p = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001\");\n    var a = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE\");\n    var b = fromHex(\"B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4\");\n    //byte[] S = Hex.decode(\"BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5\");\n    var n = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D\");\n    var h = BigInteger.ONE;\n    var curve = new ECCurveFp(p, a, b);\n    var G = curve.decodePointHex(\"04\"\n                + \"B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21\"\n                + \"BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34\");\n    return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp256r1() {\n    // p = 2^224 (2^32 - 1) + 2^192 + 2^96 - 1\n    var p = fromHex(\"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF\");\n    var a = fromHex(\"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC\");\n    var b = fromHex(\"5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B\");\n    //byte[] S = Hex.decode(\"C49D360886E704936A6678E1139D26B7819F7E90\");\n    var n = fromHex(\"FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551\");\n    var h = BigInteger.ONE;\n    var curve = new ECCurveFp(p, a, b);\n    var G = curve.decodePointHex(\"04\"\n                + \"6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296\"\n\t\t+ \"4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5\");\n    return new X9ECParameters(curve, G, n, h);\n}\n\n// TODO: make this into a proper hashtable\nfunction getSECCurveByName(name) {\n    if(name == \"secp128r1\") return secp128r1();\n    if(name == \"secp160k1\") return secp160k1();\n    if(name == \"secp160r1\") return secp160r1();\n    if(name == \"secp192k1\") return secp192k1();\n    if(name == \"secp192r1\") return secp192r1();\n    if(name == \"secp224r1\") return secp224r1();\n    if(name == \"secp256r1\") return secp256r1();\n    return null;\n}\n\nmodule.exports = {\n  \"secp128r1\":secp128r1,\n  \"secp160k1\":secp160k1,\n  \"secp160r1\":secp160r1,\n  \"secp192k1\":secp192k1,\n  \"secp192r1\":secp192r1,\n  \"secp224r1\":secp224r1,\n  \"secp256r1\":secp256r1\n}\n","var crypto = require(\"crypto\");\nvar BigInteger = require(\"jsbn\").BigInteger;\nvar ECPointFp = require(\"./lib/ec.js\").ECPointFp;\nvar Buffer = require(\"safer-buffer\").Buffer;\nexports.ECCurves = require(\"./lib/sec.js\");\n\n// zero prepad\nfunction unstupid(hex,len)\n{\n\treturn (hex.length >= len) ? hex : unstupid(\"0\"+hex,len);\n}\n\nexports.ECKey = function(curve, key, isPublic)\n{\n  var priv;\n\tvar c = curve();\n\tvar n = c.getN();\n  var bytes = Math.floor(n.bitLength()/8);\n\n  if(key)\n  {\n    if(isPublic)\n    {\n      var curve = c.getCurve();\n//      var x = key.slice(1,bytes+1); // skip the 04 for uncompressed format\n//      var y = key.slice(bytes+1);\n//      this.P = new ECPointFp(curve,\n//        curve.fromBigInteger(new BigInteger(x.toString(\"hex\"), 16)),\n//        curve.fromBigInteger(new BigInteger(y.toString(\"hex\"), 16)));      \n      this.P = curve.decodePointHex(key.toString(\"hex\"));\n    }else{\n      if(key.length != bytes) return false;\n      priv = new BigInteger(key.toString(\"hex\"), 16);      \n    }\n  }else{\n    var n1 = n.subtract(BigInteger.ONE);\n    var r = new BigInteger(crypto.randomBytes(n.bitLength()));\n    priv = r.mod(n1).add(BigInteger.ONE);\n    this.P = c.getG().multiply(priv);\n  }\n  if(this.P)\n  {\n//  var pubhex = unstupid(this.P.getX().toBigInteger().toString(16),bytes*2)+unstupid(this.P.getY().toBigInteger().toString(16),bytes*2);\n//  this.PublicKey = Buffer.from(\"04\"+pubhex,\"hex\");\n    this.PublicKey = Buffer.from(c.getCurve().encodeCompressedPointHex(this.P),\"hex\");\n  }\n  if(priv)\n  {\n    this.PrivateKey = Buffer.from(unstupid(priv.toString(16),bytes*2),\"hex\");\n    this.deriveSharedSecret = function(key)\n    {\n      if(!key || !key.P) return false;\n      var S = key.P.multiply(priv);\n      return Buffer.from(unstupid(S.getX().toBigInteger().toString(16),bytes*2),\"hex\");\n   }     \n  }\n}\n\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = {\n\tDiffieHellman: DiffieHellman,\n\tgenerateECDSA: generateECDSA,\n\tgenerateED25519: generateED25519\n};\n\nvar assert = require('assert-plus');\nvar crypto = require('crypto');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('./algs');\nvar utils = require('./utils');\nvar nacl = require('tweetnacl');\n\nvar Key = require('./key');\nvar PrivateKey = require('./private-key');\n\nvar CRYPTO_HAVE_ECDH = (crypto.createECDH !== undefined);\n\nvar ecdh = require('ecc-jsbn');\nvar ec = require('ecc-jsbn/lib/ec');\nvar jsbn = require('jsbn').BigInteger;\n\nfunction DiffieHellman(key) {\n\tutils.assertCompatible(key, Key, [1, 4], 'key');\n\tthis._isPriv = PrivateKey.isPrivateKey(key, [1, 3]);\n\tthis._algo = key.type;\n\tthis._curve = key.curve;\n\tthis._key = key;\n\tif (key.type === 'dsa') {\n\t\tif (!CRYPTO_HAVE_ECDH) {\n\t\t\tthrow (new Error('Due to bugs in the node 0.10 ' +\n\t\t\t    'crypto API, node 0.12.x or later is required ' +\n\t\t\t    'to use DH'));\n\t\t}\n\t\tthis._dh = crypto.createDiffieHellman(\n\t\t    key.part.p.data, undefined,\n\t\t    key.part.g.data, undefined);\n\t\tthis._p = key.part.p;\n\t\tthis._g = key.part.g;\n\t\tif (this._isPriv)\n\t\t\tthis._dh.setPrivateKey(key.part.x.data);\n\t\tthis._dh.setPublicKey(key.part.y.data);\n\n\t} else if (key.type === 'ecdsa') {\n\t\tif (!CRYPTO_HAVE_ECDH) {\n\t\t\tthis._ecParams = new X9ECParameters(this._curve);\n\n\t\t\tif (this._isPriv) {\n\t\t\t\tthis._priv = new ECPrivate(\n\t\t\t\t    this._ecParams, key.part.d.data);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tvar curve = {\n\t\t\t'nistp256': 'prime256v1',\n\t\t\t'nistp384': 'secp384r1',\n\t\t\t'nistp521': 'secp521r1'\n\t\t}[key.curve];\n\t\tthis._dh = crypto.createECDH(curve);\n\t\tif (typeof (this._dh) !== 'object' ||\n\t\t    typeof (this._dh.setPrivateKey) !== 'function') {\n\t\t\tCRYPTO_HAVE_ECDH = false;\n\t\t\tDiffieHellman.call(this, key);\n\t\t\treturn;\n\t\t}\n\t\tif (this._isPriv)\n\t\t\tthis._dh.setPrivateKey(key.part.d.data);\n\t\tthis._dh.setPublicKey(key.part.Q.data);\n\n\t} else if (key.type === 'curve25519') {\n\t\tif (this._isPriv) {\n\t\t\tutils.assertCompatible(key, PrivateKey, [1, 5], 'key');\n\t\t\tthis._priv = key.part.k.data;\n\t\t}\n\n\t} else {\n\t\tthrow (new Error('DH not supported for ' + key.type + ' keys'));\n\t}\n}\n\nDiffieHellman.prototype.getPublicKey = function () {\n\tif (this._isPriv)\n\t\treturn (this._key.toPublic());\n\treturn (this._key);\n};\n\nDiffieHellman.prototype.getPrivateKey = function () {\n\tif (this._isPriv)\n\t\treturn (this._key);\n\telse\n\t\treturn (undefined);\n};\nDiffieHellman.prototype.getKey = DiffieHellman.prototype.getPrivateKey;\n\nDiffieHellman.prototype._keyCheck = function (pk, isPub) {\n\tassert.object(pk, 'key');\n\tif (!isPub)\n\t\tutils.assertCompatible(pk, PrivateKey, [1, 3], 'key');\n\tutils.assertCompatible(pk, Key, [1, 4], 'key');\n\n\tif (pk.type !== this._algo) {\n\t\tthrow (new Error('A ' + pk.type + ' key cannot be used in ' +\n\t\t    this._algo + ' Diffie-Hellman'));\n\t}\n\n\tif (pk.curve !== this._curve) {\n\t\tthrow (new Error('A key from the ' + pk.curve + ' curve ' +\n\t\t    'cannot be used with a ' + this._curve +\n\t\t    ' Diffie-Hellman'));\n\t}\n\n\tif (pk.type === 'dsa') {\n\t\tassert.deepEqual(pk.part.p, this._p,\n\t\t    'DSA key prime does not match');\n\t\tassert.deepEqual(pk.part.g, this._g,\n\t\t    'DSA key generator does not match');\n\t}\n};\n\nDiffieHellman.prototype.setKey = function (pk) {\n\tthis._keyCheck(pk);\n\n\tif (pk.type === 'dsa') {\n\t\tthis._dh.setPrivateKey(pk.part.x.data);\n\t\tthis._dh.setPublicKey(pk.part.y.data);\n\n\t} else if (pk.type === 'ecdsa') {\n\t\tif (CRYPTO_HAVE_ECDH) {\n\t\t\tthis._dh.setPrivateKey(pk.part.d.data);\n\t\t\tthis._dh.setPublicKey(pk.part.Q.data);\n\t\t} else {\n\t\t\tthis._priv = new ECPrivate(\n\t\t\t    this._ecParams, pk.part.d.data);\n\t\t}\n\n\t} else if (pk.type === 'curve25519') {\n\t\tvar k = pk.part.k;\n\t\tif (!pk.part.k)\n\t\t\tk = pk.part.r;\n\t\tthis._priv = k.data;\n\t\tif (this._priv[0] === 0x00)\n\t\t\tthis._priv = this._priv.slice(1);\n\t\tthis._priv = this._priv.slice(0, 32);\n\t}\n\tthis._key = pk;\n\tthis._isPriv = true;\n};\nDiffieHellman.prototype.setPrivateKey = DiffieHellman.prototype.setKey;\n\nDiffieHellman.prototype.computeSecret = function (otherpk) {\n\tthis._keyCheck(otherpk, true);\n\tif (!this._isPriv)\n\t\tthrow (new Error('DH exchange has not been initialized with ' +\n\t\t    'a private key yet'));\n\n\tvar pub;\n\tif (this._algo === 'dsa') {\n\t\treturn (this._dh.computeSecret(\n\t\t    otherpk.part.y.data));\n\n\t} else if (this._algo === 'ecdsa') {\n\t\tif (CRYPTO_HAVE_ECDH) {\n\t\t\treturn (this._dh.computeSecret(\n\t\t\t    otherpk.part.Q.data));\n\t\t} else {\n\t\t\tpub = new ECPublic(\n\t\t\t    this._ecParams, otherpk.part.Q.data);\n\t\t\treturn (this._priv.deriveSharedSecret(pub));\n\t\t}\n\n\t} else if (this._algo === 'curve25519') {\n\t\tpub = otherpk.part.A.data;\n\t\twhile (pub[0] === 0x00 && pub.length > 32)\n\t\t\tpub = pub.slice(1);\n\t\tvar priv = this._priv;\n\t\tassert.strictEqual(pub.length, 32);\n\t\tassert.strictEqual(priv.length, 32);\n\n\t\tvar secret = nacl.box.before(new Uint8Array(pub),\n\t\t    new Uint8Array(priv));\n\n\t\treturn (Buffer.from(secret));\n\t}\n\n\tthrow (new Error('Invalid algorithm: ' + this._algo));\n};\n\nDiffieHellman.prototype.generateKey = function () {\n\tvar parts = [];\n\tvar priv, pub;\n\tif (this._algo === 'dsa') {\n\t\tthis._dh.generateKeys();\n\n\t\tparts.push({name: 'p', data: this._p.data});\n\t\tparts.push({name: 'q', data: this._key.part.q.data});\n\t\tparts.push({name: 'g', data: this._g.data});\n\t\tparts.push({name: 'y', data: this._dh.getPublicKey()});\n\t\tparts.push({name: 'x', data: this._dh.getPrivateKey()});\n\t\tthis._key = new PrivateKey({\n\t\t\ttype: 'dsa',\n\t\t\tparts: parts\n\t\t});\n\t\tthis._isPriv = true;\n\t\treturn (this._key);\n\n\t} else if (this._algo === 'ecdsa') {\n\t\tif (CRYPTO_HAVE_ECDH) {\n\t\t\tthis._dh.generateKeys();\n\n\t\t\tparts.push({name: 'curve',\n\t\t\t    data: Buffer.from(this._curve)});\n\t\t\tparts.push({name: 'Q', data: this._dh.getPublicKey()});\n\t\t\tparts.push({name: 'd', data: this._dh.getPrivateKey()});\n\t\t\tthis._key = new PrivateKey({\n\t\t\t\ttype: 'ecdsa',\n\t\t\t\tcurve: this._curve,\n\t\t\t\tparts: parts\n\t\t\t});\n\t\t\tthis._isPriv = true;\n\t\t\treturn (this._key);\n\n\t\t} else {\n\t\t\tvar n = this._ecParams.getN();\n\t\t\tvar r = new jsbn(crypto.randomBytes(n.bitLength()));\n\t\t\tvar n1 = n.subtract(jsbn.ONE);\n\t\t\tpriv = r.mod(n1).add(jsbn.ONE);\n\t\t\tpub = this._ecParams.getG().multiply(priv);\n\n\t\t\tpriv = Buffer.from(priv.toByteArray());\n\t\t\tpub = Buffer.from(this._ecParams.getCurve().\n\t\t\t    encodePointHex(pub), 'hex');\n\n\t\t\tthis._priv = new ECPrivate(this._ecParams, priv);\n\n\t\t\tparts.push({name: 'curve',\n\t\t\t    data: Buffer.from(this._curve)});\n\t\t\tparts.push({name: 'Q', data: pub});\n\t\t\tparts.push({name: 'd', data: priv});\n\n\t\t\tthis._key = new PrivateKey({\n\t\t\t\ttype: 'ecdsa',\n\t\t\t\tcurve: this._curve,\n\t\t\t\tparts: parts\n\t\t\t});\n\t\t\tthis._isPriv = true;\n\t\t\treturn (this._key);\n\t\t}\n\n\t} else if (this._algo === 'curve25519') {\n\t\tvar pair = nacl.box.keyPair();\n\t\tpriv = Buffer.from(pair.secretKey);\n\t\tpub = Buffer.from(pair.publicKey);\n\t\tpriv = Buffer.concat([priv, pub]);\n\t\tassert.strictEqual(priv.length, 64);\n\t\tassert.strictEqual(pub.length, 32);\n\n\t\tparts.push({name: 'A', data: pub});\n\t\tparts.push({name: 'k', data: priv});\n\t\tthis._key = new PrivateKey({\n\t\t\ttype: 'curve25519',\n\t\t\tparts: parts\n\t\t});\n\t\tthis._isPriv = true;\n\t\treturn (this._key);\n\t}\n\n\tthrow (new Error('Invalid algorithm: ' + this._algo));\n};\nDiffieHellman.prototype.generateKeys = DiffieHellman.prototype.generateKey;\n\n/* These are helpers for using ecc-jsbn (for node 0.10 compatibility). */\n\nfunction X9ECParameters(name) {\n\tvar params = algs.curves[name];\n\tassert.object(params);\n\n\tvar p = new jsbn(params.p);\n\tvar a = new jsbn(params.a);\n\tvar b = new jsbn(params.b);\n\tvar n = new jsbn(params.n);\n\tvar h = jsbn.ONE;\n\tvar curve = new ec.ECCurveFp(p, a, b);\n\tvar G = curve.decodePointHex(params.G.toString('hex'));\n\n\tthis.curve = curve;\n\tthis.g = G;\n\tthis.n = n;\n\tthis.h = h;\n}\nX9ECParameters.prototype.getCurve = function () { return (this.curve); };\nX9ECParameters.prototype.getG = function () { return (this.g); };\nX9ECParameters.prototype.getN = function () { return (this.n); };\nX9ECParameters.prototype.getH = function () { return (this.h); };\n\nfunction ECPublic(params, buffer) {\n\tthis._params = params;\n\tif (buffer[0] === 0x00)\n\t\tbuffer = buffer.slice(1);\n\tthis._pub = params.getCurve().decodePointHex(buffer.toString('hex'));\n}\n\nfunction ECPrivate(params, buffer) {\n\tthis._params = params;\n\tthis._priv = new jsbn(utils.mpNormalize(buffer));\n}\nECPrivate.prototype.deriveSharedSecret = function (pubKey) {\n\tassert.ok(pubKey instanceof ECPublic);\n\tvar S = pubKey._pub.multiply(this._priv);\n\treturn (Buffer.from(S.getX().toBigInteger().toByteArray()));\n};\n\nfunction generateED25519() {\n\tvar pair = nacl.sign.keyPair();\n\tvar priv = Buffer.from(pair.secretKey);\n\tvar pub = Buffer.from(pair.publicKey);\n\tassert.strictEqual(priv.length, 64);\n\tassert.strictEqual(pub.length, 32);\n\n\tvar parts = [];\n\tparts.push({name: 'A', data: pub});\n\tparts.push({name: 'k', data: priv.slice(0, 32)});\n\tvar key = new PrivateKey({\n\t\ttype: 'ed25519',\n\t\tparts: parts\n\t});\n\treturn (key);\n}\n\n/* Generates a new ECDSA private key on a given curve. */\nfunction generateECDSA(curve) {\n\tvar parts = [];\n\tvar key;\n\n\tif (CRYPTO_HAVE_ECDH) {\n\t\t/*\n\t\t * Node crypto doesn't expose key generation directly, but the\n\t\t * ECDH instances can generate keys. It turns out this just\n\t\t * calls into the OpenSSL generic key generator, and we can\n\t\t * read its output happily without doing an actual DH. So we\n\t\t * use that here.\n\t\t */\n\t\tvar osCurve = {\n\t\t\t'nistp256': 'prime256v1',\n\t\t\t'nistp384': 'secp384r1',\n\t\t\t'nistp521': 'secp521r1'\n\t\t}[curve];\n\n\t\tvar dh = crypto.createECDH(osCurve);\n\t\tdh.generateKeys();\n\n\t\tparts.push({name: 'curve',\n\t\t    data: Buffer.from(curve)});\n\t\tparts.push({name: 'Q', data: dh.getPublicKey()});\n\t\tparts.push({name: 'd', data: dh.getPrivateKey()});\n\n\t\tkey = new PrivateKey({\n\t\t\ttype: 'ecdsa',\n\t\t\tcurve: curve,\n\t\t\tparts: parts\n\t\t});\n\t\treturn (key);\n\t} else {\n\n\t\tvar ecParams = new X9ECParameters(curve);\n\n\t\t/* This algorithm taken from FIPS PUB 186-4 (section B.4.1) */\n\t\tvar n = ecParams.getN();\n\t\t/*\n\t\t * The crypto.randomBytes() function can only give us whole\n\t\t * bytes, so taking a nod from X9.62, we round up.\n\t\t */\n\t\tvar cByteLen = Math.ceil((n.bitLength() + 64) / 8);\n\t\tvar c = new jsbn(crypto.randomBytes(cByteLen));\n\n\t\tvar n1 = n.subtract(jsbn.ONE);\n\t\tvar priv = c.mod(n1).add(jsbn.ONE);\n\t\tvar pub = ecParams.getG().multiply(priv);\n\n\t\tpriv = Buffer.from(priv.toByteArray());\n\t\tpub = Buffer.from(ecParams.getCurve().\n\t\t    encodePointHex(pub), 'hex');\n\n\t\tparts.push({name: 'curve', data: Buffer.from(curve)});\n\t\tparts.push({name: 'Q', data: pub});\n\t\tparts.push({name: 'd', data: priv});\n\n\t\tkey = new PrivateKey({\n\t\t\ttype: 'ecdsa',\n\t\t\tcurve: curve,\n\t\t\tparts: parts\n\t\t});\n\t\treturn (key);\n\t}\n}\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tVerifier: Verifier,\n\tSigner: Signer\n};\n\nvar nacl = require('tweetnacl');\nvar stream = require('stream');\nvar util = require('util');\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar Signature = require('./signature');\n\nfunction Verifier(key, hashAlgo) {\n\tif (hashAlgo.toLowerCase() !== 'sha512')\n\t\tthrow (new Error('ED25519 only supports the use of ' +\n\t\t    'SHA-512 hashes'));\n\n\tthis.key = key;\n\tthis.chunks = [];\n\n\tstream.Writable.call(this, {});\n}\nutil.inherits(Verifier, stream.Writable);\n\nVerifier.prototype._write = function (chunk, enc, cb) {\n\tthis.chunks.push(chunk);\n\tcb();\n};\n\nVerifier.prototype.update = function (chunk) {\n\tif (typeof (chunk) === 'string')\n\t\tchunk = Buffer.from(chunk, 'binary');\n\tthis.chunks.push(chunk);\n};\n\nVerifier.prototype.verify = function (signature, fmt) {\n\tvar sig;\n\tif (Signature.isSignature(signature, [2, 0])) {\n\t\tif (signature.type !== 'ed25519')\n\t\t\treturn (false);\n\t\tsig = signature.toBuffer('raw');\n\n\t} else if (typeof (signature) === 'string') {\n\t\tsig = Buffer.from(signature, 'base64');\n\n\t} else if (Signature.isSignature(signature, [1, 0])) {\n\t\tthrow (new Error('signature was created by too old ' +\n\t\t    'a version of sshpk and cannot be verified'));\n\t}\n\n\tassert.buffer(sig);\n\treturn (nacl.sign.detached.verify(\n\t    new Uint8Array(Buffer.concat(this.chunks)),\n\t    new Uint8Array(sig),\n\t    new Uint8Array(this.key.part.A.data)));\n};\n\nfunction Signer(key, hashAlgo) {\n\tif (hashAlgo.toLowerCase() !== 'sha512')\n\t\tthrow (new Error('ED25519 only supports the use of ' +\n\t\t    'SHA-512 hashes'));\n\n\tthis.key = key;\n\tthis.chunks = [];\n\n\tstream.Writable.call(this, {});\n}\nutil.inherits(Signer, stream.Writable);\n\nSigner.prototype._write = function (chunk, enc, cb) {\n\tthis.chunks.push(chunk);\n\tcb();\n};\n\nSigner.prototype.update = function (chunk) {\n\tif (typeof (chunk) === 'string')\n\t\tchunk = Buffer.from(chunk, 'binary');\n\tthis.chunks.push(chunk);\n};\n\nSigner.prototype.sign = function () {\n\tvar sig = nacl.sign.detached(\n\t    new Uint8Array(Buffer.concat(this.chunks)),\n\t    new Uint8Array(Buffer.concat([\n\t\tthis.key.part.k.data, this.key.part.A.data])));\n\tvar sigBuf = Buffer.from(sig);\n\tvar sigObj = Signature.parse(sigBuf, 'ed25519', 'raw');\n\tsigObj.hashAlgorithm = 'sha512';\n\treturn (sigObj);\n};\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\treadPkcs8: readPkcs8,\n\twrite: write,\n\twritePkcs8: writePkcs8,\n\tpkcs8ToBuffer: pkcs8ToBuffer,\n\n\treadECDSACurve: readECDSACurve,\n\twriteECDSACurve: writeECDSACurve\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar pem = require('./pem');\n\nfunction read(buf, options) {\n\treturn (pem.read(buf, options, 'pkcs8'));\n}\n\nfunction write(key, options) {\n\treturn (pem.write(key, options, 'pkcs8'));\n}\n\n/* Helper to read in a single mpint */\nfunction readMPInt(der, nm) {\n\tassert.strictEqual(der.peek(), asn1.Ber.Integer,\n\t    nm + ' is not an Integer');\n\treturn (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));\n}\n\nfunction readPkcs8(alg, type, der) {\n\t/* Private keys in pkcs#8 format have a weird extra int */\n\tif (der.peek() === asn1.Ber.Integer) {\n\t\tassert.strictEqual(type, 'private',\n\t\t    'unexpected Integer at start of public key');\n\t\tder.readString(asn1.Ber.Integer, true);\n\t}\n\n\tder.readSequence();\n\tvar next = der.offset + der.length;\n\n\tvar oid = der.readOID();\n\tswitch (oid) {\n\tcase '1.2.840.113549.1.1.1':\n\t\tder._offset = next;\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs8RSAPublic(der));\n\t\telse\n\t\t\treturn (readPkcs8RSAPrivate(der));\n\tcase '1.2.840.10040.4.1':\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs8DSAPublic(der));\n\t\telse\n\t\t\treturn (readPkcs8DSAPrivate(der));\n\tcase '1.2.840.10045.2.1':\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs8ECDSAPublic(der));\n\t\telse\n\t\t\treturn (readPkcs8ECDSAPrivate(der));\n\tcase '1.3.101.112':\n\t\tif (type === 'public') {\n\t\t\treturn (readPkcs8EdDSAPublic(der));\n\t\t} else {\n\t\t\treturn (readPkcs8EdDSAPrivate(der));\n\t\t}\n\tcase '1.3.101.110':\n\t\tif (type === 'public') {\n\t\t\treturn (readPkcs8X25519Public(der));\n\t\t} else {\n\t\t\treturn (readPkcs8X25519Private(der));\n\t\t}\n\tdefault:\n\t\tthrow (new Error('Unknown key type OID ' + oid));\n\t}\n}\n\nfunction readPkcs8RSAPublic(der) {\n\t// bit string sequence\n\tder.readSequence(asn1.Ber.BitString);\n\tder.readByte();\n\tder.readSequence();\n\n\t// modulus\n\tvar n = readMPInt(der, 'modulus');\n\tvar e = readMPInt(der, 'exponent');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tsource: der.originalInput,\n\t\tparts: [\n\t\t\t{ name: 'e', data: e },\n\t\t\t{ name: 'n', data: n }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8RSAPrivate(der) {\n\tder.readSequence(asn1.Ber.OctetString);\n\tder.readSequence();\n\n\tvar ver = readMPInt(der, 'version');\n\tassert.equal(ver[0], 0x0, 'unknown RSA private key version');\n\n\t// modulus then public exponent\n\tvar n = readMPInt(der, 'modulus');\n\tvar e = readMPInt(der, 'public exponent');\n\tvar d = readMPInt(der, 'private exponent');\n\tvar p = readMPInt(der, 'prime1');\n\tvar q = readMPInt(der, 'prime2');\n\tvar dmodp = readMPInt(der, 'exponent1');\n\tvar dmodq = readMPInt(der, 'exponent2');\n\tvar iqmp = readMPInt(der, 'iqmp');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tparts: [\n\t\t\t{ name: 'n', data: n },\n\t\t\t{ name: 'e', data: e },\n\t\t\t{ name: 'd', data: d },\n\t\t\t{ name: 'iqmp', data: iqmp },\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'dmodp', data: dmodp },\n\t\t\t{ name: 'dmodq', data: dmodq }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs8DSAPublic(der) {\n\tder.readSequence();\n\n\tvar p = readMPInt(der, 'p');\n\tvar q = readMPInt(der, 'q');\n\tvar g = readMPInt(der, 'g');\n\n\t// bit string sequence\n\tder.readSequence(asn1.Ber.BitString);\n\tder.readByte();\n\n\tvar y = readMPInt(der, 'y');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'dsa',\n\t\tparts: [\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'g', data: g },\n\t\t\t{ name: 'y', data: y }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8DSAPrivate(der) {\n\tder.readSequence();\n\n\tvar p = readMPInt(der, 'p');\n\tvar q = readMPInt(der, 'q');\n\tvar g = readMPInt(der, 'g');\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tvar x = readMPInt(der, 'x');\n\n\t/* The pkcs#8 format does not include the public key */\n\tvar y = utils.calculateDSAPublic(g, p, x);\n\n\tvar key = {\n\t\ttype: 'dsa',\n\t\tparts: [\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'g', data: g },\n\t\t\t{ name: 'y', data: y },\n\t\t\t{ name: 'x', data: x }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readECDSACurve(der) {\n\tvar curveName, curveNames;\n\tvar j, c, cd;\n\n\tif (der.peek() === asn1.Ber.OID) {\n\t\tvar oid = der.readOID();\n\n\t\tcurveNames = Object.keys(algs.curves);\n\t\tfor (j = 0; j < curveNames.length; ++j) {\n\t\t\tc = curveNames[j];\n\t\t\tcd = algs.curves[c];\n\t\t\tif (cd.pkcs8oid === oid) {\n\t\t\t\tcurveName = c;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\t// ECParameters sequence\n\t\tder.readSequence();\n\t\tvar version = der.readString(asn1.Ber.Integer, true);\n\t\tassert.strictEqual(version[0], 1, 'ECDSA key not version 1');\n\n\t\tvar curve = {};\n\n\t\t// FieldID sequence\n\t\tder.readSequence();\n\t\tvar fieldTypeOid = der.readOID();\n\t\tassert.strictEqual(fieldTypeOid, '1.2.840.10045.1.1',\n\t\t    'ECDSA key is not from a prime-field');\n\t\tvar p = curve.p = utils.mpNormalize(\n\t\t    der.readString(asn1.Ber.Integer, true));\n\t\t/*\n\t\t * p always starts with a 1 bit, so count the zeros to get its\n\t\t * real size.\n\t\t */\n\t\tcurve.size = p.length * 8 - utils.countZeros(p);\n\n\t\t// Curve sequence\n\t\tder.readSequence();\n\t\tcurve.a = utils.mpNormalize(\n\t\t    der.readString(asn1.Ber.OctetString, true));\n\t\tcurve.b = utils.mpNormalize(\n\t\t    der.readString(asn1.Ber.OctetString, true));\n\t\tif (der.peek() === asn1.Ber.BitString)\n\t\t\tcurve.s = der.readString(asn1.Ber.BitString, true);\n\n\t\t// Combined Gx and Gy\n\t\tcurve.G = der.readString(asn1.Ber.OctetString, true);\n\t\tassert.strictEqual(curve.G[0], 0x4,\n\t\t    'uncompressed G is required');\n\n\t\tcurve.n = utils.mpNormalize(\n\t\t    der.readString(asn1.Ber.Integer, true));\n\t\tcurve.h = utils.mpNormalize(\n\t\t    der.readString(asn1.Ber.Integer, true));\n\t\tassert.strictEqual(curve.h[0], 0x1, 'a cofactor=1 curve is ' +\n\t\t    'required');\n\n\t\tcurveNames = Object.keys(algs.curves);\n\t\tvar ks = Object.keys(curve);\n\t\tfor (j = 0; j < curveNames.length; ++j) {\n\t\t\tc = curveNames[j];\n\t\t\tcd = algs.curves[c];\n\t\t\tvar equal = true;\n\t\t\tfor (var i = 0; i < ks.length; ++i) {\n\t\t\t\tvar k = ks[i];\n\t\t\t\tif (cd[k] === undefined)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (typeof (cd[k]) === 'object' &&\n\t\t\t\t    cd[k].equals !== undefined) {\n\t\t\t\t\tif (!cd[k].equals(curve[k])) {\n\t\t\t\t\t\tequal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else if (Buffer.isBuffer(cd[k])) {\n\t\t\t\t\tif (cd[k].toString('binary')\n\t\t\t\t\t    !== curve[k].toString('binary')) {\n\t\t\t\t\t\tequal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (cd[k] !== curve[k]) {\n\t\t\t\t\t\tequal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (equal) {\n\t\t\t\tcurveName = c;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn (curveName);\n}\n\nfunction readPkcs8ECDSAPrivate(der) {\n\tvar curveName = readECDSACurve(der);\n\tassert.string(curveName, 'a known elliptic curve');\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tder.readSequence();\n\n\tvar version = readMPInt(der, 'version');\n\tassert.equal(version[0], 1, 'unknown version of ECDSA key');\n\n\tvar d = der.readString(asn1.Ber.OctetString, true);\n\tvar Q;\n\n\tif (der.peek() == 0xa0) {\n\t\tder.readSequence(0xa0);\n\t\tder._offset += der.length;\n\t}\n\tif (der.peek() == 0xa1) {\n\t\tder.readSequence(0xa1);\n\t\tQ = der.readString(asn1.Ber.BitString, true);\n\t\tQ = utils.ecNormalize(Q);\n\t}\n\n\tif (Q === undefined) {\n\t\tvar pub = utils.publicFromPrivateECDSA(curveName, d);\n\t\tQ = pub.part.Q.data;\n\t}\n\n\tvar key = {\n\t\ttype: 'ecdsa',\n\t\tparts: [\n\t\t\t{ name: 'curve', data: Buffer.from(curveName) },\n\t\t\t{ name: 'Q', data: Q },\n\t\t\t{ name: 'd', data: d }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs8ECDSAPublic(der) {\n\tvar curveName = readECDSACurve(der);\n\tassert.string(curveName, 'a known elliptic curve');\n\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: 'ecdsa',\n\t\tparts: [\n\t\t\t{ name: 'curve', data: Buffer.from(curveName) },\n\t\t\t{ name: 'Q', data: Q }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8EdDSAPublic(der) {\n\tif (der.peek() === 0x00)\n\t\tder.readByte();\n\n\tvar A = utils.readBitString(der);\n\n\tvar key = {\n\t\ttype: 'ed25519',\n\t\tparts: [\n\t\t\t{ name: 'A', data: utils.zeroPadToLength(A, 32) }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8X25519Public(der) {\n\tvar A = utils.readBitString(der);\n\n\tvar key = {\n\t\ttype: 'curve25519',\n\t\tparts: [\n\t\t\t{ name: 'A', data: utils.zeroPadToLength(A, 32) }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8EdDSAPrivate(der) {\n\tif (der.peek() === 0x00)\n\t\tder.readByte();\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tvar k = der.readString(asn1.Ber.OctetString, true);\n\tk = utils.zeroPadToLength(k, 32);\n\n\tvar A, tag;\n\twhile ((tag = der.peek()) !== null) {\n\t\tif (tag === (asn1.Ber.Context | 1)) {\n\t\t\tA = utils.readBitString(der, tag);\n\t\t} else {\n\t\t\tder.readSequence(tag);\n\t\t\tder._offset += der.length;\n\t\t}\n\t}\n\tif (A === undefined)\n\t\tA = utils.calculateED25519Public(k);\n\n\tvar key = {\n\t\ttype: 'ed25519',\n\t\tparts: [\n\t\t\t{ name: 'A', data: utils.zeroPadToLength(A, 32) },\n\t\t\t{ name: 'k', data: utils.zeroPadToLength(k, 32) }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs8X25519Private(der) {\n\tif (der.peek() === 0x00)\n\t\tder.readByte();\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tvar k = der.readString(asn1.Ber.OctetString, true);\n\tk = utils.zeroPadToLength(k, 32);\n\n\tvar A = utils.calculateX25519Public(k);\n\n\tvar key = {\n\t\ttype: 'curve25519',\n\t\tparts: [\n\t\t\t{ name: 'A', data: utils.zeroPadToLength(A, 32) },\n\t\t\t{ name: 'k', data: utils.zeroPadToLength(k, 32) }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction pkcs8ToBuffer(key) {\n\tvar der = new asn1.BerWriter();\n\twritePkcs8(der, key);\n\treturn (der.buffer);\n}\n\nfunction writePkcs8(der, key) {\n\tder.startSequence();\n\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tvar version = 0;\n\t\tif (key.type === 'ed25519')\n\t\t\tversion = 1;\n\t\tvar vbuf = Buffer.from([version]);\n\t\tder.writeBuffer(vbuf, asn1.Ber.Integer);\n\t}\n\n\tder.startSequence();\n\tswitch (key.type) {\n\tcase 'rsa':\n\t\tder.writeOID('1.2.840.113549.1.1.1');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs8RSAPrivate(key, der);\n\t\telse\n\t\t\twritePkcs8RSAPublic(key, der);\n\t\tbreak;\n\tcase 'dsa':\n\t\tder.writeOID('1.2.840.10040.4.1');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs8DSAPrivate(key, der);\n\t\telse\n\t\t\twritePkcs8DSAPublic(key, der);\n\t\tbreak;\n\tcase 'ecdsa':\n\t\tder.writeOID('1.2.840.10045.2.1');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs8ECDSAPrivate(key, der);\n\t\telse\n\t\t\twritePkcs8ECDSAPublic(key, der);\n\t\tbreak;\n\tcase 'ed25519':\n\t\tder.writeOID('1.3.101.112');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs8EdDSAPrivate(key, der);\n\t\telse\n\t\t\twritePkcs8EdDSAPublic(key, der);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error('Unsupported key type: ' + key.type));\n\t}\n\n\tder.endSequence();\n}\n\nfunction writePkcs8RSAPrivate(key, der) {\n\tder.writeNull();\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.OctetString);\n\tder.startSequence();\n\n\tvar version = Buffer.from([0]);\n\tder.writeBuffer(version, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.d.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tif (!key.part.dmodp || !key.part.dmodq)\n\t\tutils.addRSAMissing(key);\n\tder.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);\n\n\tder.endSequence();\n\tder.endSequence();\n}\n\nfunction writePkcs8RSAPublic(key, der) {\n\tder.writeNull();\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.BitString);\n\tder.writeByte(0x00);\n\n\tder.startSequence();\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n\tder.endSequence();\n\n\tder.endSequence();\n}\n\nfunction writePkcs8DSAPrivate(key, der) {\n\tder.startSequence();\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n\tder.endSequence();\n\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.OctetString);\n\tder.writeBuffer(key.part.x.data, asn1.Ber.Integer);\n\tder.endSequence();\n}\n\nfunction writePkcs8DSAPublic(key, der) {\n\tder.startSequence();\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n\tder.endSequence();\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.BitString);\n\tder.writeByte(0x00);\n\tder.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n\tder.endSequence();\n}\n\nfunction writeECDSACurve(key, der) {\n\tvar curve = algs.curves[key.curve];\n\tif (curve.pkcs8oid) {\n\t\t/* This one has a name in pkcs#8, so just write the oid */\n\t\tder.writeOID(curve.pkcs8oid);\n\n\t} else {\n\t\t// ECParameters sequence\n\t\tder.startSequence();\n\n\t\tvar version = Buffer.from([1]);\n\t\tder.writeBuffer(version, asn1.Ber.Integer);\n\n\t\t// FieldID sequence\n\t\tder.startSequence();\n\t\tder.writeOID('1.2.840.10045.1.1'); // prime-field\n\t\tder.writeBuffer(curve.p, asn1.Ber.Integer);\n\t\tder.endSequence();\n\n\t\t// Curve sequence\n\t\tder.startSequence();\n\t\tvar a = curve.p;\n\t\tif (a[0] === 0x0)\n\t\t\ta = a.slice(1);\n\t\tder.writeBuffer(a, asn1.Ber.OctetString);\n\t\tder.writeBuffer(curve.b, asn1.Ber.OctetString);\n\t\tder.writeBuffer(curve.s, asn1.Ber.BitString);\n\t\tder.endSequence();\n\n\t\tder.writeBuffer(curve.G, asn1.Ber.OctetString);\n\t\tder.writeBuffer(curve.n, asn1.Ber.Integer);\n\t\tvar h = curve.h;\n\t\tif (!h) {\n\t\t\th = Buffer.from([1]);\n\t\t}\n\t\tder.writeBuffer(h, asn1.Ber.Integer);\n\n\t\t// ECParameters\n\t\tder.endSequence();\n\t}\n}\n\nfunction writePkcs8ECDSAPublic(key, der) {\n\twriteECDSACurve(key, der);\n\tder.endSequence();\n\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n}\n\nfunction writePkcs8ECDSAPrivate(key, der) {\n\twriteECDSACurve(key, der);\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.OctetString);\n\tder.startSequence();\n\n\tvar version = Buffer.from([1]);\n\tder.writeBuffer(version, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.d.data, asn1.Ber.OctetString);\n\n\tder.startSequence(0xa1);\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n\tder.endSequence();\n\n\tder.endSequence();\n\tder.endSequence();\n}\n\nfunction writePkcs8EdDSAPublic(key, der) {\n\tder.endSequence();\n\n\tutils.writeBitString(der, key.part.A.data);\n}\n\nfunction writePkcs8EdDSAPrivate(key, der) {\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.OctetString);\n\tvar k = utils.mpNormalize(key.part.k.data);\n\t/* RFCs call for storing exactly 32 bytes, so strip any leading zeros */\n\twhile (k.length > 32 && k[0] === 0x00)\n\t\tk = k.slice(1);\n\tder.writeBuffer(k, asn1.Ber.OctetString);\n\tder.endSequence();\n\n\tutils.writeBitString(der, key.part.A.data, asn1.Ber.Context | 1);\n}\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\treadPkcs1: readPkcs1,\n\twrite: write,\n\twritePkcs1: writePkcs1\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\n\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar pem = require('./pem');\n\nvar pkcs8 = require('./pkcs8');\nvar readECDSACurve = pkcs8.readECDSACurve;\n\nfunction read(buf, options) {\n\treturn (pem.read(buf, options, 'pkcs1'));\n}\n\nfunction write(key, options) {\n\treturn (pem.write(key, options, 'pkcs1'));\n}\n\n/* Helper to read in a single mpint */\nfunction readMPInt(der, nm) {\n\tassert.strictEqual(der.peek(), asn1.Ber.Integer,\n\t    nm + ' is not an Integer');\n\treturn (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));\n}\n\nfunction readPkcs1(alg, type, der) {\n\tswitch (alg) {\n\tcase 'RSA':\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs1RSAPublic(der));\n\t\telse if (type === 'private')\n\t\t\treturn (readPkcs1RSAPrivate(der));\n\t\tthrow (new Error('Unknown key type: ' + type));\n\tcase 'DSA':\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs1DSAPublic(der));\n\t\telse if (type === 'private')\n\t\t\treturn (readPkcs1DSAPrivate(der));\n\t\tthrow (new Error('Unknown key type: ' + type));\n\tcase 'EC':\n\tcase 'ECDSA':\n\t\tif (type === 'private')\n\t\t\treturn (readPkcs1ECDSAPrivate(der));\n\t\telse if (type === 'public')\n\t\t\treturn (readPkcs1ECDSAPublic(der));\n\t\tthrow (new Error('Unknown key type: ' + type));\n\tcase 'EDDSA':\n\tcase 'EdDSA':\n\t\tif (type === 'private')\n\t\t\treturn (readPkcs1EdDSAPrivate(der));\n\t\tthrow (new Error(type + ' keys not supported with EdDSA'));\n\tdefault:\n\t\tthrow (new Error('Unknown key algo: ' + alg));\n\t}\n}\n\nfunction readPkcs1RSAPublic(der) {\n\t// modulus and exponent\n\tvar n = readMPInt(der, 'modulus');\n\tvar e = readMPInt(der, 'exponent');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tparts: [\n\t\t\t{ name: 'e', data: e },\n\t\t\t{ name: 'n', data: n }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1RSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version[0], 0);\n\n\t// modulus then public exponent\n\tvar n = readMPInt(der, 'modulus');\n\tvar e = readMPInt(der, 'public exponent');\n\tvar d = readMPInt(der, 'private exponent');\n\tvar p = readMPInt(der, 'prime1');\n\tvar q = readMPInt(der, 'prime2');\n\tvar dmodp = readMPInt(der, 'exponent1');\n\tvar dmodq = readMPInt(der, 'exponent2');\n\tvar iqmp = readMPInt(der, 'iqmp');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tparts: [\n\t\t\t{ name: 'n', data: n },\n\t\t\t{ name: 'e', data: e },\n\t\t\t{ name: 'd', data: d },\n\t\t\t{ name: 'iqmp', data: iqmp },\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'dmodp', data: dmodp },\n\t\t\t{ name: 'dmodq', data: dmodq }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1DSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version.readUInt8(0), 0);\n\n\tvar p = readMPInt(der, 'p');\n\tvar q = readMPInt(der, 'q');\n\tvar g = readMPInt(der, 'g');\n\tvar y = readMPInt(der, 'y');\n\tvar x = readMPInt(der, 'x');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'dsa',\n\t\tparts: [\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'g', data: g },\n\t\t\t{ name: 'y', data: y },\n\t\t\t{ name: 'x', data: x }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1EdDSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version.readUInt8(0), 1);\n\n\t// private key\n\tvar k = der.readString(asn1.Ber.OctetString, true);\n\n\tder.readSequence(0xa0);\n\tvar oid = der.readOID();\n\tassert.strictEqual(oid, '1.3.101.112', 'the ed25519 curve identifier');\n\n\tder.readSequence(0xa1);\n\tvar A = utils.readBitString(der);\n\n\tvar key = {\n\t\ttype: 'ed25519',\n\t\tparts: [\n\t\t\t{ name: 'A', data: utils.zeroPadToLength(A, 32) },\n\t\t\t{ name: 'k', data: k }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1DSAPublic(der) {\n\tvar y = readMPInt(der, 'y');\n\tvar p = readMPInt(der, 'p');\n\tvar q = readMPInt(der, 'q');\n\tvar g = readMPInt(der, 'g');\n\n\tvar key = {\n\t\ttype: 'dsa',\n\t\tparts: [\n\t\t\t{ name: 'y', data: y },\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'g', data: g }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1ECDSAPublic(der) {\n\tder.readSequence();\n\n\tvar oid = der.readOID();\n\tassert.strictEqual(oid, '1.2.840.10045.2.1', 'must be ecPublicKey');\n\n\tvar curveOid = der.readOID();\n\n\tvar curve;\n\tvar curves = Object.keys(algs.curves);\n\tfor (var j = 0; j < curves.length; ++j) {\n\t\tvar c = curves[j];\n\t\tvar cd = algs.curves[c];\n\t\tif (cd.pkcs8oid === curveOid) {\n\t\t\tcurve = c;\n\t\t\tbreak;\n\t\t}\n\t}\n\tassert.string(curve, 'a known ECDSA named curve');\n\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: 'ecdsa',\n\t\tparts: [\n\t\t\t{ name: 'curve', data: Buffer.from(curve) },\n\t\t\t{ name: 'Q', data: Q }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1ECDSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version.readUInt8(0), 1);\n\n\t// private key\n\tvar d = der.readString(asn1.Ber.OctetString, true);\n\n\tder.readSequence(0xa0);\n\tvar curve = readECDSACurve(der);\n\tassert.string(curve, 'a known elliptic curve');\n\n\tder.readSequence(0xa1);\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: 'ecdsa',\n\t\tparts: [\n\t\t\t{ name: 'curve', data: Buffer.from(curve) },\n\t\t\t{ name: 'Q', data: Q },\n\t\t\t{ name: 'd', data: d }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction writePkcs1(der, key) {\n\tder.startSequence();\n\n\tswitch (key.type) {\n\tcase 'rsa':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1RSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1RSAPublic(der, key);\n\t\tbreak;\n\tcase 'dsa':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1DSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1DSAPublic(der, key);\n\t\tbreak;\n\tcase 'ecdsa':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1ECDSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1ECDSAPublic(der, key);\n\t\tbreak;\n\tcase 'ed25519':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1EdDSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1EdDSAPublic(der, key);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error('Unknown key algo: ' + key.type));\n\t}\n\n\tder.endSequence();\n}\n\nfunction writePkcs1RSAPublic(der, key) {\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1RSAPrivate(der, key) {\n\tvar ver = Buffer.from([0]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.d.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tif (!key.part.dmodp || !key.part.dmodq)\n\t\tutils.addRSAMissing(key);\n\tder.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1DSAPrivate(der, key) {\n\tvar ver = Buffer.from([0]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.x.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1DSAPublic(der, key) {\n\tder.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1ECDSAPublic(der, key) {\n\tder.startSequence();\n\n\tder.writeOID('1.2.840.10045.2.1'); /* ecPublicKey */\n\tvar curve = key.part.curve.data.toString();\n\tvar curveOid = algs.curves[curve].pkcs8oid;\n\tassert.string(curveOid, 'a known ECDSA named curve');\n\tder.writeOID(curveOid);\n\n\tder.endSequence();\n\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n}\n\nfunction writePkcs1ECDSAPrivate(der, key) {\n\tvar ver = Buffer.from([1]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.d.data, asn1.Ber.OctetString);\n\n\tder.startSequence(0xa0);\n\tvar curve = key.part.curve.data.toString();\n\tvar curveOid = algs.curves[curve].pkcs8oid;\n\tassert.string(curveOid, 'a known ECDSA named curve');\n\tder.writeOID(curveOid);\n\tder.endSequence();\n\n\tder.startSequence(0xa1);\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n\tder.endSequence();\n}\n\nfunction writePkcs1EdDSAPrivate(der, key) {\n\tvar ver = Buffer.from([1]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.k.data, asn1.Ber.OctetString);\n\n\tder.startSequence(0xa0);\n\tder.writeOID('1.3.101.112');\n\tder.endSequence();\n\n\tder.startSequence(0xa1);\n\tutils.writeBitString(der, key.part.A.data);\n\tder.endSequence();\n}\n\nfunction writePkcs1EdDSAPublic(der, key) {\n\tthrow (new Error('Public keys are not supported for EdDSA PKCS#1'));\n}\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read.bind(undefined, false, undefined),\n\treadType: read.bind(undefined, false),\n\twrite: write,\n\t/* semi-private api, used by sshpk-agent */\n\treadPartial: read.bind(undefined, true),\n\n\t/* shared with ssh format */\n\treadInternal: read,\n\tkeyTypeToAlg: keyTypeToAlg,\n\talgToKeyType: algToKeyType\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar SSHBuffer = require('../ssh-buffer');\n\nfunction algToKeyType(alg) {\n\tassert.string(alg);\n\tif (alg === 'ssh-dss')\n\t\treturn ('dsa');\n\telse if (alg === 'ssh-rsa')\n\t\treturn ('rsa');\n\telse if (alg === 'ssh-ed25519')\n\t\treturn ('ed25519');\n\telse if (alg === 'ssh-curve25519')\n\t\treturn ('curve25519');\n\telse if (alg.match(/^ecdsa-sha2-/))\n\t\treturn ('ecdsa');\n\telse\n\t\tthrow (new Error('Unknown algorithm ' + alg));\n}\n\nfunction keyTypeToAlg(key) {\n\tassert.object(key);\n\tif (key.type === 'dsa')\n\t\treturn ('ssh-dss');\n\telse if (key.type === 'rsa')\n\t\treturn ('ssh-rsa');\n\telse if (key.type === 'ed25519')\n\t\treturn ('ssh-ed25519');\n\telse if (key.type === 'curve25519')\n\t\treturn ('ssh-curve25519');\n\telse if (key.type === 'ecdsa')\n\t\treturn ('ecdsa-sha2-' + key.part.curve.data.toString());\n\telse\n\t\tthrow (new Error('Unknown key type ' + key.type));\n}\n\nfunction read(partial, type, buf, options) {\n\tif (typeof (buf) === 'string')\n\t\tbuf = Buffer.from(buf);\n\tassert.buffer(buf, 'buf');\n\n\tvar key = {};\n\n\tvar parts = key.parts = [];\n\tvar sshbuf = new SSHBuffer({buffer: buf});\n\n\tvar alg = sshbuf.readString();\n\tassert.ok(!sshbuf.atEnd(), 'key must have at least one part');\n\n\tkey.type = algToKeyType(alg);\n\n\tvar partCount = algs.info[key.type].parts.length;\n\tif (type && type === 'private')\n\t\tpartCount = algs.privInfo[key.type].parts.length;\n\n\twhile (!sshbuf.atEnd() && parts.length < partCount)\n\t\tparts.push(sshbuf.readPart());\n\twhile (!partial && !sshbuf.atEnd())\n\t\tparts.push(sshbuf.readPart());\n\n\tassert.ok(parts.length >= 1,\n\t    'key must have at least one part');\n\tassert.ok(partial || sshbuf.atEnd(),\n\t    'leftover bytes at end of key');\n\n\tvar Constructor = Key;\n\tvar algInfo = algs.info[key.type];\n\tif (type === 'private' || algInfo.parts.length !== parts.length) {\n\t\talgInfo = algs.privInfo[key.type];\n\t\tConstructor = PrivateKey;\n\t}\n\tassert.strictEqual(algInfo.parts.length, parts.length);\n\n\tif (key.type === 'ecdsa') {\n\t\tvar res = /^ecdsa-sha2-(.+)$/.exec(alg);\n\t\tassert.ok(res !== null);\n\t\tassert.strictEqual(res[1], parts[0].data.toString());\n\t}\n\n\tvar normalized = true;\n\tfor (var i = 0; i < algInfo.parts.length; ++i) {\n\t\tvar p = parts[i];\n\t\tp.name = algInfo.parts[i];\n\t\t/*\n\t\t * OpenSSH stores ed25519 \"private\" keys as seed + public key\n\t\t * concat'd together (k followed by A). We want to keep them\n\t\t * separate for other formats that don't do this.\n\t\t */\n\t\tif (key.type === 'ed25519' && p.name === 'k')\n\t\t\tp.data = p.data.slice(0, 32);\n\n\t\tif (p.name !== 'curve' && algInfo.normalize !== false) {\n\t\t\tvar nd;\n\t\t\tif (key.type === 'ed25519') {\n\t\t\t\tnd = utils.zeroPadToLength(p.data, 32);\n\t\t\t} else {\n\t\t\t\tnd = utils.mpNormalize(p.data);\n\t\t\t}\n\t\t\tif (nd.toString('binary') !==\n\t\t\t    p.data.toString('binary')) {\n\t\t\t\tp.data = nd;\n\t\t\t\tnormalized = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (normalized)\n\t\tkey._rfc4253Cache = sshbuf.toBuffer();\n\n\tif (partial && typeof (partial) === 'object') {\n\t\tpartial.remainder = sshbuf.remainder();\n\t\tpartial.consumed = sshbuf._offset;\n\t}\n\n\treturn (new Constructor(key));\n}\n\nfunction write(key, options) {\n\tassert.object(key);\n\n\tvar alg = keyTypeToAlg(key);\n\tvar i;\n\n\tvar algInfo = algs.info[key.type];\n\tif (PrivateKey.isPrivateKey(key))\n\t\talgInfo = algs.privInfo[key.type];\n\tvar parts = algInfo.parts;\n\n\tvar buf = new SSHBuffer({});\n\n\tbuf.writeString(alg);\n\n\tfor (i = 0; i < parts.length; ++i) {\n\t\tvar data = key.part[parts[i]].data;\n\t\tif (algInfo.normalize !== false) {\n\t\t\tif (key.type === 'ed25519')\n\t\t\t\tdata = utils.zeroPadToLength(data, 32);\n\t\t\telse\n\t\t\t\tdata = utils.mpNormalize(data);\n\t\t}\n\t\tif (key.type === 'ed25519' && parts[i] === 'k')\n\t\t\tdata = Buffer.concat([data, key.part.A.data]);\n\t\tbuf.writeBuffer(data);\n\t}\n\n\treturn (buf.toBuffer());\n}\n","'use strict';\n\nvar crypto_hash_sha512 = require('tweetnacl').lowlevel.crypto_hash;\n\n/*\n * This file is a 1:1 port from the OpenBSD blowfish.c and bcrypt_pbkdf.c. As a\n * result, it retains the original copyright and license. The two files are\n * under slightly different (but compatible) licenses, and are here combined in\n * one file.\n *\n * Credit for the actual porting work goes to:\n *  Devi Mandiri <me@devi.web.id>\n */\n\n/*\n * The Blowfish portions are under the following license:\n *\n * Blowfish block cipher for OpenBSD\n * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>\n * All rights reserved.\n *\n * Implementation advice by David Mazieres <dm@lcs.mit.edu>.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * The bcrypt_pbkdf portions are under the following license:\n *\n * Copyright (c) 2013 Ted Unangst <tedu@openbsd.org>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\n/*\n * Performance improvements (Javascript-specific):\n *\n * Copyright 2016, Joyent Inc\n * Author: Alex Wilson <alex.wilson@joyent.com>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\n// Ported from OpenBSD bcrypt_pbkdf.c v1.9\n\nvar BLF_J = 0;\n\nvar Blowfish = function() {\n  this.S = [\n    new Uint32Array([\n      0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,\n      0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,\n      0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,\n      0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,\n      0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,\n      0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,\n      0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,\n      0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,\n      0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,\n      0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,\n      0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,\n      0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,\n      0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,\n      0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,\n      0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,\n      0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,\n      0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,\n      0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,\n      0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,\n      0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,\n      0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,\n      0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,\n      0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,\n      0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,\n      0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,\n      0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,\n      0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,\n      0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,\n      0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,\n      0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\n      0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,\n      0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,\n      0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,\n      0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,\n      0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,\n      0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,\n      0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,\n      0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,\n      0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,\n      0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,\n      0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,\n      0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,\n      0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,\n      0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,\n      0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,\n      0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,\n      0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,\n      0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,\n      0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,\n      0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,\n      0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,\n      0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,\n      0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,\n      0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,\n      0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,\n      0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,\n      0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,\n      0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,\n      0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,\n      0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\n      0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,\n      0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,\n      0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,\n      0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a]),\n    new Uint32Array([\n      0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,\n      0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,\n      0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,\n      0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,\n      0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,\n      0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,\n      0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,\n      0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,\n      0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,\n      0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,\n      0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,\n      0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,\n      0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,\n      0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,\n      0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,\n      0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,\n      0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,\n      0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,\n      0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,\n      0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,\n      0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,\n      0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,\n      0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,\n      0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,\n      0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,\n      0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,\n      0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,\n      0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,\n      0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,\n      0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,\n      0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,\n      0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,\n      0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,\n      0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,\n      0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,\n      0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,\n      0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,\n      0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,\n      0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,\n      0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,\n      0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,\n      0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,\n      0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,\n      0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,\n      0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,\n      0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,\n      0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,\n      0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,\n      0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,\n      0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,\n      0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,\n      0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,\n      0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,\n      0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,\n      0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,\n      0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,\n      0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,\n      0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,\n      0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,\n      0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,\n      0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,\n      0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,\n      0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,\n      0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7]),\n    new Uint32Array([\n      0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,\n      0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,\n      0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,\n      0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,\n      0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,\n      0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,\n      0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,\n      0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,\n      0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,\n      0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,\n      0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,\n      0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,\n      0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,\n      0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,\n      0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,\n      0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,\n      0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,\n      0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,\n      0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,\n      0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,\n      0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,\n      0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,\n      0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,\n      0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,\n      0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,\n      0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,\n      0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,\n      0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,\n      0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,\n      0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,\n      0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,\n      0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,\n      0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,\n      0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,\n      0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,\n      0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,\n      0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,\n      0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,\n      0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,\n      0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,\n      0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,\n      0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,\n      0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,\n      0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,\n      0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,\n      0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,\n      0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,\n      0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,\n      0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,\n      0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,\n      0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,\n      0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,\n      0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,\n      0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,\n      0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,\n      0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,\n      0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,\n      0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,\n      0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,\n      0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,\n      0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,\n      0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,\n      0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,\n      0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0]),\n    new Uint32Array([\n      0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,\n      0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,\n      0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,\n      0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,\n      0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,\n      0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,\n      0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,\n      0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,\n      0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,\n      0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,\n      0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,\n      0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,\n      0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,\n      0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,\n      0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,\n      0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,\n      0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,\n      0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\n      0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,\n      0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,\n      0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,\n      0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,\n      0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,\n      0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,\n      0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,\n      0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,\n      0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,\n      0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,\n      0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,\n      0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,\n      0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,\n      0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,\n      0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,\n      0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,\n      0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,\n      0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,\n      0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,\n      0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,\n      0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,\n      0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,\n      0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,\n      0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,\n      0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,\n      0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,\n      0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,\n      0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,\n      0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,\n      0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\n      0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,\n      0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,\n      0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,\n      0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,\n      0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,\n      0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,\n      0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,\n      0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,\n      0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,\n      0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,\n      0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,\n      0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,\n      0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,\n      0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,\n      0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,\n      0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6])\n    ];\n  this.P = new Uint32Array([\n    0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,\n    0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,\n    0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,\n    0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,\n    0x9216d5d9, 0x8979fb1b]);\n};\n\nfunction F(S, x8, i) {\n  return (((S[0][x8[i+3]] +\n            S[1][x8[i+2]]) ^\n            S[2][x8[i+1]]) +\n            S[3][x8[i]]);\n};\n\nBlowfish.prototype.encipher = function(x, x8) {\n  if (x8 === undefined) {\n    x8 = new Uint8Array(x.buffer);\n    if (x.byteOffset !== 0)\n      x8 = x8.subarray(x.byteOffset);\n  }\n  x[0] ^= this.P[0];\n  for (var i = 1; i < 16; i += 2) {\n    x[1] ^= F(this.S, x8, 0) ^ this.P[i];\n    x[0] ^= F(this.S, x8, 4) ^ this.P[i+1];\n  }\n  var t = x[0];\n  x[0] = x[1] ^ this.P[17];\n  x[1] = t;\n};\n\nBlowfish.prototype.decipher = function(x) {\n  var x8 = new Uint8Array(x.buffer);\n  if (x.byteOffset !== 0)\n    x8 = x8.subarray(x.byteOffset);\n  x[0] ^= this.P[17];\n  for (var i = 16; i > 0; i -= 2) {\n    x[1] ^= F(this.S, x8, 0) ^ this.P[i];\n    x[0] ^= F(this.S, x8, 4) ^ this.P[i-1];\n  }\n  var t = x[0];\n  x[0] = x[1] ^ this.P[0];\n  x[1] = t;\n};\n\nfunction stream2word(data, databytes){\n  var i, temp = 0;\n  for (i = 0; i < 4; i++, BLF_J++) {\n    if (BLF_J >= databytes) BLF_J = 0;\n    temp = (temp << 8) | data[BLF_J];\n  }\n  return temp;\n};\n\nBlowfish.prototype.expand0state = function(key, keybytes) {\n  var d = new Uint32Array(2), i, k;\n  var d8 = new Uint8Array(d.buffer);\n\n  for (i = 0, BLF_J = 0; i < 18; i++) {\n    this.P[i] ^= stream2word(key, keybytes);\n  }\n  BLF_J = 0;\n\n  for (i = 0; i < 18; i += 2) {\n    this.encipher(d, d8);\n    this.P[i]   = d[0];\n    this.P[i+1] = d[1];\n  }\n\n  for (i = 0; i < 4; i++) {\n    for (k = 0; k < 256; k += 2) {\n      this.encipher(d, d8);\n      this.S[i][k]   = d[0];\n      this.S[i][k+1] = d[1];\n    }\n  }\n};\n\nBlowfish.prototype.expandstate = function(data, databytes, key, keybytes) {\n  var d = new Uint32Array(2), i, k;\n\n  for (i = 0, BLF_J = 0; i < 18; i++) {\n    this.P[i] ^= stream2word(key, keybytes);\n  }\n\n  for (i = 0, BLF_J = 0; i < 18; i += 2) {\n    d[0] ^= stream2word(data, databytes);\n    d[1] ^= stream2word(data, databytes);\n    this.encipher(d);\n    this.P[i]   = d[0];\n    this.P[i+1] = d[1];\n  }\n\n  for (i = 0; i < 4; i++) {\n    for (k = 0; k < 256; k += 2) {\n      d[0] ^= stream2word(data, databytes);\n      d[1] ^= stream2word(data, databytes);\n      this.encipher(d);\n      this.S[i][k]   = d[0];\n      this.S[i][k+1] = d[1];\n    }\n  }\n  BLF_J = 0;\n};\n\nBlowfish.prototype.enc = function(data, blocks) {\n  for (var i = 0; i < blocks; i++) {\n    this.encipher(data.subarray(i*2));\n  }\n};\n\nBlowfish.prototype.dec = function(data, blocks) {\n  for (var i = 0; i < blocks; i++) {\n    this.decipher(data.subarray(i*2));\n  }\n};\n\nvar BCRYPT_BLOCKS = 8,\n    BCRYPT_HASHSIZE = 32;\n\nfunction bcrypt_hash(sha2pass, sha2salt, out) {\n  var state = new Blowfish(),\n      cdata = new Uint32Array(BCRYPT_BLOCKS), i,\n      ciphertext = new Uint8Array([79,120,121,99,104,114,111,109,97,116,105,\n            99,66,108,111,119,102,105,115,104,83,119,97,116,68,121,110,97,109,\n            105,116,101]); //\"OxychromaticBlowfishSwatDynamite\"\n\n  state.expandstate(sha2salt, 64, sha2pass, 64);\n  for (i = 0; i < 64; i++) {\n    state.expand0state(sha2salt, 64);\n    state.expand0state(sha2pass, 64);\n  }\n\n  for (i = 0; i < BCRYPT_BLOCKS; i++)\n    cdata[i] = stream2word(ciphertext, ciphertext.byteLength);\n  for (i = 0; i < 64; i++)\n    state.enc(cdata, cdata.byteLength / 8);\n\n  for (i = 0; i < BCRYPT_BLOCKS; i++) {\n    out[4*i+3] = cdata[i] >>> 24;\n    out[4*i+2] = cdata[i] >>> 16;\n    out[4*i+1] = cdata[i] >>> 8;\n    out[4*i+0] = cdata[i];\n  }\n};\n\nfunction bcrypt_pbkdf(pass, passlen, salt, saltlen, key, keylen, rounds) {\n  var sha2pass = new Uint8Array(64),\n      sha2salt = new Uint8Array(64),\n      out = new Uint8Array(BCRYPT_HASHSIZE),\n      tmpout = new Uint8Array(BCRYPT_HASHSIZE),\n      countsalt = new Uint8Array(saltlen+4),\n      i, j, amt, stride, dest, count,\n      origkeylen = keylen;\n\n  if (rounds < 1)\n    return -1;\n  if (passlen === 0 || saltlen === 0 || keylen === 0 ||\n      keylen > (out.byteLength * out.byteLength) || saltlen > (1<<20))\n    return -1;\n\n  stride = Math.floor((keylen + out.byteLength - 1) / out.byteLength);\n  amt = Math.floor((keylen + stride - 1) / stride);\n\n  for (i = 0; i < saltlen; i++)\n    countsalt[i] = salt[i];\n\n  crypto_hash_sha512(sha2pass, pass, passlen);\n\n  for (count = 1; keylen > 0; count++) {\n    countsalt[saltlen+0] = count >>> 24;\n    countsalt[saltlen+1] = count >>> 16;\n    countsalt[saltlen+2] = count >>>  8;\n    countsalt[saltlen+3] = count;\n\n    crypto_hash_sha512(sha2salt, countsalt, saltlen + 4);\n    bcrypt_hash(sha2pass, sha2salt, tmpout);\n    for (i = out.byteLength; i--;)\n      out[i] = tmpout[i];\n\n    for (i = 1; i < rounds; i++) {\n      crypto_hash_sha512(sha2salt, tmpout, tmpout.byteLength);\n      bcrypt_hash(sha2pass, sha2salt, tmpout);\n      for (j = 0; j < out.byteLength; j++)\n        out[j] ^= tmpout[j];\n    }\n\n    amt = Math.min(amt, keylen);\n    for (i = 0; i < amt; i++) {\n      dest = i * stride + (count - 1);\n      if (dest >= origkeylen)\n        break;\n      key[dest] = out[i];\n    }\n    keylen -= i;\n  }\n\n  return 0;\n};\n\nmodule.exports = {\n      BLOCKS: BCRYPT_BLOCKS,\n      HASHSIZE: BCRYPT_HASHSIZE,\n      hash: bcrypt_hash,\n      pbkdf: bcrypt_pbkdf\n};\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\treadSSHPrivate: readSSHPrivate,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar crypto = require('crypto');\n\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar pem = require('./pem');\nvar rfc4253 = require('./rfc4253');\nvar SSHBuffer = require('../ssh-buffer');\nvar errors = require('../errors');\n\nvar bcrypt;\n\nfunction read(buf, options) {\n\treturn (pem.read(buf, options));\n}\n\nvar MAGIC = 'openssh-key-v1';\n\nfunction readSSHPrivate(type, buf, options) {\n\tbuf = new SSHBuffer({buffer: buf});\n\n\tvar magic = buf.readCString();\n\tassert.strictEqual(magic, MAGIC, 'bad magic string');\n\n\tvar cipher = buf.readString();\n\tvar kdf = buf.readString();\n\tvar kdfOpts = buf.readBuffer();\n\n\tvar nkeys = buf.readInt();\n\tif (nkeys !== 1) {\n\t\tthrow (new Error('OpenSSH-format key file contains ' +\n\t\t    'multiple keys: this is unsupported.'));\n\t}\n\n\tvar pubKey = buf.readBuffer();\n\n\tif (type === 'public') {\n\t\tassert.ok(buf.atEnd(), 'excess bytes left after key');\n\t\treturn (rfc4253.read(pubKey));\n\t}\n\n\tvar privKeyBlob = buf.readBuffer();\n\tassert.ok(buf.atEnd(), 'excess bytes left after key');\n\n\tvar kdfOptsBuf = new SSHBuffer({ buffer: kdfOpts });\n\tswitch (kdf) {\n\tcase 'none':\n\t\tif (cipher !== 'none') {\n\t\t\tthrow (new Error('OpenSSH-format key uses KDF \"none\" ' +\n\t\t\t     'but specifies a cipher other than \"none\"'));\n\t\t}\n\t\tbreak;\n\tcase 'bcrypt':\n\t\tvar salt = kdfOptsBuf.readBuffer();\n\t\tvar rounds = kdfOptsBuf.readInt();\n\t\tvar cinf = utils.opensshCipherInfo(cipher);\n\t\tif (bcrypt === undefined) {\n\t\t\tbcrypt = require('bcrypt-pbkdf');\n\t\t}\n\n\t\tif (typeof (options.passphrase) === 'string') {\n\t\t\toptions.passphrase = Buffer.from(options.passphrase,\n\t\t\t    'utf-8');\n\t\t}\n\t\tif (!Buffer.isBuffer(options.passphrase)) {\n\t\t\tthrow (new errors.KeyEncryptedError(\n\t\t\t    options.filename, 'OpenSSH'));\n\t\t}\n\n\t\tvar pass = new Uint8Array(options.passphrase);\n\t\tvar salti = new Uint8Array(salt);\n\t\t/* Use the pbkdf to derive both the key and the IV. */\n\t\tvar out = new Uint8Array(cinf.keySize + cinf.blockSize);\n\t\tvar res = bcrypt.pbkdf(pass, pass.length, salti, salti.length,\n\t\t    out, out.length, rounds);\n\t\tif (res !== 0) {\n\t\t\tthrow (new Error('bcrypt_pbkdf function returned ' +\n\t\t\t    'failure, parameters invalid'));\n\t\t}\n\t\tout = Buffer.from(out);\n\t\tvar ckey = out.slice(0, cinf.keySize);\n\t\tvar iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);\n\t\tvar cipherStream = crypto.createDecipheriv(cinf.opensslName,\n\t\t    ckey, iv);\n\t\tcipherStream.setAutoPadding(false);\n\t\tvar chunk, chunks = [];\n\t\tcipherStream.once('error', function (e) {\n\t\t\tif (e.toString().indexOf('bad decrypt') !== -1) {\n\t\t\t\tthrow (new Error('Incorrect passphrase ' +\n\t\t\t\t    'supplied, could not decrypt key'));\n\t\t\t}\n\t\t\tthrow (e);\n\t\t});\n\t\tcipherStream.write(privKeyBlob);\n\t\tcipherStream.end();\n\t\twhile ((chunk = cipherStream.read()) !== null)\n\t\t\tchunks.push(chunk);\n\t\tprivKeyBlob = Buffer.concat(chunks);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error(\n\t\t    'OpenSSH-format key uses unknown KDF \"' + kdf + '\"'));\n\t}\n\n\tbuf = new SSHBuffer({buffer: privKeyBlob});\n\n\tvar checkInt1 = buf.readInt();\n\tvar checkInt2 = buf.readInt();\n\tif (checkInt1 !== checkInt2) {\n\t\tthrow (new Error('Incorrect passphrase supplied, could not ' +\n\t\t    'decrypt key'));\n\t}\n\n\tvar ret = {};\n\tvar key = rfc4253.readInternal(ret, 'private', buf.remainder());\n\n\tbuf.skip(ret.consumed);\n\n\tvar comment = buf.readString();\n\tkey.comment = comment;\n\n\treturn (key);\n}\n\nfunction write(key, options) {\n\tvar pubKey;\n\tif (PrivateKey.isPrivateKey(key))\n\t\tpubKey = key.toPublic();\n\telse\n\t\tpubKey = key;\n\n\tvar cipher = 'none';\n\tvar kdf = 'none';\n\tvar kdfopts = Buffer.alloc(0);\n\tvar cinf = { blockSize: 8 };\n\tvar passphrase;\n\tif (options !== undefined) {\n\t\tpassphrase = options.passphrase;\n\t\tif (typeof (passphrase) === 'string')\n\t\t\tpassphrase = Buffer.from(passphrase, 'utf-8');\n\t\tif (passphrase !== undefined) {\n\t\t\tassert.buffer(passphrase, 'options.passphrase');\n\t\t\tassert.optionalString(options.cipher, 'options.cipher');\n\t\t\tcipher = options.cipher;\n\t\t\tif (cipher === undefined)\n\t\t\t\tcipher = 'aes128-ctr';\n\t\t\tcinf = utils.opensshCipherInfo(cipher);\n\t\t\tkdf = 'bcrypt';\n\t\t}\n\t}\n\n\tvar privBuf;\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tprivBuf = new SSHBuffer({});\n\t\tvar checkInt = crypto.randomBytes(4).readUInt32BE(0);\n\t\tprivBuf.writeInt(checkInt);\n\t\tprivBuf.writeInt(checkInt);\n\t\tprivBuf.write(key.toBuffer('rfc4253'));\n\t\tprivBuf.writeString(key.comment || '');\n\n\t\tvar n = 1;\n\t\twhile (privBuf._offset % cinf.blockSize !== 0)\n\t\t\tprivBuf.writeChar(n++);\n\t\tprivBuf = privBuf.toBuffer();\n\t}\n\n\tswitch (kdf) {\n\tcase 'none':\n\t\tbreak;\n\tcase 'bcrypt':\n\t\tvar salt = crypto.randomBytes(16);\n\t\tvar rounds = 16;\n\t\tvar kdfssh = new SSHBuffer({});\n\t\tkdfssh.writeBuffer(salt);\n\t\tkdfssh.writeInt(rounds);\n\t\tkdfopts = kdfssh.toBuffer();\n\n\t\tif (bcrypt === undefined) {\n\t\t\tbcrypt = require('bcrypt-pbkdf');\n\t\t}\n\t\tvar pass = new Uint8Array(passphrase);\n\t\tvar salti = new Uint8Array(salt);\n\t\t/* Use the pbkdf to derive both the key and the IV. */\n\t\tvar out = new Uint8Array(cinf.keySize + cinf.blockSize);\n\t\tvar res = bcrypt.pbkdf(pass, pass.length, salti, salti.length,\n\t\t    out, out.length, rounds);\n\t\tif (res !== 0) {\n\t\t\tthrow (new Error('bcrypt_pbkdf function returned ' +\n\t\t\t    'failure, parameters invalid'));\n\t\t}\n\t\tout = Buffer.from(out);\n\t\tvar ckey = out.slice(0, cinf.keySize);\n\t\tvar iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);\n\n\t\tvar cipherStream = crypto.createCipheriv(cinf.opensslName,\n\t\t    ckey, iv);\n\t\tcipherStream.setAutoPadding(false);\n\t\tvar chunk, chunks = [];\n\t\tcipherStream.once('error', function (e) {\n\t\t\tthrow (e);\n\t\t});\n\t\tcipherStream.write(privBuf);\n\t\tcipherStream.end();\n\t\twhile ((chunk = cipherStream.read()) !== null)\n\t\t\tchunks.push(chunk);\n\t\tprivBuf = Buffer.concat(chunks);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error('Unsupported kdf ' + kdf));\n\t}\n\n\tvar buf = new SSHBuffer({});\n\n\tbuf.writeCString(MAGIC);\n\tbuf.writeString(cipher);\t/* cipher */\n\tbuf.writeString(kdf);\t\t/* kdf */\n\tbuf.writeBuffer(kdfopts);\t/* kdfoptions */\n\n\tbuf.writeInt(1);\t\t/* nkeys */\n\tbuf.writeBuffer(pubKey.toBuffer('rfc4253'));\n\n\tif (privBuf)\n\t\tbuf.writeBuffer(privBuf);\n\n\tbuf = buf.toBuffer();\n\n\tvar header;\n\tif (PrivateKey.isPrivateKey(key))\n\t\theader = 'OPENSSH PRIVATE KEY';\n\telse\n\t\theader = 'OPENSSH PUBLIC KEY';\n\n\tvar tmp = buf.toString('base64');\n\tvar len = tmp.length + (tmp.length / 70) +\n\t    18 + 16 + header.length*2 + 10;\n\tbuf = Buffer.alloc(len);\n\tvar o = 0;\n\to += buf.write('-----BEGIN ' + header + '-----\\n', o);\n\tfor (var i = 0; i < tmp.length; ) {\n\t\tvar limit = i + 70;\n\t\tif (limit > tmp.length)\n\t\t\tlimit = tmp.length;\n\t\to += buf.write(tmp.slice(i, limit), o);\n\t\tbuf[o++] = 10;\n\t\ti = limit;\n\t}\n\to += buf.write('-----END ' + header + '-----\\n', o);\n\n\treturn (buf.slice(0, o));\n}\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar crypto = require('crypto');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\n\nvar pkcs1 = require('./pkcs1');\nvar pkcs8 = require('./pkcs8');\nvar sshpriv = require('./ssh-private');\nvar rfc4253 = require('./rfc4253');\n\nvar errors = require('../errors');\n\nvar OID_PBES2 = '1.2.840.113549.1.5.13';\nvar OID_PBKDF2 = '1.2.840.113549.1.5.12';\n\nvar OID_TO_CIPHER = {\n\t'1.2.840.113549.3.7': '3des-cbc',\n\t'2.16.840.1.101.3.4.1.2': 'aes128-cbc',\n\t'2.16.840.1.101.3.4.1.42': 'aes256-cbc'\n};\nvar CIPHER_TO_OID = {};\nObject.keys(OID_TO_CIPHER).forEach(function (k) {\n\tCIPHER_TO_OID[OID_TO_CIPHER[k]] = k;\n});\n\nvar OID_TO_HASH = {\n\t'1.2.840.113549.2.7': 'sha1',\n\t'1.2.840.113549.2.9': 'sha256',\n\t'1.2.840.113549.2.11': 'sha512'\n};\nvar HASH_TO_OID = {};\nObject.keys(OID_TO_HASH).forEach(function (k) {\n\tHASH_TO_OID[OID_TO_HASH[k]] = k;\n});\n\n/*\n * For reading we support both PKCS#1 and PKCS#8. If we find a private key,\n * we just take the public component of it and use that.\n */\nfunction read(buf, options, forceType) {\n\tvar input = buf;\n\tif (typeof (buf) !== 'string') {\n\t\tassert.buffer(buf, 'buf');\n\t\tbuf = buf.toString('ascii');\n\t}\n\n\tvar lines = buf.trim().split(/[\\r\\n]+/g);\n\n\tvar m;\n\tvar si = -1;\n\twhile (!m && si < lines.length) {\n\t\tm = lines[++si].match(/*JSSTYLED*/\n\t\t    /[-]+[ ]*BEGIN ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);\n\t}\n\tassert.ok(m, 'invalid PEM header');\n\n\tvar m2;\n\tvar ei = lines.length;\n\twhile (!m2 && ei > 0) {\n\t\tm2 = lines[--ei].match(/*JSSTYLED*/\n\t\t    /[-]+[ ]*END ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);\n\t}\n\tassert.ok(m2, 'invalid PEM footer');\n\n\t/* Begin and end banners must match key type */\n\tassert.equal(m[2], m2[2]);\n\tvar type = m[2].toLowerCase();\n\n\tvar alg;\n\tif (m[1]) {\n\t\t/* They also must match algorithms, if given */\n\t\tassert.equal(m[1], m2[1], 'PEM header and footer mismatch');\n\t\talg = m[1].trim();\n\t}\n\n\tlines = lines.slice(si, ei + 1);\n\n\tvar headers = {};\n\twhile (true) {\n\t\tlines = lines.slice(1);\n\t\tm = lines[0].match(/*JSSTYLED*/\n\t\t    /^([A-Za-z0-9-]+): (.+)$/);\n\t\tif (!m)\n\t\t\tbreak;\n\t\theaders[m[1].toLowerCase()] = m[2];\n\t}\n\n\t/* Chop off the first and last lines */\n\tlines = lines.slice(0, -1).join('');\n\tbuf = Buffer.from(lines, 'base64');\n\n\tvar cipher, key, iv;\n\tif (headers['proc-type']) {\n\t\tvar parts = headers['proc-type'].split(',');\n\t\tif (parts[0] === '4' && parts[1] === 'ENCRYPTED') {\n\t\t\tif (typeof (options.passphrase) === 'string') {\n\t\t\t\toptions.passphrase = Buffer.from(\n\t\t\t\t    options.passphrase, 'utf-8');\n\t\t\t}\n\t\t\tif (!Buffer.isBuffer(options.passphrase)) {\n\t\t\t\tthrow (new errors.KeyEncryptedError(\n\t\t\t\t    options.filename, 'PEM'));\n\t\t\t} else {\n\t\t\t\tparts = headers['dek-info'].split(',');\n\t\t\t\tassert.ok(parts.length === 2);\n\t\t\t\tcipher = parts[0].toLowerCase();\n\t\t\t\tiv = Buffer.from(parts[1], 'hex');\n\t\t\t\tkey = utils.opensslKeyDeriv(cipher, iv,\n\t\t\t\t    options.passphrase, 1).key;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (alg && alg.toLowerCase() === 'encrypted') {\n\t\tvar eder = new asn1.BerReader(buf);\n\t\tvar pbesEnd;\n\t\teder.readSequence();\n\n\t\teder.readSequence();\n\t\tpbesEnd = eder.offset + eder.length;\n\n\t\tvar method = eder.readOID();\n\t\tif (method !== OID_PBES2) {\n\t\t\tthrow (new Error('Unsupported PEM/PKCS8 encryption ' +\n\t\t\t    'scheme: ' + method));\n\t\t}\n\n\t\teder.readSequence();\t/* PBES2-params */\n\n\t\teder.readSequence();\t/* keyDerivationFunc */\n\t\tvar kdfEnd = eder.offset + eder.length;\n\t\tvar kdfOid = eder.readOID();\n\t\tif (kdfOid !== OID_PBKDF2)\n\t\t\tthrow (new Error('Unsupported PBES2 KDF: ' + kdfOid));\n\t\teder.readSequence();\n\t\tvar salt = eder.readString(asn1.Ber.OctetString, true);\n\t\tvar iterations = eder.readInt();\n\t\tvar hashAlg = 'sha1';\n\t\tif (eder.offset < kdfEnd) {\n\t\t\teder.readSequence();\n\t\t\tvar hashAlgOid = eder.readOID();\n\t\t\thashAlg = OID_TO_HASH[hashAlgOid];\n\t\t\tif (hashAlg === undefined) {\n\t\t\t\tthrow (new Error('Unsupported PBKDF2 hash: ' +\n\t\t\t\t    hashAlgOid));\n\t\t\t}\n\t\t}\n\t\teder._offset = kdfEnd;\n\n\t\teder.readSequence();\t/* encryptionScheme */\n\t\tvar cipherOid = eder.readOID();\n\t\tcipher = OID_TO_CIPHER[cipherOid];\n\t\tif (cipher === undefined) {\n\t\t\tthrow (new Error('Unsupported PBES2 cipher: ' +\n\t\t\t    cipherOid));\n\t\t}\n\t\tiv = eder.readString(asn1.Ber.OctetString, true);\n\n\t\teder._offset = pbesEnd;\n\t\tbuf = eder.readString(asn1.Ber.OctetString, true);\n\n\t\tif (typeof (options.passphrase) === 'string') {\n\t\t\toptions.passphrase = Buffer.from(\n\t\t\t    options.passphrase, 'utf-8');\n\t\t}\n\t\tif (!Buffer.isBuffer(options.passphrase)) {\n\t\t\tthrow (new errors.KeyEncryptedError(\n\t\t\t    options.filename, 'PEM'));\n\t\t}\n\n\t\tvar cinfo = utils.opensshCipherInfo(cipher);\n\n\t\tcipher = cinfo.opensslName;\n\t\tkey = utils.pbkdf2(hashAlg, salt, iterations, cinfo.keySize,\n\t\t    options.passphrase);\n\t\talg = undefined;\n\t}\n\n\tif (cipher && key && iv) {\n\t\tvar cipherStream = crypto.createDecipheriv(cipher, key, iv);\n\t\tvar chunk, chunks = [];\n\t\tcipherStream.once('error', function (e) {\n\t\t\tif (e.toString().indexOf('bad decrypt') !== -1) {\n\t\t\t\tthrow (new Error('Incorrect passphrase ' +\n\t\t\t\t    'supplied, could not decrypt key'));\n\t\t\t}\n\t\t\tthrow (e);\n\t\t});\n\t\tcipherStream.write(buf);\n\t\tcipherStream.end();\n\t\twhile ((chunk = cipherStream.read()) !== null)\n\t\t\tchunks.push(chunk);\n\t\tbuf = Buffer.concat(chunks);\n\t}\n\n\t/* The new OpenSSH internal format abuses PEM headers */\n\tif (alg && alg.toLowerCase() === 'openssh')\n\t\treturn (sshpriv.readSSHPrivate(type, buf, options));\n\tif (alg && alg.toLowerCase() === 'ssh2')\n\t\treturn (rfc4253.readType(type, buf, options));\n\n\tvar der = new asn1.BerReader(buf);\n\tder.originalInput = input;\n\n\t/*\n\t * All of the PEM file types start with a sequence tag, so chop it\n\t * off here\n\t */\n\tder.readSequence();\n\n\t/* PKCS#1 type keys name an algorithm in the banner explicitly */\n\tif (alg) {\n\t\tif (forceType)\n\t\t\tassert.strictEqual(forceType, 'pkcs1');\n\t\treturn (pkcs1.readPkcs1(alg, type, der));\n\t} else {\n\t\tif (forceType)\n\t\t\tassert.strictEqual(forceType, 'pkcs8');\n\t\treturn (pkcs8.readPkcs8(alg, type, der));\n\t}\n}\n\nfunction write(key, options, type) {\n\tassert.object(key);\n\n\tvar alg = {\n\t    'ecdsa': 'EC',\n\t    'rsa': 'RSA',\n\t    'dsa': 'DSA',\n\t    'ed25519': 'EdDSA'\n\t}[key.type];\n\tvar header;\n\n\tvar der = new asn1.BerWriter();\n\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tif (type && type === 'pkcs8') {\n\t\t\theader = 'PRIVATE KEY';\n\t\t\tpkcs8.writePkcs8(der, key);\n\t\t} else {\n\t\t\tif (type)\n\t\t\t\tassert.strictEqual(type, 'pkcs1');\n\t\t\theader = alg + ' PRIVATE KEY';\n\t\t\tpkcs1.writePkcs1(der, key);\n\t\t}\n\n\t} else if (Key.isKey(key)) {\n\t\tif (type && type === 'pkcs1') {\n\t\t\theader = alg + ' PUBLIC KEY';\n\t\t\tpkcs1.writePkcs1(der, key);\n\t\t} else {\n\t\t\tif (type)\n\t\t\t\tassert.strictEqual(type, 'pkcs8');\n\t\t\theader = 'PUBLIC KEY';\n\t\t\tpkcs8.writePkcs8(der, key);\n\t\t}\n\n\t} else {\n\t\tthrow (new Error('key is not a Key or PrivateKey'));\n\t}\n\n\tvar tmp = der.buffer.toString('base64');\n\tvar len = tmp.length + (tmp.length / 64) +\n\t    18 + 16 + header.length*2 + 10;\n\tvar buf = Buffer.alloc(len);\n\tvar o = 0;\n\to += buf.write('-----BEGIN ' + header + '-----\\n', o);\n\tfor (var i = 0; i < tmp.length; ) {\n\t\tvar limit = i + 64;\n\t\tif (limit > tmp.length)\n\t\t\tlimit = tmp.length;\n\t\to += buf.write(tmp.slice(i, limit), o);\n\t\tbuf[o++] = 10;\n\t\ti = limit;\n\t}\n\to += buf.write('-----END ' + header + '-----\\n', o);\n\n\treturn (buf.slice(0, o));\n}\n","// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar rfc4253 = require('./rfc4253');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\n\nvar sshpriv = require('./ssh-private');\n\n/*JSSTYLED*/\nvar SSHKEY_RE = /^([a-z0-9-]+)[ \\t]+([a-zA-Z0-9+\\/]+[=]*)([ \\t]+([^ \\t][^\\n]*[\\n]*)?)?$/;\n/*JSSTYLED*/\nvar SSHKEY_RE2 = /^([a-z0-9-]+)[ \\t\\n]+([a-zA-Z0-9+\\/][a-zA-Z0-9+\\/ \\t\\n=]*)([^a-zA-Z0-9+\\/ \\t\\n=].*)?$/;\n\nfunction read(buf, options) {\n\tif (typeof (buf) !== 'string') {\n\t\tassert.buffer(buf, 'buf');\n\t\tbuf = buf.toString('ascii');\n\t}\n\n\tvar trimmed = buf.trim().replace(/[\\\\\\r]/g, '');\n\tvar m = trimmed.match(SSHKEY_RE);\n\tif (!m)\n\t\tm = trimmed.match(SSHKEY_RE2);\n\tassert.ok(m, 'key must match regex');\n\n\tvar type = rfc4253.algToKeyType(m[1]);\n\tvar kbuf = Buffer.from(m[2], 'base64');\n\n\t/*\n\t * This is a bit tricky. If we managed to parse the key and locate the\n\t * key comment with the regex, then do a non-partial read and assert\n\t * that we have consumed all bytes. If we couldn't locate the key\n\t * comment, though, there may be whitespace shenanigans going on that\n\t * have conjoined the comment to the rest of the key. We do a partial\n\t * read in this case to try to make the best out of a sorry situation.\n\t */\n\tvar key;\n\tvar ret = {};\n\tif (m[4]) {\n\t\ttry {\n\t\t\tkey = rfc4253.read(kbuf);\n\n\t\t} catch (e) {\n\t\t\tm = trimmed.match(SSHKEY_RE2);\n\t\t\tassert.ok(m, 'key must match regex');\n\t\t\tkbuf = Buffer.from(m[2], 'base64');\n\t\t\tkey = rfc4253.readInternal(ret, 'public', kbuf);\n\t\t}\n\t} else {\n\t\tkey = rfc4253.readInternal(ret, 'public', kbuf);\n\t}\n\n\tassert.strictEqual(type, key.type);\n\n\tif (m[4] && m[4].length > 0) {\n\t\tkey.comment = m[4];\n\n\t} else if (ret.consumed) {\n\t\t/*\n\t\t * Now the magic: trying to recover the key comment when it's\n\t\t * gotten conjoined to the key or otherwise shenanigan'd.\n\t\t *\n\t\t * Work out how much base64 we used, then drop all non-base64\n\t\t * chars from the beginning up to this point in the the string.\n\t\t * Then offset in this and try to make up for missing = chars.\n\t\t */\n\t\tvar data = m[2] + (m[3] ? m[3] : '');\n\t\tvar realOffset = Math.ceil(ret.consumed / 3) * 4;\n\t\tdata = data.slice(0, realOffset - 2). /*JSSTYLED*/\n\t\t    replace(/[^a-zA-Z0-9+\\/=]/g, '') +\n\t\t    data.slice(realOffset - 2);\n\n\t\tvar padding = ret.consumed % 3;\n\t\tif (padding > 0 &&\n\t\t    data.slice(realOffset - 1, realOffset) !== '=')\n\t\t\trealOffset--;\n\t\twhile (data.slice(realOffset, realOffset + 1) === '=')\n\t\t\trealOffset++;\n\n\t\t/* Finally, grab what we think is the comment & clean it up. */\n\t\tvar trailer = data.slice(realOffset);\n\t\ttrailer = trailer.replace(/[\\r\\n]/g, ' ').\n\t\t    replace(/^\\s+/, '');\n\t\tif (trailer.match(/^[a-zA-Z0-9]/))\n\t\t\tkey.comment = trailer;\n\t}\n\n\treturn (key);\n}\n\nfunction write(key, options) {\n\tassert.object(key);\n\tif (!Key.isKey(key))\n\t\tthrow (new Error('Must be a public key'));\n\n\tvar parts = [];\n\tvar alg = rfc4253.keyTypeToAlg(key);\n\tparts.push(alg);\n\n\tvar buf = rfc4253.write(key);\n\tparts.push(buf.toString('base64'));\n\n\tif (key.comment)\n\t\tparts.push(key.comment);\n\n\treturn (Buffer.from(parts.join(' ')));\n}\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar utils = require('../utils');\nvar SSHBuffer = require('../ssh-buffer');\nvar Dhe = require('../dhe');\n\nvar supportedAlgos = {\n\t'rsa-sha1' : 5,\n\t'rsa-sha256' : 8,\n\t'rsa-sha512' : 10,\n\t'ecdsa-p256-sha256' : 13,\n\t'ecdsa-p384-sha384' : 14\n\t/*\n\t * ed25519 is hypothetically supported with id 15\n\t * but the common tools available don't appear to be\n\t * capable of generating/using ed25519 keys\n\t */\n};\n\nvar supportedAlgosById = {};\nObject.keys(supportedAlgos).forEach(function (k) {\n\tsupportedAlgosById[supportedAlgos[k]] = k.toUpperCase();\n});\n\nfunction read(buf, options) {\n\tif (typeof (buf) !== 'string') {\n\t\tassert.buffer(buf, 'buf');\n\t\tbuf = buf.toString('ascii');\n\t}\n\tvar lines = buf.split('\\n');\n\tif (lines[0].match(/^Private-key-format\\: v1/)) {\n\t\tvar algElems = lines[1].split(' ');\n\t\tvar algoNum = parseInt(algElems[1], 10);\n\t\tvar algoName = algElems[2];\n\t\tif (!supportedAlgosById[algoNum])\n\t\t\tthrow (new Error('Unsupported algorithm: ' + algoName));\n\t\treturn (readDNSSECPrivateKey(algoNum, lines.slice(2)));\n\t}\n\n\t// skip any comment-lines\n\tvar line = 0;\n\t/* JSSTYLED */\n\twhile (lines[line].match(/^\\;/))\n\t\tline++;\n\t// we should now have *one single* line left with our KEY on it.\n\tif ((lines[line].match(/\\. IN KEY /) ||\n\t    lines[line].match(/\\. IN DNSKEY /)) && lines[line+1].length === 0) {\n\t\treturn (readRFC3110(lines[line]));\n\t}\n\tthrow (new Error('Cannot parse dnssec key'));\n}\n\nfunction readRFC3110(keyString) {\n\tvar elems = keyString.split(' ');\n\t//unused var flags = parseInt(elems[3], 10);\n\t//unused var protocol = parseInt(elems[4], 10);\n\tvar algorithm = parseInt(elems[5], 10);\n\tif (!supportedAlgosById[algorithm])\n\t\tthrow (new Error('Unsupported algorithm: ' + algorithm));\n\tvar base64key = elems.slice(6, elems.length).join();\n\tvar keyBuffer = Buffer.from(base64key, 'base64');\n\tif (supportedAlgosById[algorithm].match(/^RSA-/)) {\n\t\t// join the rest of the body into a single base64-blob\n\t\tvar publicExponentLen = keyBuffer.readUInt8(0);\n\t\tif (publicExponentLen != 3 && publicExponentLen != 1)\n\t\t\tthrow (new Error('Cannot parse dnssec key: ' +\n\t\t\t    'unsupported exponent length'));\n\n\t\tvar publicExponent = keyBuffer.slice(1, publicExponentLen+1);\n\t\tpublicExponent = utils.mpNormalize(publicExponent);\n\t\tvar modulus = keyBuffer.slice(1+publicExponentLen);\n\t\tmodulus = utils.mpNormalize(modulus);\n\t\t// now, make the key\n\t\tvar rsaKey = {\n\t\t\ttype: 'rsa',\n\t\t\tparts: []\n\t\t};\n\t\trsaKey.parts.push({ name: 'e', data: publicExponent});\n\t\trsaKey.parts.push({ name: 'n', data: modulus});\n\t\treturn (new Key(rsaKey));\n\t}\n\tif (supportedAlgosById[algorithm] === 'ECDSA-P384-SHA384' ||\n\t    supportedAlgosById[algorithm] === 'ECDSA-P256-SHA256') {\n\t\tvar curve = 'nistp384';\n\t\tvar size = 384;\n\t\tif (supportedAlgosById[algorithm].match(/^ECDSA-P256-SHA256/)) {\n\t\t\tcurve = 'nistp256';\n\t\t\tsize = 256;\n\t\t}\n\n\t\tvar ecdsaKey = {\n\t\t\ttype: 'ecdsa',\n\t\t\tcurve: curve,\n\t\t\tsize: size,\n\t\t\tparts: [\n\t\t\t\t{name: 'curve', data: Buffer.from(curve) },\n\t\t\t\t{name: 'Q', data: utils.ecNormalize(keyBuffer) }\n\t\t\t]\n\t\t};\n\t\treturn (new Key(ecdsaKey));\n\t}\n\tthrow (new Error('Unsupported algorithm: ' +\n\t    supportedAlgosById[algorithm]));\n}\n\nfunction elementToBuf(e) {\n\treturn (Buffer.from(e.split(' ')[1], 'base64'));\n}\n\nfunction readDNSSECRSAPrivateKey(elements) {\n\tvar rsaParams = {};\n\telements.forEach(function (element) {\n\t\tif (element.split(' ')[0] === 'Modulus:')\n\t\t\trsaParams['n'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'PublicExponent:')\n\t\t\trsaParams['e'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'PrivateExponent:')\n\t\t\trsaParams['d'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'Prime1:')\n\t\t\trsaParams['p'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'Prime2:')\n\t\t\trsaParams['q'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'Exponent1:')\n\t\t\trsaParams['dmodp'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'Exponent2:')\n\t\t\trsaParams['dmodq'] = elementToBuf(element);\n\t\telse if (element.split(' ')[0] === 'Coefficient:')\n\t\t\trsaParams['iqmp'] = elementToBuf(element);\n\t});\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tparts: [\n\t\t\t{ name: 'e', data: utils.mpNormalize(rsaParams['e'])},\n\t\t\t{ name: 'n', data: utils.mpNormalize(rsaParams['n'])},\n\t\t\t{ name: 'd', data: utils.mpNormalize(rsaParams['d'])},\n\t\t\t{ name: 'p', data: utils.mpNormalize(rsaParams['p'])},\n\t\t\t{ name: 'q', data: utils.mpNormalize(rsaParams['q'])},\n\t\t\t{ name: 'dmodp',\n\t\t\t    data: utils.mpNormalize(rsaParams['dmodp'])},\n\t\t\t{ name: 'dmodq',\n\t\t\t    data: utils.mpNormalize(rsaParams['dmodq'])},\n\t\t\t{ name: 'iqmp',\n\t\t\t    data: utils.mpNormalize(rsaParams['iqmp'])}\n\t\t]\n\t};\n\treturn (new PrivateKey(key));\n}\n\nfunction readDNSSECPrivateKey(alg, elements) {\n\tif (supportedAlgosById[alg].match(/^RSA-/)) {\n\t\treturn (readDNSSECRSAPrivateKey(elements));\n\t}\n\tif (supportedAlgosById[alg] === 'ECDSA-P384-SHA384' ||\n\t    supportedAlgosById[alg] === 'ECDSA-P256-SHA256') {\n\t\tvar d = Buffer.from(elements[0].split(' ')[1], 'base64');\n\t\tvar curve = 'nistp384';\n\t\tvar size = 384;\n\t\tif (supportedAlgosById[alg] === 'ECDSA-P256-SHA256') {\n\t\t\tcurve = 'nistp256';\n\t\t\tsize = 256;\n\t\t}\n\t\t// DNSSEC generates the public-key on the fly (go calculate it)\n\t\tvar publicKey = utils.publicFromPrivateECDSA(curve, d);\n\t\tvar Q = publicKey.part['Q'].data;\n\t\tvar ecdsaKey = {\n\t\t\ttype: 'ecdsa',\n\t\t\tcurve: curve,\n\t\t\tsize: size,\n\t\t\tparts: [\n\t\t\t\t{name: 'curve', data: Buffer.from(curve) },\n\t\t\t\t{name: 'd', data: d },\n\t\t\t\t{name: 'Q', data: Q }\n\t\t\t]\n\t\t};\n\t\treturn (new PrivateKey(ecdsaKey));\n\t}\n\tthrow (new Error('Unsupported algorithm: ' + supportedAlgosById[alg]));\n}\n\nfunction dnssecTimestamp(date) {\n\tvar year = date.getFullYear() + ''; //stringify\n\tvar month = (date.getMonth() + 1);\n\tvar timestampStr = year + month + date.getUTCDate();\n\ttimestampStr += '' + date.getUTCHours() + date.getUTCMinutes();\n\ttimestampStr += date.getUTCSeconds();\n\treturn (timestampStr);\n}\n\nfunction rsaAlgFromOptions(opts) {\n\tif (!opts || !opts.hashAlgo || opts.hashAlgo === 'sha1')\n\t\treturn ('5 (RSASHA1)');\n\telse if (opts.hashAlgo === 'sha256')\n\t\treturn ('8 (RSASHA256)');\n\telse if (opts.hashAlgo === 'sha512')\n\t\treturn ('10 (RSASHA512)');\n\telse\n\t\tthrow (new Error('Unknown or unsupported hash: ' +\n\t\t    opts.hashAlgo));\n}\n\nfunction writeRSA(key, options) {\n\t// if we're missing parts, add them.\n\tif (!key.part.dmodp || !key.part.dmodq) {\n\t\tutils.addRSAMissing(key);\n\t}\n\n\tvar out = '';\n\tout += 'Private-key-format: v1.3\\n';\n\tout += 'Algorithm: ' + rsaAlgFromOptions(options) + '\\n';\n\tvar n = utils.mpDenormalize(key.part['n'].data);\n\tout += 'Modulus: ' + n.toString('base64') + '\\n';\n\tvar e = utils.mpDenormalize(key.part['e'].data);\n\tout += 'PublicExponent: ' + e.toString('base64') + '\\n';\n\tvar d = utils.mpDenormalize(key.part['d'].data);\n\tout += 'PrivateExponent: ' + d.toString('base64') + '\\n';\n\tvar p = utils.mpDenormalize(key.part['p'].data);\n\tout += 'Prime1: ' + p.toString('base64') + '\\n';\n\tvar q = utils.mpDenormalize(key.part['q'].data);\n\tout += 'Prime2: ' + q.toString('base64') + '\\n';\n\tvar dmodp = utils.mpDenormalize(key.part['dmodp'].data);\n\tout += 'Exponent1: ' + dmodp.toString('base64') + '\\n';\n\tvar dmodq = utils.mpDenormalize(key.part['dmodq'].data);\n\tout += 'Exponent2: ' + dmodq.toString('base64') + '\\n';\n\tvar iqmp = utils.mpDenormalize(key.part['iqmp'].data);\n\tout += 'Coefficient: ' + iqmp.toString('base64') + '\\n';\n\t// Assume that we're valid as-of now\n\tvar timestamp = new Date();\n\tout += 'Created: ' + dnssecTimestamp(timestamp) + '\\n';\n\tout += 'Publish: ' + dnssecTimestamp(timestamp) + '\\n';\n\tout += 'Activate: ' + dnssecTimestamp(timestamp) + '\\n';\n\treturn (Buffer.from(out, 'ascii'));\n}\n\nfunction writeECDSA(key, options) {\n\tvar out = '';\n\tout += 'Private-key-format: v1.3\\n';\n\n\tif (key.curve === 'nistp256') {\n\t\tout += 'Algorithm: 13 (ECDSAP256SHA256)\\n';\n\t} else if (key.curve === 'nistp384') {\n\t\tout += 'Algorithm: 14 (ECDSAP384SHA384)\\n';\n\t} else {\n\t\tthrow (new Error('Unsupported curve'));\n\t}\n\tvar base64Key = key.part['d'].data.toString('base64');\n\tout += 'PrivateKey: ' + base64Key + '\\n';\n\n\t// Assume that we're valid as-of now\n\tvar timestamp = new Date();\n\tout += 'Created: ' + dnssecTimestamp(timestamp) + '\\n';\n\tout += 'Publish: ' + dnssecTimestamp(timestamp) + '\\n';\n\tout += 'Activate: ' + dnssecTimestamp(timestamp) + '\\n';\n\n\treturn (Buffer.from(out, 'ascii'));\n}\n\nfunction write(key, options) {\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tif (key.type === 'rsa') {\n\t\t\treturn (writeRSA(key, options));\n\t\t} else if (key.type === 'ecdsa') {\n\t\t\treturn (writeECDSA(key, options));\n\t\t} else {\n\t\t\tthrow (new Error('Unsupported algorithm: ' + key.type));\n\t\t}\n\t} else if (Key.isKey(key)) {\n\t\t/*\n\t\t * RFC3110 requires a keyname, and a keytype, which we\n\t\t * don't really have a mechanism for specifying such\n\t\t * additional metadata.\n\t\t */\n\t\tthrow (new Error('Format \"dnssec\" only supports ' +\n\t\t    'writing private keys'));\n\t} else {\n\t\tthrow (new Error('key is not a Key or PrivateKey'));\n\t}\n}\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar rfc4253 = require('./rfc4253');\nvar Key = require('../key');\nvar SSHBuffer = require('../ssh-buffer');\nvar crypto = require('crypto');\nvar PrivateKey = require('../private-key');\n\nvar errors = require('../errors');\n\n// https://tartarus.org/~simon/putty-prerel-snapshots/htmldoc/AppendixC.html\nfunction read(buf, options) {\n\tvar lines = buf.toString('ascii').split(/[\\r\\n]+/);\n\tvar found = false;\n\tvar parts;\n\tvar si = 0;\n\tvar formatVersion;\n\twhile (si < lines.length) {\n\t\tparts = splitHeader(lines[si++]);\n\t\tif (parts) {\n\t\t\tformatVersion = {\n\t\t\t\t'putty-user-key-file-2': 2,\n\t\t\t\t'putty-user-key-file-3': 3\n\t\t\t}[parts[0].toLowerCase()];\n\t\t\tif (formatVersion) {\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (!found) {\n\t\tthrow (new Error('No PuTTY format first line found'));\n\t}\n\tvar alg = parts[1];\n\n\tparts = splitHeader(lines[si++]);\n\tassert.equal(parts[0].toLowerCase(), 'encryption');\n\tvar encryption = parts[1];\n\n\tparts = splitHeader(lines[si++]);\n\tassert.equal(parts[0].toLowerCase(), 'comment');\n\tvar comment = parts[1];\n\n\tparts = splitHeader(lines[si++]);\n\tassert.equal(parts[0].toLowerCase(), 'public-lines');\n\tvar publicLines = parseInt(parts[1], 10);\n\tif (!isFinite(publicLines) || publicLines < 0 ||\n\t    publicLines > lines.length) {\n\t\tthrow (new Error('Invalid public-lines count'));\n\t}\n\n\tvar publicBuf = Buffer.from(\n\t    lines.slice(si, si + publicLines).join(''), 'base64');\n\tvar keyType = rfc4253.algToKeyType(alg);\n\tvar key = rfc4253.read(publicBuf);\n\tif (key.type !== keyType) {\n\t\tthrow (new Error('Outer key algorithm mismatch'));\n\t}\n\n\tsi += publicLines;\n\tif (lines[si]) {\n\t\tparts = splitHeader(lines[si++]);\n\t\tassert.equal(parts[0].toLowerCase(), 'private-lines');\n\t\tvar privateLines = parseInt(parts[1], 10);\n\t\tif (!isFinite(privateLines) || privateLines < 0 ||\n\t\t    privateLines > lines.length) {\n\t\t\tthrow (new Error('Invalid private-lines count'));\n\t\t}\n\n\t\tvar privateBuf = Buffer.from(\n\t\t\tlines.slice(si, si + privateLines).join(''), 'base64');\n\n\t\tif (encryption !== 'none' && formatVersion === 3) {\n\t\t\tthrow new Error('Encrypted keys arenot supported for' +\n\t\t\t' PuTTY format version 3');\n\t\t}\n\n\t\tif (encryption === 'aes256-cbc') {\n\t\t\tif (!options.passphrase) {\n\t\t\t\tthrow (new errors.KeyEncryptedError(\n\t\t\t\t\toptions.filename, 'PEM'));\n\t\t\t}\n\n\t\t\tvar iv = Buffer.alloc(16, 0);\n\t\t\tvar decipher = crypto.createDecipheriv(\n\t\t\t\t'aes-256-cbc',\n\t\t\t\tderivePPK2EncryptionKey(options.passphrase),\n\t\t\t\tiv);\n\t\t\tdecipher.setAutoPadding(false);\n\t\t\tprivateBuf = Buffer.concat([\n\t\t\t\tdecipher.update(privateBuf), decipher.final()]);\n\t\t}\n\n\t\tkey = new PrivateKey(key);\n\t\tif (key.type !== keyType) {\n\t\t\tthrow (new Error('Outer key algorithm mismatch'));\n\t\t}\n\n\t\tvar sshbuf = new SSHBuffer({buffer: privateBuf});\n\t\tvar privateKeyParts;\n\t\tif (alg === 'ssh-dss') {\n\t\t\tprivateKeyParts = [ {\n\t\t\t\tname: 'x',\n\t\t\t\tdata: sshbuf.readBuffer()\n\t\t\t}];\n\t\t} else if (alg === 'ssh-rsa') {\n\t\t\tprivateKeyParts = [\n\t\t\t\t{ name: 'd', data: sshbuf.readBuffer() },\n\t\t\t\t{ name: 'p', data: sshbuf.readBuffer() },\n\t\t\t\t{ name: 'q', data: sshbuf.readBuffer() },\n\t\t\t\t{ name: 'iqmp', data: sshbuf.readBuffer() }\n\t\t\t];\n\t\t} else if (alg.match(/^ecdsa-sha2-nistp/)) {\n\t\t\tprivateKeyParts = [ {\n\t\t\t\tname: 'd', data: sshbuf.readBuffer()\n\t\t\t} ];\n\t\t} else if (alg === 'ssh-ed25519') {\n\t\t\tprivateKeyParts = [ {\n\t\t\t\tname: 'k', data: sshbuf.readBuffer()\n\t\t\t} ];\n\t\t} else {\n\t\t\tthrow new Error('Unsupported PPK key type: ' + alg);\n\t\t}\n\n\t\tkey = new PrivateKey({\n\t\t\ttype: key.type,\n\t\t\tparts: key.parts.concat(privateKeyParts)\n\t\t});\n\t}\n\n\tkey.comment = comment;\n\treturn (key);\n}\n\nfunction derivePPK2EncryptionKey(passphrase) {\n\tvar hash1 = crypto.createHash('sha1').update(Buffer.concat([\n\t\tBuffer.from([0, 0, 0, 0]),\n\t\tBuffer.from(passphrase)\n\t])).digest();\n\tvar hash2 = crypto.createHash('sha1').update(Buffer.concat([\n\t\tBuffer.from([0, 0, 0, 1]),\n\t\tBuffer.from(passphrase)\n\t])).digest();\n\treturn (Buffer.concat([hash1, hash2]).slice(0, 32));\n}\n\nfunction splitHeader(line) {\n\tvar idx = line.indexOf(':');\n\tif (idx === -1)\n\t\treturn (null);\n\tvar header = line.slice(0, idx);\n\t++idx;\n\twhile (line[idx] === ' ')\n\t\t++idx;\n\tvar rest = line.slice(idx);\n\treturn ([header, rest]);\n}\n\nfunction write(key, options) {\n\tassert.object(key);\n\tif (!Key.isKey(key))\n\t\tthrow (new Error('Must be a public key'));\n\n\tvar alg = rfc4253.keyTypeToAlg(key);\n\tvar buf = rfc4253.write(key);\n\tvar comment = key.comment || '';\n\n\tvar b64 = buf.toString('base64');\n\tvar lines = wrap(b64, 64);\n\n\tlines.unshift('Public-Lines: ' + lines.length);\n\tlines.unshift('Comment: ' + comment);\n\tlines.unshift('Encryption: none');\n\tlines.unshift('PuTTY-User-Key-File-2: ' + alg);\n\n\treturn (Buffer.from(lines.join('\\n') + '\\n'));\n}\n\nfunction wrap(txt, len) {\n\tvar lines = [];\n\tvar pos = 0;\n\twhile (pos < txt.length) {\n\t\tlines.push(txt.slice(pos, pos + 64));\n\t\tpos += 64;\n\t}\n\treturn (lines);\n}\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\n\nvar pem = require('./pem');\nvar ssh = require('./ssh');\nvar rfc4253 = require('./rfc4253');\nvar dnssec = require('./dnssec');\nvar putty = require('./putty');\n\nvar DNSSEC_PRIVKEY_HEADER_PREFIX = 'Private-key-format: v1';\n\nfunction read(buf, options) {\n\tif (typeof (buf) === 'string') {\n\t\tif (buf.trim().match(/^[-]+[ ]*BEGIN/))\n\t\t\treturn (pem.read(buf, options));\n\t\tif (buf.match(/^\\s*ssh-[a-z]/))\n\t\t\treturn (ssh.read(buf, options));\n\t\tif (buf.match(/^\\s*ecdsa-/))\n\t\t\treturn (ssh.read(buf, options));\n\t\tif (buf.match(/^putty-user-key-file-2:/i))\n\t\t\treturn (putty.read(buf, options));\n\t\tif (findDNSSECHeader(buf))\n\t\t\treturn (dnssec.read(buf, options));\n\t\tbuf = Buffer.from(buf, 'binary');\n\t} else {\n\t\tassert.buffer(buf);\n\t\tif (findPEMHeader(buf))\n\t\t\treturn (pem.read(buf, options));\n\t\tif (findSSHHeader(buf))\n\t\t\treturn (ssh.read(buf, options));\n\t\tif (findPuTTYHeader(buf))\n\t\t\treturn (putty.read(buf, options));\n\t\tif (findDNSSECHeader(buf))\n\t\t\treturn (dnssec.read(buf, options));\n\t}\n\tif (buf.readUInt32BE(0) < buf.length)\n\t\treturn (rfc4253.read(buf, options));\n\tthrow (new Error('Failed to auto-detect format of key'));\n}\n\nfunction findPuTTYHeader(buf) {\n\tvar offset = 0;\n\twhile (offset < buf.length &&\n\t    (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9))\n\t\t++offset;\n\tif (offset + 22 <= buf.length &&\n\t    buf.slice(offset, offset + 22).toString('ascii').toLowerCase() ===\n\t    'putty-user-key-file-2:')\n\t\treturn (true);\n\treturn (false);\n}\n\nfunction findSSHHeader(buf) {\n\tvar offset = 0;\n\twhile (offset < buf.length &&\n\t    (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9))\n\t\t++offset;\n\tif (offset + 4 <= buf.length &&\n\t    buf.slice(offset, offset + 4).toString('ascii') === 'ssh-')\n\t\treturn (true);\n\tif (offset + 6 <= buf.length &&\n\t    buf.slice(offset, offset + 6).toString('ascii') === 'ecdsa-')\n\t\treturn (true);\n\treturn (false);\n}\n\nfunction findPEMHeader(buf) {\n\tvar offset = 0;\n\twhile (offset < buf.length &&\n\t    (buf[offset] === 32 || buf[offset] === 10))\n\t\t++offset;\n\tif (buf[offset] !== 45)\n\t\treturn (false);\n\twhile (offset < buf.length &&\n\t    (buf[offset] === 45))\n\t\t++offset;\n\twhile (offset < buf.length &&\n\t    (buf[offset] === 32))\n\t\t++offset;\n\tif (offset + 5 > buf.length ||\n\t    buf.slice(offset, offset + 5).toString('ascii') !== 'BEGIN')\n\t\treturn (false);\n\treturn (true);\n}\n\nfunction findDNSSECHeader(buf) {\n\t// private case first\n\tif (buf.length <= DNSSEC_PRIVKEY_HEADER_PREFIX.length)\n\t\treturn (false);\n\tvar headerCheck = buf.slice(0, DNSSEC_PRIVKEY_HEADER_PREFIX.length);\n\tif (headerCheck.toString('ascii') === DNSSEC_PRIVKEY_HEADER_PREFIX)\n\t\treturn (true);\n\n\t// public-key RFC3110 ?\n\t// 'domain.com. IN KEY ...' or 'domain.com. IN DNSKEY ...'\n\t// skip any comment-lines\n\tif (typeof (buf) !== 'string') {\n\t\tbuf = buf.toString('ascii');\n\t}\n\tvar lines = buf.split('\\n');\n\tvar line = 0;\n\t/* JSSTYLED */\n\twhile (lines[line].match(/^\\;/))\n\t\tline++;\n\tif (lines[line].toString('ascii').match(/\\. IN KEY /))\n\t\treturn (true);\n\tif (lines[line].toString('ascii').match(/\\. IN DNSKEY /))\n\t\treturn (true);\n\treturn (false);\n}\n\nfunction write(key, options) {\n\tthrow (new Error('\"auto\" format cannot be used for writing'));\n}\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = PrivateKey;\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar Fingerprint = require('./fingerprint');\nvar Signature = require('./signature');\nvar errs = require('./errors');\nvar util = require('util');\nvar utils = require('./utils');\nvar dhe = require('./dhe');\nvar generateECDSA = dhe.generateECDSA;\nvar generateED25519 = dhe.generateED25519;\nvar edCompat = require('./ed-compat');\nvar nacl = require('tweetnacl');\n\nvar Key = require('./key');\n\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\nvar KeyParseError = errs.KeyParseError;\nvar KeyEncryptedError = errs.KeyEncryptedError;\n\nvar formats = {};\nformats['auto'] = require('./formats/auto');\nformats['pem'] = require('./formats/pem');\nformats['pkcs1'] = require('./formats/pkcs1');\nformats['pkcs8'] = require('./formats/pkcs8');\nformats['rfc4253'] = require('./formats/rfc4253');\nformats['ssh-private'] = require('./formats/ssh-private');\nformats['openssh'] = formats['ssh-private'];\nformats['ssh'] = formats['ssh-private'];\nformats['dnssec'] = require('./formats/dnssec');\nformats['putty'] = require('./formats/putty');\n\nfunction PrivateKey(opts) {\n\tassert.object(opts, 'options');\n\tKey.call(this, opts);\n\n\tthis._pubCache = undefined;\n}\nutil.inherits(PrivateKey, Key);\n\nPrivateKey.formats = formats;\n\nPrivateKey.prototype.toBuffer = function (format, options) {\n\tif (format === undefined)\n\t\tformat = 'pkcs1';\n\tassert.string(format, 'format');\n\tassert.object(formats[format], 'formats[format]');\n\tassert.optionalObject(options, 'options');\n\n\treturn (formats[format].write(this, options));\n};\n\nPrivateKey.prototype.hash = function (algo, type) {\n\treturn (this.toPublic().hash(algo, type));\n};\n\nPrivateKey.prototype.fingerprint = function (algo, type) {\n\treturn (this.toPublic().fingerprint(algo, type));\n};\n\nPrivateKey.prototype.toPublic = function () {\n\tif (this._pubCache)\n\t\treturn (this._pubCache);\n\n\tvar algInfo = algs.info[this.type];\n\tvar pubParts = [];\n\tfor (var i = 0; i < algInfo.parts.length; ++i) {\n\t\tvar p = algInfo.parts[i];\n\t\tpubParts.push(this.part[p]);\n\t}\n\n\tthis._pubCache = new Key({\n\t\ttype: this.type,\n\t\tsource: this,\n\t\tparts: pubParts\n\t});\n\tif (this.comment)\n\t\tthis._pubCache.comment = this.comment;\n\treturn (this._pubCache);\n};\n\nPrivateKey.prototype.derive = function (newType) {\n\tassert.string(newType, 'type');\n\tvar priv, pub, pair;\n\n\tif (this.type === 'ed25519' && newType === 'curve25519') {\n\t\tpriv = this.part.k.data;\n\t\tif (priv[0] === 0x00)\n\t\t\tpriv = priv.slice(1);\n\n\t\tpair = nacl.box.keyPair.fromSecretKey(new Uint8Array(priv));\n\t\tpub = Buffer.from(pair.publicKey);\n\n\t\treturn (new PrivateKey({\n\t\t\ttype: 'curve25519',\n\t\t\tparts: [\n\t\t\t\t{ name: 'A', data: utils.mpNormalize(pub) },\n\t\t\t\t{ name: 'k', data: utils.mpNormalize(priv) }\n\t\t\t]\n\t\t}));\n\t} else if (this.type === 'curve25519' && newType === 'ed25519') {\n\t\tpriv = this.part.k.data;\n\t\tif (priv[0] === 0x00)\n\t\t\tpriv = priv.slice(1);\n\n\t\tpair = nacl.sign.keyPair.fromSeed(new Uint8Array(priv));\n\t\tpub = Buffer.from(pair.publicKey);\n\n\t\treturn (new PrivateKey({\n\t\t\ttype: 'ed25519',\n\t\t\tparts: [\n\t\t\t\t{ name: 'A', data: utils.mpNormalize(pub) },\n\t\t\t\t{ name: 'k', data: utils.mpNormalize(priv) }\n\t\t\t]\n\t\t}));\n\t}\n\tthrow (new Error('Key derivation not supported from ' + this.type +\n\t    ' to ' + newType));\n};\n\nPrivateKey.prototype.createVerify = function (hashAlgo) {\n\treturn (this.toPublic().createVerify(hashAlgo));\n};\n\nPrivateKey.prototype.createSign = function (hashAlgo) {\n\tif (hashAlgo === undefined)\n\t\thashAlgo = this.defaultHashAlgorithm();\n\tassert.string(hashAlgo, 'hash algorithm');\n\n\t/* ED25519 is not supported by OpenSSL, use a javascript impl. */\n\tif (this.type === 'ed25519' && edCompat !== undefined)\n\t\treturn (new edCompat.Signer(this, hashAlgo));\n\tif (this.type === 'curve25519')\n\t\tthrow (new Error('Curve25519 keys are not suitable for ' +\n\t\t    'signing or verification'));\n\n\tvar v, nm, err;\n\ttry {\n\t\tnm = hashAlgo.toUpperCase();\n\t\tv = crypto.createSign(nm);\n\t} catch (e) {\n\t\terr = e;\n\t}\n\tif (v === undefined || (err instanceof Error &&\n\t    err.message.match(/Unknown message digest/))) {\n\t\tnm = 'RSA-';\n\t\tnm += hashAlgo.toUpperCase();\n\t\tv = crypto.createSign(nm);\n\t}\n\tassert.ok(v, 'failed to create verifier');\n\tvar oldSign = v.sign.bind(v);\n\tvar key = this.toBuffer('pkcs1');\n\tvar type = this.type;\n\tvar curve = this.curve;\n\tv.sign = function () {\n\t\tvar sig = oldSign(key);\n\t\tif (typeof (sig) === 'string')\n\t\t\tsig = Buffer.from(sig, 'binary');\n\t\tsig = Signature.parse(sig, type, 'asn1');\n\t\tsig.hashAlgorithm = hashAlgo;\n\t\tsig.curve = curve;\n\t\treturn (sig);\n\t};\n\treturn (v);\n};\n\nPrivateKey.parse = function (data, format, options) {\n\tif (typeof (data) !== 'string')\n\t\tassert.buffer(data, 'data');\n\tif (format === undefined)\n\t\tformat = 'auto';\n\tassert.string(format, 'format');\n\tif (typeof (options) === 'string')\n\t\toptions = { filename: options };\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalString(options.filename, 'options.filename');\n\tif (options.filename === undefined)\n\t\toptions.filename = '(unnamed)';\n\n\tassert.object(formats[format], 'formats[format]');\n\n\ttry {\n\t\tvar k = formats[format].read(data, options);\n\t\tassert.ok(k instanceof PrivateKey, 'key is not a private key');\n\t\tif (!k.comment)\n\t\t\tk.comment = options.filename;\n\t\treturn (k);\n\t} catch (e) {\n\t\tif (e.name === 'KeyEncryptedError')\n\t\t\tthrow (e);\n\t\tthrow (new KeyParseError(options.filename, format, e));\n\t}\n};\n\nPrivateKey.isPrivateKey = function (obj, ver) {\n\treturn (utils.isCompatible(obj, PrivateKey, ver));\n};\n\nPrivateKey.generate = function (type, options) {\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.object(options, 'options');\n\n\tswitch (type) {\n\tcase 'ecdsa':\n\t\tif (options.curve === undefined)\n\t\t\toptions.curve = 'nistp256';\n\t\tassert.string(options.curve, 'options.curve');\n\t\treturn (generateECDSA(options.curve));\n\tcase 'ed25519':\n\t\treturn (generateED25519());\n\tdefault:\n\t\tthrow (new Error('Key generation not supported with key ' +\n\t\t    'type \"' + type + '\"'));\n\t}\n};\n\n/*\n * API versions for PrivateKey:\n * [1,0] -- initial ver\n * [1,1] -- added auto, pkcs[18], openssh/ssh-private formats\n * [1,2] -- added defaultHashAlgorithm\n * [1,3] -- added derive, ed, createDH\n * [1,4] -- first tagged version\n * [1,5] -- changed ed25519 part names and format\n * [1,6] -- type arguments for hash() and fingerprint()\n */\nPrivateKey.prototype._sshpkApiVersion = [1, 6];\n\nPrivateKey._oldVersionDetect = function (obj) {\n\tassert.func(obj.toPublic);\n\tassert.func(obj.createSign);\n\tif (obj.derive)\n\t\treturn ([1, 3]);\n\tif (obj.defaultHashAlgorithm)\n\t\treturn ([1, 2]);\n\tif (obj.formats['auto'])\n\t\treturn ([1, 1]);\n\treturn ([1, 0]);\n};\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = Identity;\n\nvar assert = require('assert-plus');\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar Fingerprint = require('./fingerprint');\nvar Signature = require('./signature');\nvar errs = require('./errors');\nvar util = require('util');\nvar utils = require('./utils');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\n\n/*JSSTYLED*/\nvar DNS_NAME_RE = /^([*]|[a-z0-9][a-z0-9\\-]{0,62})(?:\\.([*]|[a-z0-9][a-z0-9\\-]{0,62}))*$/i;\n\nvar oids = {};\noids.cn = '2.5.4.3';\noids.o = '2.5.4.10';\noids.ou = '2.5.4.11';\noids.l = '2.5.4.7';\noids.s = '2.5.4.8';\noids.c = '2.5.4.6';\noids.sn = '2.5.4.4';\noids.postalCode = '2.5.4.17';\noids.serialNumber = '2.5.4.5';\noids.street = '2.5.4.9';\noids.x500UniqueIdentifier = '2.5.4.45';\noids.role = '2.5.4.72';\noids.telephoneNumber = '2.5.4.20';\noids.description = '2.5.4.13';\noids.dc = '0.9.2342.19200300.100.1.25';\noids.uid = '0.9.2342.19200300.100.1.1';\noids.mail = '0.9.2342.19200300.100.1.3';\noids.title = '2.5.4.12';\noids.gn = '2.5.4.42';\noids.initials = '2.5.4.43';\noids.pseudonym = '2.5.4.65';\noids.emailAddress = '1.2.840.113549.1.9.1';\n\nvar unoids = {};\nObject.keys(oids).forEach(function (k) {\n\tunoids[oids[k]] = k;\n});\n\nfunction Identity(opts) {\n\tvar self = this;\n\tassert.object(opts, 'options');\n\tassert.arrayOfObject(opts.components, 'options.components');\n\tthis.components = opts.components;\n\tthis.componentLookup = {};\n\tthis.components.forEach(function (c) {\n\t\tif (c.name && !c.oid)\n\t\t\tc.oid = oids[c.name];\n\t\tif (c.oid && !c.name)\n\t\t\tc.name = unoids[c.oid];\n\t\tif (self.componentLookup[c.name] === undefined)\n\t\t\tself.componentLookup[c.name] = [];\n\t\tself.componentLookup[c.name].push(c);\n\t});\n\tif (this.componentLookup.cn && this.componentLookup.cn.length > 0) {\n\t\tthis.cn = this.componentLookup.cn[0].value;\n\t}\n\tassert.optionalString(opts.type, 'options.type');\n\tif (opts.type === undefined) {\n\t\tif (this.components.length === 1 &&\n\t\t    this.componentLookup.cn &&\n\t\t    this.componentLookup.cn.length === 1 &&\n\t\t    this.componentLookup.cn[0].value.match(DNS_NAME_RE)) {\n\t\t\tthis.type = 'host';\n\t\t\tthis.hostname = this.componentLookup.cn[0].value;\n\n\t\t} else if (this.componentLookup.dc &&\n\t\t    this.components.length === this.componentLookup.dc.length) {\n\t\t\tthis.type = 'host';\n\t\t\tthis.hostname = this.componentLookup.dc.map(\n\t\t\t    function (c) {\n\t\t\t\treturn (c.value);\n\t\t\t}).join('.');\n\n\t\t} else if (this.componentLookup.uid &&\n\t\t    this.components.length ===\n\t\t    this.componentLookup.uid.length) {\n\t\t\tthis.type = 'user';\n\t\t\tthis.uid = this.componentLookup.uid[0].value;\n\n\t\t} else if (this.componentLookup.cn &&\n\t\t    this.componentLookup.cn.length === 1 &&\n\t\t    this.componentLookup.cn[0].value.match(DNS_NAME_RE)) {\n\t\t\tthis.type = 'host';\n\t\t\tthis.hostname = this.componentLookup.cn[0].value;\n\n\t\t} else if (this.componentLookup.uid &&\n\t\t    this.componentLookup.uid.length === 1) {\n\t\t\tthis.type = 'user';\n\t\t\tthis.uid = this.componentLookup.uid[0].value;\n\n\t\t} else if (this.componentLookup.mail &&\n\t\t    this.componentLookup.mail.length === 1) {\n\t\t\tthis.type = 'email';\n\t\t\tthis.email = this.componentLookup.mail[0].value;\n\n\t\t} else if (this.componentLookup.cn &&\n\t\t    this.componentLookup.cn.length === 1) {\n\t\t\tthis.type = 'user';\n\t\t\tthis.uid = this.componentLookup.cn[0].value;\n\n\t\t} else {\n\t\t\tthis.type = 'unknown';\n\t\t}\n\t} else {\n\t\tthis.type = opts.type;\n\t\tif (this.type === 'host')\n\t\t\tthis.hostname = opts.hostname;\n\t\telse if (this.type === 'user')\n\t\t\tthis.uid = opts.uid;\n\t\telse if (this.type === 'email')\n\t\t\tthis.email = opts.email;\n\t\telse\n\t\t\tthrow (new Error('Unknown type ' + this.type));\n\t}\n}\n\nIdentity.prototype.toString = function () {\n\treturn (this.components.map(function (c) {\n\t\tvar n = c.name.toUpperCase();\n\t\t/*JSSTYLED*/\n\t\tn = n.replace(/=/g, '\\\\=');\n\t\tvar v = c.value;\n\t\t/*JSSTYLED*/\n\t\tv = v.replace(/,/g, '\\\\,');\n\t\treturn (n + '=' + v);\n\t}).join(', '));\n};\n\nIdentity.prototype.get = function (name, asArray) {\n\tassert.string(name, 'name');\n\tvar arr = this.componentLookup[name];\n\tif (arr === undefined || arr.length === 0)\n\t\treturn (undefined);\n\tif (!asArray && arr.length > 1)\n\t\tthrow (new Error('Multiple values for attribute ' + name));\n\tif (!asArray)\n\t\treturn (arr[0].value);\n\treturn (arr.map(function (c) {\n\t\treturn (c.value);\n\t}));\n};\n\nIdentity.prototype.toArray = function (idx) {\n\treturn (this.components.map(function (c) {\n\t\treturn ({\n\t\t\tname: c.name,\n\t\t\tvalue: c.value\n\t\t});\n\t}));\n};\n\n/*\n * These are from X.680 -- PrintableString allowed chars are in section 37.4\n * table 8. Spec for IA5Strings is \"1,6 + SPACE + DEL\" where 1 refers to\n * ISO IR #001 (standard ASCII control characters) and 6 refers to ISO IR #006\n * (the basic ASCII character set).\n */\n/* JSSTYLED */\nvar NOT_PRINTABLE = /[^a-zA-Z0-9 '(),+.\\/:=?-]/;\n/* JSSTYLED */\nvar NOT_IA5 = /[^\\x00-\\x7f]/;\n\nIdentity.prototype.toAsn1 = function (der, tag) {\n\tder.startSequence(tag);\n\tthis.components.forEach(function (c) {\n\t\tder.startSequence(asn1.Ber.Constructor | asn1.Ber.Set);\n\t\tder.startSequence();\n\t\tder.writeOID(c.oid);\n\t\t/*\n\t\t * If we fit in a PrintableString, use that. Otherwise use an\n\t\t * IA5String or UTF8String.\n\t\t *\n\t\t * If this identity was parsed from a DN, use the ASN.1 types\n\t\t * from the original representation (otherwise this might not\n\t\t * be a full match for the original in some validators).\n\t\t */\n\t\tif (c.asn1type === asn1.Ber.Utf8String ||\n\t\t    c.value.match(NOT_IA5)) {\n\t\t\tvar v = Buffer.from(c.value, 'utf8');\n\t\t\tder.writeBuffer(v, asn1.Ber.Utf8String);\n\n\t\t} else if (c.asn1type === asn1.Ber.IA5String ||\n\t\t    c.value.match(NOT_PRINTABLE)) {\n\t\t\tder.writeString(c.value, asn1.Ber.IA5String);\n\n\t\t} else {\n\t\t\tvar type = asn1.Ber.PrintableString;\n\t\t\tif (c.asn1type !== undefined)\n\t\t\t\ttype = c.asn1type;\n\t\t\tder.writeString(c.value, type);\n\t\t}\n\t\tder.endSequence();\n\t\tder.endSequence();\n\t});\n\tder.endSequence();\n};\n\nfunction globMatch(a, b) {\n\tif (a === '**' || b === '**')\n\t\treturn (true);\n\tvar aParts = a.split('.');\n\tvar bParts = b.split('.');\n\tif (aParts.length !== bParts.length)\n\t\treturn (false);\n\tfor (var i = 0; i < aParts.length; ++i) {\n\t\tif (aParts[i] === '*' || bParts[i] === '*')\n\t\t\tcontinue;\n\t\tif (aParts[i] !== bParts[i])\n\t\t\treturn (false);\n\t}\n\treturn (true);\n}\n\nIdentity.prototype.equals = function (other) {\n\tif (!Identity.isIdentity(other, [1, 0]))\n\t\treturn (false);\n\tif (other.components.length !== this.components.length)\n\t\treturn (false);\n\tfor (var i = 0; i < this.components.length; ++i) {\n\t\tif (this.components[i].oid !== other.components[i].oid)\n\t\t\treturn (false);\n\t\tif (!globMatch(this.components[i].value,\n\t\t    other.components[i].value)) {\n\t\t\treturn (false);\n\t\t}\n\t}\n\treturn (true);\n};\n\nIdentity.forHost = function (hostname) {\n\tassert.string(hostname, 'hostname');\n\treturn (new Identity({\n\t\ttype: 'host',\n\t\thostname: hostname,\n\t\tcomponents: [ { name: 'cn', value: hostname } ]\n\t}));\n};\n\nIdentity.forUser = function (uid) {\n\tassert.string(uid, 'uid');\n\treturn (new Identity({\n\t\ttype: 'user',\n\t\tuid: uid,\n\t\tcomponents: [ { name: 'uid', value: uid } ]\n\t}));\n};\n\nIdentity.forEmail = function (email) {\n\tassert.string(email, 'email');\n\treturn (new Identity({\n\t\ttype: 'email',\n\t\temail: email,\n\t\tcomponents: [ { name: 'mail', value: email } ]\n\t}));\n};\n\nIdentity.parseDN = function (dn) {\n\tassert.string(dn, 'dn');\n\tvar parts = [''];\n\tvar idx = 0;\n\tvar rem = dn;\n\twhile (rem.length > 0) {\n\t\tvar m;\n\t\t/*JSSTYLED*/\n\t\tif ((m = /^,/.exec(rem)) !== null) {\n\t\t\tparts[++idx] = '';\n\t\t\trem = rem.slice(m[0].length);\n\t\t/*JSSTYLED*/\n\t\t} else if ((m = /^\\\\,/.exec(rem)) !== null) {\n\t\t\tparts[idx] += ',';\n\t\t\trem = rem.slice(m[0].length);\n\t\t/*JSSTYLED*/\n\t\t} else if ((m = /^\\\\./.exec(rem)) !== null) {\n\t\t\tparts[idx] += m[0];\n\t\t\trem = rem.slice(m[0].length);\n\t\t/*JSSTYLED*/\n\t\t} else if ((m = /^[^\\\\,]+/.exec(rem)) !== null) {\n\t\t\tparts[idx] += m[0];\n\t\t\trem = rem.slice(m[0].length);\n\t\t} else {\n\t\t\tthrow (new Error('Failed to parse DN'));\n\t\t}\n\t}\n\tvar cmps = parts.map(function (c) {\n\t\tc = c.trim();\n\t\tvar eqPos = c.indexOf('=');\n\t\twhile (eqPos > 0 && c.charAt(eqPos - 1) === '\\\\')\n\t\t\teqPos = c.indexOf('=', eqPos + 1);\n\t\tif (eqPos === -1) {\n\t\t\tthrow (new Error('Failed to parse DN'));\n\t\t}\n\t\t/*JSSTYLED*/\n\t\tvar name = c.slice(0, eqPos).toLowerCase().replace(/\\\\=/g, '=');\n\t\tvar value = c.slice(eqPos + 1);\n\t\treturn ({ name: name, value: value });\n\t});\n\treturn (new Identity({ components: cmps }));\n};\n\nIdentity.fromArray = function (components) {\n\tassert.arrayOfObject(components, 'components');\n\tcomponents.forEach(function (cmp) {\n\t\tassert.object(cmp, 'component');\n\t\tassert.string(cmp.name, 'component.name');\n\t\tif (!Buffer.isBuffer(cmp.value) &&\n\t\t    !(typeof (cmp.value) === 'string')) {\n\t\t\tthrow (new Error('Invalid component value'));\n\t\t}\n\t});\n\treturn (new Identity({ components: components }));\n};\n\nIdentity.parseAsn1 = function (der, top) {\n\tvar components = [];\n\tder.readSequence(top);\n\tvar end = der.offset + der.length;\n\twhile (der.offset < end) {\n\t\tder.readSequence(asn1.Ber.Constructor | asn1.Ber.Set);\n\t\tvar after = der.offset + der.length;\n\t\tder.readSequence();\n\t\tvar oid = der.readOID();\n\t\tvar type = der.peek();\n\t\tvar value;\n\t\tswitch (type) {\n\t\tcase asn1.Ber.PrintableString:\n\t\tcase asn1.Ber.IA5String:\n\t\tcase asn1.Ber.OctetString:\n\t\tcase asn1.Ber.T61String:\n\t\t\tvalue = der.readString(type);\n\t\t\tbreak;\n\t\tcase asn1.Ber.Utf8String:\n\t\t\tvalue = der.readString(type, true);\n\t\t\tvalue = value.toString('utf8');\n\t\t\tbreak;\n\t\tcase asn1.Ber.CharacterString:\n\t\tcase asn1.Ber.BMPString:\n\t\t\tvalue = der.readString(type, true);\n\t\t\tvalue = value.toString('utf16le');\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow (new Error('Unknown asn1 type ' + type));\n\t\t}\n\t\tcomponents.push({ oid: oid, asn1type: type, value: value });\n\t\tder._offset = after;\n\t}\n\tder._offset = end;\n\treturn (new Identity({\n\t\tcomponents: components\n\t}));\n};\n\nIdentity.isIdentity = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Identity, ver));\n};\n\n/*\n * API versions for Identity:\n * [1,0] -- initial ver\n */\nIdentity.prototype._sshpkApiVersion = [1, 0];\n\nIdentity._oldVersionDetect = function (obj) {\n\treturn ([1, 0]);\n};\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\tverify: verify,\n\tsign: sign,\n\tsignAsync: signAsync,\n\twrite: write,\n\n\t/* Internal private API */\n\tfromBuffer: fromBuffer,\n\ttoBuffer: toBuffer\n};\n\nvar assert = require('assert-plus');\nvar SSHBuffer = require('../ssh-buffer');\nvar crypto = require('crypto');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar Identity = require('../identity');\nvar rfc4253 = require('./rfc4253');\nvar Signature = require('../signature');\nvar utils = require('../utils');\nvar Certificate = require('../certificate');\n\nfunction verify(cert, key) {\n\t/*\n\t * We always give an issuerKey, so if our verify() is being called then\n\t * there was no signature. Return false.\n\t */\n\treturn (false);\n}\n\nvar TYPES = {\n\t'user': 1,\n\t'host': 2\n};\nObject.keys(TYPES).forEach(function (k) { TYPES[TYPES[k]] = k; });\n\nvar ECDSA_ALGO = /^ecdsa-sha2-([^@-]+)-cert-v01@openssh.com$/;\n\nfunction read(buf, options) {\n\tif (Buffer.isBuffer(buf))\n\t\tbuf = buf.toString('ascii');\n\tvar parts = buf.trim().split(/[ \\t\\n]+/g);\n\tif (parts.length < 2 || parts.length > 3)\n\t\tthrow (new Error('Not a valid SSH certificate line'));\n\n\tvar algo = parts[0];\n\tvar data = parts[1];\n\n\tdata = Buffer.from(data, 'base64');\n\treturn (fromBuffer(data, algo));\n}\n\nfunction fromBuffer(data, algo, partial) {\n\tvar sshbuf = new SSHBuffer({ buffer: data });\n\tvar innerAlgo = sshbuf.readString();\n\tif (algo !== undefined && innerAlgo !== algo)\n\t\tthrow (new Error('SSH certificate algorithm mismatch'));\n\tif (algo === undefined)\n\t\talgo = innerAlgo;\n\n\tvar cert = {};\n\tcert.signatures = {};\n\tcert.signatures.openssh = {};\n\n\tcert.signatures.openssh.nonce = sshbuf.readBuffer();\n\n\tvar key = {};\n\tvar parts = (key.parts = []);\n\tkey.type = getAlg(algo);\n\n\tvar partCount = algs.info[key.type].parts.length;\n\twhile (parts.length < partCount)\n\t\tparts.push(sshbuf.readPart());\n\tassert.ok(parts.length >= 1, 'key must have at least one part');\n\n\tvar algInfo = algs.info[key.type];\n\tif (key.type === 'ecdsa') {\n\t\tvar res = ECDSA_ALGO.exec(algo);\n\t\tassert.ok(res !== null);\n\t\tassert.strictEqual(res[1], parts[0].data.toString());\n\t}\n\n\tfor (var i = 0; i < algInfo.parts.length; ++i) {\n\t\tparts[i].name = algInfo.parts[i];\n\t\tif (parts[i].name !== 'curve' &&\n\t\t    algInfo.normalize !== false) {\n\t\t\tvar p = parts[i];\n\t\t\tp.data = utils.mpNormalize(p.data);\n\t\t}\n\t}\n\n\tcert.subjectKey = new Key(key);\n\n\tcert.serial = sshbuf.readInt64();\n\n\tvar type = TYPES[sshbuf.readInt()];\n\tassert.string(type, 'valid cert type');\n\n\tcert.signatures.openssh.keyId = sshbuf.readString();\n\n\tvar principals = [];\n\tvar pbuf = sshbuf.readBuffer();\n\tvar psshbuf = new SSHBuffer({ buffer: pbuf });\n\twhile (!psshbuf.atEnd())\n\t\tprincipals.push(psshbuf.readString());\n\tif (principals.length === 0)\n\t\tprincipals = ['*'];\n\n\tcert.subjects = principals.map(function (pr) {\n\t\tif (type === 'user')\n\t\t\treturn (Identity.forUser(pr));\n\t\telse if (type === 'host')\n\t\t\treturn (Identity.forHost(pr));\n\t\tthrow (new Error('Unknown identity type ' + type));\n\t});\n\n\tcert.validFrom = int64ToDate(sshbuf.readInt64());\n\tcert.validUntil = int64ToDate(sshbuf.readInt64());\n\n\tvar exts = [];\n\tvar extbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() });\n\tvar ext;\n\twhile (!extbuf.atEnd()) {\n\t\text = { critical: true };\n\t\text.name = extbuf.readString();\n\t\text.data = extbuf.readBuffer();\n\t\texts.push(ext);\n\t}\n\textbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() });\n\twhile (!extbuf.atEnd()) {\n\t\text = { critical: false };\n\t\text.name = extbuf.readString();\n\t\text.data = extbuf.readBuffer();\n\t\texts.push(ext);\n\t}\n\tcert.signatures.openssh.exts = exts;\n\n\t/* reserved */\n\tsshbuf.readBuffer();\n\n\tvar signingKeyBuf = sshbuf.readBuffer();\n\tcert.issuerKey = rfc4253.read(signingKeyBuf);\n\n\t/*\n\t * OpenSSH certs don't give the identity of the issuer, just their\n\t * public key. So, we use an Identity that matches anything. The\n\t * isSignedBy() function will later tell you if the key matches.\n\t */\n\tcert.issuer = Identity.forHost('**');\n\n\tvar sigBuf = sshbuf.readBuffer();\n\tcert.signatures.openssh.signature =\n\t    Signature.parse(sigBuf, cert.issuerKey.type, 'ssh');\n\n\tif (partial !== undefined) {\n\t\tpartial.remainder = sshbuf.remainder();\n\t\tpartial.consumed = sshbuf._offset;\n\t}\n\n\treturn (new Certificate(cert));\n}\n\nfunction int64ToDate(buf) {\n\tvar i = buf.readUInt32BE(0) * 4294967296;\n\ti += buf.readUInt32BE(4);\n\tvar d = new Date();\n\td.setTime(i * 1000);\n\td.sourceInt64 = buf;\n\treturn (d);\n}\n\nfunction dateToInt64(date) {\n\tif (date.sourceInt64 !== undefined)\n\t\treturn (date.sourceInt64);\n\tvar i = Math.round(date.getTime() / 1000);\n\tvar upper = Math.floor(i / 4294967296);\n\tvar lower = Math.floor(i % 4294967296);\n\tvar buf = Buffer.alloc(8);\n\tbuf.writeUInt32BE(upper, 0);\n\tbuf.writeUInt32BE(lower, 4);\n\treturn (buf);\n}\n\nfunction sign(cert, key) {\n\tif (cert.signatures.openssh === undefined)\n\t\tcert.signatures.openssh = {};\n\ttry {\n\t\tvar blob = toBuffer(cert, true);\n\t} catch (e) {\n\t\tdelete (cert.signatures.openssh);\n\t\treturn (false);\n\t}\n\tvar sig = cert.signatures.openssh;\n\tvar hashAlgo = undefined;\n\tif (key.type === 'rsa' || key.type === 'dsa')\n\t\thashAlgo = 'sha1';\n\tvar signer = key.createSign(hashAlgo);\n\tsigner.write(blob);\n\tsig.signature = signer.sign();\n\treturn (true);\n}\n\nfunction signAsync(cert, signer, done) {\n\tif (cert.signatures.openssh === undefined)\n\t\tcert.signatures.openssh = {};\n\ttry {\n\t\tvar blob = toBuffer(cert, true);\n\t} catch (e) {\n\t\tdelete (cert.signatures.openssh);\n\t\tdone(e);\n\t\treturn;\n\t}\n\tvar sig = cert.signatures.openssh;\n\n\tsigner(blob, function (err, signature) {\n\t\tif (err) {\n\t\t\tdone(err);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\t/*\n\t\t\t * This will throw if the signature isn't of a\n\t\t\t * type/algo that can be used for SSH.\n\t\t\t */\n\t\t\tsignature.toBuffer('ssh');\n\t\t} catch (e) {\n\t\t\tdone(e);\n\t\t\treturn;\n\t\t}\n\t\tsig.signature = signature;\n\t\tdone();\n\t});\n}\n\nfunction write(cert, options) {\n\tif (options === undefined)\n\t\toptions = {};\n\n\tvar blob = toBuffer(cert);\n\tvar out = getCertType(cert.subjectKey) + ' ' + blob.toString('base64');\n\tif (options.comment)\n\t\tout = out + ' ' + options.comment;\n\treturn (out);\n}\n\n\nfunction toBuffer(cert, noSig) {\n\tassert.object(cert.signatures.openssh, 'signature for openssh format');\n\tvar sig = cert.signatures.openssh;\n\n\tif (sig.nonce === undefined)\n\t\tsig.nonce = crypto.randomBytes(16);\n\tvar buf = new SSHBuffer({});\n\tbuf.writeString(getCertType(cert.subjectKey));\n\tbuf.writeBuffer(sig.nonce);\n\n\tvar key = cert.subjectKey;\n\tvar algInfo = algs.info[key.type];\n\talgInfo.parts.forEach(function (part) {\n\t\tbuf.writePart(key.part[part]);\n\t});\n\n\tbuf.writeInt64(cert.serial);\n\n\tvar type = cert.subjects[0].type;\n\tassert.notStrictEqual(type, 'unknown');\n\tcert.subjects.forEach(function (id) {\n\t\tassert.strictEqual(id.type, type);\n\t});\n\ttype = TYPES[type];\n\tbuf.writeInt(type);\n\n\tif (sig.keyId === undefined) {\n\t\tsig.keyId = cert.subjects[0].type + '_' +\n\t\t    (cert.subjects[0].uid || cert.subjects[0].hostname);\n\t}\n\tbuf.writeString(sig.keyId);\n\n\tvar sub = new SSHBuffer({});\n\tcert.subjects.forEach(function (id) {\n\t\tif (type === TYPES.host)\n\t\t\tsub.writeString(id.hostname);\n\t\telse if (type === TYPES.user)\n\t\t\tsub.writeString(id.uid);\n\t});\n\tbuf.writeBuffer(sub.toBuffer());\n\n\tbuf.writeInt64(dateToInt64(cert.validFrom));\n\tbuf.writeInt64(dateToInt64(cert.validUntil));\n\n\tvar exts = sig.exts;\n\tif (exts === undefined)\n\t\texts = [];\n\n\tvar extbuf = new SSHBuffer({});\n\texts.forEach(function (ext) {\n\t\tif (ext.critical !== true)\n\t\t\treturn;\n\t\textbuf.writeString(ext.name);\n\t\textbuf.writeBuffer(ext.data);\n\t});\n\tbuf.writeBuffer(extbuf.toBuffer());\n\n\textbuf = new SSHBuffer({});\n\texts.forEach(function (ext) {\n\t\tif (ext.critical === true)\n\t\t\treturn;\n\t\textbuf.writeString(ext.name);\n\t\textbuf.writeBuffer(ext.data);\n\t});\n\tbuf.writeBuffer(extbuf.toBuffer());\n\n\t/* reserved */\n\tbuf.writeBuffer(Buffer.alloc(0));\n\n\tsub = rfc4253.write(cert.issuerKey);\n\tbuf.writeBuffer(sub);\n\n\tif (!noSig)\n\t\tbuf.writeBuffer(sig.signature.toBuffer('ssh'));\n\n\treturn (buf.toBuffer());\n}\n\nfunction getAlg(certType) {\n\tif (certType === 'ssh-rsa-cert-v01@openssh.com')\n\t\treturn ('rsa');\n\tif (certType === 'ssh-dss-cert-v01@openssh.com')\n\t\treturn ('dsa');\n\tif (certType.match(ECDSA_ALGO))\n\t\treturn ('ecdsa');\n\tif (certType === 'ssh-ed25519-cert-v01@openssh.com')\n\t\treturn ('ed25519');\n\tthrow (new Error('Unsupported cert type ' + certType));\n}\n\nfunction getCertType(key) {\n\tif (key.type === 'rsa')\n\t\treturn ('ssh-rsa-cert-v01@openssh.com');\n\tif (key.type === 'dsa')\n\t\treturn ('ssh-dss-cert-v01@openssh.com');\n\tif (key.type === 'ecdsa')\n\t\treturn ('ecdsa-sha2-' + key.curve + '-cert-v01@openssh.com');\n\tif (key.type === 'ed25519')\n\t\treturn ('ssh-ed25519-cert-v01@openssh.com');\n\tthrow (new Error('Unsupported key type ' + key.type));\n}\n","// Copyright 2017 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\tverify: verify,\n\tsign: sign,\n\tsignAsync: signAsync,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar pem = require('./pem');\nvar Identity = require('../identity');\nvar Signature = require('../signature');\nvar Certificate = require('../certificate');\nvar pkcs8 = require('./pkcs8');\n\n/*\n * This file is based on RFC5280 (X.509).\n */\n\n/* Helper to read in a single mpint */\nfunction readMPInt(der, nm) {\n\tassert.strictEqual(der.peek(), asn1.Ber.Integer,\n\t    nm + ' is not an Integer');\n\treturn (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));\n}\n\nfunction verify(cert, key) {\n\tvar sig = cert.signatures.x509;\n\tassert.object(sig, 'x509 signature');\n\n\tvar algParts = sig.algo.split('-');\n\tif (algParts[0] !== key.type)\n\t\treturn (false);\n\n\tvar blob = sig.cache;\n\tif (blob === undefined) {\n\t\tvar der = new asn1.BerWriter();\n\t\twriteTBSCert(cert, der);\n\t\tblob = der.buffer;\n\t}\n\n\tvar verifier = key.createVerify(algParts[1]);\n\tverifier.write(blob);\n\treturn (verifier.verify(sig.signature));\n}\n\nfunction Local(i) {\n\treturn (asn1.Ber.Context | asn1.Ber.Constructor | i);\n}\n\nfunction Context(i) {\n\treturn (asn1.Ber.Context | i);\n}\n\nvar SIGN_ALGS = {\n\t'rsa-md5': '1.2.840.113549.1.1.4',\n\t'rsa-sha1': '1.2.840.113549.1.1.5',\n\t'rsa-sha256': '1.2.840.113549.1.1.11',\n\t'rsa-sha384': '1.2.840.113549.1.1.12',\n\t'rsa-sha512': '1.2.840.113549.1.1.13',\n\t'dsa-sha1': '1.2.840.10040.4.3',\n\t'dsa-sha256': '2.16.840.1.101.3.4.3.2',\n\t'ecdsa-sha1': '1.2.840.10045.4.1',\n\t'ecdsa-sha256': '1.2.840.10045.4.3.2',\n\t'ecdsa-sha384': '1.2.840.10045.4.3.3',\n\t'ecdsa-sha512': '1.2.840.10045.4.3.4',\n\t'ed25519-sha512': '1.3.101.112'\n};\nObject.keys(SIGN_ALGS).forEach(function (k) {\n\tSIGN_ALGS[SIGN_ALGS[k]] = k;\n});\nSIGN_ALGS['1.3.14.3.2.3'] = 'rsa-md5';\nSIGN_ALGS['1.3.14.3.2.29'] = 'rsa-sha1';\n\nvar EXTS = {\n\t'issuerKeyId': '2.5.29.35',\n\t'altName': '2.5.29.17',\n\t'basicConstraints': '2.5.29.19',\n\t'keyUsage': '2.5.29.15',\n\t'extKeyUsage': '2.5.29.37'\n};\n\nfunction read(buf, options) {\n\tif (typeof (buf) === 'string') {\n\t\tbuf = Buffer.from(buf, 'binary');\n\t}\n\tassert.buffer(buf, 'buf');\n\n\tvar der = new asn1.BerReader(buf);\n\n\tder.readSequence();\n\tif (Math.abs(der.length - der.remain) > 1) {\n\t\tthrow (new Error('DER sequence does not contain whole byte ' +\n\t\t    'stream'));\n\t}\n\n\tvar tbsStart = der.offset;\n\tder.readSequence();\n\tvar sigOffset = der.offset + der.length;\n\tvar tbsEnd = sigOffset;\n\n\tif (der.peek() === Local(0)) {\n\t\tder.readSequence(Local(0));\n\t\tvar version = der.readInt();\n\t\tassert.ok(version <= 3,\n\t\t    'only x.509 versions up to v3 supported');\n\t}\n\n\tvar cert = {};\n\tcert.signatures = {};\n\tvar sig = (cert.signatures.x509 = {});\n\tsig.extras = {};\n\n\tcert.serial = readMPInt(der, 'serial');\n\n\tder.readSequence();\n\tvar after = der.offset + der.length;\n\tvar certAlgOid = der.readOID();\n\tvar certAlg = SIGN_ALGS[certAlgOid];\n\tif (certAlg === undefined)\n\t\tthrow (new Error('unknown signature algorithm ' + certAlgOid));\n\n\tder._offset = after;\n\tcert.issuer = Identity.parseAsn1(der);\n\n\tder.readSequence();\n\tcert.validFrom = readDate(der);\n\tcert.validUntil = readDate(der);\n\n\tcert.subjects = [Identity.parseAsn1(der)];\n\n\tder.readSequence();\n\tafter = der.offset + der.length;\n\tcert.subjectKey = pkcs8.readPkcs8(undefined, 'public', der);\n\tder._offset = after;\n\n\t/* issuerUniqueID */\n\tif (der.peek() === Local(1)) {\n\t\tder.readSequence(Local(1));\n\t\tsig.extras.issuerUniqueID =\n\t\t    buf.slice(der.offset, der.offset + der.length);\n\t\tder._offset += der.length;\n\t}\n\n\t/* subjectUniqueID */\n\tif (der.peek() === Local(2)) {\n\t\tder.readSequence(Local(2));\n\t\tsig.extras.subjectUniqueID =\n\t\t    buf.slice(der.offset, der.offset + der.length);\n\t\tder._offset += der.length;\n\t}\n\n\t/* extensions */\n\tif (der.peek() === Local(3)) {\n\t\tder.readSequence(Local(3));\n\t\tvar extEnd = der.offset + der.length;\n\t\tder.readSequence();\n\n\t\twhile (der.offset < extEnd)\n\t\t\treadExtension(cert, buf, der);\n\n\t\tassert.strictEqual(der.offset, extEnd);\n\t}\n\n\tassert.strictEqual(der.offset, sigOffset);\n\n\tder.readSequence();\n\tafter = der.offset + der.length;\n\tvar sigAlgOid = der.readOID();\n\tvar sigAlg = SIGN_ALGS[sigAlgOid];\n\tif (sigAlg === undefined)\n\t\tthrow (new Error('unknown signature algorithm ' + sigAlgOid));\n\tder._offset = after;\n\n\tvar sigData = der.readString(asn1.Ber.BitString, true);\n\tif (sigData[0] === 0)\n\t\tsigData = sigData.slice(1);\n\tvar algParts = sigAlg.split('-');\n\n\tsig.signature = Signature.parse(sigData, algParts[0], 'asn1');\n\tsig.signature.hashAlgorithm = algParts[1];\n\tsig.algo = sigAlg;\n\tsig.cache = buf.slice(tbsStart, tbsEnd);\n\n\treturn (new Certificate(cert));\n}\n\nfunction readDate(der) {\n\tif (der.peek() === asn1.Ber.UTCTime) {\n\t\treturn (utcTimeToDate(der.readString(asn1.Ber.UTCTime)));\n\t} else if (der.peek() === asn1.Ber.GeneralizedTime) {\n\t\treturn (gTimeToDate(der.readString(asn1.Ber.GeneralizedTime)));\n\t} else {\n\t\tthrow (new Error('Unsupported date format'));\n\t}\n}\n\nfunction writeDate(der, date) {\n\tif (date.getUTCFullYear() >= 2050 || date.getUTCFullYear() < 1950) {\n\t\tder.writeString(dateToGTime(date), asn1.Ber.GeneralizedTime);\n\t} else {\n\t\tder.writeString(dateToUTCTime(date), asn1.Ber.UTCTime);\n\t}\n}\n\n/* RFC5280, section 4.2.1.6 (GeneralName type) */\nvar ALTNAME = {\n\tOtherName: Local(0),\n\tRFC822Name: Context(1),\n\tDNSName: Context(2),\n\tX400Address: Local(3),\n\tDirectoryName: Local(4),\n\tEDIPartyName: Local(5),\n\tURI: Context(6),\n\tIPAddress: Context(7),\n\tOID: Context(8)\n};\n\n/* RFC5280, section 4.2.1.12 (KeyPurposeId) */\nvar EXTPURPOSE = {\n\t'serverAuth': '1.3.6.1.5.5.7.3.1',\n\t'clientAuth': '1.3.6.1.5.5.7.3.2',\n\t'codeSigning': '1.3.6.1.5.5.7.3.3',\n\n\t/* See https://github.com/joyent/oid-docs/blob/master/root.md */\n\t'joyentDocker': '1.3.6.1.4.1.38678.1.4.1',\n\t'joyentCmon': '1.3.6.1.4.1.38678.1.4.2'\n};\nvar EXTPURPOSE_REV = {};\nObject.keys(EXTPURPOSE).forEach(function (k) {\n\tEXTPURPOSE_REV[EXTPURPOSE[k]] = k;\n});\n\nvar KEYUSEBITS = [\n\t'signature', 'identity', 'keyEncryption',\n\t'encryption', 'keyAgreement', 'ca', 'crl'\n];\n\nfunction readExtension(cert, buf, der) {\n\tder.readSequence();\n\tvar after = der.offset + der.length;\n\tvar extId = der.readOID();\n\tvar id;\n\tvar sig = cert.signatures.x509;\n\tif (!sig.extras.exts)\n\t\tsig.extras.exts = [];\n\n\tvar critical;\n\tif (der.peek() === asn1.Ber.Boolean)\n\t\tcritical = der.readBoolean();\n\n\tswitch (extId) {\n\tcase (EXTS.basicConstraints):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tder.readSequence();\n\t\tvar bcEnd = der.offset + der.length;\n\t\tvar ca = false;\n\t\tif (der.peek() === asn1.Ber.Boolean)\n\t\t\tca = der.readBoolean();\n\t\tif (cert.purposes === undefined)\n\t\t\tcert.purposes = [];\n\t\tif (ca === true)\n\t\t\tcert.purposes.push('ca');\n\t\tvar bc = { oid: extId, critical: critical };\n\t\tif (der.offset < bcEnd && der.peek() === asn1.Ber.Integer)\n\t\t\tbc.pathLen = der.readInt();\n\t\tsig.extras.exts.push(bc);\n\t\tbreak;\n\tcase (EXTS.extKeyUsage):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tder.readSequence();\n\t\tif (cert.purposes === undefined)\n\t\t\tcert.purposes = [];\n\t\tvar ekEnd = der.offset + der.length;\n\t\twhile (der.offset < ekEnd) {\n\t\t\tvar oid = der.readOID();\n\t\t\tcert.purposes.push(EXTPURPOSE_REV[oid] || oid);\n\t\t}\n\t\t/*\n\t\t * This is a bit of a hack: in the case where we have a cert\n\t\t * that's only allowed to do serverAuth or clientAuth (and not\n\t\t * the other), we want to make sure all our Subjects are of\n\t\t * the right type. But we already parsed our Subjects and\n\t\t * decided if they were hosts or users earlier (since it appears\n\t\t * first in the cert).\n\t\t *\n\t\t * So we go through and mutate them into the right kind here if\n\t\t * it doesn't match. This might not be hugely beneficial, as it\n\t\t * seems that single-purpose certs are not often seen in the\n\t\t * wild.\n\t\t */\n\t\tif (cert.purposes.indexOf('serverAuth') !== -1 &&\n\t\t    cert.purposes.indexOf('clientAuth') === -1) {\n\t\t\tcert.subjects.forEach(function (ide) {\n\t\t\t\tif (ide.type !== 'host') {\n\t\t\t\t\tide.type = 'host';\n\t\t\t\t\tide.hostname = ide.uid ||\n\t\t\t\t\t    ide.email ||\n\t\t\t\t\t    ide.components[0].value;\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (cert.purposes.indexOf('clientAuth') !== -1 &&\n\t\t    cert.purposes.indexOf('serverAuth') === -1) {\n\t\t\tcert.subjects.forEach(function (ide) {\n\t\t\t\tif (ide.type !== 'user') {\n\t\t\t\t\tide.type = 'user';\n\t\t\t\t\tide.uid = ide.hostname ||\n\t\t\t\t\t    ide.email ||\n\t\t\t\t\t    ide.components[0].value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tsig.extras.exts.push({ oid: extId, critical: critical });\n\t\tbreak;\n\tcase (EXTS.keyUsage):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tvar bits = der.readString(asn1.Ber.BitString, true);\n\t\tvar setBits = readBitField(bits, KEYUSEBITS);\n\t\tsetBits.forEach(function (bit) {\n\t\t\tif (cert.purposes === undefined)\n\t\t\t\tcert.purposes = [];\n\t\t\tif (cert.purposes.indexOf(bit) === -1)\n\t\t\t\tcert.purposes.push(bit);\n\t\t});\n\t\tsig.extras.exts.push({ oid: extId, critical: critical,\n\t\t    bits: bits });\n\t\tbreak;\n\tcase (EXTS.altName):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tder.readSequence();\n\t\tvar aeEnd = der.offset + der.length;\n\t\twhile (der.offset < aeEnd) {\n\t\t\tswitch (der.peek()) {\n\t\t\tcase ALTNAME.OtherName:\n\t\t\tcase ALTNAME.EDIPartyName:\n\t\t\t\tder.readSequence();\n\t\t\t\tder._offset += der.length;\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.OID:\n\t\t\t\tder.readOID(ALTNAME.OID);\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.RFC822Name:\n\t\t\t\t/* RFC822 specifies email addresses */\n\t\t\t\tvar email = der.readString(ALTNAME.RFC822Name);\n\t\t\t\tid = Identity.forEmail(email);\n\t\t\t\tif (!cert.subjects[0].equals(id))\n\t\t\t\t\tcert.subjects.push(id);\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.DirectoryName:\n\t\t\t\tder.readSequence(ALTNAME.DirectoryName);\n\t\t\t\tid = Identity.parseAsn1(der);\n\t\t\t\tif (!cert.subjects[0].equals(id))\n\t\t\t\t\tcert.subjects.push(id);\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.DNSName:\n\t\t\t\tvar host = der.readString(\n\t\t\t\t    ALTNAME.DNSName);\n\t\t\t\tid = Identity.forHost(host);\n\t\t\t\tif (!cert.subjects[0].equals(id))\n\t\t\t\t\tcert.subjects.push(id);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tder.readString(der.peek());\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tsig.extras.exts.push({ oid: extId, critical: critical });\n\t\tbreak;\n\tdefault:\n\t\tsig.extras.exts.push({\n\t\t\toid: extId,\n\t\t\tcritical: critical,\n\t\t\tdata: der.readString(asn1.Ber.OctetString, true)\n\t\t});\n\t\tbreak;\n\t}\n\n\tder._offset = after;\n}\n\nvar UTCTIME_RE =\n    /^([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/;\nfunction utcTimeToDate(t) {\n\tvar m = t.match(UTCTIME_RE);\n\tassert.ok(m, 'timestamps must be in UTC');\n\tvar d = new Date();\n\n\tvar thisYear = d.getUTCFullYear();\n\tvar century = Math.floor(thisYear / 100) * 100;\n\n\tvar year = parseInt(m[1], 10);\n\tif (thisYear % 100 < 50 && year >= 60)\n\t\tyear += (century - 1);\n\telse\n\t\tyear += century;\n\td.setUTCFullYear(year, parseInt(m[2], 10) - 1, parseInt(m[3], 10));\n\td.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10));\n\tif (m[6] && m[6].length > 0)\n\t\td.setUTCSeconds(parseInt(m[6], 10));\n\treturn (d);\n}\n\nvar GTIME_RE =\n    /^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/;\nfunction gTimeToDate(t) {\n\tvar m = t.match(GTIME_RE);\n\tassert.ok(m);\n\tvar d = new Date();\n\n\td.setUTCFullYear(parseInt(m[1], 10), parseInt(m[2], 10) - 1,\n\t    parseInt(m[3], 10));\n\td.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10));\n\tif (m[6] && m[6].length > 0)\n\t\td.setUTCSeconds(parseInt(m[6], 10));\n\treturn (d);\n}\n\nfunction zeroPad(n, m) {\n\tif (m === undefined)\n\t\tm = 2;\n\tvar s = '' + n;\n\twhile (s.length < m)\n\t\ts = '0' + s;\n\treturn (s);\n}\n\nfunction dateToUTCTime(d) {\n\tvar s = '';\n\ts += zeroPad(d.getUTCFullYear() % 100);\n\ts += zeroPad(d.getUTCMonth() + 1);\n\ts += zeroPad(d.getUTCDate());\n\ts += zeroPad(d.getUTCHours());\n\ts += zeroPad(d.getUTCMinutes());\n\ts += zeroPad(d.getUTCSeconds());\n\ts += 'Z';\n\treturn (s);\n}\n\nfunction dateToGTime(d) {\n\tvar s = '';\n\ts += zeroPad(d.getUTCFullYear(), 4);\n\ts += zeroPad(d.getUTCMonth() + 1);\n\ts += zeroPad(d.getUTCDate());\n\ts += zeroPad(d.getUTCHours());\n\ts += zeroPad(d.getUTCMinutes());\n\ts += zeroPad(d.getUTCSeconds());\n\ts += 'Z';\n\treturn (s);\n}\n\nfunction sign(cert, key) {\n\tif (cert.signatures.x509 === undefined)\n\t\tcert.signatures.x509 = {};\n\tvar sig = cert.signatures.x509;\n\n\tsig.algo = key.type + '-' + key.defaultHashAlgorithm();\n\tif (SIGN_ALGS[sig.algo] === undefined)\n\t\treturn (false);\n\n\tvar der = new asn1.BerWriter();\n\twriteTBSCert(cert, der);\n\tvar blob = der.buffer;\n\tsig.cache = blob;\n\n\tvar signer = key.createSign();\n\tsigner.write(blob);\n\tcert.signatures.x509.signature = signer.sign();\n\n\treturn (true);\n}\n\nfunction signAsync(cert, signer, done) {\n\tif (cert.signatures.x509 === undefined)\n\t\tcert.signatures.x509 = {};\n\tvar sig = cert.signatures.x509;\n\n\tvar der = new asn1.BerWriter();\n\twriteTBSCert(cert, der);\n\tvar blob = der.buffer;\n\tsig.cache = blob;\n\n\tsigner(blob, function (err, signature) {\n\t\tif (err) {\n\t\t\tdone(err);\n\t\t\treturn;\n\t\t}\n\t\tsig.algo = signature.type + '-' + signature.hashAlgorithm;\n\t\tif (SIGN_ALGS[sig.algo] === undefined) {\n\t\t\tdone(new Error('Invalid signing algorithm \"' +\n\t\t\t    sig.algo + '\"'));\n\t\t\treturn;\n\t\t}\n\t\tsig.signature = signature;\n\t\tdone();\n\t});\n}\n\nfunction write(cert, options) {\n\tvar sig = cert.signatures.x509;\n\tassert.object(sig, 'x509 signature');\n\n\tvar der = new asn1.BerWriter();\n\tder.startSequence();\n\tif (sig.cache) {\n\t\tder._ensure(sig.cache.length);\n\t\tsig.cache.copy(der._buf, der._offset);\n\t\tder._offset += sig.cache.length;\n\t} else {\n\t\twriteTBSCert(cert, der);\n\t}\n\n\tder.startSequence();\n\tder.writeOID(SIGN_ALGS[sig.algo]);\n\tif (sig.algo.match(/^rsa-/))\n\t\tder.writeNull();\n\tder.endSequence();\n\n\tvar sigData = sig.signature.toBuffer('asn1');\n\tvar data = Buffer.alloc(sigData.length + 1);\n\tdata[0] = 0;\n\tsigData.copy(data, 1);\n\tder.writeBuffer(data, asn1.Ber.BitString);\n\tder.endSequence();\n\n\treturn (der.buffer);\n}\n\nfunction writeTBSCert(cert, der) {\n\tvar sig = cert.signatures.x509;\n\tassert.object(sig, 'x509 signature');\n\n\tder.startSequence();\n\n\tder.startSequence(Local(0));\n\tder.writeInt(2);\n\tder.endSequence();\n\n\tder.writeBuffer(utils.mpNormalize(cert.serial), asn1.Ber.Integer);\n\n\tder.startSequence();\n\tder.writeOID(SIGN_ALGS[sig.algo]);\n\tif (sig.algo.match(/^rsa-/))\n\t\tder.writeNull();\n\tder.endSequence();\n\n\tcert.issuer.toAsn1(der);\n\n\tder.startSequence();\n\twriteDate(der, cert.validFrom);\n\twriteDate(der, cert.validUntil);\n\tder.endSequence();\n\n\tvar subject = cert.subjects[0];\n\tvar altNames = cert.subjects.slice(1);\n\tsubject.toAsn1(der);\n\n\tpkcs8.writePkcs8(der, cert.subjectKey);\n\n\tif (sig.extras && sig.extras.issuerUniqueID) {\n\t\tder.writeBuffer(sig.extras.issuerUniqueID, Local(1));\n\t}\n\n\tif (sig.extras && sig.extras.subjectUniqueID) {\n\t\tder.writeBuffer(sig.extras.subjectUniqueID, Local(2));\n\t}\n\n\tif (altNames.length > 0 || subject.type === 'host' ||\n\t    (cert.purposes !== undefined && cert.purposes.length > 0) ||\n\t    (sig.extras && sig.extras.exts)) {\n\t\tder.startSequence(Local(3));\n\t\tder.startSequence();\n\n\t\tvar exts = [];\n\t\tif (cert.purposes !== undefined && cert.purposes.length > 0) {\n\t\t\texts.push({\n\t\t\t\toid: EXTS.basicConstraints,\n\t\t\t\tcritical: true\n\t\t\t});\n\t\t\texts.push({\n\t\t\t\toid: EXTS.keyUsage,\n\t\t\t\tcritical: true\n\t\t\t});\n\t\t\texts.push({\n\t\t\t\toid: EXTS.extKeyUsage,\n\t\t\t\tcritical: true\n\t\t\t});\n\t\t}\n\t\texts.push({ oid: EXTS.altName });\n\t\tif (sig.extras && sig.extras.exts)\n\t\t\texts = sig.extras.exts;\n\n\t\tfor (var i = 0; i < exts.length; ++i) {\n\t\t\tder.startSequence();\n\t\t\tder.writeOID(exts[i].oid);\n\n\t\t\tif (exts[i].critical !== undefined)\n\t\t\t\tder.writeBoolean(exts[i].critical);\n\n\t\t\tif (exts[i].oid === EXTS.altName) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\tder.startSequence();\n\t\t\t\tif (subject.type === 'host') {\n\t\t\t\t\tder.writeString(subject.hostname,\n\t\t\t\t\t    Context(2));\n\t\t\t\t}\n\t\t\t\tfor (var j = 0; j < altNames.length; ++j) {\n\t\t\t\t\tif (altNames[j].type === 'host') {\n\t\t\t\t\t\tder.writeString(\n\t\t\t\t\t\t    altNames[j].hostname,\n\t\t\t\t\t\t    ALTNAME.DNSName);\n\t\t\t\t\t} else if (altNames[j].type ===\n\t\t\t\t\t    'email') {\n\t\t\t\t\t\tder.writeString(\n\t\t\t\t\t\t    altNames[j].email,\n\t\t\t\t\t\t    ALTNAME.RFC822Name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Encode anything else as a\n\t\t\t\t\t\t * DN style name for now.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tder.startSequence(\n\t\t\t\t\t\t    ALTNAME.DirectoryName);\n\t\t\t\t\t\taltNames[j].toAsn1(der);\n\t\t\t\t\t\tder.endSequence();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tder.endSequence();\n\t\t\t\tder.endSequence();\n\t\t\t} else if (exts[i].oid === EXTS.basicConstraints) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\tder.startSequence();\n\t\t\t\tvar ca = (cert.purposes.indexOf('ca') !== -1);\n\t\t\t\tvar pathLen = exts[i].pathLen;\n\t\t\t\tder.writeBoolean(ca);\n\t\t\t\tif (pathLen !== undefined)\n\t\t\t\t\tder.writeInt(pathLen);\n\t\t\t\tder.endSequence();\n\t\t\t\tder.endSequence();\n\t\t\t} else if (exts[i].oid === EXTS.extKeyUsage) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\tder.startSequence();\n\t\t\t\tcert.purposes.forEach(function (purpose) {\n\t\t\t\t\tif (purpose === 'ca')\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (KEYUSEBITS.indexOf(purpose) !== -1)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tvar oid = purpose;\n\t\t\t\t\tif (EXTPURPOSE[purpose] !== undefined)\n\t\t\t\t\t\toid = EXTPURPOSE[purpose];\n\t\t\t\t\tder.writeOID(oid);\n\t\t\t\t});\n\t\t\t\tder.endSequence();\n\t\t\t\tder.endSequence();\n\t\t\t} else if (exts[i].oid === EXTS.keyUsage) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\t/*\n\t\t\t\t * If we parsed this certificate from a byte\n\t\t\t\t * stream (i.e. we didn't generate it in sshpk)\n\t\t\t\t * then we'll have a \".bits\" property on the\n\t\t\t\t * ext with the original raw byte contents.\n\t\t\t\t *\n\t\t\t\t * If we have this, use it here instead of\n\t\t\t\t * regenerating it. This guarantees we output\n\t\t\t\t * the same data we parsed, so signatures still\n\t\t\t\t * validate.\n\t\t\t\t */\n\t\t\t\tif (exts[i].bits !== undefined) {\n\t\t\t\t\tder.writeBuffer(exts[i].bits,\n\t\t\t\t\t    asn1.Ber.BitString);\n\t\t\t\t} else {\n\t\t\t\t\tvar bits = writeBitField(cert.purposes,\n\t\t\t\t\t    KEYUSEBITS);\n\t\t\t\t\tder.writeBuffer(bits,\n\t\t\t\t\t    asn1.Ber.BitString);\n\t\t\t\t}\n\t\t\t\tder.endSequence();\n\t\t\t} else {\n\t\t\t\tder.writeBuffer(exts[i].data,\n\t\t\t\t    asn1.Ber.OctetString);\n\t\t\t}\n\n\t\t\tder.endSequence();\n\t\t}\n\n\t\tder.endSequence();\n\t\tder.endSequence();\n\t}\n\n\tder.endSequence();\n}\n\n/*\n * Reads an ASN.1 BER bitfield out of the Buffer produced by doing\n * `BerReader#readString(asn1.Ber.BitString)`. That function gives us the raw\n * contents of the BitString tag, which is a count of unused bits followed by\n * the bits as a right-padded byte string.\n *\n * `bits` is the Buffer, `bitIndex` should contain an array of string names\n * for the bits in the string, ordered starting with bit #0 in the ASN.1 spec.\n *\n * Returns an array of Strings, the names of the bits that were set to 1.\n */\nfunction readBitField(bits, bitIndex) {\n\tvar bitLen = 8 * (bits.length - 1) - bits[0];\n\tvar setBits = {};\n\tfor (var i = 0; i < bitLen; ++i) {\n\t\tvar byteN = 1 + Math.floor(i / 8);\n\t\tvar bit = 7 - (i % 8);\n\t\tvar mask = 1 << bit;\n\t\tvar bitVal = ((bits[byteN] & mask) !== 0);\n\t\tvar name = bitIndex[i];\n\t\tif (bitVal && typeof (name) === 'string') {\n\t\t\tsetBits[name] = true;\n\t\t}\n\t}\n\treturn (Object.keys(setBits));\n}\n\n/*\n * `setBits` is an array of strings, containing the names for each bit that\n * sould be set to 1. `bitIndex` is same as in `readBitField()`.\n *\n * Returns a Buffer, ready to be written out with `BerWriter#writeString()`.\n */\nfunction writeBitField(setBits, bitIndex) {\n\tvar bitLen = bitIndex.length;\n\tvar blen = Math.ceil(bitLen / 8);\n\tvar unused = blen * 8 - bitLen;\n\tvar bits = Buffer.alloc(1 + blen); // zero-filled\n\tbits[0] = unused;\n\tfor (var i = 0; i < bitLen; ++i) {\n\t\tvar byteN = 1 + Math.floor(i / 8);\n\t\tvar bit = 7 - (i % 8);\n\t\tvar mask = 1 << bit;\n\t\tvar name = bitIndex[i];\n\t\tif (name === undefined)\n\t\t\tcontinue;\n\t\tvar bitVal = (setBits.indexOf(name) !== -1);\n\t\tif (bitVal) {\n\t\t\tbits[byteN] |= mask;\n\t\t}\n\t}\n\treturn (bits);\n}\n","// Copyright 2016 Joyent, Inc.\n\nvar x509 = require('./x509');\n\nmodule.exports = {\n\tread: read,\n\tverify: x509.verify,\n\tsign: x509.sign,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar pem = require('./pem');\nvar Identity = require('../identity');\nvar Signature = require('../signature');\nvar Certificate = require('../certificate');\n\nfunction read(buf, options) {\n\tif (typeof (buf) !== 'string') {\n\t\tassert.buffer(buf, 'buf');\n\t\tbuf = buf.toString('ascii');\n\t}\n\n\tvar lines = buf.trim().split(/[\\r\\n]+/g);\n\n\tvar m;\n\tvar si = -1;\n\twhile (!m && si < lines.length) {\n\t\tm = lines[++si].match(/*JSSTYLED*/\n\t\t    /[-]+[ ]*BEGIN CERTIFICATE[ ]*[-]+/);\n\t}\n\tassert.ok(m, 'invalid PEM header');\n\n\tvar m2;\n\tvar ei = lines.length;\n\twhile (!m2 && ei > 0) {\n\t\tm2 = lines[--ei].match(/*JSSTYLED*/\n\t\t    /[-]+[ ]*END CERTIFICATE[ ]*[-]+/);\n\t}\n\tassert.ok(m2, 'invalid PEM footer');\n\n\tlines = lines.slice(si, ei + 1);\n\n\tvar headers = {};\n\twhile (true) {\n\t\tlines = lines.slice(1);\n\t\tm = lines[0].match(/*JSSTYLED*/\n\t\t    /^([A-Za-z0-9-]+): (.+)$/);\n\t\tif (!m)\n\t\t\tbreak;\n\t\theaders[m[1].toLowerCase()] = m[2];\n\t}\n\n\t/* Chop off the first and last lines */\n\tlines = lines.slice(0, -1).join('');\n\tbuf = Buffer.from(lines, 'base64');\n\n\treturn (x509.read(buf, options));\n}\n\nfunction write(cert, options) {\n\tvar dbuf = x509.write(cert, options);\n\n\tvar header = 'CERTIFICATE';\n\tvar tmp = dbuf.toString('base64');\n\tvar len = tmp.length + (tmp.length / 64) +\n\t    18 + 16 + header.length*2 + 10;\n\tvar buf = Buffer.alloc(len);\n\tvar o = 0;\n\to += buf.write('-----BEGIN ' + header + '-----\\n', o);\n\tfor (var i = 0; i < tmp.length; ) {\n\t\tvar limit = i + 64;\n\t\tif (limit > tmp.length)\n\t\t\tlimit = tmp.length;\n\t\to += buf.write(tmp.slice(i, limit), o);\n\t\tbuf[o++] = 10;\n\t\ti = limit;\n\t}\n\to += buf.write('-----END ' + header + '-----\\n', o);\n\n\treturn (buf.slice(0, o));\n}\n","// Copyright 2016 Joyent, Inc.\n\nmodule.exports = Certificate;\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar Fingerprint = require('./fingerprint');\nvar Signature = require('./signature');\nvar errs = require('./errors');\nvar util = require('util');\nvar utils = require('./utils');\nvar Key = require('./key');\nvar PrivateKey = require('./private-key');\nvar Identity = require('./identity');\n\nvar formats = {};\nformats['openssh'] = require('./formats/openssh-cert');\nformats['x509'] = require('./formats/x509');\nformats['pem'] = require('./formats/x509-pem');\n\nvar CertificateParseError = errs.CertificateParseError;\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\n\nfunction Certificate(opts) {\n\tassert.object(opts, 'options');\n\tassert.arrayOfObject(opts.subjects, 'options.subjects');\n\tutils.assertCompatible(opts.subjects[0], Identity, [1, 0],\n\t    'options.subjects');\n\tutils.assertCompatible(opts.subjectKey, Key, [1, 0],\n\t    'options.subjectKey');\n\tutils.assertCompatible(opts.issuer, Identity, [1, 0], 'options.issuer');\n\tif (opts.issuerKey !== undefined) {\n\t\tutils.assertCompatible(opts.issuerKey, Key, [1, 0],\n\t\t    'options.issuerKey');\n\t}\n\tassert.object(opts.signatures, 'options.signatures');\n\tassert.buffer(opts.serial, 'options.serial');\n\tassert.date(opts.validFrom, 'options.validFrom');\n\tassert.date(opts.validUntil, 'optons.validUntil');\n\n\tassert.optionalArrayOfString(opts.purposes, 'options.purposes');\n\n\tthis._hashCache = {};\n\n\tthis.subjects = opts.subjects;\n\tthis.issuer = opts.issuer;\n\tthis.subjectKey = opts.subjectKey;\n\tthis.issuerKey = opts.issuerKey;\n\tthis.signatures = opts.signatures;\n\tthis.serial = opts.serial;\n\tthis.validFrom = opts.validFrom;\n\tthis.validUntil = opts.validUntil;\n\tthis.purposes = opts.purposes;\n}\n\nCertificate.formats = formats;\n\nCertificate.prototype.toBuffer = function (format, options) {\n\tif (format === undefined)\n\t\tformat = 'x509';\n\tassert.string(format, 'format');\n\tassert.object(formats[format], 'formats[format]');\n\tassert.optionalObject(options, 'options');\n\n\treturn (formats[format].write(this, options));\n};\n\nCertificate.prototype.toString = function (format, options) {\n\tif (format === undefined)\n\t\tformat = 'pem';\n\treturn (this.toBuffer(format, options).toString());\n};\n\nCertificate.prototype.fingerprint = function (algo) {\n\tif (algo === undefined)\n\t\talgo = 'sha256';\n\tassert.string(algo, 'algorithm');\n\tvar opts = {\n\t\ttype: 'certificate',\n\t\thash: this.hash(algo),\n\t\talgorithm: algo\n\t};\n\treturn (new Fingerprint(opts));\n};\n\nCertificate.prototype.hash = function (algo) {\n\tassert.string(algo, 'algorithm');\n\talgo = algo.toLowerCase();\n\tif (algs.hashAlgs[algo] === undefined)\n\t\tthrow (new InvalidAlgorithmError(algo));\n\n\tif (this._hashCache[algo])\n\t\treturn (this._hashCache[algo]);\n\n\tvar hash = crypto.createHash(algo).\n\t    update(this.toBuffer('x509')).digest();\n\tthis._hashCache[algo] = hash;\n\treturn (hash);\n};\n\nCertificate.prototype.isExpired = function (when) {\n\tif (when === undefined)\n\t\twhen = new Date();\n\treturn (!((when.getTime() >= this.validFrom.getTime()) &&\n\t\t(when.getTime() < this.validUntil.getTime())));\n};\n\nCertificate.prototype.isSignedBy = function (issuerCert) {\n\tutils.assertCompatible(issuerCert, Certificate, [1, 0], 'issuer');\n\n\tif (!this.issuer.equals(issuerCert.subjects[0]))\n\t\treturn (false);\n\tif (this.issuer.purposes && this.issuer.purposes.length > 0 &&\n\t    this.issuer.purposes.indexOf('ca') === -1) {\n\t\treturn (false);\n\t}\n\n\treturn (this.isSignedByKey(issuerCert.subjectKey));\n};\n\nCertificate.prototype.getExtension = function (keyOrOid) {\n\tassert.string(keyOrOid, 'keyOrOid');\n\tvar ext = this.getExtensions().filter(function (maybeExt) {\n\t\tif (maybeExt.format === 'x509')\n\t\t\treturn (maybeExt.oid === keyOrOid);\n\t\tif (maybeExt.format === 'openssh')\n\t\t\treturn (maybeExt.name === keyOrOid);\n\t\treturn (false);\n\t})[0];\n\treturn (ext);\n};\n\nCertificate.prototype.getExtensions = function () {\n\tvar exts = [];\n\tvar x509 = this.signatures.x509;\n\tif (x509 && x509.extras && x509.extras.exts) {\n\t\tx509.extras.exts.forEach(function (ext) {\n\t\t\text.format = 'x509';\n\t\t\texts.push(ext);\n\t\t});\n\t}\n\tvar openssh = this.signatures.openssh;\n\tif (openssh && openssh.exts) {\n\t\topenssh.exts.forEach(function (ext) {\n\t\t\text.format = 'openssh';\n\t\t\texts.push(ext);\n\t\t});\n\t}\n\treturn (exts);\n};\n\nCertificate.prototype.isSignedByKey = function (issuerKey) {\n\tutils.assertCompatible(issuerKey, Key, [1, 2], 'issuerKey');\n\n\tif (this.issuerKey !== undefined) {\n\t\treturn (this.issuerKey.\n\t\t    fingerprint('sha512').matches(issuerKey));\n\t}\n\n\tvar fmt = Object.keys(this.signatures)[0];\n\tvar valid = formats[fmt].verify(this, issuerKey);\n\tif (valid)\n\t\tthis.issuerKey = issuerKey;\n\treturn (valid);\n};\n\nCertificate.prototype.signWith = function (key) {\n\tutils.assertCompatible(key, PrivateKey, [1, 2], 'key');\n\tvar fmts = Object.keys(formats);\n\tvar didOne = false;\n\tfor (var i = 0; i < fmts.length; ++i) {\n\t\tif (fmts[i] !== 'pem') {\n\t\t\tvar ret = formats[fmts[i]].sign(this, key);\n\t\t\tif (ret === true)\n\t\t\t\tdidOne = true;\n\t\t}\n\t}\n\tif (!didOne) {\n\t\tthrow (new Error('Failed to sign the certificate for any ' +\n\t\t    'available certificate formats'));\n\t}\n};\n\nCertificate.createSelfSigned = function (subjectOrSubjects, key, options) {\n\tvar subjects;\n\tif (Array.isArray(subjectOrSubjects))\n\t\tsubjects = subjectOrSubjects;\n\telse\n\t\tsubjects = [subjectOrSubjects];\n\n\tassert.arrayOfObject(subjects);\n\tsubjects.forEach(function (subject) {\n\t\tutils.assertCompatible(subject, Identity, [1, 0], 'subject');\n\t});\n\n\tutils.assertCompatible(key, PrivateKey, [1, 2], 'private key');\n\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalObject(options.validFrom, 'options.validFrom');\n\tassert.optionalObject(options.validUntil, 'options.validUntil');\n\tvar validFrom = options.validFrom;\n\tvar validUntil = options.validUntil;\n\tif (validFrom === undefined)\n\t\tvalidFrom = new Date();\n\tif (validUntil === undefined) {\n\t\tassert.optionalNumber(options.lifetime, 'options.lifetime');\n\t\tvar lifetime = options.lifetime;\n\t\tif (lifetime === undefined)\n\t\t\tlifetime = 10*365*24*3600;\n\t\tvalidUntil = new Date();\n\t\tvalidUntil.setTime(validUntil.getTime() + lifetime*1000);\n\t}\n\tassert.optionalBuffer(options.serial, 'options.serial');\n\tvar serial = options.serial;\n\tif (serial === undefined)\n\t\tserial = Buffer.from('0000000000000001', 'hex');\n\n\tvar purposes = options.purposes;\n\tif (purposes === undefined)\n\t\tpurposes = [];\n\n\tif (purposes.indexOf('signature') === -1)\n\t\tpurposes.push('signature');\n\n\t/* Self-signed certs are always CAs. */\n\tif (purposes.indexOf('ca') === -1)\n\t\tpurposes.push('ca');\n\tif (purposes.indexOf('crl') === -1)\n\t\tpurposes.push('crl');\n\n\t/*\n\t * If we weren't explicitly given any other purposes, do the sensible\n\t * thing and add some basic ones depending on the subject type.\n\t */\n\tif (purposes.length <= 3) {\n\t\tvar hostSubjects = subjects.filter(function (subject) {\n\t\t\treturn (subject.type === 'host');\n\t\t});\n\t\tvar userSubjects = subjects.filter(function (subject) {\n\t\t\treturn (subject.type === 'user');\n\t\t});\n\t\tif (hostSubjects.length > 0) {\n\t\t\tif (purposes.indexOf('serverAuth') === -1)\n\t\t\t\tpurposes.push('serverAuth');\n\t\t}\n\t\tif (userSubjects.length > 0) {\n\t\t\tif (purposes.indexOf('clientAuth') === -1)\n\t\t\t\tpurposes.push('clientAuth');\n\t\t}\n\t\tif (userSubjects.length > 0 || hostSubjects.length > 0) {\n\t\t\tif (purposes.indexOf('keyAgreement') === -1)\n\t\t\t\tpurposes.push('keyAgreement');\n\t\t\tif (key.type === 'rsa' &&\n\t\t\t    purposes.indexOf('encryption') === -1)\n\t\t\t\tpurposes.push('encryption');\n\t\t}\n\t}\n\n\tvar cert = new Certificate({\n\t\tsubjects: subjects,\n\t\tissuer: subjects[0],\n\t\tsubjectKey: key.toPublic(),\n\t\tissuerKey: key.toPublic(),\n\t\tsignatures: {},\n\t\tserial: serial,\n\t\tvalidFrom: validFrom,\n\t\tvalidUntil: validUntil,\n\t\tpurposes: purposes\n\t});\n\tcert.signWith(key);\n\n\treturn (cert);\n};\n\nCertificate.create =\n    function (subjectOrSubjects, key, issuer, issuerKey, options) {\n\tvar subjects;\n\tif (Array.isArray(subjectOrSubjects))\n\t\tsubjects = subjectOrSubjects;\n\telse\n\t\tsubjects = [subjectOrSubjects];\n\n\tassert.arrayOfObject(subjects);\n\tsubjects.forEach(function (subject) {\n\t\tutils.assertCompatible(subject, Identity, [1, 0], 'subject');\n\t});\n\n\tutils.assertCompatible(key, Key, [1, 0], 'key');\n\tif (PrivateKey.isPrivateKey(key))\n\t\tkey = key.toPublic();\n\tutils.assertCompatible(issuer, Identity, [1, 0], 'issuer');\n\tutils.assertCompatible(issuerKey, PrivateKey, [1, 2], 'issuer key');\n\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalObject(options.validFrom, 'options.validFrom');\n\tassert.optionalObject(options.validUntil, 'options.validUntil');\n\tvar validFrom = options.validFrom;\n\tvar validUntil = options.validUntil;\n\tif (validFrom === undefined)\n\t\tvalidFrom = new Date();\n\tif (validUntil === undefined) {\n\t\tassert.optionalNumber(options.lifetime, 'options.lifetime');\n\t\tvar lifetime = options.lifetime;\n\t\tif (lifetime === undefined)\n\t\t\tlifetime = 10*365*24*3600;\n\t\tvalidUntil = new Date();\n\t\tvalidUntil.setTime(validUntil.getTime() + lifetime*1000);\n\t}\n\tassert.optionalBuffer(options.serial, 'options.serial');\n\tvar serial = options.serial;\n\tif (serial === undefined)\n\t\tserial = Buffer.from('0000000000000001', 'hex');\n\n\tvar purposes = options.purposes;\n\tif (purposes === undefined)\n\t\tpurposes = [];\n\n\tif (purposes.indexOf('signature') === -1)\n\t\tpurposes.push('signature');\n\n\tif (options.ca === true) {\n\t\tif (purposes.indexOf('ca') === -1)\n\t\t\tpurposes.push('ca');\n\t\tif (purposes.indexOf('crl') === -1)\n\t\t\tpurposes.push('crl');\n\t}\n\n\tvar hostSubjects = subjects.filter(function (subject) {\n\t\treturn (subject.type === 'host');\n\t});\n\tvar userSubjects = subjects.filter(function (subject) {\n\t\treturn (subject.type === 'user');\n\t});\n\tif (hostSubjects.length > 0) {\n\t\tif (purposes.indexOf('serverAuth') === -1)\n\t\t\tpurposes.push('serverAuth');\n\t}\n\tif (userSubjects.length > 0) {\n\t\tif (purposes.indexOf('clientAuth') === -1)\n\t\t\tpurposes.push('clientAuth');\n\t}\n\tif (userSubjects.length > 0 || hostSubjects.length > 0) {\n\t\tif (purposes.indexOf('keyAgreement') === -1)\n\t\t\tpurposes.push('keyAgreement');\n\t\tif (key.type === 'rsa' &&\n\t\t    purposes.indexOf('encryption') === -1)\n\t\t\tpurposes.push('encryption');\n\t}\n\n\tvar cert = new Certificate({\n\t\tsubjects: subjects,\n\t\tissuer: issuer,\n\t\tsubjectKey: key,\n\t\tissuerKey: issuerKey.toPublic(),\n\t\tsignatures: {},\n\t\tserial: serial,\n\t\tvalidFrom: validFrom,\n\t\tvalidUntil: validUntil,\n\t\tpurposes: purposes\n\t});\n\tcert.signWith(issuerKey);\n\n\treturn (cert);\n};\n\nCertificate.parse = function (data, format, options) {\n\tif (typeof (data) !== 'string')\n\t\tassert.buffer(data, 'data');\n\tif (format === undefined)\n\t\tformat = 'auto';\n\tassert.string(format, 'format');\n\tif (typeof (options) === 'string')\n\t\toptions = { filename: options };\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalString(options.filename, 'options.filename');\n\tif (options.filename === undefined)\n\t\toptions.filename = '(unnamed)';\n\n\tassert.object(formats[format], 'formats[format]');\n\n\ttry {\n\t\tvar k = formats[format].read(data, options);\n\t\treturn (k);\n\t} catch (e) {\n\t\tthrow (new CertificateParseError(options.filename, format, e));\n\t}\n};\n\nCertificate.isCertificate = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Certificate, ver));\n};\n\n/*\n * API versions for Certificate:\n * [1,0] -- initial ver\n * [1,1] -- openssh format now unpacks extensions\n */\nCertificate.prototype._sshpkApiVersion = [1, 1];\n\nCertificate._oldVersionDetect = function (obj) {\n\treturn ([1, 0]);\n};\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = Fingerprint;\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar errs = require('./errors');\nvar Key = require('./key');\nvar PrivateKey = require('./private-key');\nvar Certificate = require('./certificate');\nvar utils = require('./utils');\n\nvar FingerprintFormatError = errs.FingerprintFormatError;\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\n\nfunction Fingerprint(opts) {\n\tassert.object(opts, 'options');\n\tassert.string(opts.type, 'options.type');\n\tassert.buffer(opts.hash, 'options.hash');\n\tassert.string(opts.algorithm, 'options.algorithm');\n\n\tthis.algorithm = opts.algorithm.toLowerCase();\n\tif (algs.hashAlgs[this.algorithm] !== true)\n\t\tthrow (new InvalidAlgorithmError(this.algorithm));\n\n\tthis.hash = opts.hash;\n\tthis.type = opts.type;\n\tthis.hashType = opts.hashType;\n}\n\nFingerprint.prototype.toString = function (format) {\n\tif (format === undefined) {\n\t\tif (this.algorithm === 'md5' || this.hashType === 'spki')\n\t\t\tformat = 'hex';\n\t\telse\n\t\t\tformat = 'base64';\n\t}\n\tassert.string(format);\n\n\tswitch (format) {\n\tcase 'hex':\n\t\tif (this.hashType === 'spki')\n\t\t\treturn (this.hash.toString('hex'));\n\t\treturn (addColons(this.hash.toString('hex')));\n\tcase 'base64':\n\t\tif (this.hashType === 'spki')\n\t\t\treturn (this.hash.toString('base64'));\n\t\treturn (sshBase64Format(this.algorithm,\n\t\t    this.hash.toString('base64')));\n\tdefault:\n\t\tthrow (new FingerprintFormatError(undefined, format));\n\t}\n};\n\nFingerprint.prototype.matches = function (other) {\n\tassert.object(other, 'key or certificate');\n\tif (this.type === 'key' && this.hashType !== 'ssh') {\n\t\tutils.assertCompatible(other, Key, [1, 7], 'key with spki');\n\t\tif (PrivateKey.isPrivateKey(other)) {\n\t\t\tutils.assertCompatible(other, PrivateKey, [1, 6],\n\t\t\t    'privatekey with spki support');\n\t\t}\n\t} else if (this.type === 'key') {\n\t\tutils.assertCompatible(other, Key, [1, 0], 'key');\n\t} else {\n\t\tutils.assertCompatible(other, Certificate, [1, 0],\n\t\t    'certificate');\n\t}\n\n\tvar theirHash = other.hash(this.algorithm, this.hashType);\n\tvar theirHash2 = crypto.createHash(this.algorithm).\n\t    update(theirHash).digest('base64');\n\n\tif (this.hash2 === undefined)\n\t\tthis.hash2 = crypto.createHash(this.algorithm).\n\t\t    update(this.hash).digest('base64');\n\n\treturn (this.hash2 === theirHash2);\n};\n\n/*JSSTYLED*/\nvar base64RE = /^[A-Za-z0-9+\\/=]+$/;\n/*JSSTYLED*/\nvar hexRE = /^[a-fA-F0-9]+$/;\n\nFingerprint.parse = function (fp, options) {\n\tassert.string(fp, 'fingerprint');\n\n\tvar alg, hash, enAlgs;\n\tif (Array.isArray(options)) {\n\t\tenAlgs = options;\n\t\toptions = {};\n\t}\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tif (options.enAlgs !== undefined)\n\t\tenAlgs = options.enAlgs;\n\tif (options.algorithms !== undefined)\n\t\tenAlgs = options.algorithms;\n\tassert.optionalArrayOfString(enAlgs, 'algorithms');\n\n\tvar hashType = 'ssh';\n\tif (options.hashType !== undefined)\n\t\thashType = options.hashType;\n\tassert.string(hashType, 'options.hashType');\n\n\tvar parts = fp.split(':');\n\tif (parts.length == 2) {\n\t\talg = parts[0].toLowerCase();\n\t\tif (!base64RE.test(parts[1]))\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\ttry {\n\t\t\thash = Buffer.from(parts[1], 'base64');\n\t\t} catch (e) {\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t}\n\t} else if (parts.length > 2) {\n\t\talg = 'md5';\n\t\tif (parts[0].toLowerCase() === 'md5')\n\t\t\tparts = parts.slice(1);\n\t\tparts = parts.map(function (p) {\n\t\t\twhile (p.length < 2)\n\t\t\t\tp = '0' + p;\n\t\t\tif (p.length > 2)\n\t\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t\treturn (p);\n\t\t});\n\t\tparts = parts.join('');\n\t\tif (!hexRE.test(parts) || parts.length % 2 !== 0)\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\ttry {\n\t\t\thash = Buffer.from(parts, 'hex');\n\t\t} catch (e) {\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t}\n\t} else {\n\t\tif (hexRE.test(fp)) {\n\t\t\thash = Buffer.from(fp, 'hex');\n\t\t} else if (base64RE.test(fp)) {\n\t\t\thash = Buffer.from(fp, 'base64');\n\t\t} else {\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t}\n\n\t\tswitch (hash.length) {\n\t\tcase 32:\n\t\t\talg = 'sha256';\n\t\t\tbreak;\n\t\tcase 16:\n\t\t\talg = 'md5';\n\t\t\tbreak;\n\t\tcase 20:\n\t\t\talg = 'sha1';\n\t\t\tbreak;\n\t\tcase 64:\n\t\t\talg = 'sha512';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t}\n\n\t\t/* Plain hex/base64: guess it's probably SPKI unless told. */\n\t\tif (options.hashType === undefined)\n\t\t\thashType = 'spki';\n\t}\n\n\tif (alg === undefined)\n\t\tthrow (new FingerprintFormatError(fp));\n\n\tif (algs.hashAlgs[alg] === undefined)\n\t\tthrow (new InvalidAlgorithmError(alg));\n\n\tif (enAlgs !== undefined) {\n\t\tenAlgs = enAlgs.map(function (a) { return a.toLowerCase(); });\n\t\tif (enAlgs.indexOf(alg) === -1)\n\t\t\tthrow (new InvalidAlgorithmError(alg));\n\t}\n\n\treturn (new Fingerprint({\n\t\talgorithm: alg,\n\t\thash: hash,\n\t\ttype: options.type || 'key',\n\t\thashType: hashType\n\t}));\n};\n\nfunction addColons(s) {\n\t/*JSSTYLED*/\n\treturn (s.replace(/(.{2})(?=.)/g, '$1:'));\n}\n\nfunction base64Strip(s) {\n\t/*JSSTYLED*/\n\treturn (s.replace(/=*$/, ''));\n}\n\nfunction sshBase64Format(alg, h) {\n\treturn (alg.toUpperCase() + ':' + base64Strip(h));\n}\n\nFingerprint.isFingerprint = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Fingerprint, ver));\n};\n\n/*\n * API versions for Fingerprint:\n * [1,0] -- initial ver\n * [1,1] -- first tagged ver\n * [1,2] -- hashType and spki support\n */\nFingerprint.prototype._sshpkApiVersion = [1, 2];\n\nFingerprint._oldVersionDetect = function (obj) {\n\tassert.func(obj.toString);\n\tassert.func(obj.matches);\n\treturn ([1, 0]);\n};\n","// Copyright 2018 Joyent, Inc.\n\nmodule.exports = Key;\n\nvar assert = require('assert-plus');\nvar algs = require('./algs');\nvar crypto = require('crypto');\nvar Fingerprint = require('./fingerprint');\nvar Signature = require('./signature');\nvar DiffieHellman = require('./dhe').DiffieHellman;\nvar errs = require('./errors');\nvar utils = require('./utils');\nvar PrivateKey = require('./private-key');\nvar edCompat;\n\ntry {\n\tedCompat = require('./ed-compat');\n} catch (e) {\n\t/* Just continue through, and bail out if we try to use it. */\n}\n\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\nvar KeyParseError = errs.KeyParseError;\n\nvar formats = {};\nformats['auto'] = require('./formats/auto');\nformats['pem'] = require('./formats/pem');\nformats['pkcs1'] = require('./formats/pkcs1');\nformats['pkcs8'] = require('./formats/pkcs8');\nformats['rfc4253'] = require('./formats/rfc4253');\nformats['ssh'] = require('./formats/ssh');\nformats['ssh-private'] = require('./formats/ssh-private');\nformats['openssh'] = formats['ssh-private'];\nformats['dnssec'] = require('./formats/dnssec');\nformats['putty'] = require('./formats/putty');\nformats['ppk'] = formats['putty'];\n\nfunction Key(opts) {\n\tassert.object(opts, 'options');\n\tassert.arrayOfObject(opts.parts, 'options.parts');\n\tassert.string(opts.type, 'options.type');\n\tassert.optionalString(opts.comment, 'options.comment');\n\n\tvar algInfo = algs.info[opts.type];\n\tif (typeof (algInfo) !== 'object')\n\t\tthrow (new InvalidAlgorithmError(opts.type));\n\n\tvar partLookup = {};\n\tfor (var i = 0; i < opts.parts.length; ++i) {\n\t\tvar part = opts.parts[i];\n\t\tpartLookup[part.name] = part;\n\t}\n\n\tthis.type = opts.type;\n\tthis.parts = opts.parts;\n\tthis.part = partLookup;\n\tthis.comment = undefined;\n\tthis.source = opts.source;\n\n\t/* for speeding up hashing/fingerprint operations */\n\tthis._rfc4253Cache = opts._rfc4253Cache;\n\tthis._hashCache = {};\n\n\tvar sz;\n\tthis.curve = undefined;\n\tif (this.type === 'ecdsa') {\n\t\tvar curve = this.part.curve.data.toString();\n\t\tthis.curve = curve;\n\t\tsz = algs.curves[curve].size;\n\t} else if (this.type === 'ed25519' || this.type === 'curve25519') {\n\t\tsz = 256;\n\t\tthis.curve = 'curve25519';\n\t} else {\n\t\tvar szPart = this.part[algInfo.sizePart];\n\t\tsz = szPart.data.length;\n\t\tsz = sz * 8 - utils.countZeros(szPart.data);\n\t}\n\tthis.size = sz;\n}\n\nKey.formats = formats;\n\nKey.prototype.toBuffer = function (format, options) {\n\tif (format === undefined)\n\t\tformat = 'ssh';\n\tassert.string(format, 'format');\n\tassert.object(formats[format], 'formats[format]');\n\tassert.optionalObject(options, 'options');\n\n\tif (format === 'rfc4253') {\n\t\tif (this._rfc4253Cache === undefined)\n\t\t\tthis._rfc4253Cache = formats['rfc4253'].write(this);\n\t\treturn (this._rfc4253Cache);\n\t}\n\n\treturn (formats[format].write(this, options));\n};\n\nKey.prototype.toString = function (format, options) {\n\treturn (this.toBuffer(format, options).toString());\n};\n\nKey.prototype.hash = function (algo, type) {\n\tassert.string(algo, 'algorithm');\n\tassert.optionalString(type, 'type');\n\tif (type === undefined)\n\t\ttype = 'ssh';\n\talgo = algo.toLowerCase();\n\tif (algs.hashAlgs[algo] === undefined)\n\t\tthrow (new InvalidAlgorithmError(algo));\n\n\tvar cacheKey = algo + '||' + type;\n\tif (this._hashCache[cacheKey])\n\t\treturn (this._hashCache[cacheKey]);\n\n\tvar buf;\n\tif (type === 'ssh') {\n\t\tbuf = this.toBuffer('rfc4253');\n\t} else if (type === 'spki') {\n\t\tbuf = formats.pkcs8.pkcs8ToBuffer(this);\n\t} else {\n\t\tthrow (new Error('Hash type ' + type + ' not supported'));\n\t}\n\tvar hash = crypto.createHash(algo).update(buf).digest();\n\tthis._hashCache[cacheKey] = hash;\n\treturn (hash);\n};\n\nKey.prototype.fingerprint = function (algo, type) {\n\tif (algo === undefined)\n\t\talgo = 'sha256';\n\tif (type === undefined)\n\t\ttype = 'ssh';\n\tassert.string(algo, 'algorithm');\n\tassert.string(type, 'type');\n\tvar opts = {\n\t\ttype: 'key',\n\t\thash: this.hash(algo, type),\n\t\talgorithm: algo,\n\t\thashType: type\n\t};\n\treturn (new Fingerprint(opts));\n};\n\nKey.prototype.defaultHashAlgorithm = function () {\n\tvar hashAlgo = 'sha1';\n\tif (this.type === 'rsa')\n\t\thashAlgo = 'sha256';\n\tif (this.type === 'dsa' && this.size > 1024)\n\t\thashAlgo = 'sha256';\n\tif (this.type === 'ed25519')\n\t\thashAlgo = 'sha512';\n\tif (this.type === 'ecdsa') {\n\t\tif (this.size <= 256)\n\t\t\thashAlgo = 'sha256';\n\t\telse if (this.size <= 384)\n\t\t\thashAlgo = 'sha384';\n\t\telse\n\t\t\thashAlgo = 'sha512';\n\t}\n\treturn (hashAlgo);\n};\n\nKey.prototype.createVerify = function (hashAlgo) {\n\tif (hashAlgo === undefined)\n\t\thashAlgo = this.defaultHashAlgorithm();\n\tassert.string(hashAlgo, 'hash algorithm');\n\n\t/* ED25519 is not supported by OpenSSL, use a javascript impl. */\n\tif (this.type === 'ed25519' && edCompat !== undefined)\n\t\treturn (new edCompat.Verifier(this, hashAlgo));\n\tif (this.type === 'curve25519')\n\t\tthrow (new Error('Curve25519 keys are not suitable for ' +\n\t\t    'signing or verification'));\n\n\tvar v, nm, err;\n\ttry {\n\t\tnm = hashAlgo.toUpperCase();\n\t\tv = crypto.createVerify(nm);\n\t} catch (e) {\n\t\terr = e;\n\t}\n\tif (v === undefined || (err instanceof Error &&\n\t    err.message.match(/Unknown message digest/))) {\n\t\tnm = 'RSA-';\n\t\tnm += hashAlgo.toUpperCase();\n\t\tv = crypto.createVerify(nm);\n\t}\n\tassert.ok(v, 'failed to create verifier');\n\tvar oldVerify = v.verify.bind(v);\n\tvar key = this.toBuffer('pkcs8');\n\tvar curve = this.curve;\n\tvar self = this;\n\tv.verify = function (signature, fmt) {\n\t\tif (Signature.isSignature(signature, [2, 0])) {\n\t\t\tif (signature.type !== self.type)\n\t\t\t\treturn (false);\n\t\t\tif (signature.hashAlgorithm &&\n\t\t\t    signature.hashAlgorithm !== hashAlgo)\n\t\t\t\treturn (false);\n\t\t\tif (signature.curve && self.type === 'ecdsa' &&\n\t\t\t    signature.curve !== curve)\n\t\t\t\treturn (false);\n\t\t\treturn (oldVerify(key, signature.toBuffer('asn1')));\n\n\t\t} else if (typeof (signature) === 'string' ||\n\t\t    Buffer.isBuffer(signature)) {\n\t\t\treturn (oldVerify(key, signature, fmt));\n\n\t\t/*\n\t\t * Avoid doing this on valid arguments, walking the prototype\n\t\t * chain can be quite slow.\n\t\t */\n\t\t} else if (Signature.isSignature(signature, [1, 0])) {\n\t\t\tthrow (new Error('signature was created by too old ' +\n\t\t\t    'a version of sshpk and cannot be verified'));\n\n\t\t} else {\n\t\t\tthrow (new TypeError('signature must be a string, ' +\n\t\t\t    'Buffer, or Signature object'));\n\t\t}\n\t};\n\treturn (v);\n};\n\nKey.prototype.createDiffieHellman = function () {\n\tif (this.type === 'rsa')\n\t\tthrow (new Error('RSA keys do not support Diffie-Hellman'));\n\n\treturn (new DiffieHellman(this));\n};\nKey.prototype.createDH = Key.prototype.createDiffieHellman;\n\nKey.parse = function (data, format, options) {\n\tif (typeof (data) !== 'string')\n\t\tassert.buffer(data, 'data');\n\tif (format === undefined)\n\t\tformat = 'auto';\n\tassert.string(format, 'format');\n\tif (typeof (options) === 'string')\n\t\toptions = { filename: options };\n\tassert.optionalObject(options, 'options');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalString(options.filename, 'options.filename');\n\tif (options.filename === undefined)\n\t\toptions.filename = '(unnamed)';\n\n\tassert.object(formats[format], 'formats[format]');\n\n\ttry {\n\t\tvar k = formats[format].read(data, options);\n\t\tif (k instanceof PrivateKey)\n\t\t\tk = k.toPublic();\n\t\tif (!k.comment)\n\t\t\tk.comment = options.filename;\n\t\treturn (k);\n\t} catch (e) {\n\t\tif (e.name === 'KeyEncryptedError')\n\t\t\tthrow (e);\n\t\tthrow (new KeyParseError(options.filename, format, e));\n\t}\n};\n\nKey.isKey = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Key, ver));\n};\n\n/*\n * API versions for Key:\n * [1,0] -- initial ver, may take Signature for createVerify or may not\n * [1,1] -- added pkcs1, pkcs8 formats\n * [1,2] -- added auto, ssh-private, openssh formats\n * [1,3] -- added defaultHashAlgorithm\n * [1,4] -- added ed support, createDH\n * [1,5] -- first explicitly tagged version\n * [1,6] -- changed ed25519 part names\n * [1,7] -- spki hash types\n */\nKey.prototype._sshpkApiVersion = [1, 7];\n\nKey._oldVersionDetect = function (obj) {\n\tassert.func(obj.toBuffer);\n\tassert.func(obj.fingerprint);\n\tif (obj.createDH)\n\t\treturn ([1, 4]);\n\tif (obj.defaultHashAlgorithm)\n\t\treturn ([1, 3]);\n\tif (obj.formats['auto'])\n\t\treturn ([1, 2]);\n\tif (obj.formats['pkcs1'])\n\t\treturn ([1, 1]);\n\treturn ([1, 0]);\n};\n","// Copyright 2015 Joyent, Inc.\n\nvar Key = require('./key');\nvar Fingerprint = require('./fingerprint');\nvar Signature = require('./signature');\nvar PrivateKey = require('./private-key');\nvar Certificate = require('./certificate');\nvar Identity = require('./identity');\nvar errs = require('./errors');\n\nmodule.exports = {\n\t/* top-level classes */\n\tKey: Key,\n\tparseKey: Key.parse,\n\tFingerprint: Fingerprint,\n\tparseFingerprint: Fingerprint.parse,\n\tSignature: Signature,\n\tparseSignature: Signature.parse,\n\tPrivateKey: PrivateKey,\n\tparsePrivateKey: PrivateKey.parse,\n\tgeneratePrivateKey: PrivateKey.generate,\n\tCertificate: Certificate,\n\tparseCertificate: Certificate.parse,\n\tcreateSelfSignedCertificate: Certificate.createSelfSigned,\n\tcreateCertificate: Certificate.create,\n\tIdentity: Identity,\n\tidentityFromDN: Identity.parseDN,\n\tidentityForHost: Identity.forHost,\n\tidentityForUser: Identity.forUser,\n\tidentityForEmail: Identity.forEmail,\n\tidentityFromArray: Identity.fromArray,\n\n\t/* errors */\n\tFingerprintFormatError: errs.FingerprintFormatError,\n\tInvalidAlgorithmError: errs.InvalidAlgorithmError,\n\tKeyParseError: errs.KeyParseError,\n\tSignatureParseError: errs.SignatureParseError,\n\tKeyEncryptedError: errs.KeyEncryptedError,\n\tCertificateParseError: errs.CertificateParseError\n};\n","// Copyright 2012 Joyent, Inc.  All rights reserved.\n\nvar assert = require('assert-plus');\nvar sshpk = require('sshpk');\nvar util = require('util');\n\nvar HASH_ALGOS = {\n  'sha1': true,\n  'sha256': true,\n  'sha512': true\n};\n\nvar PK_ALGOS = {\n  'rsa': true,\n  'dsa': true,\n  'ecdsa': true,\n  'ed25519': true\n};\n\nvar HEADER = {\n  AUTH: 'authorization',\n  SIG: 'signature'\n};\n\nfunction HttpSignatureError(message, caller) {\n  if (Error.captureStackTrace)\n    Error.captureStackTrace(this, caller || HttpSignatureError);\n\n  this.message = message;\n  this.name = caller.name;\n}\nutil.inherits(HttpSignatureError, Error);\n\nfunction InvalidAlgorithmError(message) {\n  HttpSignatureError.call(this, message, InvalidAlgorithmError);\n}\nutil.inherits(InvalidAlgorithmError, HttpSignatureError);\n\nfunction validateAlgorithm(algorithm) {\n  var alg = algorithm.toLowerCase().split('-');\n\n  if (alg.length !== 2) {\n    throw (new InvalidAlgorithmError(alg[0].toUpperCase() + ' is not a ' +\n      'valid algorithm'));\n  }\n\n  if (alg[0] !== 'hmac' && !PK_ALGOS[alg[0]]) {\n    throw (new InvalidAlgorithmError(alg[0].toUpperCase() + ' type keys ' +\n      'are not supported'));\n  }\n\n  if (!HASH_ALGOS[alg[1]]) {\n    throw (new InvalidAlgorithmError(alg[1].toUpperCase() + ' is not a ' +\n      'supported hash algorithm'));\n  }\n\n  return (alg);\n}\n\n///--- API\n\nmodule.exports = {\n  HEADER: HEADER,\n\n  HASH_ALGOS: HASH_ALGOS,\n  PK_ALGOS: PK_ALGOS,\n\n  HttpSignatureError: HttpSignatureError,\n  InvalidAlgorithmError: InvalidAlgorithmError,\n\n  validateAlgorithm: validateAlgorithm,\n\n  /**\n   * Converts an OpenSSH public key (rsa only) to a PKCS#8 PEM file.\n   *\n   * The intent of this module is to interoperate with OpenSSL only,\n   * specifically the node crypto module's `verify` method.\n   *\n   * @param {String} key an OpenSSH public key.\n   * @return {String} PEM encoded form of the RSA public key.\n   * @throws {TypeError} on bad input.\n   * @throws {Error} on invalid ssh key formatted data.\n   */\n  sshKeyToPEM: function sshKeyToPEM(key) {\n    assert.string(key, 'ssh_key');\n\n    var k = sshpk.parseKey(key, 'ssh');\n    return (k.toString('pem'));\n  },\n\n\n  /**\n   * Generates an OpenSSH fingerprint from an ssh public key.\n   *\n   * @param {String} key an OpenSSH public key.\n   * @return {String} key fingerprint.\n   * @throws {TypeError} on bad input.\n   * @throws {Error} if what you passed doesn't look like an ssh public key.\n   */\n  fingerprint: function fingerprint(key) {\n    assert.string(key, 'ssh_key');\n\n    var k = sshpk.parseKey(key, 'ssh');\n    return (k.fingerprint('md5').toString('hex'));\n  },\n\n  /**\n   * Converts a PKGCS#8 PEM file to an OpenSSH public key (rsa)\n   *\n   * The reverse of the above function.\n   */\n  pemToRsaSSHKey: function pemToRsaSSHKey(pem, comment) {\n    assert.equal('string', typeof (pem), 'typeof pem');\n\n    var k = sshpk.parseKey(pem, 'pem');\n    k.comment = comment;\n    return (k.toString('ssh'));\n  }\n};\n","// Copyright 2012 Joyent, Inc.  All rights reserved.\n\nvar assert = require('assert-plus');\nvar util = require('util');\nvar utils = require('./utils');\n\n\n\n///--- Globals\n\nvar HASH_ALGOS = utils.HASH_ALGOS;\nvar PK_ALGOS = utils.PK_ALGOS;\nvar HttpSignatureError = utils.HttpSignatureError;\nvar InvalidAlgorithmError = utils.InvalidAlgorithmError;\nvar validateAlgorithm = utils.validateAlgorithm;\n\nvar State = {\n  New: 0,\n  Params: 1\n};\n\nvar ParamsState = {\n  Name: 0,\n  Quote: 1,\n  Value: 2,\n  Comma: 3,\n  Number: 4\n};\n\n///--- Specific Errors\n\n\nfunction ExpiredRequestError(message) {\n  HttpSignatureError.call(this, message, ExpiredRequestError);\n}\nutil.inherits(ExpiredRequestError, HttpSignatureError);\n\n\nfunction InvalidHeaderError(message) {\n  HttpSignatureError.call(this, message, InvalidHeaderError);\n}\nutil.inherits(InvalidHeaderError, HttpSignatureError);\n\n\nfunction InvalidParamsError(message) {\n  HttpSignatureError.call(this, message, InvalidParamsError);\n}\nutil.inherits(InvalidParamsError, HttpSignatureError);\n\n\nfunction MissingHeaderError(message) {\n  HttpSignatureError.call(this, message, MissingHeaderError);\n}\nutil.inherits(MissingHeaderError, HttpSignatureError);\n\nfunction StrictParsingError(message) {\n  HttpSignatureError.call(this, message, StrictParsingError);\n}\nutil.inherits(StrictParsingError, HttpSignatureError);\n\n///--- Exported API\n\nmodule.exports = {\n\n  /**\n   * Parses the 'Authorization' header out of an http.ServerRequest object.\n   *\n   * Note that this API will fully validate the Authorization header, and throw\n   * on any error.  It will not however check the signature, or the keyId format\n   * as those are specific to your environment.  You can use the options object\n   * to pass in extra constraints.\n   *\n   * As a response object you can expect this:\n   *\n   *     {\n   *       \"scheme\": \"Signature\",\n   *       \"params\": {\n   *         \"keyId\": \"foo\",\n   *         \"algorithm\": \"rsa-sha256\",\n   *         \"headers\": [\n   *           \"date\" or \"x-date\",\n   *           \"digest\"\n   *         ],\n   *         \"signature\": \"base64\"\n   *       },\n   *       \"signingString\": \"ready to be passed to crypto.verify()\"\n   *     }\n   *\n   * @param {Object} request an http.ServerRequest.\n   * @param {Object} options an optional options object with:\n   *                   - clockSkew: allowed clock skew in seconds (default 300).\n   *                   - headers: required header names (def: date or x-date)\n   *                   - algorithms: algorithms to support (default: all).\n   *                   - strict: should enforce latest spec parsing\n   *                             (default: false).\n   * @return {Object} parsed out object (see above).\n   * @throws {TypeError} on invalid input.\n   * @throws {InvalidHeaderError} on an invalid Authorization header error.\n   * @throws {InvalidParamsError} if the params in the scheme are invalid.\n   * @throws {MissingHeaderError} if the params indicate a header not present,\n   *                              either in the request headers from the params,\n   *                              or not in the params from a required header\n   *                              in options.\n   * @throws {StrictParsingError} if old attributes are used in strict parsing\n   *                              mode.\n   * @throws {ExpiredRequestError} if the value of date or x-date exceeds skew.\n   */\n  parseRequest: function parseRequest(request, options) {\n    assert.object(request, 'request');\n    assert.object(request.headers, 'request.headers');\n    if (options === undefined) {\n      options = {};\n    }\n    assert.object(options, 'options');\n    assert.optionalFinite(options.clockSkew, 'options.clockSkew');\n\n    var headers = [request.headers['x-date'] ? 'x-date' : 'date'];\n    if (options.headers !== undefined) {\n      assert.arrayOfString(headers, 'options.headers');\n      headers = options.headers;\n    }\n\n    var authzHeaderName = options.authorizationHeaderName;\n    var authz = request.headers[authzHeaderName] ||\n      request.headers[utils.HEADER.AUTH] || request.headers[utils.HEADER.SIG];\n\n    if (!authz) {\n      var errHeader = authzHeaderName ? authzHeaderName :\n        utils.HEADER.AUTH + ' or ' + utils.HEADER.SIG;\n\n      throw new MissingHeaderError('no ' + errHeader + ' header ' +\n        'present in the request');\n    }\n\n    options.clockSkew = options.clockSkew || 300;\n\n\n    var i = 0;\n    var state = authz === request.headers[utils.HEADER.SIG] ?\n      State.Params : State.New;\n    var substate = ParamsState.Name;\n    var tmpName = '';\n    var tmpValue = '';\n\n    var parsed = {\n      scheme: authz === request.headers[utils.HEADER.SIG] ? 'Signature' : '',\n      params: {},\n      signingString: ''\n    };\n\n    for (i = 0; i < authz.length; i++) {\n      var c = authz.charAt(i);\n\n      switch (Number(state)) {\n\n        case State.New:\n          if (c !== ' ') parsed.scheme += c;\n          else state = State.Params;\n          break;\n\n        case State.Params:\n          switch (Number(substate)) {\n\n            case ParamsState.Name:\n              var code = c.charCodeAt(0);\n              // restricted name of A-Z / a-z\n              if ((code >= 0x41 && code <= 0x5a) || // A-Z\n                (code >= 0x61 && code <= 0x7a)) { // a-z\n                tmpName += c;\n              } else if (c === '=') {\n                if (tmpName.length === 0)\n                  throw new InvalidHeaderError('bad param format');\n                substate = ParamsState.Quote;\n              } else {\n                throw new InvalidHeaderError('bad param format');\n              }\n              break;\n\n            case ParamsState.Quote:\n              if (c === '\"') {\n                tmpValue = '';\n                substate = ParamsState.Value;\n              } else {\n                //number\n                substate = ParamsState.Number;\n                code = c.charCodeAt(0);\n                if (code < 0x30 || code > 0x39) { //character not in 0-9\n                  throw new InvalidHeaderError('bad param format');\n                }\n                tmpValue = c;\n              }\n              break;\n\n            case ParamsState.Value:\n              if (c === '\"') {\n                parsed.params[tmpName] = tmpValue;\n                substate = ParamsState.Comma;\n              } else {\n                tmpValue += c;\n              }\n              break;\n\n            case ParamsState.Number:\n              if (c === ',') {\n                parsed.params[tmpName] = parseInt(tmpValue, 10);\n                tmpName = '';\n                substate = ParamsState.Name;\n              } else {\n                code = c.charCodeAt(0);\n                if (code < 0x30 || code > 0x39) { //character not in 0-9\n                  throw new InvalidHeaderError('bad param format');\n                }\n                tmpValue += c;\n              }\n              break;\n\n\n            case ParamsState.Comma:\n              if (c === ',') {\n                tmpName = '';\n                substate = ParamsState.Name;\n              } else {\n                throw new InvalidHeaderError('bad param format');\n              }\n              break;\n\n            default:\n              throw new Error('Invalid substate');\n          }\n          break;\n\n        default:\n          throw new Error('Invalid substate');\n      }\n\n    }\n\n    if (!parsed.params.headers || parsed.params.headers === '') {\n      if (request.headers['x-date']) {\n        parsed.params.headers = ['x-date'];\n      } else {\n        parsed.params.headers = ['date'];\n      }\n    } else {\n      parsed.params.headers = parsed.params.headers.split(' ');\n    }\n\n    // Minimally validate the parsed object\n    if (!parsed.scheme || parsed.scheme !== 'Signature')\n      throw new InvalidHeaderError('scheme was not \"Signature\"');\n\n    if (!parsed.params.keyId)\n      throw new InvalidHeaderError('keyId was not specified');\n\n    if (!parsed.params.algorithm)\n      throw new InvalidHeaderError('algorithm was not specified');\n\n    if (!parsed.params.signature)\n      throw new InvalidHeaderError('signature was not specified');\n\n    // Check the algorithm against the official list\n    try {\n      validateAlgorithm(parsed.params.algorithm);\n    } catch (e) {\n      if (e instanceof InvalidAlgorithmError)\n        throw (new InvalidParamsError(parsed.params.algorithm + ' is not ' +\n          'supported'));\n      else\n        throw (e);\n    }\n\n    // Build the signingString\n    for (i = 0; i < parsed.params.headers.length; i++) {\n      var h = parsed.params.headers[i].toLowerCase();\n      parsed.params.headers[i] = h;\n\n      if (h === 'request-line') {\n        if (!options.strict) {\n          /*\n           * We allow headers from the older spec drafts if strict parsing isn't\n           * specified in options.\n           */\n          parsed.signingString +=\n            request.method + ' ' + request.url + ' HTTP/' + request.httpVersion;\n        } else {\n          /* Strict parsing doesn't allow older draft headers. */\n          throw (new StrictParsingError('request-line is not a valid header ' +\n            'with strict parsing enabled.'));\n        }\n      } else if (h === '(request-target)') {\n        parsed.signingString +=\n          '(request-target): ' + request.method.toLowerCase() + ' ' +\n          request.url;\n      } else if (h === '(keyid)') {\n        parsed.signingString += '(keyid): ' + parsed.params.keyId;\n      } else if (h === '(algorithm)') {\n        parsed.signingString += '(algorithm): ' + parsed.params.algorithm;\n      } else if (h === '(opaque)') {\n        var opaque = parsed.params.opaque;\n        if (opaque === undefined) {\n          throw new MissingHeaderError('opaque param was not in the ' +\n            authzHeaderName + ' header');\n        }\n        parsed.signingString += '(opaque): ' + opaque;\n      } else if (h === '(created)') {\n        parsed.signingString += '(created): ' + parsed.params.created;\n    } else if (h === '(expires)') {\n        parsed.signingString += '(expires): ' + parsed.params.expires;\n      } else {\n        var value = request.headers[h];\n        if (value === undefined)\n          throw new MissingHeaderError(h + ' was not in the request');\n        parsed.signingString += h + ': ' + value;\n      }\n\n      if ((i + 1) < parsed.params.headers.length)\n        parsed.signingString += '\\n';\n    }\n\n    // Check against the constraints\n    var date;\n    var skew;\n    if (request.headers.date || request.headers['x-date']) {\n      if (request.headers['x-date']) {\n        date = new Date(request.headers['x-date']);\n      } else {\n        date = new Date(request.headers.date);\n      }\n      var now = new Date();\n      skew = Math.abs(now.getTime() - date.getTime());\n\n      if (skew > options.clockSkew * 1000) {\n        throw new ExpiredRequestError('clock skew of ' +\n          (skew / 1000) +\n          's was greater than ' +\n          options.clockSkew + 's');\n      }\n    }\n\n    if (parsed.params.created) {\n      skew = parsed.params.created  - Math.floor(Date.now() / 1000);\n      if (skew > options.clockSkew) {\n        throw new ExpiredRequestError('Created lies in the future (with ' +\n          'skew ' + skew + 's greater than allowed ' + options.clockSkew +\n          's');\n      }\n    }\n\n    if (parsed.params.expires) {\n      var expiredSince = Math.floor(Date.now() / 1000) - parsed.params.expires;\n      if (expiredSince > options.clockSkew) {\n        throw new ExpiredRequestError('Request expired with skew ' +\n          expiredSince + 's greater than allowed ' + options.clockSkew + 's');\n      }\n    }\n\n    headers.forEach(function (hdr) {\n      // Remember that we already checked any headers in the params\n      // were in the request, so if this passes we're good.\n      if (parsed.params.headers.indexOf(hdr.toLowerCase()) < 0)\n        throw new MissingHeaderError(hdr + ' was not a signed header');\n    });\n\n    parsed.params.algorithm = parsed.params.algorithm.toLowerCase();\n    if (options.algorithms) {\n      if (options.algorithms.indexOf(parsed.params.algorithm) === -1)\n        throw new InvalidParamsError(parsed.params.algorithm +\n          ' is not a supported algorithm');\n    }\n\n    parsed.algorithm = parsed.params.algorithm.toUpperCase();\n    parsed.keyId = parsed.params.keyId;\n    parsed.opaque = parsed.params.opaque;\n    return parsed;\n  }\n\n};\n","/*\n * extsprintf.js: extended POSIX-style sprintf\n */\n\nvar mod_assert = require('assert');\nvar mod_util = require('util');\n\n/*\n * Public interface\n */\nexports.sprintf = jsSprintf;\nexports.printf = jsPrintf;\nexports.fprintf = jsFprintf;\n\n/*\n * Stripped down version of s[n]printf(3c).  We make a best effort to throw an\n * exception when given a format string we don't understand, rather than\n * ignoring it, so that we won't break existing programs if/when we go implement\n * the rest of this.\n *\n * This implementation currently supports specifying\n *\t- field alignment ('-' flag),\n * \t- zero-pad ('0' flag)\n *\t- always show numeric sign ('+' flag),\n *\t- field width\n *\t- conversions for strings, decimal integers, and floats (numbers).\n *\t- argument size specifiers.  These are all accepted but ignored, since\n *\t  Javascript has no notion of the physical size of an argument.\n *\n * Everything else is currently unsupported, most notably precision, unsigned\n * numbers, non-decimal numbers, and characters.\n */\nfunction jsSprintf(fmt)\n{\n\tvar regex = [\n\t    '([^%]*)',\t\t\t\t/* normal text */\n\t    '%',\t\t\t\t/* start of format */\n\t    '([\\'\\\\-+ #0]*?)',\t\t\t/* flags (optional) */\n\t    '([1-9]\\\\d*)?',\t\t\t/* width (optional) */\n\t    '(\\\\.([1-9]\\\\d*))?',\t\t/* precision (optional) */\n\t    '[lhjztL]*?',\t\t\t/* length mods (ignored) */\n\t    '([diouxXfFeEgGaAcCsSp%jr])'\t/* conversion */\n\t].join('');\n\n\tvar re = new RegExp(regex);\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\tvar flags, width, precision, conversion;\n\tvar left, pad, sign, arg, match;\n\tvar ret = '';\n\tvar argn = 1;\n\n\tmod_assert.equal('string', typeof (fmt));\n\n\twhile ((match = re.exec(fmt)) !== null) {\n\t\tret += match[1];\n\t\tfmt = fmt.substring(match[0].length);\n\n\t\tflags = match[2] || '';\n\t\twidth = match[3] || 0;\n\t\tprecision = match[4] || '';\n\t\tconversion = match[6];\n\t\tleft = false;\n\t\tsign = false;\n\t\tpad = ' ';\n\n\t\tif (conversion == '%') {\n\t\t\tret += '%';\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (args.length === 0)\n\t\t\tthrow (new Error('too few args to sprintf'));\n\n\t\targ = args.shift();\n\t\targn++;\n\n\t\tif (flags.match(/[\\' #]/))\n\t\t\tthrow (new Error(\n\t\t\t    'unsupported flags: ' + flags));\n\n\t\tif (precision.length > 0)\n\t\t\tthrow (new Error(\n\t\t\t    'non-zero precision not supported'));\n\n\t\tif (flags.match(/-/))\n\t\t\tleft = true;\n\n\t\tif (flags.match(/0/))\n\t\t\tpad = '0';\n\n\t\tif (flags.match(/\\+/))\n\t\t\tsign = true;\n\n\t\tswitch (conversion) {\n\t\tcase 's':\n\t\t\tif (arg === undefined || arg === null)\n\t\t\t\tthrow (new Error('argument ' + argn +\n\t\t\t\t    ': attempted to print undefined or null ' +\n\t\t\t\t    'as a string'));\n\t\t\tret += doPad(pad, width, left, arg.toString());\n\t\t\tbreak;\n\n\t\tcase 'd':\n\t\t\targ = Math.floor(arg);\n\t\t\t/*jsl:fallthru*/\n\t\tcase 'f':\n\t\t\tsign = sign && arg > 0 ? '+' : '';\n\t\t\tret += sign + doPad(pad, width, left,\n\t\t\t    arg.toString());\n\t\t\tbreak;\n\n\t\tcase 'x':\n\t\t\tret += doPad(pad, width, left, arg.toString(16));\n\t\t\tbreak;\n\n\t\tcase 'j': /* non-standard */\n\t\t\tif (width === 0)\n\t\t\t\twidth = 10;\n\t\t\tret += mod_util.inspect(arg, false, width);\n\t\t\tbreak;\n\n\t\tcase 'r': /* non-standard */\n\t\t\tret += dumpException(arg);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow (new Error('unsupported conversion: ' +\n\t\t\t    conversion));\n\t\t}\n\t}\n\n\tret += fmt;\n\treturn (ret);\n}\n\nfunction jsPrintf() {\n\tvar args = Array.prototype.slice.call(arguments);\n\targs.unshift(process.stdout);\n\tjsFprintf.apply(null, args);\n}\n\nfunction jsFprintf(stream) {\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\treturn (stream.write(jsSprintf.apply(this, args)));\n}\n\nfunction doPad(chr, width, left, str)\n{\n\tvar ret = str;\n\n\twhile (ret.length < width) {\n\t\tif (left)\n\t\t\tret += chr;\n\t\telse\n\t\t\tret = chr + ret;\n\t}\n\n\treturn (ret);\n}\n\n/*\n * This function dumps long stack traces for exceptions having a cause() method.\n * See node-verror for an example.\n */\nfunction dumpException(ex)\n{\n\tvar ret;\n\n\tif (!(ex instanceof Error))\n\t\tthrow (new Error(jsSprintf('invalid type for %%r: %j', ex)));\n\n\t/* Note that V8 prepends \"ex.stack\" with ex.toString(). */\n\tret = 'EXCEPTION: ' + ex.constructor.name + ': ' + ex.stack;\n\n\tif (ex.cause && typeof (ex.cause) === 'function') {\n\t\tvar cex = ex.cause();\n\t\tif (cex) {\n\t\t\tret += '\\nCaused by: ' + dumpException(cex);\n\t\t}\n\t}\n\n\treturn (ret);\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n","/*\n * verror.js: richer JavaScript errors\n */\n\nvar mod_assertplus = require('assert-plus');\nvar mod_util = require('util');\n\nvar mod_extsprintf = require('extsprintf');\nvar mod_isError = require('core-util-is').isError;\nvar sprintf = mod_extsprintf.sprintf;\n\n/*\n * Public interface\n */\n\n/* So you can 'var VError = require('verror')' */\nmodule.exports = VError;\n/* For compatibility */\nVError.VError = VError;\n/* Other exported classes */\nVError.SError = SError;\nVError.WError = WError;\nVError.MultiError = MultiError;\n\n/*\n * Common function used to parse constructor arguments for VError, WError, and\n * SError.  Named arguments to this function:\n *\n *     strict\t\tforce strict interpretation of sprintf arguments, even\n *     \t\t\tif the options in \"argv\" don't say so\n *\n *     argv\t\terror's constructor arguments, which are to be\n *     \t\t\tinterpreted as described in README.md.  For quick\n *     \t\t\treference, \"argv\" has one of the following forms:\n *\n *          [ sprintf_args... ]           (argv[0] is a string)\n *          [ cause, sprintf_args... ]    (argv[0] is an Error)\n *          [ options, sprintf_args... ]  (argv[0] is an object)\n *\n * This function normalizes these forms, producing an object with the following\n * properties:\n *\n *    options           equivalent to \"options\" in third form.  This will never\n *    \t\t\tbe a direct reference to what the caller passed in\n *    \t\t\t(i.e., it may be a shallow copy), so it can be freely\n *    \t\t\tmodified.\n *\n *    shortmessage      result of sprintf(sprintf_args), taking options.strict\n *    \t\t\tinto account as described in README.md.\n */\nfunction parseConstructorArguments(args)\n{\n\tvar argv, options, sprintf_args, shortmessage, k;\n\n\tmod_assertplus.object(args, 'args');\n\tmod_assertplus.bool(args.strict, 'args.strict');\n\tmod_assertplus.array(args.argv, 'args.argv');\n\targv = args.argv;\n\n\t/*\n\t * First, figure out which form of invocation we've been given.\n\t */\n\tif (argv.length === 0) {\n\t\toptions = {};\n\t\tsprintf_args = [];\n\t} else if (mod_isError(argv[0])) {\n\t\toptions = { 'cause': argv[0] };\n\t\tsprintf_args = argv.slice(1);\n\t} else if (typeof (argv[0]) === 'object') {\n\t\toptions = {};\n\t\tfor (k in argv[0]) {\n\t\t\toptions[k] = argv[0][k];\n\t\t}\n\t\tsprintf_args = argv.slice(1);\n\t} else {\n\t\tmod_assertplus.string(argv[0],\n\t\t    'first argument to VError, SError, or WError ' +\n\t\t    'constructor must be a string, object, or Error');\n\t\toptions = {};\n\t\tsprintf_args = argv;\n\t}\n\n\t/*\n\t * Now construct the error's message.\n\t *\n\t * extsprintf (which we invoke here with our caller's arguments in order\n\t * to construct this Error's message) is strict in its interpretation of\n\t * values to be processed by the \"%s\" specifier.  The value passed to\n\t * extsprintf must actually be a string or something convertible to a\n\t * String using .toString().  Passing other values (notably \"null\" and\n\t * \"undefined\") is considered a programmer error.  The assumption is\n\t * that if you actually want to print the string \"null\" or \"undefined\",\n\t * then that's easy to do that when you're calling extsprintf; on the\n\t * other hand, if you did NOT want that (i.e., there's actually a bug\n\t * where the program assumes some variable is non-null and tries to\n\t * print it, which might happen when constructing a packet or file in\n\t * some specific format), then it's better to stop immediately than\n\t * produce bogus output.\n\t *\n\t * However, sometimes the bug is only in the code calling VError, and a\n\t * programmer might prefer to have the error message contain \"null\" or\n\t * \"undefined\" rather than have the bug in the error path crash the\n\t * program (making the first bug harder to identify).  For that reason,\n\t * by default VError converts \"null\" or \"undefined\" arguments to their\n\t * string representations and passes those to extsprintf.  Programmers\n\t * desiring the strict behavior can use the SError class or pass the\n\t * \"strict\" option to the VError constructor.\n\t */\n\tmod_assertplus.object(options);\n\tif (!options.strict && !args.strict) {\n\t\tsprintf_args = sprintf_args.map(function (a) {\n\t\t\treturn (a === null ? 'null' :\n\t\t\t    a === undefined ? 'undefined' : a);\n\t\t});\n\t}\n\n\tif (sprintf_args.length === 0) {\n\t\tshortmessage = '';\n\t} else {\n\t\tshortmessage = sprintf.apply(null, sprintf_args);\n\t}\n\n\treturn ({\n\t    'options': options,\n\t    'shortmessage': shortmessage\n\t});\n}\n\n/*\n * See README.md for reference documentation.\n */\nfunction VError()\n{\n\tvar args, obj, parsed, cause, ctor, message, k;\n\n\targs = Array.prototype.slice.call(arguments, 0);\n\n\t/*\n\t * This is a regrettable pattern, but JavaScript's built-in Error class\n\t * is defined to work this way, so we allow the constructor to be called\n\t * without \"new\".\n\t */\n\tif (!(this instanceof VError)) {\n\t\tobj = Object.create(VError.prototype);\n\t\tVError.apply(obj, arguments);\n\t\treturn (obj);\n\t}\n\n\t/*\n\t * For convenience and backwards compatibility, we support several\n\t * different calling forms.  Normalize them here.\n\t */\n\tparsed = parseConstructorArguments({\n\t    'argv': args,\n\t    'strict': false\n\t});\n\n\t/*\n\t * If we've been given a name, apply it now.\n\t */\n\tif (parsed.options.name) {\n\t\tmod_assertplus.string(parsed.options.name,\n\t\t    'error\\'s \"name\" must be a string');\n\t\tthis.name = parsed.options.name;\n\t}\n\n\t/*\n\t * For debugging, we keep track of the original short message (attached\n\t * this Error particularly) separately from the complete message (which\n\t * includes the messages of our cause chain).\n\t */\n\tthis.jse_shortmsg = parsed.shortmessage;\n\tmessage = parsed.shortmessage;\n\n\t/*\n\t * If we've been given a cause, record a reference to it and update our\n\t * message appropriately.\n\t */\n\tcause = parsed.options.cause;\n\tif (cause) {\n\t\tmod_assertplus.ok(mod_isError(cause), 'cause is not an Error');\n\t\tthis.jse_cause = cause;\n\n\t\tif (!parsed.options.skipCauseMessage) {\n\t\t\tmessage += ': ' + cause.message;\n\t\t}\n\t}\n\n\t/*\n\t * If we've been given an object with properties, shallow-copy that\n\t * here.  We don't want to use a deep copy in case there are non-plain\n\t * objects here, but we don't want to use the original object in case\n\t * the caller modifies it later.\n\t */\n\tthis.jse_info = {};\n\tif (parsed.options.info) {\n\t\tfor (k in parsed.options.info) {\n\t\t\tthis.jse_info[k] = parsed.options.info[k];\n\t\t}\n\t}\n\n\tthis.message = message;\n\tError.call(this, message);\n\n\tif (Error.captureStackTrace) {\n\t\tctor = parsed.options.constructorOpt || this.constructor;\n\t\tError.captureStackTrace(this, ctor);\n\t}\n\n\treturn (this);\n}\n\nmod_util.inherits(VError, Error);\nVError.prototype.name = 'VError';\n\nVError.prototype.toString = function ve_toString()\n{\n\tvar str = (this.hasOwnProperty('name') && this.name ||\n\t\tthis.constructor.name || this.constructor.prototype.name);\n\tif (this.message)\n\t\tstr += ': ' + this.message;\n\n\treturn (str);\n};\n\n/*\n * This method is provided for compatibility.  New callers should use\n * VError.cause() instead.  That method also uses the saner `null` return value\n * when there is no cause.\n */\nVError.prototype.cause = function ve_cause()\n{\n\tvar cause = VError.cause(this);\n\treturn (cause === null ? undefined : cause);\n};\n\n/*\n * Static methods\n *\n * These class-level methods are provided so that callers can use them on\n * instances of Errors that are not VErrors.  New interfaces should be provided\n * only using static methods to eliminate the class of programming mistake where\n * people fail to check whether the Error object has the corresponding methods.\n */\n\nVError.cause = function (err)\n{\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\treturn (mod_isError(err.jse_cause) ? err.jse_cause : null);\n};\n\nVError.info = function (err)\n{\n\tvar rv, cause, k;\n\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\tcause = VError.cause(err);\n\tif (cause !== null) {\n\t\trv = VError.info(cause);\n\t} else {\n\t\trv = {};\n\t}\n\n\tif (typeof (err.jse_info) == 'object' && err.jse_info !== null) {\n\t\tfor (k in err.jse_info) {\n\t\t\trv[k] = err.jse_info[k];\n\t\t}\n\t}\n\n\treturn (rv);\n};\n\nVError.findCauseByName = function (err, name)\n{\n\tvar cause;\n\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\tmod_assertplus.string(name, 'name');\n\tmod_assertplus.ok(name.length > 0, 'name cannot be empty');\n\n\tfor (cause = err; cause !== null; cause = VError.cause(cause)) {\n\t\tmod_assertplus.ok(mod_isError(cause));\n\t\tif (cause.name == name) {\n\t\t\treturn (cause);\n\t\t}\n\t}\n\n\treturn (null);\n};\n\nVError.hasCauseWithName = function (err, name)\n{\n\treturn (VError.findCauseByName(err, name) !== null);\n};\n\nVError.fullStack = function (err)\n{\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\n\tvar cause = VError.cause(err);\n\n\tif (cause) {\n\t\treturn (err.stack + '\\ncaused by: ' + VError.fullStack(cause));\n\t}\n\n\treturn (err.stack);\n};\n\nVError.errorFromList = function (errors)\n{\n\tmod_assertplus.arrayOfObject(errors, 'errors');\n\n\tif (errors.length === 0) {\n\t\treturn (null);\n\t}\n\n\terrors.forEach(function (e) {\n\t\tmod_assertplus.ok(mod_isError(e));\n\t});\n\n\tif (errors.length == 1) {\n\t\treturn (errors[0]);\n\t}\n\n\treturn (new MultiError(errors));\n};\n\nVError.errorForEach = function (err, func)\n{\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\tmod_assertplus.func(func, 'func');\n\n\tif (err instanceof MultiError) {\n\t\terr.errors().forEach(function iterError(e) { func(e); });\n\t} else {\n\t\tfunc(err);\n\t}\n};\n\n\n/*\n * SError is like VError, but stricter about types.  You cannot pass \"null\" or\n * \"undefined\" as string arguments to the formatter.\n */\nfunction SError()\n{\n\tvar args, obj, parsed, options;\n\n\targs = Array.prototype.slice.call(arguments, 0);\n\tif (!(this instanceof SError)) {\n\t\tobj = Object.create(SError.prototype);\n\t\tSError.apply(obj, arguments);\n\t\treturn (obj);\n\t}\n\n\tparsed = parseConstructorArguments({\n\t    'argv': args,\n\t    'strict': true\n\t});\n\n\toptions = parsed.options;\n\tVError.call(this, options, '%s', parsed.shortmessage);\n\n\treturn (this);\n}\n\n/*\n * We don't bother setting SError.prototype.name because once constructed,\n * SErrors are just like VErrors.\n */\nmod_util.inherits(SError, VError);\n\n\n/*\n * Represents a collection of errors for the purpose of consumers that generally\n * only deal with one error.  Callers can extract the individual errors\n * contained in this object, but may also just treat it as a normal single\n * error, in which case a summary message will be printed.\n */\nfunction MultiError(errors)\n{\n\tmod_assertplus.array(errors, 'list of errors');\n\tmod_assertplus.ok(errors.length > 0, 'must be at least one error');\n\tthis.ase_errors = errors;\n\n\tVError.call(this, {\n\t    'cause': errors[0]\n\t}, 'first of %d error%s', errors.length, errors.length == 1 ? '' : 's');\n}\n\nmod_util.inherits(MultiError, VError);\nMultiError.prototype.name = 'MultiError';\n\nMultiError.prototype.errors = function me_errors()\n{\n\treturn (this.ase_errors.slice(0));\n};\n\n\n/*\n * See README.md for reference details.\n */\nfunction WError()\n{\n\tvar args, obj, parsed, options;\n\n\targs = Array.prototype.slice.call(arguments, 0);\n\tif (!(this instanceof WError)) {\n\t\tobj = Object.create(WError.prototype);\n\t\tWError.apply(obj, args);\n\t\treturn (obj);\n\t}\n\n\tparsed = parseConstructorArguments({\n\t    'argv': args,\n\t    'strict': false\n\t});\n\n\toptions = parsed.options;\n\toptions['skipCauseMessage'] = true;\n\tVError.call(this, options, '%s', parsed.shortmessage);\n\n\treturn (this);\n}\n\nmod_util.inherits(WError, VError);\nWError.prototype.name = 'WError';\n\nWError.prototype.toString = function we_toString()\n{\n\tvar str = (this.hasOwnProperty('name') && this.name ||\n\t\tthis.constructor.name || this.constructor.prototype.name);\n\tif (this.message)\n\t\tstr += ': ' + this.message;\n\tif (this.jse_cause && this.jse_cause.message)\n\t\tstr += '; caused by ' + this.jse_cause.toString();\n\n\treturn (str);\n};\n\n/*\n * For purely historical reasons, WError's cause() function allows you to set\n * the cause.\n */\nWError.prototype.cause = function we_cause(c)\n{\n\tif (mod_isError(c))\n\t\tthis.jse_cause = c;\n\n\treturn (this.jse_cause);\n};\n","/**\r\n * JSONSchema Validator - Validates JavaScript objects using JSON Schemas\r\n *\t(http://www.json.com/json-schema-proposal/)\r\n * Licensed under AFL-2.1 OR BSD-3-Clause\r\nTo use the validator call the validate function with an instance object and an optional schema object.\r\nIf a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),\r\nthat schema will be used to validate and the schema parameter is not necessary (if both exist,\r\nboth validations will occur).\r\nThe validate method will return an array of validation errors. If there are no errors, then an\r\nempty list will be returned. A validation error will have two properties:\r\n\"property\" which indicates which property had the error\r\n\"message\" which indicates what the error was\r\n */\r\n(function (root, factory) {\r\n    if (typeof define === 'function' && define.amd) {\r\n        // AMD. Register as an anonymous module.\r\n        define([], function () {\r\n            return factory();\r\n        });\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        // Node. Does not work with strict CommonJS, but\r\n        // only CommonJS-like environments that support module.exports,\r\n        // like Node.\r\n        module.exports = factory();\r\n    } else {\r\n        // Browser globals\r\n        root.jsonSchema = factory();\r\n    }\r\n}(this, function () {// setup primitive classes to be JSON Schema types\r\nvar exports = validate\r\nexports.Integer = {type:\"integer\"};\r\nvar primitiveConstructors = {\r\n\tString: String,\r\n\tBoolean: Boolean,\r\n\tNumber: Number,\r\n\tObject: Object,\r\n\tArray: Array,\r\n\tDate: Date\r\n}\r\nexports.validate = validate;\r\nfunction validate(/*Any*/instance,/*Object*/schema) {\r\n\t\t// Summary:\r\n\t\t//  \tTo use the validator call JSONSchema.validate with an instance object and an optional schema object.\r\n\t\t// \t\tIf a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),\r\n\t\t// \t\tthat schema will be used to validate and the schema parameter is not necessary (if both exist,\r\n\t\t// \t\tboth validations will occur).\r\n\t\t// \t\tThe validate method will return an object with two properties:\r\n\t\t// \t\t\tvalid: A boolean indicating if the instance is valid by the schema\r\n\t\t// \t\t\terrors: An array of validation errors. If there are no errors, then an\r\n\t\t// \t\t\t\t\tempty list will be returned. A validation error will have two properties:\r\n\t\t// \t\t\t\t\t\tproperty: which indicates which property had the error\r\n\t\t// \t\t\t\t\t\tmessage: which indicates what the error was\r\n\t\t//\r\n\t\treturn validate(instance, schema, {changing: false});//, coerce: false, existingOnly: false});\r\n\t};\r\nexports.checkPropertyChange = function(/*Any*/value,/*Object*/schema, /*String*/property) {\r\n\t\t// Summary:\r\n\t\t// \t\tThe checkPropertyChange method will check to see if an value can legally be in property with the given schema\r\n\t\t// \t\tThis is slightly different than the validate method in that it will fail if the schema is readonly and it will\r\n\t\t// \t\tnot check for self-validation, it is assumed that the passed in value is already internally valid.\r\n\t\t// \t\tThe checkPropertyChange method will return the same object type as validate, see JSONSchema.validate for\r\n\t\t// \t\tinformation.\r\n\t\t//\r\n\t\treturn validate(value, schema, {changing: property || \"property\"});\r\n\t};\r\nvar validate = exports._validate = function(/*Any*/instance,/*Object*/schema,/*Object*/options) {\r\n\r\n\tif (!options) options = {};\r\n\tvar _changing = options.changing;\r\n\r\n\tfunction getType(schema){\r\n\t\treturn schema.type || (primitiveConstructors[schema.name] == schema && schema.name.toLowerCase());\r\n\t}\r\n\tvar errors = [];\r\n\t// validate a value against a property definition\r\n\tfunction checkProp(value, schema, path,i){\r\n\r\n\t\tvar l;\r\n\t\tpath += path ? typeof i == 'number' ? '[' + i + ']' : typeof i == 'undefined' ? '' : '.' + i : i;\r\n\t\tfunction addError(message){\r\n\t\t\terrors.push({property:path,message:message});\r\n\t\t}\r\n\r\n\t\tif((typeof schema != 'object' || schema instanceof Array) && (path || typeof schema != 'function') && !(schema && getType(schema))){\r\n\t\t\tif(typeof schema == 'function'){\r\n\t\t\t\tif(!(value instanceof schema)){\r\n\t\t\t\t\taddError(\"is not an instance of the class/constructor \" + schema.name);\r\n\t\t\t\t}\r\n\t\t\t}else if(schema){\r\n\t\t\t\taddError(\"Invalid schema/property definition \" + schema);\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif(_changing && schema.readonly){\r\n\t\t\taddError(\"is a readonly field, it can not be changed\");\r\n\t\t}\r\n\t\tif(schema['extends']){ // if it extends another schema, it must pass that schema as well\r\n\t\t\tcheckProp(value,schema['extends'],path,i);\r\n\t\t}\r\n\t\t// validate a value against a type definition\r\n\t\tfunction checkType(type,value){\r\n\t\t\tif(type){\r\n\t\t\t\tif(typeof type == 'string' && type != 'any' &&\r\n\t\t\t\t\t\t(type == 'null' ? value !== null : typeof value != type) &&\r\n\t\t\t\t\t\t!(value instanceof Array && type == 'array') &&\r\n\t\t\t\t\t\t!(value instanceof Date && type == 'date') &&\r\n\t\t\t\t\t\t!(type == 'integer' && value%1===0)){\r\n\t\t\t\t\treturn [{property:path,message:value + \" - \" + (typeof value) + \" value found, but a \" + type + \" is required\"}];\r\n\t\t\t\t}\r\n\t\t\t\tif(type instanceof Array){\r\n\t\t\t\t\tvar unionErrors=[];\r\n\t\t\t\t\tfor(var j = 0; j < type.length; j++){ // a union type\r\n\t\t\t\t\t\tif(!(unionErrors=checkType(type[j],value)).length){\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(unionErrors.length){\r\n\t\t\t\t\t\treturn unionErrors;\r\n\t\t\t\t\t}\r\n\t\t\t\t}else if(typeof type == 'object'){\r\n\t\t\t\t\tvar priorErrors = errors;\r\n\t\t\t\t\terrors = [];\r\n\t\t\t\t\tcheckProp(value,type,path);\r\n\t\t\t\t\tvar theseErrors = errors;\r\n\t\t\t\t\terrors = priorErrors;\r\n\t\t\t\t\treturn theseErrors;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tif(value === undefined){\r\n\t\t\tif(schema.required){\r\n\t\t\t\taddError(\"is missing and it is required\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\terrors = errors.concat(checkType(getType(schema),value));\r\n\t\t\tif(schema.disallow && !checkType(schema.disallow,value).length){\r\n\t\t\t\taddError(\" disallowed value was matched\");\r\n\t\t\t}\r\n\t\t\tif(value !== null){\r\n\t\t\t\tif(value instanceof Array){\r\n\t\t\t\t\tif(schema.items){\r\n\t\t\t\t\t\tvar itemsIsArray = schema.items instanceof Array;\r\n\t\t\t\t\t\tvar propDef = schema.items;\r\n\t\t\t\t\t\tfor (i = 0, l = value.length; i < l; i += 1) {\r\n\t\t\t\t\t\t\tif (itemsIsArray)\r\n\t\t\t\t\t\t\t\tpropDef = schema.items[i];\r\n\t\t\t\t\t\t\tif (options.coerce)\r\n\t\t\t\t\t\t\t\tvalue[i] = options.coerce(value[i], propDef);\r\n\t\t\t\t\t\t\terrors.concat(checkProp(value[i],propDef,path,i));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(schema.minItems && value.length < schema.minItems){\r\n\t\t\t\t\t\taddError(\"There must be a minimum of \" + schema.minItems + \" in the array\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(schema.maxItems && value.length > schema.maxItems){\r\n\t\t\t\t\t\taddError(\"There must be a maximum of \" + schema.maxItems + \" in the array\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else if(schema.properties || schema.additionalProperties){\r\n\t\t\t\t\terrors.concat(checkObj(value, schema.properties, path, schema.additionalProperties));\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.pattern && typeof value == 'string' && !value.match(schema.pattern)){\r\n\t\t\t\t\taddError(\"does not match the regex pattern \" + schema.pattern);\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.maxLength && typeof value == 'string' && value.length > schema.maxLength){\r\n\t\t\t\t\taddError(\"may only be \" + schema.maxLength + \" characters long\");\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.minLength && typeof value == 'string' && value.length < schema.minLength){\r\n\t\t\t\t\taddError(\"must be at least \" + schema.minLength + \" characters long\");\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.minimum !== 'undefined' && typeof value == typeof schema.minimum &&\r\n\t\t\t\t\t\tschema.minimum > value){\r\n\t\t\t\t\taddError(\"must have a minimum value of \" + schema.minimum);\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.maximum !== 'undefined' && typeof value == typeof schema.maximum &&\r\n\t\t\t\t\t\tschema.maximum < value){\r\n\t\t\t\t\taddError(\"must have a maximum value of \" + schema.maximum);\r\n\t\t\t\t}\r\n\t\t\t\tif(schema['enum']){\r\n\t\t\t\t\tvar enumer = schema['enum'];\r\n\t\t\t\t\tl = enumer.length;\r\n\t\t\t\t\tvar found;\r\n\t\t\t\t\tfor(var j = 0; j < l; j++){\r\n\t\t\t\t\t\tif(enumer[j]===value){\r\n\t\t\t\t\t\t\tfound=1;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!found){\r\n\t\t\t\t\t\taddError(\"does not have a value in the enumeration \" + enumer.join(\", \"));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.maxDecimal == 'number' &&\r\n\t\t\t\t\t(value.toString().match(new RegExp(\"\\\\.[0-9]{\" + (schema.maxDecimal + 1) + \",}\")))){\r\n\t\t\t\t\taddError(\"may only have \" + schema.maxDecimal + \" digits of decimal places\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\t// validate an object against a schema\r\n\tfunction checkObj(instance,objTypeDef,path,additionalProp){\r\n\r\n\t\tif(typeof objTypeDef =='object'){\r\n\t\t\tif(typeof instance != 'object' || instance instanceof Array){\r\n\t\t\t\terrors.push({property:path,message:\"an object is required\"});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tfor(var i in objTypeDef){ \r\n\t\t\t\tif(objTypeDef.hasOwnProperty(i) && i != '__proto__' && i != 'constructor'){\r\n\t\t\t\t\tvar value = instance.hasOwnProperty(i) ? instance[i] : undefined;\r\n\t\t\t\t\t// skip _not_ specified properties\r\n\t\t\t\t\tif (value === undefined && options.existingOnly) continue;\r\n\t\t\t\t\tvar propDef = objTypeDef[i];\r\n\t\t\t\t\t// set default\r\n\t\t\t\t\tif(value === undefined && propDef[\"default\"]){\r\n\t\t\t\t\t\tvalue = instance[i] = propDef[\"default\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(options.coerce && i in instance){\r\n\t\t\t\t\t\tvalue = instance[i] = options.coerce(value, propDef);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcheckProp(value,propDef,path,i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor(i in instance){\r\n\t\t\tif(instance.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_') && objTypeDef && !objTypeDef[i] && additionalProp===false){\r\n\t\t\t\tif (options.filter) {\r\n\t\t\t\t\tdelete instance[i];\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t} else {\r\n\t\t\t\t\terrors.push({property:path,message:\"The property \" + i +\r\n\t\t\t\t\t\t\" is not defined in the schema and the schema does not allow additional properties\"});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar requires = objTypeDef && objTypeDef[i] && objTypeDef[i].requires;\r\n\t\t\tif(requires && !(requires in instance)){\r\n\t\t\t\terrors.push({property:path,message:\"the presence of the property \" + i + \" requires that \" + requires + \" also be present\"});\r\n\t\t\t}\r\n\t\t\tvalue = instance[i];\r\n\t\t\tif(additionalProp && (!(objTypeDef && typeof objTypeDef == 'object') || !(i in objTypeDef))){\r\n\t\t\t\tif(options.coerce){\r\n\t\t\t\t\tvalue = instance[i] = options.coerce(value, additionalProp);\r\n\t\t\t\t}\r\n\t\t\t\tcheckProp(value,additionalProp,path,i);\r\n\t\t\t}\r\n\t\t\tif(!_changing && value && value.$schema){\r\n\t\t\t\terrors = errors.concat(checkProp(value,value.$schema,path,i));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn errors;\r\n\t}\r\n\tif(schema){\r\n\t\tcheckProp(instance,schema,'',_changing || '');\r\n\t}\r\n\tif(!_changing && instance && instance.$schema){\r\n\t\tcheckProp(instance,instance.$schema,'','');\r\n\t}\r\n\treturn {valid:!errors.length,errors:errors};\r\n};\r\nexports.mustBeValid = function(result){\r\n\t//\tsummary:\r\n\t//\t\tThis checks to ensure that the result is valid and will throw an appropriate error message if it is not\r\n\t// result: the result returned from checkPropertyChange or validate\r\n\tif(!result.valid){\r\n\t\tthrow new TypeError(result.errors.map(function(error){return \"for property \" + error.property + ': ' + error.message;}).join(\", \\n\"));\r\n\t}\r\n}\r\n\r\nreturn exports;\r\n}));\r\n","/*\n * lib/jsprim.js: utilities for primitive JavaScript types\n */\n\nvar mod_assert = require('assert-plus');\nvar mod_util = require('util');\n\nvar mod_extsprintf = require('extsprintf');\nvar mod_verror = require('verror');\nvar mod_jsonschema = require('json-schema');\n\n/*\n * Public interface\n */\nexports.deepCopy = deepCopy;\nexports.deepEqual = deepEqual;\nexports.isEmpty = isEmpty;\nexports.hasKey = hasKey;\nexports.forEachKey = forEachKey;\nexports.pluck = pluck;\nexports.flattenObject = flattenObject;\nexports.flattenIter = flattenIter;\nexports.validateJsonObject = validateJsonObjectJS;\nexports.validateJsonObjectJS = validateJsonObjectJS;\nexports.randElt = randElt;\nexports.extraProperties = extraProperties;\nexports.mergeObjects = mergeObjects;\n\nexports.startsWith = startsWith;\nexports.endsWith = endsWith;\n\nexports.parseInteger = parseInteger;\n\nexports.iso8601 = iso8601;\nexports.rfc1123 = rfc1123;\nexports.parseDateTime = parseDateTime;\n\nexports.hrtimediff = hrtimeDiff;\nexports.hrtimeDiff = hrtimeDiff;\nexports.hrtimeAccum = hrtimeAccum;\nexports.hrtimeAdd = hrtimeAdd;\nexports.hrtimeNanosec = hrtimeNanosec;\nexports.hrtimeMicrosec = hrtimeMicrosec;\nexports.hrtimeMillisec = hrtimeMillisec;\n\n\n/*\n * Deep copy an acyclic *basic* Javascript object.  This only handles basic\n * scalars (strings, numbers, booleans) and arbitrarily deep arrays and objects\n * containing these.  This does *not* handle instances of other classes.\n */\nfunction deepCopy(obj)\n{\n\tvar ret, key;\n\tvar marker = '__deepCopy';\n\n\tif (obj && obj[marker])\n\t\tthrow (new Error('attempted deep copy of cyclic object'));\n\n\tif (obj && obj.constructor == Object) {\n\t\tret = {};\n\t\tobj[marker] = true;\n\n\t\tfor (key in obj) {\n\t\t\tif (key == marker)\n\t\t\t\tcontinue;\n\n\t\t\tret[key] = deepCopy(obj[key]);\n\t\t}\n\n\t\tdelete (obj[marker]);\n\t\treturn (ret);\n\t}\n\n\tif (obj && obj.constructor == Array) {\n\t\tret = [];\n\t\tobj[marker] = true;\n\n\t\tfor (key = 0; key < obj.length; key++)\n\t\t\tret.push(deepCopy(obj[key]));\n\n\t\tdelete (obj[marker]);\n\t\treturn (ret);\n\t}\n\n\t/*\n\t * It must be a primitive type -- just return it.\n\t */\n\treturn (obj);\n}\n\nfunction deepEqual(obj1, obj2)\n{\n\tif (typeof (obj1) != typeof (obj2))\n\t\treturn (false);\n\n\tif (obj1 === null || obj2 === null || typeof (obj1) != 'object')\n\t\treturn (obj1 === obj2);\n\n\tif (obj1.constructor != obj2.constructor)\n\t\treturn (false);\n\n\tvar k;\n\tfor (k in obj1) {\n\t\tif (!(k in obj2))\n\t\t\treturn (false);\n\n\t\tif (!deepEqual(obj1[k], obj2[k]))\n\t\t\treturn (false);\n\t}\n\n\tfor (k in obj2) {\n\t\tif (!(k in obj1))\n\t\t\treturn (false);\n\t}\n\n\treturn (true);\n}\n\nfunction isEmpty(obj)\n{\n\tvar key;\n\tfor (key in obj)\n\t\treturn (false);\n\treturn (true);\n}\n\nfunction hasKey(obj, key)\n{\n\tmod_assert.equal(typeof (key), 'string');\n\treturn (Object.prototype.hasOwnProperty.call(obj, key));\n}\n\nfunction forEachKey(obj, callback)\n{\n\tfor (var key in obj) {\n\t\tif (hasKey(obj, key)) {\n\t\t\tcallback(key, obj[key]);\n\t\t}\n\t}\n}\n\nfunction pluck(obj, key)\n{\n\tmod_assert.equal(typeof (key), 'string');\n\treturn (pluckv(obj, key));\n}\n\nfunction pluckv(obj, key)\n{\n\tif (obj === null || typeof (obj) !== 'object')\n\t\treturn (undefined);\n\n\tif (obj.hasOwnProperty(key))\n\t\treturn (obj[key]);\n\n\tvar i = key.indexOf('.');\n\tif (i == -1)\n\t\treturn (undefined);\n\n\tvar key1 = key.substr(0, i);\n\tif (!obj.hasOwnProperty(key1))\n\t\treturn (undefined);\n\n\treturn (pluckv(obj[key1], key.substr(i + 1)));\n}\n\n/*\n * Invoke callback(row) for each entry in the array that would be returned by\n * flattenObject(data, depth).  This is just like flattenObject(data,\n * depth).forEach(callback), except that the intermediate array is never\n * created.\n */\nfunction flattenIter(data, depth, callback)\n{\n\tdoFlattenIter(data, depth, [], callback);\n}\n\nfunction doFlattenIter(data, depth, accum, callback)\n{\n\tvar each;\n\tvar key;\n\n\tif (depth === 0) {\n\t\teach = accum.slice(0);\n\t\teach.push(data);\n\t\tcallback(each);\n\t\treturn;\n\t}\n\n\tmod_assert.ok(data !== null);\n\tmod_assert.equal(typeof (data), 'object');\n\tmod_assert.equal(typeof (depth), 'number');\n\tmod_assert.ok(depth >= 0);\n\n\tfor (key in data) {\n\t\teach = accum.slice(0);\n\t\teach.push(key);\n\t\tdoFlattenIter(data[key], depth - 1, each, callback);\n\t}\n}\n\nfunction flattenObject(data, depth)\n{\n\tif (depth === 0)\n\t\treturn ([ data ]);\n\n\tmod_assert.ok(data !== null);\n\tmod_assert.equal(typeof (data), 'object');\n\tmod_assert.equal(typeof (depth), 'number');\n\tmod_assert.ok(depth >= 0);\n\n\tvar rv = [];\n\tvar key;\n\n\tfor (key in data) {\n\t\tflattenObject(data[key], depth - 1).forEach(function (p) {\n\t\t\trv.push([ key ].concat(p));\n\t\t});\n\t}\n\n\treturn (rv);\n}\n\nfunction startsWith(str, prefix)\n{\n\treturn (str.substr(0, prefix.length) == prefix);\n}\n\nfunction endsWith(str, suffix)\n{\n\treturn (str.substr(\n\t    str.length - suffix.length, suffix.length) == suffix);\n}\n\nfunction iso8601(d)\n{\n\tif (typeof (d) == 'number')\n\t\td = new Date(d);\n\tmod_assert.ok(d.constructor === Date);\n\treturn (mod_extsprintf.sprintf('%4d-%02d-%02dT%02d:%02d:%02d.%03dZ',\n\t    d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate(),\n\t    d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(),\n\t    d.getUTCMilliseconds()));\n}\n\nvar RFC1123_MONTHS = [\n    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nvar RFC1123_DAYS = [\n    'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\nfunction rfc1123(date) {\n\treturn (mod_extsprintf.sprintf('%s, %02d %s %04d %02d:%02d:%02d GMT',\n\t    RFC1123_DAYS[date.getUTCDay()], date.getUTCDate(),\n\t    RFC1123_MONTHS[date.getUTCMonth()], date.getUTCFullYear(),\n\t    date.getUTCHours(), date.getUTCMinutes(),\n\t    date.getUTCSeconds()));\n}\n\n/*\n * Parses a date expressed as a string, as either a number of milliseconds since\n * the epoch or any string format that Date accepts, giving preference to the\n * former where these two sets overlap (e.g., small numbers).\n */\nfunction parseDateTime(str)\n{\n\t/*\n\t * This is irritatingly implicit, but significantly more concise than\n\t * alternatives.  The \"+str\" will convert a string containing only a\n\t * number directly to a Number, or NaN for other strings.  Thus, if the\n\t * conversion succeeds, we use it (this is the milliseconds-since-epoch\n\t * case).  Otherwise, we pass the string directly to the Date\n\t * constructor to parse.\n\t */\n\tvar numeric = +str;\n\tif (!isNaN(numeric)) {\n\t\treturn (new Date(numeric));\n\t} else {\n\t\treturn (new Date(str));\n\t}\n}\n\n\n/*\n * Number.*_SAFE_INTEGER isn't present before node v0.12, so we hardcode\n * the ES6 definitions here, while allowing for them to someday be higher.\n */\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\nvar MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n\n\n/*\n * Default options for parseInteger().\n */\nvar PI_DEFAULTS = {\n\tbase: 10,\n\tallowSign: true,\n\tallowPrefix: false,\n\tallowTrailing: false,\n\tallowImprecise: false,\n\ttrimWhitespace: false,\n\tleadingZeroIsOctal: false\n};\n\nvar CP_0 = 0x30;\nvar CP_9 = 0x39;\n\nvar CP_A = 0x41;\nvar CP_B = 0x42;\nvar CP_O = 0x4f;\nvar CP_T = 0x54;\nvar CP_X = 0x58;\nvar CP_Z = 0x5a;\n\nvar CP_a = 0x61;\nvar CP_b = 0x62;\nvar CP_o = 0x6f;\nvar CP_t = 0x74;\nvar CP_x = 0x78;\nvar CP_z = 0x7a;\n\nvar PI_CONV_DEC = 0x30;\nvar PI_CONV_UC = 0x37;\nvar PI_CONV_LC = 0x57;\n\n\n/*\n * A stricter version of parseInt() that provides options for changing what\n * is an acceptable string (for example, disallowing trailing characters).\n */\nfunction parseInteger(str, uopts)\n{\n\tmod_assert.string(str, 'str');\n\tmod_assert.optionalObject(uopts, 'options');\n\n\tvar baseOverride = false;\n\tvar options = PI_DEFAULTS;\n\n\tif (uopts) {\n\t\tbaseOverride = hasKey(uopts, 'base');\n\t\toptions = mergeObjects(options, uopts);\n\t\tmod_assert.number(options.base, 'options.base');\n\t\tmod_assert.ok(options.base >= 2, 'options.base >= 2');\n\t\tmod_assert.ok(options.base <= 36, 'options.base <= 36');\n\t\tmod_assert.bool(options.allowSign, 'options.allowSign');\n\t\tmod_assert.bool(options.allowPrefix, 'options.allowPrefix');\n\t\tmod_assert.bool(options.allowTrailing,\n\t\t    'options.allowTrailing');\n\t\tmod_assert.bool(options.allowImprecise,\n\t\t    'options.allowImprecise');\n\t\tmod_assert.bool(options.trimWhitespace,\n\t\t    'options.trimWhitespace');\n\t\tmod_assert.bool(options.leadingZeroIsOctal,\n\t\t    'options.leadingZeroIsOctal');\n\n\t\tif (options.leadingZeroIsOctal) {\n\t\t\tmod_assert.ok(!baseOverride,\n\t\t\t    '\"base\" and \"leadingZeroIsOctal\" are ' +\n\t\t\t    'mutually exclusive');\n\t\t}\n\t}\n\n\tvar c;\n\tvar pbase = -1;\n\tvar base = options.base;\n\tvar start;\n\tvar mult = 1;\n\tvar value = 0;\n\tvar idx = 0;\n\tvar len = str.length;\n\n\t/* Trim any whitespace on the left side. */\n\tif (options.trimWhitespace) {\n\t\twhile (idx < len && isSpace(str.charCodeAt(idx))) {\n\t\t\t++idx;\n\t\t}\n\t}\n\n\t/* Check the number for a leading sign. */\n\tif (options.allowSign) {\n\t\tif (str[idx] === '-') {\n\t\t\tidx += 1;\n\t\t\tmult = -1;\n\t\t} else if (str[idx] === '+') {\n\t\t\tidx += 1;\n\t\t}\n\t}\n\n\t/* Parse the base-indicating prefix if there is one. */\n\tif (str[idx] === '0') {\n\t\tif (options.allowPrefix) {\n\t\t\tpbase = prefixToBase(str.charCodeAt(idx + 1));\n\t\t\tif (pbase !== -1 && (!baseOverride || pbase === base)) {\n\t\t\t\tbase = pbase;\n\t\t\t\tidx += 2;\n\t\t\t}\n\t\t}\n\n\t\tif (pbase === -1 && options.leadingZeroIsOctal) {\n\t\t\tbase = 8;\n\t\t}\n\t}\n\n\t/* Parse the actual digits. */\n\tfor (start = idx; idx < len; ++idx) {\n\t\tc = translateDigit(str.charCodeAt(idx));\n\t\tif (c !== -1 && c < base) {\n\t\t\tvalue *= base;\n\t\t\tvalue += c;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* If we didn't parse any digits, we have an invalid number. */\n\tif (start === idx) {\n\t\treturn (new Error('invalid number: ' + JSON.stringify(str)));\n\t}\n\n\t/* Trim any whitespace on the right side. */\n\tif (options.trimWhitespace) {\n\t\twhile (idx < len && isSpace(str.charCodeAt(idx))) {\n\t\t\t++idx;\n\t\t}\n\t}\n\n\t/* Check for trailing characters. */\n\tif (idx < len && !options.allowTrailing) {\n\t\treturn (new Error('trailing characters after number: ' +\n\t\t    JSON.stringify(str.slice(idx))));\n\t}\n\n\t/* If our value is 0, we return now, to avoid returning -0. */\n\tif (value === 0) {\n\t\treturn (0);\n\t}\n\n\t/* Calculate our final value. */\n\tvar result = value * mult;\n\n\t/*\n\t * If the string represents a value that cannot be precisely represented\n\t * by JavaScript, then we want to check that:\n\t *\n\t * - We never increased the value past MAX_SAFE_INTEGER\n\t * - We don't make the result negative and below MIN_SAFE_INTEGER\n\t *\n\t * Because we only ever increment the value during parsing, there's no\n\t * chance of moving past MAX_SAFE_INTEGER and then dropping below it\n\t * again, losing precision in the process. This means that we only need\n\t * to do our checks here, at the end.\n\t */\n\tif (!options.allowImprecise &&\n\t    (value > MAX_SAFE_INTEGER || result < MIN_SAFE_INTEGER)) {\n\t\treturn (new Error('number is outside of the supported range: ' +\n\t\t    JSON.stringify(str.slice(start, idx))));\n\t}\n\n\treturn (result);\n}\n\n\n/*\n * Interpret a character code as a base-36 digit.\n */\nfunction translateDigit(d)\n{\n\tif (d >= CP_0 && d <= CP_9) {\n\t\t/* '0' to '9' -> 0 to 9 */\n\t\treturn (d - PI_CONV_DEC);\n\t} else if (d >= CP_A && d <= CP_Z) {\n\t\t/* 'A' - 'Z' -> 10 to 35 */\n\t\treturn (d - PI_CONV_UC);\n\t} else if (d >= CP_a && d <= CP_z) {\n\t\t/* 'a' - 'z' -> 10 to 35 */\n\t\treturn (d - PI_CONV_LC);\n\t} else {\n\t\t/* Invalid character code */\n\t\treturn (-1);\n\t}\n}\n\n\n/*\n * Test if a value matches the ECMAScript definition of trimmable whitespace.\n */\nfunction isSpace(c)\n{\n\treturn (c === 0x20) ||\n\t    (c >= 0x0009 && c <= 0x000d) ||\n\t    (c === 0x00a0) ||\n\t    (c === 0x1680) ||\n\t    (c === 0x180e) ||\n\t    (c >= 0x2000 && c <= 0x200a) ||\n\t    (c === 0x2028) ||\n\t    (c === 0x2029) ||\n\t    (c === 0x202f) ||\n\t    (c === 0x205f) ||\n\t    (c === 0x3000) ||\n\t    (c === 0xfeff);\n}\n\n\n/*\n * Determine which base a character indicates (e.g., 'x' indicates hex).\n */\nfunction prefixToBase(c)\n{\n\tif (c === CP_b || c === CP_B) {\n\t\t/* 0b/0B (binary) */\n\t\treturn (2);\n\t} else if (c === CP_o || c === CP_O) {\n\t\t/* 0o/0O (octal) */\n\t\treturn (8);\n\t} else if (c === CP_t || c === CP_T) {\n\t\t/* 0t/0T (decimal) */\n\t\treturn (10);\n\t} else if (c === CP_x || c === CP_X) {\n\t\t/* 0x/0X (hexadecimal) */\n\t\treturn (16);\n\t} else {\n\t\t/* Not a meaningful character */\n\t\treturn (-1);\n\t}\n}\n\n\nfunction validateJsonObjectJS(schema, input)\n{\n\tvar report = mod_jsonschema.validate(input, schema);\n\n\tif (report.errors.length === 0)\n\t\treturn (null);\n\n\t/* Currently, we only do anything useful with the first error. */\n\tvar error = report.errors[0];\n\n\t/* The failed property is given by a URI with an irrelevant prefix. */\n\tvar propname = error['property'];\n\tvar reason = error['message'].toLowerCase();\n\tvar i, j;\n\n\t/*\n\t * There's at least one case where the property error message is\n\t * confusing at best.  We work around this here.\n\t */\n\tif ((i = reason.indexOf('the property ')) != -1 &&\n\t    (j = reason.indexOf(' is not defined in the schema and the ' +\n\t    'schema does not allow additional properties')) != -1) {\n\t\ti += 'the property '.length;\n\t\tif (propname === '')\n\t\t\tpropname = reason.substr(i, j - i);\n\t\telse\n\t\t\tpropname = propname + '.' + reason.substr(i, j - i);\n\n\t\treason = 'unsupported property';\n\t}\n\n\tvar rv = new mod_verror.VError('property \"%s\": %s', propname, reason);\n\trv.jsv_details = error;\n\treturn (rv);\n}\n\nfunction randElt(arr)\n{\n\tmod_assert.ok(Array.isArray(arr) && arr.length > 0,\n\t    'randElt argument must be a non-empty array');\n\n\treturn (arr[Math.floor(Math.random() * arr.length)]);\n}\n\nfunction assertHrtime(a)\n{\n\tmod_assert.ok(a[0] >= 0 && a[1] >= 0,\n\t    'negative numbers not allowed in hrtimes');\n\tmod_assert.ok(a[1] < 1e9, 'nanoseconds column overflow');\n}\n\n/*\n * Compute the time elapsed between hrtime readings A and B, where A is later\n * than B.  hrtime readings come from Node's process.hrtime().  There is no\n * defined way to represent negative deltas, so it's illegal to diff B from A\n * where the time denoted by B is later than the time denoted by A.  If this\n * becomes valuable, we can define a representation and extend the\n * implementation to support it.\n */\nfunction hrtimeDiff(a, b)\n{\n\tassertHrtime(a);\n\tassertHrtime(b);\n\tmod_assert.ok(a[0] > b[0] || (a[0] == b[0] && a[1] >= b[1]),\n\t    'negative differences not allowed');\n\n\tvar rv = [ a[0] - b[0], 0 ];\n\n\tif (a[1] >= b[1]) {\n\t\trv[1] = a[1] - b[1];\n\t} else {\n\t\trv[0]--;\n\t\trv[1] = 1e9 - (b[1] - a[1]);\n\t}\n\n\treturn (rv);\n}\n\n/*\n * Convert a hrtime reading from the array format returned by Node's\n * process.hrtime() into a scalar number of nanoseconds.\n */\nfunction hrtimeNanosec(a)\n{\n\tassertHrtime(a);\n\n\treturn (Math.floor(a[0] * 1e9 + a[1]));\n}\n\n/*\n * Convert a hrtime reading from the array format returned by Node's\n * process.hrtime() into a scalar number of microseconds.\n */\nfunction hrtimeMicrosec(a)\n{\n\tassertHrtime(a);\n\n\treturn (Math.floor(a[0] * 1e6 + a[1] / 1e3));\n}\n\n/*\n * Convert a hrtime reading from the array format returned by Node's\n * process.hrtime() into a scalar number of milliseconds.\n */\nfunction hrtimeMillisec(a)\n{\n\tassertHrtime(a);\n\n\treturn (Math.floor(a[0] * 1e3 + a[1] / 1e6));\n}\n\n/*\n * Add two hrtime readings A and B, overwriting A with the result of the\n * addition.  This function is useful for accumulating several hrtime intervals\n * into a counter.  Returns A.\n */\nfunction hrtimeAccum(a, b)\n{\n\tassertHrtime(a);\n\tassertHrtime(b);\n\n\t/*\n\t * Accumulate the nanosecond component.\n\t */\n\ta[1] += b[1];\n\tif (a[1] >= 1e9) {\n\t\t/*\n\t\t * The nanosecond component overflowed, so carry to the seconds\n\t\t * field.\n\t\t */\n\t\ta[0]++;\n\t\ta[1] -= 1e9;\n\t}\n\n\t/*\n\t * Accumulate the seconds component.\n\t */\n\ta[0] += b[0];\n\n\treturn (a);\n}\n\n/*\n * Add two hrtime readings A and B, returning the result as a new hrtime array.\n * Does not modify either input argument.\n */\nfunction hrtimeAdd(a, b)\n{\n\tassertHrtime(a);\n\n\tvar rv = [ a[0], a[1] ];\n\n\treturn (hrtimeAccum(rv, b));\n}\n\n\n/*\n * Check an object for unexpected properties.  Accepts the object to check, and\n * an array of allowed property names (strings).  Returns an array of key names\n * that were found on the object, but did not appear in the list of allowed\n * properties.  If no properties were found, the returned array will be of\n * zero length.\n */\nfunction extraProperties(obj, allowed)\n{\n\tmod_assert.ok(typeof (obj) === 'object' && obj !== null,\n\t    'obj argument must be a non-null object');\n\tmod_assert.ok(Array.isArray(allowed),\n\t    'allowed argument must be an array of strings');\n\tfor (var i = 0; i < allowed.length; i++) {\n\t\tmod_assert.ok(typeof (allowed[i]) === 'string',\n\t\t    'allowed argument must be an array of strings');\n\t}\n\n\treturn (Object.keys(obj).filter(function (key) {\n\t\treturn (allowed.indexOf(key) === -1);\n\t}));\n}\n\n/*\n * Given three sets of properties \"provided\" (may be undefined), \"overrides\"\n * (required), and \"defaults\" (may be undefined), construct an object containing\n * the union of these sets with \"overrides\" overriding \"provided\", and\n * \"provided\" overriding \"defaults\".  None of the input objects are modified.\n */\nfunction mergeObjects(provided, overrides, defaults)\n{\n\tvar rv, k;\n\n\trv = {};\n\tif (defaults) {\n\t\tfor (k in defaults)\n\t\t\trv[k] = defaults[k];\n\t}\n\n\tif (provided) {\n\t\tfor (k in provided)\n\t\t\trv[k] = provided[k];\n\t}\n\n\tif (overrides) {\n\t\tfor (k in overrides)\n\t\t\trv[k] = overrides[k];\n\t}\n\n\treturn (rv);\n}\n","// Copyright 2012 Joyent, Inc.  All rights reserved.\n\nvar assert = require('assert-plus');\nvar crypto = require('crypto');\nvar util = require('util');\nvar sshpk = require('sshpk');\nvar jsprim = require('jsprim');\nvar utils = require('./utils');\n\nvar sprintf = require('util').format;\n\nvar HASH_ALGOS = utils.HASH_ALGOS;\nvar PK_ALGOS = utils.PK_ALGOS;\nvar InvalidAlgorithmError = utils.InvalidAlgorithmError;\nvar HttpSignatureError = utils.HttpSignatureError;\nvar validateAlgorithm = utils.validateAlgorithm;\n\n///--- Globals\n\nvar AUTHZ_PARAMS = [ 'keyId', 'algorithm', 'created', 'expires', 'opaque',\n  'headers', 'signature' ];\n\n///--- Specific Errors\n\nfunction MissingHeaderError(message) {\n  HttpSignatureError.call(this, message, MissingHeaderError);\n}\nutil.inherits(MissingHeaderError, HttpSignatureError);\n\nfunction StrictParsingError(message) {\n  HttpSignatureError.call(this, message, StrictParsingError);\n}\nutil.inherits(StrictParsingError, HttpSignatureError);\n\nfunction FormatAuthz(prefix, params) {\n  assert.string(prefix, 'prefix');\n  assert.object(params, 'params');\n\n  var authz = '';\n  for (var i = 0; i < AUTHZ_PARAMS.length; i++) {\n    var param = AUTHZ_PARAMS[i];\n    var value = params[param];\n    if (value === undefined)\n      continue;\n    if (typeof (value) === 'number') {\n      authz += prefix + sprintf('%s=%d', param, value);\n    } else {\n      assert.string(value, 'params.' + param);\n\n      authz += prefix + sprintf('%s=\"%s\"', param, value);\n    }\n    prefix = ',';\n  }\n\n  return (authz);\n}\n\n/* See createSigner() */\nfunction RequestSigner(options) {\n  assert.object(options, 'options');\n\n  var alg = [];\n  if (options.algorithm !== undefined) {\n    assert.string(options.algorithm, 'options.algorithm');\n    alg = validateAlgorithm(options.algorithm);\n  }\n  this.rs_alg = alg;\n\n  /*\n   * RequestSigners come in two varieties: ones with an rs_signFunc, and ones\n   * with an rs_signer.\n   *\n   * rs_signFunc-based RequestSigners have to build up their entire signing\n   * string within the rs_lines array and give it to rs_signFunc as a single\n   * concat'd blob. rs_signer-based RequestSigners can add a line at a time to\n   * their signing state by using rs_signer.update(), thus only needing to\n   * buffer the hash function state and one line at a time.\n   */\n  if (options.sign !== undefined) {\n    assert.func(options.sign, 'options.sign');\n    this.rs_signFunc = options.sign;\n\n  } else if (alg[0] === 'hmac' && options.key !== undefined) {\n    assert.string(options.keyId, 'options.keyId');\n    this.rs_keyId = options.keyId;\n\n    if (typeof (options.key) !== 'string' && !Buffer.isBuffer(options.key))\n      throw (new TypeError('options.key for HMAC must be a string or Buffer'));\n\n    /*\n     * Make an rs_signer for HMACs, not a rs_signFunc -- HMACs digest their\n     * data in chunks rather than requiring it all to be given in one go\n     * at the end, so they are more similar to signers than signFuncs.\n     */\n    this.rs_signer = crypto.createHmac(alg[1].toUpperCase(), options.key);\n    this.rs_signer.sign = function () {\n      var digest = this.digest('base64');\n      return ({\n        hashAlgorithm: alg[1],\n        toString: function () { return (digest); }\n      });\n    };\n\n  } else if (options.key !== undefined) {\n    var key = options.key;\n    if (typeof (key) === 'string' || Buffer.isBuffer(key))\n      assert.optionalString(options.keyPassphrase, 'options.keyPassphrase');\n      key = sshpk.parsePrivateKey(key, 'auto', {\n        passphrase: options.keyPassphrase\n      });\n\n    assert.ok(sshpk.PrivateKey.isPrivateKey(key, [1, 2]),\n      'options.key must be a sshpk.PrivateKey');\n    this.rs_key = key;\n\n    assert.string(options.keyId, 'options.keyId');\n    this.rs_keyId = options.keyId;\n\n    if (!PK_ALGOS[key.type]) {\n      throw (new InvalidAlgorithmError(key.type.toUpperCase() + ' type ' +\n        'keys are not supported'));\n    }\n\n    if (alg[0] !== undefined && key.type !== alg[0]) {\n      throw (new InvalidAlgorithmError('options.key must be a ' +\n        alg[0].toUpperCase() + ' key, was given a ' +\n        key.type.toUpperCase() + ' key instead'));\n    }\n\n    this.rs_signer = key.createSign(alg[1]);\n\n  } else {\n    throw (new TypeError('options.sign (func) or options.key is required'));\n  }\n\n  this.rs_headers = [];\n  this.rs_lines = [];\n}\n\n/**\n * Adds a header to be signed, with its value, into this signer.\n *\n * @param {String} header\n * @param {String} value\n * @return {String} value written\n */\nRequestSigner.prototype.writeHeader = function (header, value) {\n  assert.string(header, 'header');\n  header = header.toLowerCase();\n  assert.string(value, 'value');\n\n  this.rs_headers.push(header);\n\n  if (this.rs_signFunc) {\n    this.rs_lines.push(header + ': ' + value);\n\n  } else {\n    var line = header + ': ' + value;\n    if (this.rs_headers.length > 0)\n      line = '\\n' + line;\n    this.rs_signer.update(line);\n  }\n\n  return (value);\n};\n\n/**\n * Adds a default Date header, returning its value.\n *\n * @return {String}\n */\nRequestSigner.prototype.writeDateHeader = function () {\n  return (this.writeHeader('date', jsprim.rfc1123(new Date())));\n};\n\n/**\n * Adds the request target line to be signed.\n *\n * @param {String} method, HTTP method (e.g. 'get', 'post', 'put')\n * @param {String} path\n */\nRequestSigner.prototype.writeTarget = function (method, path) {\n  assert.string(method, 'method');\n  assert.string(path, 'path');\n  method = method.toLowerCase();\n  this.writeHeader('(request-target)', method + ' ' + path);\n};\n\n/**\n * Calculate the value for the Authorization header on this request\n * asynchronously.\n *\n * @param {Func} callback (err, authz)\n */\nRequestSigner.prototype.sign = function (cb) {\n  assert.func(cb, 'callback');\n\n  if (this.rs_headers.length < 1)\n    throw (new Error('At least one header must be signed'));\n\n  var alg, authz;\n  if (this.rs_signFunc) {\n    var data = this.rs_lines.join('\\n');\n    var self = this;\n    this.rs_signFunc(data, function (err, sig) {\n      if (err) {\n        cb(err);\n        return;\n      }\n      try {\n        assert.object(sig, 'signature');\n        assert.string(sig.keyId, 'signature.keyId');\n        assert.string(sig.algorithm, 'signature.algorithm');\n        assert.string(sig.signature, 'signature.signature');\n        alg = validateAlgorithm(sig.algorithm);\n\n        authz = FormatAuthz('Signature ', {\n          keyId: sig.keyId,\n          algorithm: sig.algorithm,\n          headers: self.rs_headers.join(' '),\n          signature: sig.signature\n        });\n      } catch (e) {\n        cb(e);\n        return;\n      }\n      cb(null, authz);\n    });\n\n  } else {\n    try {\n      var sigObj = this.rs_signer.sign();\n    } catch (e) {\n      cb(e);\n      return;\n    }\n    alg = (this.rs_alg[0] || this.rs_key.type) + '-' + sigObj.hashAlgorithm;\n    var signature = sigObj.toString();\n    authz = FormatAuthz('Signature ', {\n      keyId: this.rs_keyId,\n      algorithm: alg,\n      headers: this.rs_headers.join(' '),\n      signature: signature\n    });\n    cb(null, authz);\n  }\n};\n\n///--- Exported API\n\nmodule.exports = {\n  /**\n   * Identifies whether a given object is a request signer or not.\n   *\n   * @param {Object} object, the object to identify\n   * @returns {Boolean}\n   */\n  isSigner: function (obj) {\n    if (typeof (obj) === 'object' && obj instanceof RequestSigner)\n      return (true);\n    return (false);\n  },\n\n  /**\n   * Creates a request signer, used to asynchronously build a signature\n   * for a request (does not have to be an http.ClientRequest).\n   *\n   * @param {Object} options, either:\n   *                   - {String} keyId\n   *                   - {String|Buffer} key\n   *                   - {String} algorithm (optional, required for HMAC)\n   *                   - {String} keyPassphrase (optional, not for HMAC)\n   *                 or:\n   *                   - {Func} sign (data, cb)\n   * @return {RequestSigner}\n   */\n  createSigner: function createSigner(options) {\n    return (new RequestSigner(options));\n  },\n\n  /**\n   * Adds an 'Authorization' header to an http.ClientRequest object.\n   *\n   * Note that this API will add a Date header if it's not already set. Any\n   * other headers in the options.headers array MUST be present, or this\n   * will throw.\n   *\n   * You shouldn't need to check the return type; it's just there if you want\n   * to be pedantic.\n   *\n   * The optional flag indicates whether parsing should use strict enforcement\n   * of the version draft-cavage-http-signatures-04 of the spec or beyond.\n   * The default is to be loose and support\n   * older versions for compatibility.\n   *\n   * @param {Object} request an instance of http.ClientRequest.\n   * @param {Object} options signing parameters object:\n   *                   - {String} keyId required.\n   *                   - {String} key required (either a PEM or HMAC key).\n   *                   - {Array} headers optional; defaults to ['date'].\n   *                   - {String} algorithm optional (unless key is HMAC);\n   *                              default is the same as the sshpk default\n   *                              signing algorithm for the type of key given\n   *                   - {String} httpVersion optional; defaults to '1.1'.\n   *                   - {Boolean} strict optional; defaults to 'false'.\n   *                   - {int}    expiresIn optional; defaults to 60. The\n   *                              seconds after which the signature should\n   *                              expire;\n   *                   - {String} keyPassphrase optional; The passphrase to\n   *                              pass to sshpk to parse the privateKey.\n   *                              This doesn't do anything if algorithm is\n   *                              HMAC.\n   * @return {Boolean} true if Authorization (and optionally Date) were added.\n   * @throws {TypeError} on bad parameter types (input).\n   * @throws {InvalidAlgorithmError} if algorithm was bad or incompatible with\n   *                                 the given key.\n   * @throws {sshpk.KeyParseError} if key was bad.\n   * @throws {MissingHeaderError} if a header to be signed was specified but\n   *                              was not present.\n   */\n  signRequest: function signRequest(request, options) {\n    assert.object(request, 'request');\n    assert.object(options, 'options');\n    assert.optionalString(options.algorithm, 'options.algorithm');\n    assert.string(options.keyId, 'options.keyId');\n    assert.optionalString(options.opaque, 'options.opaque');\n    assert.optionalArrayOfString(options.headers, 'options.headers');\n    assert.optionalString(options.httpVersion, 'options.httpVersion');\n    assert.optionalNumber(options.expiresIn, 'options.expiresIn');\n    assert.optionalString(options.keyPassphrase, 'options.keyPassphrase');\n\n    if (!request.getHeader('Date'))\n      request.setHeader('Date', jsprim.rfc1123(new Date()));\n    var headers = ['date'];\n    if (options.headers)\n      headers = options.headers;\n    if (!options.httpVersion)\n      options.httpVersion = '1.1';\n\n    var alg = [];\n    if (options.algorithm) {\n      options.algorithm = options.algorithm.toLowerCase();\n      alg = validateAlgorithm(options.algorithm);\n    }\n\n    var key = options.key;\n    if (alg[0] === 'hmac') {\n      if (typeof (key) !== 'string' && !Buffer.isBuffer(key))\n        throw (new TypeError('options.key must be a string or Buffer'));\n    } else {\n      if (typeof (key) === 'string' || Buffer.isBuffer(key))\n        key = sshpk.parsePrivateKey(options.key, 'auto', {\n          passphrase: options.keyPassphrase\n        });\n\n      assert.ok(sshpk.PrivateKey.isPrivateKey(key, [1, 2]),\n        'options.key must be a sshpk.PrivateKey');\n\n      if (!PK_ALGOS[key.type]) {\n        throw (new InvalidAlgorithmError(key.type.toUpperCase() + ' type ' +\n          'keys are not supported'));\n      }\n\n      if (alg[0] === undefined) {\n        alg[0] = key.type;\n      } else if (key.type !== alg[0]) {\n        throw (new InvalidAlgorithmError('options.key must be a ' +\n          alg[0].toUpperCase() + ' key, was given a ' +\n          key.type.toUpperCase() + ' key instead'));\n      }\n      if (alg[1] === undefined) {\n        alg[1] = key.defaultHashAlgorithm();\n      }\n\n      options.algorithm = alg[0] + '-' + alg[1];\n    }\n\n    var params = {\n      'keyId': options.keyId,\n      'algorithm': options.algorithm\n    };\n\n    var i;\n    var stringToSign = '';\n    for (i = 0; i < headers.length; i++) {\n      if (typeof (headers[i]) !== 'string')\n        throw new TypeError('options.headers must be an array of Strings');\n\n      var h = headers[i].toLowerCase();\n\n      if (h === 'request-line') {\n        if (!options.strict) {\n          /**\n           * We allow headers from the older spec drafts if strict parsing isn't\n           * specified in options.\n           */\n          stringToSign +=\n            request.method + ' ' + request.path + ' HTTP/' +\n            options.httpVersion;\n        } else {\n          /* Strict parsing doesn't allow older draft headers. */\n          throw (new StrictParsingError('request-line is not a valid header ' +\n            'with strict parsing enabled.'));\n        }\n      } else if (h === '(request-target)') {\n        stringToSign +=\n          '(request-target): ' + request.method.toLowerCase() + ' ' +\n          request.path;\n      } else if (h === '(keyid)') {\n        stringToSign += '(keyid): ' + options.keyId;\n      } else if (h === '(algorithm)') {\n        stringToSign += '(algorithm): ' + options.algorithm;\n      } else if (h === '(opaque)') {\n        var opaque = options.opaque;\n        if (opaque == undefined || opaque === '') {\n          throw new MissingHeaderError('options.opaque was not in the request');\n        }\n        stringToSign += '(opaque): ' + opaque;\n      } else if (h === '(created)') {\n        var created = Math.floor(Date.now() / 1000);\n        params.created = created;\n        stringToSign += '(created): ' + created;\n      } else if (h === '(expires)') {\n        var expiresIn = options.expiresIn;\n        if (expiresIn === undefined) {\n          expiresIn = 60;\n        }\n        const expires = Math.floor(Date.now() / 1000) + expiresIn;\n        params.expires = expires;\n        stringToSign += '(expires): ' + expires;\n      } else {\n        var value = request.getHeader(h);\n        if (value === undefined || value === '') {\n          throw new MissingHeaderError(h + ' was not in the request');\n        }\n        stringToSign += h + ': ' + value;\n      }\n\n      if ((i + 1) < headers.length)\n        stringToSign += '\\n';\n    }\n\n    /* This is just for unit tests. */\n    if (request.hasOwnProperty('_stringToSign')) {\n      request._stringToSign = stringToSign;\n    }\n\n    var signature;\n    if (alg[0] === 'hmac') {\n      var hmac = crypto.createHmac(alg[1].toUpperCase(), key);\n      hmac.update(stringToSign);\n      signature = hmac.digest('base64');\n    } else {\n      var signer = key.createSign(alg[1]);\n      signer.update(stringToSign);\n      var sigObj = signer.sign();\n      if (!HASH_ALGOS[sigObj.hashAlgorithm]) {\n        throw (new InvalidAlgorithmError(sigObj.hashAlgorithm.toUpperCase() +\n          ' is not a supported hash algorithm'));\n      }\n      assert.strictEqual(alg[1], sigObj.hashAlgorithm,\n        'hash algorithm mismatch');\n      signature = sigObj.toString();\n      assert.notStrictEqual(signature, '', 'empty signature produced');\n    }\n\n    var authzHeaderName = options.authorizationHeaderName || 'Authorization';\n    var prefix = authzHeaderName.toLowerCase() === utils.HEADER.SIG ?\n      '' : 'Signature ';\n\n    params.signature = signature;\n\n    if (options.opaque)\n      params.opaque = options.opaque;\n    if (options.headers)\n      params.headers = options.headers.join(' ');\n\n    request.setHeader(authzHeaderName, FormatAuthz(prefix, params));\n\n    return true;\n  }\n\n};\n","// Copyright 2015 Joyent, Inc.\n\nvar assert = require('assert-plus');\nvar crypto = require('crypto');\nvar sshpk = require('sshpk');\nvar utils = require('./utils');\n\nvar HASH_ALGOS = utils.HASH_ALGOS;\nvar PK_ALGOS = utils.PK_ALGOS;\nvar InvalidAlgorithmError = utils.InvalidAlgorithmError;\nvar HttpSignatureError = utils.HttpSignatureError;\nvar validateAlgorithm = utils.validateAlgorithm;\n\n///--- Exported API\n\nmodule.exports = {\n  /**\n   * Verify RSA/DSA signature against public key.  You are expected to pass in\n   * an object that was returned from `parse()`.\n   *\n   * @param {Object} parsedSignature the object you got from `parse`.\n   * @param {String} pubkey RSA/DSA private key PEM.\n   * @return {Boolean} true if valid, false otherwise.\n   * @throws {TypeError} if you pass in bad arguments.\n   * @throws {InvalidAlgorithmError}\n   */\n  verifySignature: function verifySignature(parsedSignature, pubkey) {\n    assert.object(parsedSignature, 'parsedSignature');\n    if (typeof (pubkey) === 'string' || Buffer.isBuffer(pubkey))\n      pubkey = sshpk.parseKey(pubkey);\n    assert.ok(sshpk.Key.isKey(pubkey, [1, 1]), 'pubkey must be a sshpk.Key');\n\n    var alg = validateAlgorithm(parsedSignature.algorithm);\n    if (alg[0] === 'hmac' || alg[0] !== pubkey.type)\n      return (false);\n\n    var v = pubkey.createVerify(alg[1]);\n    v.update(parsedSignature.signingString);\n    return (v.verify(parsedSignature.params.signature, 'base64'));\n  },\n\n  /**\n   * Verify HMAC against shared secret.  You are expected to pass in an object\n   * that was returned from `parse()`.\n   *\n   * @param {Object} parsedSignature the object you got from `parse`.\n   * @param {String} or {Buffer} secret HMAC shared secret.\n   * @return {Boolean} true if valid, false otherwise.\n   * @throws {TypeError} if you pass in bad arguments.\n   * @throws {InvalidAlgorithmError}\n   */\n  verifyHMAC: function verifyHMAC(parsedSignature, secret) {\n    assert.object(parsedSignature, 'parsedHMAC');\n    assert(typeof (secret) === 'string' || Buffer.isBuffer(secret));\n\n    var alg = validateAlgorithm(parsedSignature.algorithm);\n    if (alg[0] !== 'hmac')\n      return (false);\n\n    var hashAlg = alg[1].toUpperCase();\n\n    var hmac = crypto.createHmac(hashAlg, secret);\n    hmac.update(parsedSignature.signingString);\n\n    /*\n     * Now double-hash to avoid leaking timing information - there's\n     * no easy constant-time compare in JS, so we use this approach\n     * instead. See for more info:\n     * https://www.isecpartners.com/blog/2011/february/double-hmac-\n     * verification.aspx\n     */\n    var h1 = crypto.createHmac(hashAlg, secret);\n    h1.update(hmac.digest());\n    h1 = h1.digest();\n    var h2 = crypto.createHmac(hashAlg, secret);\n    h2.update(new Buffer(parsedSignature.params.signature, 'base64'));\n    h2 = h2.digest();\n\n    /* Node 0.8 returns strings from .digest(). */\n    if (typeof (h1) === 'string')\n      return (h1 === h2);\n    /* And node 0.10 lacks the .equals() method on Buffers. */\n    if (Buffer.isBuffer(h1) && !h1.equals)\n      return (h1.toString('binary') === h2.toString('binary'));\n\n    return (h1.equals(h2));\n  }\n};\n","// Copyright 2015 Joyent, Inc.\n\nvar parser = require('./parser');\nvar signer = require('./signer');\nvar verify = require('./verify');\nvar utils = require('./utils');\n\n\n\n///--- API\n\nmodule.exports = {\n\n  parse: parser.parseRequest,\n  parseRequest: parser.parseRequest,\n\n  sign: signer.signRequest,\n  signRequest: signer.signRequest,\n  createSigner: signer.createSigner,\n  isSigner: signer.isSigner,\n\n  sshKeyToPEM: utils.sshKeyToPEM,\n  sshKeyFingerprint: utils.fingerprint,\n  pemToRsaSSHKey: utils.pemToRsaSSHKey,\n\n  verify: verify.verifySignature,\n  verifySignature: verify.verifySignature,\n  verifyHMAC: verify.verifyHMAC\n};\n","","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1\n    ? exports.lookup(str)\n    : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .substr(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana']\n\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source)\n        var to = preference.indexOf(mime.source)\n\n        if (types[extension] !== 'application/octet-stream' &&\n          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n          // skip the remapping\n          continue\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type\n    }\n  })\n}\n","function Caseless (dict) {\n  this.dict = dict || {}\n}\nCaseless.prototype.set = function (name, value, clobber) {\n  if (typeof name === 'object') {\n    for (var i in name) {\n      this.set(i, name[i], value)\n    }\n  } else {\n    if (typeof clobber === 'undefined') clobber = true\n    var has = this.has(name)\n\n    if (!clobber && has) this.dict[has] = this.dict[has] + ',' + value\n    else this.dict[has || name] = value\n    return has\n  }\n}\nCaseless.prototype.has = function (name) {\n  var keys = Object.keys(this.dict)\n    , name = name.toLowerCase()\n    ;\n  for (var i=0;i<keys.length;i++) {\n    if (keys[i].toLowerCase() === name) return keys[i]\n  }\n  return false\n}\nCaseless.prototype.get = function (name) {\n  name = name.toLowerCase()\n  var result, _key\n  var headers = this.dict\n  Object.keys(headers).forEach(function (key) {\n    _key = key.toLowerCase()\n    if (name === _key) result = headers[key]\n  })\n  return result\n}\nCaseless.prototype.swap = function (name) {\n  var has = this.has(name)\n  if (has === name) return\n  if (!has) throw new Error('There is no header than matches \"'+name+'\"')\n  this.dict[name] = this.dict[has]\n  delete this.dict[has]\n}\nCaseless.prototype.del = function (name) {\n  var has = this.has(name)\n  return delete this.dict[has || name]\n}\n\nmodule.exports = function (dict) {return new Caseless(dict)}\nmodule.exports.httpify = function (resp, headers) {\n  var c = new Caseless(headers)\n  resp.setHeader = function (key, value, clobber) {\n    if (typeof value === 'undefined') return\n    return c.set(key, value, clobber)\n  }\n  resp.hasHeader = function (key) {\n    return c.has(key)\n  }\n  resp.getHeader = function (key) {\n    return c.get(key)\n  }\n  resp.removeHeader = function (key) {\n    return c.del(key)\n  }\n  resp.headers = c.dict\n  return c\n}\n","module.exports = ForeverAgent\nForeverAgent.SSL = ForeverAgentSSL\n\nvar util = require('util')\n  , Agent = require('http').Agent\n  , net = require('net')\n  , tls = require('tls')\n  , AgentSSL = require('https').Agent\n  \nfunction getConnectionName(host, port) {  \n  var name = ''\n  if (typeof host === 'string') {\n    name = host + ':' + port\n  } else {\n    // For node.js v012.0 and iojs-v1.5.1, host is an object. And any existing localAddress is part of the connection name.\n    name = host.host + ':' + host.port + ':' + (host.localAddress ? (host.localAddress + ':') : ':')\n  }\n  return name\n}    \n\nfunction ForeverAgent(options) {\n  var self = this\n  self.options = options || {}\n  self.requests = {}\n  self.sockets = {}\n  self.freeSockets = {}\n  self.maxSockets = self.options.maxSockets || Agent.defaultMaxSockets\n  self.minSockets = self.options.minSockets || ForeverAgent.defaultMinSockets\n  self.on('free', function(socket, host, port) {\n    var name = getConnectionName(host, port)\n\n    if (self.requests[name] && self.requests[name].length) {\n      self.requests[name].shift().onSocket(socket)\n    } else if (self.sockets[name].length < self.minSockets) {\n      if (!self.freeSockets[name]) self.freeSockets[name] = []\n      self.freeSockets[name].push(socket)\n      \n      // if an error happens while we don't use the socket anyway, meh, throw the socket away\n      var onIdleError = function() {\n        socket.destroy()\n      }\n      socket._onIdleError = onIdleError\n      socket.on('error', onIdleError)\n    } else {\n      // If there are no pending requests just destroy the\n      // socket and it will get removed from the pool. This\n      // gets us out of timeout issues and allows us to\n      // default to Connection:keep-alive.\n      socket.destroy()\n    }\n  })\n\n}\nutil.inherits(ForeverAgent, Agent)\n\nForeverAgent.defaultMinSockets = 5\n\n\nForeverAgent.prototype.createConnection = net.createConnection\nForeverAgent.prototype.addRequestNoreuse = Agent.prototype.addRequest\nForeverAgent.prototype.addRequest = function(req, host, port) {\n  var name = getConnectionName(host, port)\n  \n  if (typeof host !== 'string') {\n    var options = host\n    port = options.port\n    host = options.host\n  }\n\n  if (this.freeSockets[name] && this.freeSockets[name].length > 0 && !req.useChunkedEncodingByDefault) {\n    var idleSocket = this.freeSockets[name].pop()\n    idleSocket.removeListener('error', idleSocket._onIdleError)\n    delete idleSocket._onIdleError\n    req._reusedSocket = true\n    req.onSocket(idleSocket)\n  } else {\n    this.addRequestNoreuse(req, host, port)\n  }\n}\n\nForeverAgent.prototype.removeSocket = function(s, name, host, port) {\n  if (this.sockets[name]) {\n    var index = this.sockets[name].indexOf(s)\n    if (index !== -1) {\n      this.sockets[name].splice(index, 1)\n    }\n  } else if (this.sockets[name] && this.sockets[name].length === 0) {\n    // don't leak\n    delete this.sockets[name]\n    delete this.requests[name]\n  }\n  \n  if (this.freeSockets[name]) {\n    var index = this.freeSockets[name].indexOf(s)\n    if (index !== -1) {\n      this.freeSockets[name].splice(index, 1)\n      if (this.freeSockets[name].length === 0) {\n        delete this.freeSockets[name]\n      }\n    }\n  }\n\n  if (this.requests[name] && this.requests[name].length) {\n    // If we have pending requests and a socket gets closed a new one\n    // needs to be created to take over in the pool for the one that closed.\n    this.createSocket(name, host, port).emit('free')\n  }\n}\n\nfunction ForeverAgentSSL (options) {\n  ForeverAgent.call(this, options)\n}\nutil.inherits(ForeverAgentSSL, ForeverAgent)\n\nForeverAgentSSL.prototype.createConnection = createConnectionSSL\nForeverAgentSSL.prototype.addRequestNoreuse = AgentSSL.prototype.addRequest\n\nfunction createConnectionSSL (port, host, options) {\n  if (typeof port === 'object') {\n    options = port;\n  } else if (typeof host === 'object') {\n    options = host;\n  } else if (typeof options === 'object') {\n    options = options;\n  } else {\n    options = {};\n  }\n\n  if (typeof port === 'number') {\n    options.port = port;\n  }\n\n  if (typeof host === 'string') {\n    options.host = host;\n  }\n\n  return tls.connect(options);\n}\n","var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n  this.source = null;\n  this.dataSize = 0;\n  this.maxDataSize = 1024 * 1024;\n  this.pauseStream = true;\n\n  this._maxDataSizeExceeded = false;\n  this._released = false;\n  this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n  var delayedStream = new this();\n\n  options = options || {};\n  for (var option in options) {\n    delayedStream[option] = options[option];\n  }\n\n  delayedStream.source = source;\n\n  var realEmit = source.emit;\n  source.emit = function() {\n    delayedStream._handleEmit(arguments);\n    return realEmit.apply(source, arguments);\n  };\n\n  source.on('error', function() {});\n  if (delayedStream.pauseStream) {\n    source.pause();\n  }\n\n  return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n  configurable: true,\n  enumerable: true,\n  get: function() {\n    return this.source.readable;\n  }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n  return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n  if (!this._released) {\n    this.release();\n  }\n\n  this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n  this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n  this._released = true;\n\n  this._bufferedEvents.forEach(function(args) {\n    this.emit.apply(this, args);\n  }.bind(this));\n  this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n  var r = Stream.prototype.pipe.apply(this, arguments);\n  this.resume();\n  return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n  if (this._released) {\n    this.emit.apply(this, args);\n    return;\n  }\n\n  if (args[0] === 'data') {\n    this.dataSize += args[1].length;\n    this._checkIfMaxDataSizeExceeded();\n  }\n\n  this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n  if (this._maxDataSizeExceeded) {\n    return;\n  }\n\n  if (this.dataSize <= this.maxDataSize) {\n    return;\n  }\n\n  this._maxDataSizeExceeded = true;\n  var message =\n    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n  this.emit('error', new Error(message));\n};\n","var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n  this.writable = false;\n  this.readable = true;\n  this.dataSize = 0;\n  this.maxDataSize = 2 * 1024 * 1024;\n  this.pauseStreams = true;\n\n  this._released = false;\n  this._streams = [];\n  this._currentStream = null;\n  this._insideLoop = false;\n  this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n  var combinedStream = new this();\n\n  options = options || {};\n  for (var option in options) {\n    combinedStream[option] = options[option];\n  }\n\n  return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n  return (typeof stream !== 'function')\n    && (typeof stream !== 'string')\n    && (typeof stream !== 'boolean')\n    && (typeof stream !== 'number')\n    && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n  var isStreamLike = CombinedStream.isStreamLike(stream);\n\n  if (isStreamLike) {\n    if (!(stream instanceof DelayedStream)) {\n      var newStream = DelayedStream.create(stream, {\n        maxDataSize: Infinity,\n        pauseStream: this.pauseStreams,\n      });\n      stream.on('data', this._checkDataSize.bind(this));\n      stream = newStream;\n    }\n\n    this._handleErrors(stream);\n\n    if (this.pauseStreams) {\n      stream.pause();\n    }\n  }\n\n  this._streams.push(stream);\n  return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n  Stream.prototype.pipe.call(this, dest, options);\n  this.resume();\n  return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n  this._currentStream = null;\n\n  if (this._insideLoop) {\n    this._pendingNext = true;\n    return; // defer call\n  }\n\n  this._insideLoop = true;\n  try {\n    do {\n      this._pendingNext = false;\n      this._realGetNext();\n    } while (this._pendingNext);\n  } finally {\n    this._insideLoop = false;\n  }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n  var stream = this._streams.shift();\n\n\n  if (typeof stream == 'undefined') {\n    this.end();\n    return;\n  }\n\n  if (typeof stream !== 'function') {\n    this._pipeNext(stream);\n    return;\n  }\n\n  var getStream = stream;\n  getStream(function(stream) {\n    var isStreamLike = CombinedStream.isStreamLike(stream);\n    if (isStreamLike) {\n      stream.on('data', this._checkDataSize.bind(this));\n      this._handleErrors(stream);\n    }\n\n    this._pipeNext(stream);\n  }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n  this._currentStream = stream;\n\n  var isStreamLike = CombinedStream.isStreamLike(stream);\n  if (isStreamLike) {\n    stream.on('end', this._getNext.bind(this));\n    stream.pipe(this, {end: false});\n    return;\n  }\n\n  var value = stream;\n  this.write(value);\n  this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n  var self = this;\n  stream.on('error', function(err) {\n    self._emitError(err);\n  });\n};\n\nCombinedStream.prototype.write = function(data) {\n  this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n  if (!this.pauseStreams) {\n    return;\n  }\n\n  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n  this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n  if (!this._released) {\n    this._released = true;\n    this.writable = true;\n    this._getNext();\n  }\n\n  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n  this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n  this._reset();\n  this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n  this._reset();\n  this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n  this.writable = false;\n  this._streams = [];\n  this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n  this._updateDataSize();\n  if (this.dataSize <= this.maxDataSize) {\n    return;\n  }\n\n  var message =\n    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n  this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n  this.dataSize = 0;\n\n  var self = this;\n  this._streams.forEach(function(stream) {\n    if (!stream.dataSize) {\n      return;\n    }\n\n    self.dataSize += stream.dataSize;\n  });\n\n  if (this._currentStream && this._currentStream.dataSize) {\n    this.dataSize += this._currentStream.dataSize;\n  }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n  this._reset();\n  this.emit('error', err);\n};\n","module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n  var nextTick = typeof setImmediate == 'function'\n    ? setImmediate\n    : (\n      typeof process == 'object' && typeof process.nextTick == 'function'\n      ? process.nextTick\n      : null\n    );\n\n  if (nextTick)\n  {\n    nextTick(fn);\n  }\n  else\n  {\n    setTimeout(fn, 0);\n  }\n}\n","var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param   {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n  var isAsync = false;\n\n  // check if async happened\n  defer(function() { isAsync = true; });\n\n  return function async_callback(err, result)\n  {\n    if (isAsync)\n    {\n      callback(err, result);\n    }\n    else\n    {\n      defer(function nextTick_callback()\n      {\n        callback(err, result);\n      });\n    }\n  };\n}\n","// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n  Object.keys(state.jobs).forEach(clean.bind(state));\n\n  // reset leftover jobs\n  state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this  state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n  if (typeof this.jobs[key] == 'function')\n  {\n    this.jobs[key]();\n  }\n}\n","var async = require('./async.js')\n  , abort = require('./abort.js')\n  ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n  // store current index\n  var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n  state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n  {\n    // don't repeat yourself\n    // skip secondary callbacks\n    if (!(key in state.jobs))\n    {\n      return;\n    }\n\n    // clean up jobs\n    delete state.jobs[key];\n\n    if (error)\n    {\n      // don't process rest of the results\n      // stop still active jobs\n      // and reset the list\n      abort(state);\n    }\n    else\n    {\n      state.results[key] = output;\n    }\n\n    // return salvaged results\n    callback(error, state.results);\n  });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param   {function} iterator - iterator to invoke\n * @param   {string|number} key - key/index of the element in the list of jobs\n * @param   {mixed} item - job description\n * @param   {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n  var aborter;\n\n  // allow shortcut if iterator expects only two arguments\n  if (iterator.length == 2)\n  {\n    aborter = iterator(item, async(callback));\n  }\n  // otherwise go with full three arguments\n  else\n  {\n    aborter = iterator(item, key, async(callback));\n  }\n\n  return aborter;\n}\n","// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param   {array|object} list - list to iterate over\n * @param   {function|null} sortMethod - function to use for keys sort,\n *                                     or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n  var isNamedList = !Array.isArray(list)\n    , initState =\n    {\n      index    : 0,\n      keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n      jobs     : {},\n      results  : isNamedList ? {} : [],\n      size     : isNamedList ? Object.keys(list).length : list.length\n    }\n    ;\n\n  if (sortMethod)\n  {\n    // sort array keys based on it's values\n    // sort object's keys just on own merit\n    initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n    {\n      return sortMethod(list[a], list[b]);\n    });\n  }\n\n  return initState;\n}\n","var abort = require('./abort.js')\n  , async = require('./async.js')\n  ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this  AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n  if (!Object.keys(this.jobs).length)\n  {\n    return;\n  }\n\n  // fast forward iteration index\n  this.index = this.size;\n\n  // abort jobs\n  abort(this);\n\n  // send back results we have so far\n  async(callback)(null, this.results);\n}\n","var iterate    = require('./lib/iterate.js')\n  , initState  = require('./lib/state.js')\n  , terminator = require('./lib/terminator.js')\n  ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n  var state = initState(list);\n\n  while (state.index < (state['keyedList'] || list).length)\n  {\n    iterate(list, iterator, state, function(error, result)\n    {\n      if (error)\n      {\n        callback(error, result);\n        return;\n      }\n\n      // looks like it's the last one\n      if (Object.keys(state.jobs).length === 0)\n      {\n        callback(null, state.results);\n        return;\n      }\n    });\n\n    state.index++;\n  }\n\n  return terminator.bind(state, callback);\n}\n","var iterate    = require('./lib/iterate.js')\n  , initState  = require('./lib/state.js')\n  , terminator = require('./lib/terminator.js')\n  ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending  = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} sortMethod - custom sort function\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n  var state = initState(list, sortMethod);\n\n  iterate(list, iterator, state, function iteratorHandler(error, result)\n  {\n    if (error)\n    {\n      callback(error, result);\n      return;\n    }\n\n    state.index++;\n\n    // are we there yet?\n    if (state.index < (state['keyedList'] || list).length)\n    {\n      iterate(list, iterator, state, iteratorHandler);\n      return;\n    }\n\n    // done here\n    callback(null, state.results);\n  });\n\n  return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param   {mixed} a - an item to compare\n * @param   {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n  return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param   {mixed} a - an item to compare\n * @param   {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n  return -1 * ascending(a, b);\n}\n","var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n  return serialOrdered(list, iterator, null, callback);\n}\n","module.exports =\n{\n  parallel      : require('./parallel.js'),\n  serial        : require('./serial.js'),\n  serialOrdered : require('./serialOrdered.js')\n};\n","// populates missing values\nmodule.exports = function(dst, src) {\n\n  Object.keys(src).forEach(function(prop)\n  {\n    dst[prop] = dst[prop] || src[prop];\n  });\n\n  return dst;\n};\n","var CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar populate = require('./populate.js');\n\n// Public API\nmodule.exports = FormData;\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n  if (!(this instanceof FormData)) {\n    return new FormData(options);\n  }\n\n  this._overheadLength = 0;\n  this._valueLength = 0;\n  this._valuesToMeasure = [];\n\n  CombinedStream.call(this);\n\n  options = options || {};\n  for (var option in options) {\n    this[option] = options[option];\n  }\n}\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function(field, value, options) {\n\n  options = options || {};\n  value = value || '';\n\n  // allow filename as single option\n  if (typeof options == 'string') {\n    options = {filename: options};\n  }\n\n  var append = CombinedStream.prototype.append.bind(this);\n\n  // all that streamy business can't handle numbers\n  if (typeof value == 'number') {\n    value = '' + value;\n  }\n\n  // https://github.com/felixge/node-form-data/issues/38\n  if (util.isArray(value)) {\n    // Please convert your array into string\n    // the way web server expects it\n    this._error(new Error('Arrays are not supported.'));\n    return;\n  }\n\n  var header = this._multiPartHeader(field, value, options);\n  var footer = this._multiPartFooter();\n\n  append(header);\n  append(value);\n  append(footer);\n\n  // pass along options.knownLength\n  this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function(header, value, options) {\n  var valueLength = 0;\n\n  // used w/ getLengthSync(), when length is known.\n  // e.g. for streaming directly from a remote server,\n  // w/ a known file a size, and not wanting to wait for\n  // incoming file to finish to get its size.\n  if (options.knownLength != null) {\n    valueLength += +options.knownLength;\n  } else if (Buffer.isBuffer(value)) {\n    valueLength = value.length;\n  } else if (typeof value === 'string') {\n    valueLength = Buffer.byteLength(value);\n  }\n\n  this._valueLength += valueLength;\n\n  // @check why add CRLF? does this account for custom/multiple CRLFs?\n  this._overheadLength +=\n    Buffer.byteLength(header) +\n    FormData.LINE_BREAK.length;\n\n  // empty or either doesn't have path or not an http response\n  if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) {\n    return;\n  }\n\n  // no need to bother with the length\n  if (!options.knownLength) {\n    this._valuesToMeasure.push(value);\n  }\n};\n\nFormData.prototype._lengthRetriever = function(value, callback) {\n\n  if (value.hasOwnProperty('fd')) {\n\n    // take read range into a account\n    // `end` = Infinity –> read file till the end\n    //\n    // TODO: Looks like there is bug in Node fs.createReadStream\n    // it doesn't respect `end` options without `start` options\n    // Fix it when node fixes it.\n    // https://github.com/joyent/node/issues/7819\n    if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n\n      // when end specified\n      // no need to calculate range\n      // inclusive, starts with 0\n      callback(null, value.end + 1 - (value.start ? value.start : 0));\n\n    // not that fast snoopy\n    } else {\n      // still need to fetch file size from fs\n      fs.stat(value.path, function(err, stat) {\n\n        var fileSize;\n\n        if (err) {\n          callback(err);\n          return;\n        }\n\n        // update final size based on the range options\n        fileSize = stat.size - (value.start ? value.start : 0);\n        callback(null, fileSize);\n      });\n    }\n\n  // or http response\n  } else if (value.hasOwnProperty('httpVersion')) {\n    callback(null, +value.headers['content-length']);\n\n  // or request stream http://github.com/mikeal/request\n  } else if (value.hasOwnProperty('httpModule')) {\n    // wait till response come back\n    value.on('response', function(response) {\n      value.pause();\n      callback(null, +response.headers['content-length']);\n    });\n    value.resume();\n\n  // something else\n  } else {\n    callback('Unknown stream');\n  }\n};\n\nFormData.prototype._multiPartHeader = function(field, value, options) {\n  // custom header specified (as string)?\n  // it becomes responsible for boundary\n  // (e.g. to handle extra CRLFs on .NET servers)\n  if (typeof options.header == 'string') {\n    return options.header;\n  }\n\n  var contentDisposition = this._getContentDisposition(value, options);\n  var contentType = this._getContentType(value, options);\n\n  var contents = '';\n  var headers  = {\n    // add custom disposition as third element or keep it two elements if not\n    'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n    // if no content type. allow it to be empty array\n    'Content-Type': [].concat(contentType || [])\n  };\n\n  // allow custom headers.\n  if (typeof options.header == 'object') {\n    populate(headers, options.header);\n  }\n\n  var header;\n  for (var prop in headers) {\n    if (!headers.hasOwnProperty(prop)) continue;\n    header = headers[prop];\n\n    // skip nullish headers.\n    if (header == null) {\n      continue;\n    }\n\n    // convert all headers to arrays.\n    if (!Array.isArray(header)) {\n      header = [header];\n    }\n\n    // add non-empty headers.\n    if (header.length) {\n      contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n    }\n  }\n\n  return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._encodeHeaderParam = function(str, lang) {\n  if (!lang || typeof lang !== 'string') {\n    lang = '';\n  }\n\n  // taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\n  // @note see RFC 8187\n  // @todo use postman-urlencoder instead of encodeURIComponent for consistency\n  return 'UTF-8\\'' + lang + '\\'' + encodeURIComponent(str).\n    // Note that although RFC3986 reserves \"!\", RFC8187 does not,\n    // so we do not need to escape it\n    replace(/['()*]/g, function(c) {\n      return '%' + c.charCodeAt(0).toString(16);\n    }).\n    // The following are not required for percent-encoding per RFC8187,\n    // so we can allow for a little better readability over the wire: |`^\n    replace(/%(?:7C|60|5E)/g, unescape);\n};\n\nFormData.prototype._getContentDisposition = function(value, options) {\n\n  var filename\n    , contentDisposition = []\n    , NON_ASCII_REGEX = /[^\\t\\x20-\\x7e\\x80-\\xff]/\n    ;\n\n  if (typeof options.filepath === 'string') {\n    // custom filepath for relative paths\n    filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n  } else if (typeof options.filename === 'string') {\n    // custom filename take precedence\n    filename = path.basename(options.filename);\n  } else if (value && (value.name || value.path)) {\n    // formidable and the browser add a name property\n    // fs- and request- streams have path property\n    filename = path.basename(value.name || value.path);\n  } else if (value && value.readable && value.hasOwnProperty('httpVersion')) {\n    // or try http response\n    filename = path.basename(value.client._httpMessage.path || '');\n  }\n\n  // bail if no valid filename\n  if (typeof filename !== 'string') {\n    return;\n  }\n\n  contentDisposition.push('filename=\"' + filename + '\"');\n\n  // add \"filename*\" param if filename is not in ASCII\n  if (NON_ASCII_REGEX.test(filename)) {\n    contentDisposition.push('filename*=' + this._encodeHeaderParam(filename));\n  }\n\n  return contentDisposition;\n};\n\nFormData.prototype._getContentType = function(value, options) {\n\n  // use custom content-type above all\n  var contentType = options.contentType;\n\n  // or try `name` from formidable, browser\n  if (!contentType && value && value.name) {\n    contentType = mime.lookup(value.name);\n  }\n\n  // or try `path` from fs-, request- streams\n  if (!contentType && value && value.path) {\n    contentType = mime.lookup(value.path);\n  }\n\n  // or if it's http-reponse\n  if (!contentType && value && value.readable && value.hasOwnProperty('httpVersion')) {\n    contentType = value.headers['content-type'];\n  }\n\n  // or guess it from the filepath or filename\n  if (!contentType && (options.filepath || options.filename)) {\n    contentType = mime.lookup(options.filepath || options.filename);\n  }\n\n  // fallback to the default content type if `value` is not simple value\n  if (!contentType && typeof value == 'object') {\n    contentType = FormData.DEFAULT_CONTENT_TYPE;\n  }\n\n  return contentType;\n};\n\nFormData.prototype._multiPartFooter = function() {\n  return function(next) {\n    var footer = FormData.LINE_BREAK;\n\n    var lastPart = (this._streams.length === 0);\n    if (lastPart) {\n      footer += this._lastBoundary();\n    }\n\n    next(footer);\n  }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function() {\n  return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function(userHeaders) {\n  var header;\n  var formHeaders = {\n    'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n  };\n\n  for (header in userHeaders) {\n    if (userHeaders.hasOwnProperty(header)) {\n      formHeaders[header.toLowerCase()] = userHeaders[header];\n    }\n  }\n\n  return formHeaders;\n};\n\nFormData.prototype.getBoundary = function() {\n  if (!this._boundary) {\n    this._generateBoundary();\n  }\n\n  return this._boundary;\n};\n\nFormData.prototype.getBuffer = function() {\n  var dataBuffer = new Buffer.alloc( 0 );\n  var boundary = this.getBoundary();\n\n  // Create the form content. Add Line breaks to the end of data.\n  for (var i = 0, len = this._streams.length; i < len; i++) {\n    if (typeof this._streams[i] !== 'function') {\n\n      // Add content to the buffer.\n      if(Buffer.isBuffer(this._streams[i])) {\n        dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);\n      }else {\n        dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);\n      }\n\n      // Add break after content.\n      if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {\n        dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );\n      }\n    }\n  }\n\n  // Add the footer and return the Buffer object.\n  return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );\n};\n\nFormData.prototype._generateBoundary = function() {\n  // This generates a 50 character boundary similar to those used by Firefox.\n  // They are optimized for boyer-moore parsing.\n  var boundary = '--------------------------';\n  for (var i = 0; i < 24; i++) {\n    boundary += Math.floor(Math.random() * 10).toString(16);\n  }\n\n  this._boundary = boundary;\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually\n// and add it as knownLength option\nFormData.prototype.getLengthSync = function() {\n  var knownLength = this._overheadLength + this._valueLength;\n\n  // Don't get confused, there are 3 \"internal\" streams for each keyval pair\n  // so it basically checks if there is any value added to the form\n  if (this._streams.length) {\n    knownLength += this._lastBoundary().length;\n  }\n\n  // https://github.com/form-data/form-data/issues/40\n  if (!this.hasKnownLength()) {\n    // Some async length retrievers are present\n    // therefore synchronous length calculation is false.\n    // Please use getLength(callback) to get proper length\n    this._error(new Error('Cannot calculate proper length in synchronous way.'));\n  }\n\n  return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function() {\n  var hasKnownLength = true;\n\n  if (this._valuesToMeasure.length) {\n    hasKnownLength = false;\n  }\n\n  return hasKnownLength;\n};\n\nFormData.prototype.getLength = function(cb) {\n  var knownLength = this._overheadLength + this._valueLength;\n\n  if (this._streams.length) {\n    knownLength += this._lastBoundary().length;\n  }\n\n  if (!this._valuesToMeasure.length) {\n    process.nextTick(cb.bind(this, null, knownLength));\n    return;\n  }\n\n  asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n    if (err) {\n      cb(err);\n      return;\n    }\n\n    values.forEach(function(length) {\n      knownLength += length;\n    });\n\n    cb(null, knownLength);\n  });\n};\n\nFormData.prototype.submit = function(params, cb) {\n  var request\n    , options\n    , defaults = {method: 'post'}\n    ;\n\n  // parse provided url if it's string\n  // or treat it as options object\n  if (typeof params == 'string') {\n\n    params = parseUrl(params);\n    options = populate({\n      port: params.port,\n      path: params.pathname,\n      host: params.hostname,\n      protocol: params.protocol\n    }, defaults);\n\n  // use custom params\n  } else {\n\n    options = populate(params, defaults);\n    // if no port provided use default one\n    if (!options.port) {\n      options.port = options.protocol == 'https:' ? 443 : 80;\n    }\n  }\n\n  // put that good code in getHeaders to some use\n  options.headers = this.getHeaders(params.headers);\n\n  // https if specified, fallback to http in any other case\n  if (options.protocol == 'https:') {\n    request = https.request(options);\n  } else {\n    request = http.request(options);\n  }\n\n  // get content length and fire away\n  this.getLength(function(err, length) {\n    if (err) {\n      this._error(err);\n      return;\n    }\n\n    // add content length\n    request.setHeader('Content-Length', length);\n\n    this.pipe(request);\n    if (cb) {\n      var onResponse;\n\n      var callback = function (error, responce) {\n        request.removeListener('error', callback);\n        request.removeListener('response', onResponse);\n\n        return cb.call(this, error, responce);\n      };\n\n      onResponse = callback.bind(this, null);\n\n      request.on('error', callback);\n      request.on('response', onResponse);\n    }\n  }.bind(this));\n\n  return request;\n};\n\nFormData.prototype._error = function(err) {\n  if (!this.error) {\n    this.error = err;\n    this.pause();\n    this.emit('error', err);\n  }\n};\n\nFormData.prototype.toString = function () {\n  return '[object FormData]';\n};\n","var stream = require('stream')\n\n\nfunction isStream (obj) {\n  return obj instanceof stream.Stream\n}\n\n\nfunction isReadable (obj) {\n  return isStream(obj) && typeof obj._read == 'function' && typeof obj._readableState == 'object'\n}\n\n\nfunction isWritable (obj) {\n  return isStream(obj) && typeof obj._write == 'function' && typeof obj._writableState == 'object'\n}\n\n\nfunction isDuplex (obj) {\n  return isReadable(obj) && isWritable(obj)\n}\n\n\nmodule.exports            = isStream\nmodule.exports.isReadable = isReadable\nmodule.exports.isWritable = isWritable\nmodule.exports.isDuplex   = isDuplex\n","var isES5 = (function(){\n    \"use strict\";\n    return this === undefined;\n})();\n\nif (isES5) {\n    module.exports = {\n        freeze: Object.freeze,\n        defineProperty: Object.defineProperty,\n        getDescriptor: Object.getOwnPropertyDescriptor,\n        keys: Object.keys,\n        names: Object.getOwnPropertyNames,\n        getPrototypeOf: Object.getPrototypeOf,\n        isArray: Array.isArray,\n        isES5: isES5,\n        propertyIsWritable: function(obj, prop) {\n            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n            return !!(!descriptor || descriptor.writable || descriptor.set);\n        }\n    };\n} else {\n    var has = {}.hasOwnProperty;\n    var str = {}.toString;\n    var proto = {}.constructor.prototype;\n\n    var ObjectKeys = function (o) {\n        var ret = [];\n        for (var key in o) {\n            if (has.call(o, key)) {\n                ret.push(key);\n            }\n        }\n        return ret;\n    };\n\n    var ObjectGetDescriptor = function(o, key) {\n        return {value: o[key]};\n    };\n\n    var ObjectDefineProperty = function (o, key, desc) {\n        o[key] = desc.value;\n        return o;\n    };\n\n    var ObjectFreeze = function (obj) {\n        return obj;\n    };\n\n    var ObjectGetPrototypeOf = function (obj) {\n        try {\n            return Object(obj).constructor.prototype;\n        }\n        catch (e) {\n            return proto;\n        }\n    };\n\n    var ArrayIsArray = function (obj) {\n        try {\n            return str.call(obj) === \"[object Array]\";\n        }\n        catch(e) {\n            return false;\n        }\n    };\n\n    module.exports = {\n        isArray: ArrayIsArray,\n        keys: ObjectKeys,\n        names: ObjectKeys,\n        defineProperty: ObjectDefineProperty,\n        getDescriptor: ObjectGetDescriptor,\n        freeze: ObjectFreeze,\n        getPrototypeOf: ObjectGetPrototypeOf,\n        isES5: isES5,\n        propertyIsWritable: function() {\n            return true;\n        }\n    };\n}\n","\"use strict\";\nvar es5 = require(\"./es5.js\");\nvar canEvaluate = typeof navigator == \"undefined\";\nvar haveGetters = (function(){\n    try {\n        var o = {};\n        es5.defineProperty(o, \"f\", {\n            get: function () {\n                return 3;\n            }\n        });\n        return o.f === 3;\n    }\n    catch (e) {\n        return false;\n    }\n\n})();\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nfunction tryCatcher() {\n    try {\n        var target = tryCatchTarget;\n        tryCatchTarget = null;\n        return target.apply(this, arguments);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n    var hasProp = {}.hasOwnProperty;\n\n    function T() {\n        this.constructor = Child;\n        this.constructor$ = Parent;\n        for (var propertyName in Parent.prototype) {\n            if (hasProp.call(Parent.prototype, propertyName) &&\n                propertyName.charAt(propertyName.length-1) !== \"$\"\n           ) {\n                this[propertyName + \"$\"] = Parent.prototype[propertyName];\n            }\n        }\n    }\n    T.prototype = Parent.prototype;\n    Child.prototype = new T();\n    return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n    return val == null || val === true || val === false ||\n        typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n    return !isPrimitive(value);\n}\n\nfunction maybeWrapAsError(maybeError) {\n    if (!isPrimitive(maybeError)) return maybeError;\n\n    return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n    var len = target.length;\n    var ret = new Array(len + 1);\n    var i;\n    for (i = 0; i < len; ++i) {\n        ret[i] = target[i];\n    }\n    ret[i] = appendee;\n    return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n    if (es5.isES5) {\n        var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n        if (desc != null) {\n            return desc.get == null && desc.set == null\n                    ? desc.value\n                    : defaultValue;\n        }\n    } else {\n        return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n    }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n    if (isPrimitive(obj)) return obj;\n    var descriptor = {\n        value: value,\n        configurable: true,\n        enumerable: false,\n        writable: true\n    };\n    es5.defineProperty(obj, name, descriptor);\n    return obj;\n}\n\nfunction thrower(r) {\n    throw r;\n}\n\nvar inheritedDataKeys = (function() {\n    var excludedPrototypes = [\n        Array.prototype,\n        Object.prototype,\n        Function.prototype\n    ];\n\n    var isExcludedProto = function(val) {\n        for (var i = 0; i < excludedPrototypes.length; ++i) {\n            if (excludedPrototypes[i] === val) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    if (es5.isES5) {\n        var getKeys = Object.getOwnPropertyNames;\n        return function(obj) {\n            var ret = [];\n            var visitedKeys = Object.create(null);\n            while (obj != null && !isExcludedProto(obj)) {\n                var keys;\n                try {\n                    keys = getKeys(obj);\n                } catch (e) {\n                    return ret;\n                }\n                for (var i = 0; i < keys.length; ++i) {\n                    var key = keys[i];\n                    if (visitedKeys[key]) continue;\n                    visitedKeys[key] = true;\n                    var desc = Object.getOwnPropertyDescriptor(obj, key);\n                    if (desc != null && desc.get == null && desc.set == null) {\n                        ret.push(key);\n                    }\n                }\n                obj = es5.getPrototypeOf(obj);\n            }\n            return ret;\n        };\n    } else {\n        var hasProp = {}.hasOwnProperty;\n        return function(obj) {\n            if (isExcludedProto(obj)) return [];\n            var ret = [];\n\n            /*jshint forin:false */\n            enumeration: for (var key in obj) {\n                if (hasProp.call(obj, key)) {\n                    ret.push(key);\n                } else {\n                    for (var i = 0; i < excludedPrototypes.length; ++i) {\n                        if (hasProp.call(excludedPrototypes[i], key)) {\n                            continue enumeration;\n                        }\n                    }\n                    ret.push(key);\n                }\n            }\n            return ret;\n        };\n    }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n    try {\n        if (typeof fn === \"function\") {\n            var keys = es5.names(fn.prototype);\n\n            var hasMethods = es5.isES5 && keys.length > 1;\n            var hasMethodsOtherThanConstructor = keys.length > 0 &&\n                !(keys.length === 1 && keys[0] === \"constructor\");\n            var hasThisAssignmentAndStaticMethods =\n                thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n            if (hasMethods || hasMethodsOtherThanConstructor ||\n                hasThisAssignmentAndStaticMethods) {\n                return true;\n            }\n        }\n        return false;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction toFastProperties(obj) {\n    /*jshint -W027,-W055,-W031*/\n    function f() {}\n    f.prototype = obj;\n    var l = 8;\n    while (l--) new f();\n    return obj;\n    eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n    return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n    var ret = new Array(count);\n    for(var i = 0; i < count; ++i) {\n        ret[i] = prefix + i + suffix;\n    }\n    return ret;\n}\n\nfunction safeToString(obj) {\n    try {\n        return obj + \"\";\n    } catch (e) {\n        return \"[no string representation]\";\n    }\n}\n\nfunction markAsOriginatingFromRejection(e) {\n    try {\n        notEnumerableProp(e, \"isOperational\", true);\n    }\n    catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n    if (e == null) return false;\n    return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n        e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n    return obj instanceof Error && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n    if (!(\"stack\" in new Error())) {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            try {throw new Error(safeToString(value));}\n            catch(err) {return err;}\n        };\n    } else {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            return new Error(safeToString(value));\n        };\n    }\n})();\n\nfunction classString(obj) {\n    return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n    var keys = es5.names(from);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        if (filter(key)) {\n            try {\n                es5.defineProperty(to, key, es5.getDescriptor(from, key));\n            } catch (ignore) {}\n        }\n    }\n}\n\nvar ret = {\n    isClass: isClass,\n    isIdentifier: isIdentifier,\n    inheritedDataKeys: inheritedDataKeys,\n    getDataPropertyOrDefault: getDataPropertyOrDefault,\n    thrower: thrower,\n    isArray: es5.isArray,\n    haveGetters: haveGetters,\n    notEnumerableProp: notEnumerableProp,\n    isPrimitive: isPrimitive,\n    isObject: isObject,\n    canEvaluate: canEvaluate,\n    errorObj: errorObj,\n    tryCatch: tryCatch,\n    inherits: inherits,\n    withAppended: withAppended,\n    maybeWrapAsError: maybeWrapAsError,\n    toFastProperties: toFastProperties,\n    filledRange: filledRange,\n    toString: safeToString,\n    canAttachTrace: canAttachTrace,\n    ensureErrorObject: ensureErrorObject,\n    originatesFromRejection: originatesFromRejection,\n    markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n    classString: classString,\n    copyDescriptors: copyDescriptors,\n    hasDevTools: typeof chrome !== \"undefined\" && chrome &&\n                 typeof chrome.loadTimes === \"function\",\n    isNode: typeof process !== \"undefined\" &&\n        classString(process).toLowerCase() === \"[object process]\"\n};\nret.isRecentNode = ret.isNode && (function() {\n    var version = process.versions.node.split(\".\").map(Number);\n    return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n","\"use strict\";\nvar schedule;\nvar util = require(\"./util\");\nvar noAsyncScheduler = function() {\n    throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/m3OTXk\\u000a\");\n};\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n    var GlobalSetImmediate = global.setImmediate;\n    var ProcessNextTick = process.nextTick;\n    schedule = util.isRecentNode\n                ? function(fn) { GlobalSetImmediate.call(global, fn); }\n                : function(fn) { ProcessNextTick.call(process, fn); };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n          !(typeof window !== \"undefined\" &&\n            window.navigator &&\n            window.navigator.standalone)) {\n    schedule = function(fn) {\n        var div = document.createElement(\"div\");\n        var observer = new MutationObserver(fn);\n        observer.observe(div, {attributes: true});\n        return function() { div.classList.toggle(\"foo\"); };\n    };\n    schedule.isStatic = true;\n} else if (typeof setImmediate !== \"undefined\") {\n    schedule = function (fn) {\n        setImmediate(fn);\n    };\n} else if (typeof setTimeout !== \"undefined\") {\n    schedule = function (fn) {\n        setTimeout(fn, 0);\n    };\n} else {\n    schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n","\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n    for (var j = 0; j < len; ++j) {\n        dst[j + dstIndex] = src[j + srcIndex];\n        src[j + srcIndex] = void 0;\n    }\n}\n\nfunction Queue(capacity) {\n    this._capacity = capacity;\n    this._length = 0;\n    this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n    return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n    var length = this.length();\n    this._checkCapacity(length + 1);\n    var i = (this._front + length) & (this._capacity - 1);\n    this[i] = arg;\n    this._length = length + 1;\n};\n\nQueue.prototype._unshiftOne = function(value) {\n    var capacity = this._capacity;\n    this._checkCapacity(this.length() + 1);\n    var front = this._front;\n    var i = (((( front - 1 ) &\n                    ( capacity - 1) ) ^ capacity ) - capacity );\n    this[i] = value;\n    this._front = i;\n    this._length = this.length() + 1;\n};\n\nQueue.prototype.unshift = function(fn, receiver, arg) {\n    this._unshiftOne(arg);\n    this._unshiftOne(receiver);\n    this._unshiftOne(fn);\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n    var length = this.length() + 3;\n    if (this._willBeOverCapacity(length)) {\n        this._pushOne(fn);\n        this._pushOne(receiver);\n        this._pushOne(arg);\n        return;\n    }\n    var j = this._front + length - 3;\n    this._checkCapacity(length);\n    var wrapMask = this._capacity - 1;\n    this[(j + 0) & wrapMask] = fn;\n    this[(j + 1) & wrapMask] = receiver;\n    this[(j + 2) & wrapMask] = arg;\n    this._length = length;\n};\n\nQueue.prototype.shift = function () {\n    var front = this._front,\n        ret = this[front];\n\n    this[front] = undefined;\n    this._front = (front + 1) & (this._capacity - 1);\n    this._length--;\n    return ret;\n};\n\nQueue.prototype.length = function () {\n    return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n    if (this._capacity < size) {\n        this._resizeTo(this._capacity << 1);\n    }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n    var oldCapacity = this._capacity;\n    this._capacity = capacity;\n    var front = this._front;\n    var length = this._length;\n    var moveItemsCount = (front + length) & (oldCapacity - 1);\n    arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n","\"use strict\";\nvar firstLineError;\ntry {throw new Error(); } catch (e) {firstLineError = e;}\nvar schedule = require(\"./schedule.js\");\nvar Queue = require(\"./queue.js\");\nvar util = require(\"./util.js\");\n\nfunction Async() {\n    this._isTickUsed = false;\n    this._lateQueue = new Queue(16);\n    this._normalQueue = new Queue(16);\n    this._trampolineEnabled = true;\n    var self = this;\n    this.drainQueues = function () {\n        self._drainQueues();\n    };\n    this._schedule =\n        schedule.isStatic ? schedule(this.drainQueues) : schedule;\n}\n\nAsync.prototype.disableTrampolineIfNecessary = function() {\n    if (util.hasDevTools) {\n        this._trampolineEnabled = false;\n    }\n};\n\nAsync.prototype.enableTrampoline = function() {\n    if (!this._trampolineEnabled) {\n        this._trampolineEnabled = true;\n        this._schedule = function(fn) {\n            setTimeout(fn, 0);\n        };\n    }\n};\n\nAsync.prototype.haveItemsQueued = function () {\n    return this._normalQueue.length() > 0;\n};\n\nAsync.prototype.throwLater = function(fn, arg) {\n    if (arguments.length === 1) {\n        arg = fn;\n        fn = function () { throw arg; };\n    }\n    if (typeof setTimeout !== \"undefined\") {\n        setTimeout(function() {\n            fn(arg);\n        }, 0);\n    } else try {\n        this._schedule(function() {\n            fn(arg);\n        });\n    } catch (e) {\n        throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/m3OTXk\\u000a\");\n    }\n};\n\nfunction AsyncInvokeLater(fn, receiver, arg) {\n    this._lateQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncInvoke(fn, receiver, arg) {\n    this._normalQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncSettlePromises(promise) {\n    this._normalQueue._pushOne(promise);\n    this._queueTick();\n}\n\nif (!util.hasDevTools) {\n    Async.prototype.invokeLater = AsyncInvokeLater;\n    Async.prototype.invoke = AsyncInvoke;\n    Async.prototype.settlePromises = AsyncSettlePromises;\n} else {\n    if (schedule.isStatic) {\n        schedule = function(fn) { setTimeout(fn, 0); };\n    }\n    Async.prototype.invokeLater = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvokeLater.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                setTimeout(function() {\n                    fn.call(receiver, arg);\n                }, 100);\n            });\n        }\n    };\n\n    Async.prototype.invoke = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvoke.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                fn.call(receiver, arg);\n            });\n        }\n    };\n\n    Async.prototype.settlePromises = function(promise) {\n        if (this._trampolineEnabled) {\n            AsyncSettlePromises.call(this, promise);\n        } else {\n            this._schedule(function() {\n                promise._settlePromises();\n            });\n        }\n    };\n}\n\nAsync.prototype.invokeFirst = function (fn, receiver, arg) {\n    this._normalQueue.unshift(fn, receiver, arg);\n    this._queueTick();\n};\n\nAsync.prototype._drainQueue = function(queue) {\n    while (queue.length() > 0) {\n        var fn = queue.shift();\n        if (typeof fn !== \"function\") {\n            fn._settlePromises();\n            continue;\n        }\n        var receiver = queue.shift();\n        var arg = queue.shift();\n        fn.call(receiver, arg);\n    }\n};\n\nAsync.prototype._drainQueues = function () {\n    this._drainQueue(this._normalQueue);\n    this._reset();\n    this._drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n    if (!this._isTickUsed) {\n        this._isTickUsed = true;\n        this._schedule(this.drainQueues);\n    }\n};\n\nAsync.prototype._reset = function () {\n    this._isTickUsed = false;\n};\n\nmodule.exports = new Async();\nmodule.exports.firstLineError = firstLineError;\n","\"use strict\";\nvar es5 = require(\"./es5.js\");\nvar Objectfreeze = es5.freeze;\nvar util = require(\"./util.js\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n    function SubError(message) {\n        if (!(this instanceof SubError)) return new SubError(message);\n        notEnumerableProp(this, \"message\",\n            typeof message === \"string\" ? message : defaultMessage);\n        notEnumerableProp(this, \"name\", nameProperty);\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        } else {\n            Error.call(this);\n        }\n    }\n    inherits(SubError, Error);\n    return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n    _TypeError = TypeError;\n    _RangeError = RangeError;\n} catch(e) {\n    _TypeError = subError(\"TypeError\", \"type error\");\n    _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n    \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n    if (typeof Array.prototype[methods[i]] === \"function\") {\n        AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n    }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n    value: 0,\n    configurable: false,\n    writable: true,\n    enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n    var indent = Array(level * 4 + 1).join(\" \");\n    var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n    level++;\n    indent = Array(level * 4 + 1).join(\" \");\n    for (var i = 0; i < this.length; ++i) {\n        var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n        var lines = str.split(\"\\n\");\n        for (var j = 0; j < lines.length; ++j) {\n            lines[j] = indent + lines[j];\n        }\n        str = lines.join(\"\\n\");\n        ret += str + \"\\n\";\n    }\n    level--;\n    return ret;\n};\n\nfunction OperationalError(message) {\n    if (!(this instanceof OperationalError))\n        return new OperationalError(message);\n    notEnumerableProp(this, \"name\", \"OperationalError\");\n    notEnumerableProp(this, \"message\", message);\n    this.cause = message;\n    this[\"isOperational\"] = true;\n\n    if (message instanceof Error) {\n        notEnumerableProp(this, \"message\", message.message);\n        notEnumerableProp(this, \"stack\", message.stack);\n    } else if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, this.constructor);\n    }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n    errorTypes = Objectfreeze({\n        CancellationError: CancellationError,\n        TimeoutError: TimeoutError,\n        OperationalError: OperationalError,\n        RejectionError: OperationalError,\n        AggregateError: AggregateError\n    });\n    notEnumerableProp(Error, \"__BluebirdErrorTypes__\", errorTypes);\n}\n\nmodule.exports = {\n    Error: Error,\n    TypeError: _TypeError,\n    RangeError: _RangeError,\n    CancellationError: errorTypes.CancellationError,\n    OperationalError: errorTypes.OperationalError,\n    TimeoutError: errorTypes.TimeoutError,\n    AggregateError: errorTypes.AggregateError,\n    Warning: Warning\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = require(\"./util.js\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n    if (isObject(obj)) {\n        if (obj instanceof Promise) {\n            return obj;\n        }\n        else if (isAnyBluebirdPromise(obj)) {\n            var ret = new Promise(INTERNAL);\n            obj._then(\n                ret._fulfillUnchecked,\n                ret._rejectUncheckedCheckError,\n                ret._progressUnchecked,\n                ret,\n                null\n            );\n            return ret;\n        }\n        var then = util.tryCatch(getThen)(obj);\n        if (then === errorObj) {\n            if (context) context._pushContext();\n            var ret = Promise.reject(then.e);\n            if (context) context._popContext();\n            return ret;\n        } else if (typeof then === \"function\") {\n            return doThenable(obj, then, context);\n        }\n    }\n    return obj;\n}\n\nfunction getThen(obj) {\n    return obj.then;\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n    return hasProp.call(obj, \"_promise0\");\n}\n\nfunction doThenable(x, then, context) {\n    var promise = new Promise(INTERNAL);\n    var ret = promise;\n    if (context) context._pushContext();\n    promise._captureStackTrace();\n    if (context) context._popContext();\n    var synchronous = true;\n    var result = util.tryCatch(then).call(x,\n                                        resolveFromThenable,\n                                        rejectFromThenable,\n                                        progressFromThenable);\n    synchronous = false;\n    if (promise && result === errorObj) {\n        promise._rejectCallback(result.e, true, true);\n        promise = null;\n    }\n\n    function resolveFromThenable(value) {\n        if (!promise) return;\n        promise._resolveCallback(value);\n        promise = null;\n    }\n\n    function rejectFromThenable(reason) {\n        if (!promise) return;\n        promise._rejectCallback(reason, synchronous, true);\n        promise = null;\n    }\n\n    function progressFromThenable(value) {\n        if (!promise) return;\n        if (typeof promise._progress === \"function\") {\n            promise._progress(value);\n        }\n    }\n    return ret;\n}\n\nreturn tryConvertToPromise;\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n    apiRejection) {\nvar util = require(\"./util.js\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n    switch(val) {\n    case -2: return [];\n    case -3: return {};\n    }\n}\n\nfunction PromiseArray(values) {\n    var promise = this._promise = new Promise(INTERNAL);\n    var parent;\n    if (values instanceof Promise) {\n        parent = values;\n        promise._propagateFrom(parent, 1 | 4);\n    }\n    this._values = values;\n    this._length = 0;\n    this._totalResolved = 0;\n    this._init(undefined, -2);\n}\nPromiseArray.prototype.length = function () {\n    return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n    var values = tryConvertToPromise(this._values, this._promise);\n    if (values instanceof Promise) {\n        values = values._target();\n        this._values = values;\n        if (values._isFulfilled()) {\n            values = values._value();\n            if (!isArray(values)) {\n                var err = new Promise.TypeError(\"expecting an array, a promise or a thenable\\u000a\\u000a    See http://goo.gl/s8MMhc\\u000a\");\n                this.__hardReject__(err);\n                return;\n            }\n        } else if (values._isPending()) {\n            values._then(\n                init,\n                this._reject,\n                undefined,\n                this,\n                resolveValueIfEmpty\n           );\n            return;\n        } else {\n            this._reject(values._reason());\n            return;\n        }\n    } else if (!isArray(values)) {\n        this._promise._reject(apiRejection(\"expecting an array, a promise or a thenable\\u000a\\u000a    See http://goo.gl/s8MMhc\\u000a\")._reason());\n        return;\n    }\n\n    if (values.length === 0) {\n        if (resolveValueIfEmpty === -5) {\n            this._resolveEmptyArray();\n        }\n        else {\n            this._resolve(toResolutionValue(resolveValueIfEmpty));\n        }\n        return;\n    }\n    var len = this.getActualLength(values.length);\n    this._length = len;\n    this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n    var promise = this._promise;\n    for (var i = 0; i < len; ++i) {\n        var isResolved = this._isResolved();\n        var maybePromise = tryConvertToPromise(values[i], promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            if (isResolved) {\n                maybePromise._ignoreRejections();\n            } else if (maybePromise._isPending()) {\n                maybePromise._proxyPromiseArray(this, i);\n            } else if (maybePromise._isFulfilled()) {\n                this._promiseFulfilled(maybePromise._value(), i);\n            } else {\n                this._promiseRejected(maybePromise._reason(), i);\n            }\n        } else if (!isResolved) {\n            this._promiseFulfilled(maybePromise, i);\n        }\n    }\n};\n\nPromiseArray.prototype._isResolved = function () {\n    return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n    this._values = null;\n    this._promise._fulfill(value);\n};\n\nPromiseArray.prototype.__hardReject__ =\nPromiseArray.prototype._reject = function (reason) {\n    this._values = null;\n    this._promise._rejectCallback(reason, false, true);\n};\n\nPromiseArray.prototype._promiseProgressed = function (progressValue, index) {\n    this._promise._progress({\n        index: index,\n        value: progressValue\n    });\n};\n\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n    }\n};\n\nPromiseArray.prototype._promiseRejected = function (reason, index) {\n    this._totalResolved++;\n    this._reject(reason);\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n    return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n    return len;\n};\n\nreturn PromiseArray;\n};\n","\"use strict\";\nmodule.exports = function() {\nvar async = require(\"./async.js\");\nvar util = require(\"./util.js\");\nvar bluebirdFramePattern =\n    /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](main|debug|zalgo|instrumented)/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar warn;\n\nfunction CapturedTrace(parent) {\n    this._parent = parent;\n    var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n    captureStackTrace(this, CapturedTrace);\n    if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\n\nCapturedTrace.prototype.uncycle = function() {\n    var length = this._length;\n    if (length < 2) return;\n    var nodes = [];\n    var stackToIndex = {};\n\n    for (var i = 0, node = this; node !== undefined; ++i) {\n        nodes.push(node);\n        node = node._parent;\n    }\n    length = this._length = i;\n    for (var i = length - 1; i >= 0; --i) {\n        var stack = nodes[i].stack;\n        if (stackToIndex[stack] === undefined) {\n            stackToIndex[stack] = i;\n        }\n    }\n    for (var i = 0; i < length; ++i) {\n        var currentStack = nodes[i].stack;\n        var index = stackToIndex[currentStack];\n        if (index !== undefined && index !== i) {\n            if (index > 0) {\n                nodes[index - 1]._parent = undefined;\n                nodes[index - 1]._length = 1;\n            }\n            nodes[i]._parent = undefined;\n            nodes[i]._length = 1;\n            var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n            if (index < length - 1) {\n                cycleEdgeNode._parent = nodes[index + 1];\n                cycleEdgeNode._parent.uncycle();\n                cycleEdgeNode._length =\n                    cycleEdgeNode._parent._length + 1;\n            } else {\n                cycleEdgeNode._parent = undefined;\n                cycleEdgeNode._length = 1;\n            }\n            var currentChildLength = cycleEdgeNode._length + 1;\n            for (var j = i - 2; j >= 0; --j) {\n                nodes[j]._length = currentChildLength;\n                currentChildLength++;\n            }\n            return;\n        }\n    }\n};\n\nCapturedTrace.prototype.parent = function() {\n    return this._parent;\n};\n\nCapturedTrace.prototype.hasParent = function() {\n    return this._parent !== undefined;\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n    if (error.__stackCleaned__) return;\n    this.uncycle();\n    var parsed = CapturedTrace.parseStackAndMessage(error);\n    var message = parsed.message;\n    var stacks = [parsed.stack];\n\n    var trace = this;\n    while (trace !== undefined) {\n        stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n        trace = trace._parent;\n    }\n    removeCommonRoots(stacks);\n    removeDuplicateOrEmptyJumps(stacks);\n    util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n    util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nfunction reconstructStack(message, stacks) {\n    for (var i = 0; i < stacks.length - 1; ++i) {\n        stacks[i].push(\"From previous event:\");\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    if (i < stacks.length) {\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n    for (var i = 0; i < stacks.length; ++i) {\n        if (stacks[i].length === 0 ||\n            ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n            stacks.splice(i, 1);\n            i--;\n        }\n    }\n}\n\nfunction removeCommonRoots(stacks) {\n    var current = stacks[0];\n    for (var i = 1; i < stacks.length; ++i) {\n        var prev = stacks[i];\n        var currentLastIndex = current.length - 1;\n        var currentLastLine = current[currentLastIndex];\n        var commonRootMeetPoint = -1;\n\n        for (var j = prev.length - 1; j >= 0; --j) {\n            if (prev[j] === currentLastLine) {\n                commonRootMeetPoint = j;\n                break;\n            }\n        }\n\n        for (var j = commonRootMeetPoint; j >= 0; --j) {\n            var line = prev[j];\n            if (current[currentLastIndex] === line) {\n                current.pop();\n                currentLastIndex--;\n            } else {\n                break;\n            }\n        }\n        current = prev;\n    }\n}\n\nfunction cleanStack(stack) {\n    var ret = [];\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        var isTraceLine = stackFramePattern.test(line) ||\n            \"    (No stack trace)\" === line;\n        var isInternalFrame = isTraceLine && shouldIgnore(line);\n        if (isTraceLine && !isInternalFrame) {\n            if (indentStackFrames && line.charAt(0) !== \" \") {\n                line = \"    \" + line;\n            }\n            ret.push(line);\n        }\n    }\n    return ret;\n}\n\nfunction stackFramesAsArray(error) {\n    var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        if (\"    (No stack trace)\" === line || stackFramePattern.test(line)) {\n            break;\n        }\n    }\n    if (i > 0) {\n        stack = stack.slice(i);\n    }\n    return stack;\n}\n\nCapturedTrace.parseStackAndMessage = function(error) {\n    var stack = error.stack;\n    var message = error.toString();\n    stack = typeof stack === \"string\" && stack.length > 0\n                ? stackFramesAsArray(error) : [\"    (No stack trace)\"];\n    return {\n        message: message,\n        stack: cleanStack(stack)\n    };\n};\n\nCapturedTrace.formatAndLogError = function(error, title) {\n    if (typeof console !== \"undefined\") {\n        var message;\n        if (typeof error === \"object\" || typeof error === \"function\") {\n            var stack = error.stack;\n            message = title + formatStack(stack, error);\n        } else {\n            message = title + String(error);\n        }\n        if (typeof warn === \"function\") {\n            warn(message);\n        } else if (typeof console.log === \"function\" ||\n            typeof console.log === \"object\") {\n            console.log(message);\n        }\n    }\n};\n\nCapturedTrace.unhandledRejection = function (reason) {\n    CapturedTrace.formatAndLogError(reason, \"^--- With additional stack trace: \");\n};\n\nCapturedTrace.isSupported = function () {\n    return typeof captureStackTrace === \"function\";\n};\n\nCapturedTrace.fireRejectionEvent =\nfunction(name, localHandler, reason, promise) {\n    var localEventFired = false;\n    try {\n        if (typeof localHandler === \"function\") {\n            localEventFired = true;\n            if (name === \"rejectionHandled\") {\n                localHandler(promise);\n            } else {\n                localHandler(reason, promise);\n            }\n        }\n    } catch (e) {\n        async.throwLater(e);\n    }\n\n    var globalEventFired = false;\n    try {\n        globalEventFired = fireGlobalEvent(name, reason, promise);\n    } catch (e) {\n        globalEventFired = true;\n        async.throwLater(e);\n    }\n\n    var domEventFired = false;\n    if (fireDomEvent) {\n        try {\n            domEventFired = fireDomEvent(name.toLowerCase(), {\n                reason: reason,\n                promise: promise\n            });\n        } catch (e) {\n            domEventFired = true;\n            async.throwLater(e);\n        }\n    }\n\n    if (!globalEventFired && !localEventFired && !domEventFired &&\n        name === \"unhandledRejection\") {\n        CapturedTrace.formatAndLogError(reason, \"Unhandled rejection \");\n    }\n};\n\nfunction formatNonError(obj) {\n    var str;\n    if (typeof obj === \"function\") {\n        str = \"[function \" +\n            (obj.name || \"anonymous\") +\n            \"]\";\n    } else {\n        str = obj.toString();\n        var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n        if (ruselessToString.test(str)) {\n            try {\n                var newStr = JSON.stringify(obj);\n                str = newStr;\n            }\n            catch(e) {\n\n            }\n        }\n        if (str.length === 0) {\n            str = \"(empty array)\";\n        }\n    }\n    return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n    var maxChars = 41;\n    if (str.length < maxChars) {\n        return str;\n    }\n    return str.substr(0, maxChars - 3) + \"...\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n    var matches = line.match(parseLineInfoRegex);\n    if (matches) {\n        return {\n            fileName: matches[1],\n            line: parseInt(matches[2], 10)\n        };\n    }\n}\nCapturedTrace.setBounds = function(firstLineError, lastLineError) {\n    if (!CapturedTrace.isSupported()) return;\n    var firstStackLines = firstLineError.stack.split(\"\\n\");\n    var lastStackLines = lastLineError.stack.split(\"\\n\");\n    var firstIndex = -1;\n    var lastIndex = -1;\n    var firstFileName;\n    var lastFileName;\n    for (var i = 0; i < firstStackLines.length; ++i) {\n        var result = parseLineInfo(firstStackLines[i]);\n        if (result) {\n            firstFileName = result.fileName;\n            firstIndex = result.line;\n            break;\n        }\n    }\n    for (var i = 0; i < lastStackLines.length; ++i) {\n        var result = parseLineInfo(lastStackLines[i]);\n        if (result) {\n            lastFileName = result.fileName;\n            lastIndex = result.line;\n            break;\n        }\n    }\n    if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n        firstFileName !== lastFileName || firstIndex >= lastIndex) {\n        return;\n    }\n\n    shouldIgnore = function(line) {\n        if (bluebirdFramePattern.test(line)) return true;\n        var info = parseLineInfo(line);\n        if (info) {\n            if (info.fileName === firstFileName &&\n                (firstIndex <= info.line && info.line <= lastIndex)) {\n                return true;\n            }\n        }\n        return false;\n    };\n};\n\nvar captureStackTrace = (function stackDetection() {\n    var v8stackFramePattern = /^\\s*at\\s*/;\n    var v8stackFormatter = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if (error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    if (typeof Error.stackTraceLimit === \"number\" &&\n        typeof Error.captureStackTrace === \"function\") {\n        Error.stackTraceLimit = Error.stackTraceLimit + 6;\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        var captureStackTrace = Error.captureStackTrace;\n\n        shouldIgnore = function(line) {\n            return bluebirdFramePattern.test(line);\n        };\n        return function(receiver, ignoreUntil) {\n            Error.stackTraceLimit = Error.stackTraceLimit + 6;\n            captureStackTrace(receiver, ignoreUntil);\n            Error.stackTraceLimit = Error.stackTraceLimit - 6;\n        };\n    }\n    var err = new Error();\n\n    if (typeof err.stack === \"string\" &&\n        err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n        stackFramePattern = /@/;\n        formatStack = v8stackFormatter;\n        indentStackFrames = true;\n        return function captureStackTrace(o) {\n            o.stack = new Error().stack;\n        };\n    }\n\n    var hasStackAfterThrow;\n    try { throw new Error(); }\n    catch(e) {\n        hasStackAfterThrow = (\"stack\" in e);\n    }\n    if (!(\"stack\" in err) && hasStackAfterThrow &&\n        typeof Error.stackTraceLimit === \"number\") {\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        return function captureStackTrace(o) {\n            Error.stackTraceLimit = Error.stackTraceLimit + 6;\n            try { throw new Error(); }\n            catch(e) { o.stack = e.stack; }\n            Error.stackTraceLimit = Error.stackTraceLimit - 6;\n        };\n    }\n\n    formatStack = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if ((typeof error === \"object\" ||\n            typeof error === \"function\") &&\n            error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    return null;\n\n})([]);\n\nvar fireDomEvent;\nvar fireGlobalEvent = (function() {\n    if (util.isNode) {\n        return function(name, reason, promise) {\n            if (name === \"rejectionHandled\") {\n                return process.emit(name, promise);\n            } else {\n                return process.emit(name, reason, promise);\n            }\n        };\n    } else {\n        var customEventWorks = false;\n        var anyEventWorks = true;\n        try {\n            var ev = new self.CustomEvent(\"test\");\n            customEventWorks = ev instanceof CustomEvent;\n        } catch (e) {}\n        if (!customEventWorks) {\n            try {\n                var event = document.createEvent(\"CustomEvent\");\n                event.initCustomEvent(\"testingtheevent\", false, true, {});\n                self.dispatchEvent(event);\n            } catch (e) {\n                anyEventWorks = false;\n            }\n        }\n        if (anyEventWorks) {\n            fireDomEvent = function(type, detail) {\n                var event;\n                if (customEventWorks) {\n                    event = new self.CustomEvent(type, {\n                        detail: detail,\n                        bubbles: false,\n                        cancelable: true\n                    });\n                } else if (self.dispatchEvent) {\n                    event = document.createEvent(\"CustomEvent\");\n                    event.initCustomEvent(type, false, true, detail);\n                }\n\n                return event ? !self.dispatchEvent(event) : false;\n            };\n        }\n\n        var toWindowMethodNameMap = {};\n        toWindowMethodNameMap[\"unhandledRejection\"] = (\"on\" +\n            \"unhandledRejection\").toLowerCase();\n        toWindowMethodNameMap[\"rejectionHandled\"] = (\"on\" +\n            \"rejectionHandled\").toLowerCase();\n\n        return function(name, reason, promise) {\n            var methodName = toWindowMethodNameMap[name];\n            var method = self[methodName];\n            if (!method) return false;\n            if (name === \"rejectionHandled\") {\n                method.call(self, promise);\n            } else {\n                method.call(self, reason, promise);\n            }\n            return true;\n        };\n    }\n})();\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n    warn = function (message) {\n        console.warn(message);\n    };\n    if (util.isNode && process.stderr.isTTY) {\n        warn = function(message) {\n            process.stderr.write(\"\\u001b[31m\" + message + \"\\u001b[39m\\n\");\n        };\n    } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n        warn = function(message) {\n            console.warn(\"%c\" + message, \"color: red\");\n        };\n    }\n}\n\nreturn CapturedTrace;\n};\n","\"use strict\";\nmodule.exports = function(Promise, CapturedTrace) {\nvar getDomain = Promise._getDomain;\nvar async = require(\"./async.js\");\nvar Warning = require(\"./errors.js\").Warning;\nvar util = require(\"./util.js\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar debugging = false || (util.isNode &&\n                    (!!process.env[\"BLUEBIRD_DEBUG\"] ||\n                     process.env[\"NODE_ENV\"] === \"development\"));\n\nif (util.isNode && process.env[\"BLUEBIRD_DEBUG\"] == 0) debugging = false;\n\nif (debugging) {\n    async.disableTrampolineIfNecessary();\n}\n\nPromise.prototype._ignoreRejections = function() {\n    this._unsetRejectionIsUnhandled();\n    this._bitField = this._bitField | 16777216;\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n    if ((this._bitField & 16777216) !== 0) return;\n    this._setRejectionIsUnhandled();\n    async.invokeLater(this._notifyUnhandledRejection, this, undefined);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n    CapturedTrace.fireRejectionEvent(\"rejectionHandled\",\n                                  unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n    if (this._isRejectionUnhandled()) {\n        var reason = this._getCarriedStackTrace() || this._settledValue;\n        this._setUnhandledRejectionIsNotified();\n        CapturedTrace.fireRejectionEvent(\"unhandledRejection\",\n                                      possiblyUnhandledRejection, reason, this);\n    }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField | 524288;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField & (~524288);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n    return (this._bitField & 524288) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n    this._bitField = this._bitField | 2097152;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n    this._bitField = this._bitField & (~2097152);\n    if (this._isUnhandledRejectionNotified()) {\n        this._unsetUnhandledRejectionIsNotified();\n        this._notifyUnhandledRejectionIsHandled();\n    }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n    return (this._bitField & 2097152) > 0;\n};\n\nPromise.prototype._setCarriedStackTrace = function (capturedTrace) {\n    this._bitField = this._bitField | 1048576;\n    this._fulfillmentHandler0 = capturedTrace;\n};\n\nPromise.prototype._isCarryingStackTrace = function () {\n    return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._getCarriedStackTrace = function () {\n    return this._isCarryingStackTrace()\n        ? this._fulfillmentHandler0\n        : undefined;\n};\n\nPromise.prototype._captureStackTrace = function () {\n    if (debugging) {\n        this._trace = new CapturedTrace(this._peekContext());\n    }\n    return this;\n};\n\nPromise.prototype._attachExtraTrace = function (error, ignoreSelf) {\n    if (debugging && canAttachTrace(error)) {\n        var trace = this._trace;\n        if (trace !== undefined) {\n            if (ignoreSelf) trace = trace._parent;\n        }\n        if (trace !== undefined) {\n            trace.attachExtraTrace(error);\n        } else if (!error.__stackCleaned__) {\n            var parsed = CapturedTrace.parseStackAndMessage(error);\n            util.notEnumerableProp(error, \"stack\",\n                parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n            util.notEnumerableProp(error, \"__stackCleaned__\", true);\n        }\n    }\n};\n\nPromise.prototype._warn = function(message) {\n    var warning = new Warning(message);\n    var ctx = this._peekContext();\n    if (ctx) {\n        ctx.attachExtraTrace(warning);\n    } else {\n        var parsed = CapturedTrace.parseStackAndMessage(warning);\n        warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n    }\n    CapturedTrace.formatAndLogError(warning, \"\");\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n    var domain = getDomain();\n    possiblyUnhandledRejection =\n        typeof fn === \"function\" ? (domain === null ? fn : domain.bind(fn))\n                                 : undefined;\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n    var domain = getDomain();\n    unhandledRejectionHandled =\n        typeof fn === \"function\" ? (domain === null ? fn : domain.bind(fn))\n                                 : undefined;\n};\n\nPromise.longStackTraces = function () {\n    if (async.haveItemsQueued() &&\n        debugging === false\n   ) {\n        throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/DT1qyG\\u000a\");\n    }\n    debugging = CapturedTrace.isSupported();\n    if (debugging) {\n        async.disableTrampolineIfNecessary();\n    }\n};\n\nPromise.hasLongStackTraces = function () {\n    return debugging && CapturedTrace.isSupported();\n};\n\nif (!CapturedTrace.isSupported()) {\n    Promise.longStackTraces = function(){};\n    debugging = false;\n}\n\nreturn function() {\n    return debugging;\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, CapturedTrace, isDebugging) {\nvar contextStack = [];\nfunction Context() {\n    this._trace = new CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n    if (!isDebugging()) return;\n    if (this._trace !== undefined) {\n        contextStack.push(this._trace);\n    }\n};\n\nContext.prototype._popContext = function () {\n    if (!isDebugging()) return;\n    if (this._trace !== undefined) {\n        contextStack.pop();\n    }\n};\n\nfunction createContext() {\n    if (isDebugging()) return new Context();\n}\n\nfunction peekContext() {\n    var lastIndex = contextStack.length - 1;\n    if (lastIndex >= 0) {\n        return contextStack[lastIndex];\n    }\n    return undefined;\n}\n\nPromise.prototype._peekContext = peekContext;\nPromise.prototype._pushContext = Context.prototype._pushContext;\nPromise.prototype._popContext = Context.prototype._popContext;\n\nreturn createContext;\n};\n","\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = require(\"./util.js\");\nvar errors = require(\"./errors.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar keys = require(\"./es5.js\").keys;\nvar TypeError = errors.TypeError;\n\nfunction CatchFilter(instances, callback, promise) {\n    this._instances = instances;\n    this._callback = callback;\n    this._promise = promise;\n}\n\nfunction safePredicate(predicate, e) {\n    var safeObject = {};\n    var retfilter = tryCatch(predicate).call(safeObject, e);\n\n    if (retfilter === errorObj) return retfilter;\n\n    var safeKeys = keys(safeObject);\n    if (safeKeys.length) {\n        errorObj.e = new TypeError(\"Catch filter must inherit from Error or be a simple predicate function\\u000a\\u000a    See http://goo.gl/o84o68\\u000a\");\n        return errorObj;\n    }\n    return retfilter;\n}\n\nCatchFilter.prototype.doFilter = function (e) {\n    var cb = this._callback;\n    var promise = this._promise;\n    var boundTo = promise._boundValue();\n    for (var i = 0, len = this._instances.length; i < len; ++i) {\n        var item = this._instances[i];\n        var itemIsErrorType = item === Error ||\n            (item != null && item.prototype instanceof Error);\n\n        if (itemIsErrorType && e instanceof item) {\n            var ret = tryCatch(cb).call(boundTo, e);\n            if (ret === errorObj) {\n                NEXT_FILTER.e = ret.e;\n                return NEXT_FILTER;\n            }\n            return ret;\n        } else if (typeof item === \"function\" && !itemIsErrorType) {\n            var shouldHandle = safePredicate(item, e);\n            if (shouldHandle === errorObj) {\n                e = errorObj.e;\n                break;\n            } else if (shouldHandle) {\n                var ret = tryCatch(cb).call(boundTo, e);\n                if (ret === errorObj) {\n                    NEXT_FILTER.e = ret.e;\n                    return NEXT_FILTER;\n                }\n                return ret;\n            }\n        }\n    }\n    NEXT_FILTER.e = e;\n    return NEXT_FILTER;\n};\n\nreturn CatchFilter;\n};\n","\"use strict\";\nvar util = require(\"./util.js\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = require(\"./errors.js\");\nvar TimeoutError = errors.TimeoutError;\nvar OperationalError = errors.OperationalError;\nvar haveGetters = util.haveGetters;\nvar es5 = require(\"./es5.js\");\n\nfunction isUntypedError(obj) {\n    return obj instanceof Error &&\n        es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n    var ret;\n    if (isUntypedError(obj)) {\n        ret = new OperationalError(obj);\n        ret.name = obj.name;\n        ret.message = obj.message;\n        ret.stack = obj.stack;\n        var keys = es5.keys(obj);\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!rErrorKey.test(key)) {\n                ret[key] = obj[key];\n            }\n        }\n        return ret;\n    }\n    util.markAsOriginatingFromRejection(obj);\n    return obj;\n}\n\nfunction nodebackForPromise(promise) {\n    return function(err, value) {\n        if (promise === null) return;\n\n        if (err) {\n            var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n            promise._attachExtraTrace(wrapped);\n            promise._reject(wrapped);\n        } else if (arguments.length > 2) {\n            var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}\n            promise._fulfill(args);\n        } else {\n            promise._fulfill(value);\n        }\n\n        promise = null;\n    };\n}\n\n\nvar PromiseResolver;\nif (!haveGetters) {\n    PromiseResolver = function (promise) {\n        this.promise = promise;\n        this.asCallback = nodebackForPromise(promise);\n        this.callback = this.asCallback;\n    };\n}\nelse {\n    PromiseResolver = function (promise) {\n        this.promise = promise;\n    };\n}\nif (haveGetters) {\n    var prop = {\n        get: function() {\n            return nodebackForPromise(this.promise);\n        }\n    };\n    es5.defineProperty(PromiseResolver.prototype, \"asCallback\", prop);\n    es5.defineProperty(PromiseResolver.prototype, \"callback\", prop);\n}\n\nPromiseResolver._nodebackForPromise = nodebackForPromise;\n\nPromiseResolver.prototype.toString = function () {\n    return \"[object PromiseResolver]\";\n};\n\nPromiseResolver.prototype.resolve =\nPromiseResolver.prototype.fulfill = function (value) {\n    if (!(this instanceof PromiseResolver)) {\n        throw new TypeError(\"Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\\u000a\\u000a    See http://goo.gl/sdkXL9\\u000a\");\n    }\n    this.promise._resolveCallback(value);\n};\n\nPromiseResolver.prototype.reject = function (reason) {\n    if (!(this instanceof PromiseResolver)) {\n        throw new TypeError(\"Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\\u000a\\u000a    See http://goo.gl/sdkXL9\\u000a\");\n    }\n    this.promise._rejectCallback(reason);\n};\n\nPromiseResolver.prototype.progress = function (value) {\n    if (!(this instanceof PromiseResolver)) {\n        throw new TypeError(\"Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\\u000a\\u000a    See http://goo.gl/sdkXL9\\u000a\");\n    }\n    this.promise._progress(value);\n};\n\nPromiseResolver.prototype.cancel = function (err) {\n    this.promise.cancel(err);\n};\n\nPromiseResolver.prototype.timeout = function () {\n    this.reject(new TimeoutError(\"timeout\"));\n};\n\nPromiseResolver.prototype.isResolved = function () {\n    return this.promise.isResolved();\n};\n\nPromiseResolver.prototype.toJSON = function () {\n    return this.promise.toJSON();\n};\n\nmodule.exports = PromiseResolver;\n","\"use strict\";\nmodule.exports = function(Promise, PromiseArray) {\nvar util = require(\"./util.js\");\nvar async = require(\"./async.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nPromise.prototype.progressed = function (handler) {\n    return this._then(undefined, undefined, handler, undefined, undefined);\n};\n\nPromise.prototype._progress = function (progressValue) {\n    if (this._isFollowingOrFulfilledOrRejected()) return;\n    this._target()._progressUnchecked(progressValue);\n\n};\n\nPromise.prototype._progressHandlerAt = function (index) {\n    return index === 0\n        ? this._progressHandler0\n        : this[(index << 2) + index - 5 + 2];\n};\n\nPromise.prototype._doProgressWith = function (progression) {\n    var progressValue = progression.value;\n    var handler = progression.handler;\n    var promise = progression.promise;\n    var receiver = progression.receiver;\n\n    var ret = tryCatch(handler).call(receiver, progressValue);\n    if (ret === errorObj) {\n        if (ret.e != null &&\n            ret.e.name !== \"StopProgressPropagation\") {\n            var trace = util.canAttachTrace(ret.e)\n                ? ret.e : new Error(util.toString(ret.e));\n            promise._attachExtraTrace(trace);\n            promise._progress(ret.e);\n        }\n    } else if (ret instanceof Promise) {\n        ret._then(promise._progress, null, null, promise, undefined);\n    } else {\n        promise._progress(ret);\n    }\n};\n\n\nPromise.prototype._progressUnchecked = function (progressValue) {\n    var len = this._length();\n    var progress = this._progress;\n    for (var i = 0; i < len; i++) {\n        var handler = this._progressHandlerAt(i);\n        var promise = this._promiseAt(i);\n        if (!(promise instanceof Promise)) {\n            var receiver = this._receiverAt(i);\n            if (typeof handler === \"function\") {\n                handler.call(receiver, progressValue, promise);\n            } else if (receiver instanceof PromiseArray &&\n                       !receiver._isResolved()) {\n                receiver._promiseProgressed(progressValue, promise);\n            }\n            continue;\n        }\n\n        if (typeof handler === \"function\") {\n            async.invoke(this._doProgressWith, this, {\n                handler: handler,\n                promise: promise,\n                receiver: this._receiverAt(i),\n                value: progressValue\n            });\n        } else {\n            async.invoke(progress, promise, progressValue);\n        }\n    }\n};\n};\n","\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util.js\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n    if (typeof fn !== \"function\") {\n        throw new Promise.TypeError(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    }\n    return function () {\n        var ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._pushContext();\n        var value = tryCatch(fn).apply(this, arguments);\n        ret._popContext();\n        ret._resolveFromSyncValue(value);\n        return ret;\n    };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn, args, ctx) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    }\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._pushContext();\n    var value = util.isArray(args)\n        ? tryCatch(fn).apply(ctx, args)\n        : tryCatch(fn).call(ctx, args);\n    ret._popContext();\n    ret._resolveFromSyncValue(value);\n    return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n    if (value === util.errorObj) {\n        this._rejectCallback(value.e, false, true);\n    } else {\n        this._resolveCallback(value, true);\n    }\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise) {\nvar rejectThis = function(_, e) {\n    this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n    context.promiseRejectionQueued = true;\n    context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n    if (this._isPending()) {\n        this._resolveCallback(context.target);\n    }\n};\n\nvar bindingRejected = function(e, context) {\n    if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n    var maybePromise = tryConvertToPromise(thisArg);\n    var ret = new Promise(INTERNAL);\n    ret._propagateFrom(this, 1);\n    var target = this._target();\n\n    ret._setBoundTo(maybePromise);\n    if (maybePromise instanceof Promise) {\n        var context = {\n            promiseRejectionQueued: false,\n            promise: ret,\n            target: target,\n            bindingPromise: maybePromise\n        };\n        target._then(INTERNAL, targetRejected, ret._progress, ret, context);\n        maybePromise._then(\n            bindingResolved, bindingRejected, ret._progress, ret, context);\n    } else {\n        ret._resolveCallback(target);\n    }\n    return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n    if (obj !== undefined) {\n        this._bitField = this._bitField | 131072;\n        this._boundTo = obj;\n    } else {\n        this._bitField = this._bitField & (~131072);\n    }\n};\n\nPromise.prototype._isBound = function () {\n    return (this._bitField & 131072) === 131072;\n};\n\nPromise.bind = function (thisArg, value) {\n    var maybePromise = tryConvertToPromise(thisArg);\n    var ret = new Promise(INTERNAL);\n\n    ret._setBoundTo(maybePromise);\n    if (maybePromise instanceof Promise) {\n        maybePromise._then(function() {\n            ret._resolveCallback(value);\n        }, ret._reject, ret._progress, ret, null);\n    } else {\n        ret._resolveCallback(value);\n    }\n    return ret;\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, NEXT_FILTER, tryConvertToPromise) {\nvar util = require(\"./util.js\");\nvar isPrimitive = util.isPrimitive;\nvar thrower = util.thrower;\n\nfunction returnThis() {\n    return this;\n}\nfunction throwThis() {\n    throw this;\n}\nfunction return$(r) {\n    return function() {\n        return r;\n    };\n}\nfunction throw$(r) {\n    return function() {\n        throw r;\n    };\n}\nfunction promisedFinally(ret, reasonOrValue, isFulfilled) {\n    var then;\n    if (isPrimitive(reasonOrValue)) {\n        then = isFulfilled ? return$(reasonOrValue) : throw$(reasonOrValue);\n    } else {\n        then = isFulfilled ? returnThis : throwThis;\n    }\n    return ret._then(then, thrower, undefined, reasonOrValue, undefined);\n}\n\nfunction finallyHandler(reasonOrValue) {\n    var promise = this.promise;\n    var handler = this.handler;\n\n    var ret = promise._isBound()\n                    ? handler.call(promise._boundValue())\n                    : handler();\n\n    if (ret !== undefined) {\n        var maybePromise = tryConvertToPromise(ret, promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            return promisedFinally(maybePromise, reasonOrValue,\n                                    promise.isFulfilled());\n        }\n    }\n\n    if (promise.isRejected()) {\n        NEXT_FILTER.e = reasonOrValue;\n        return NEXT_FILTER;\n    } else {\n        return reasonOrValue;\n    }\n}\n\nfunction tapHandler(value) {\n    var promise = this.promise;\n    var handler = this.handler;\n\n    var ret = promise._isBound()\n                    ? handler.call(promise._boundValue(), value)\n                    : handler(value);\n\n    if (ret !== undefined) {\n        var maybePromise = tryConvertToPromise(ret, promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            return promisedFinally(maybePromise, value, true);\n        }\n    }\n    return value;\n}\n\nPromise.prototype._passThroughHandler = function (handler, isFinally) {\n    if (typeof handler !== \"function\") return this.then();\n\n    var promiseAndHandler = {\n        promise: this,\n        handler: handler\n    };\n\n    return this._then(\n            isFinally ? finallyHandler : tapHandler,\n            isFinally ? finallyHandler : undefined, undefined,\n            promiseAndHandler, undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n    return this._passThroughHandler(handler, true);\n};\n\nPromise.prototype.tap = function (handler) {\n    return this._passThroughHandler(handler, false);\n};\n};\n","\"use strict\";\nvar util = require(\"./util.js\");\nvar isPrimitive = util.isPrimitive;\n\nmodule.exports = function(Promise) {\nvar returner = function () {\n    return this;\n};\nvar thrower = function () {\n    throw this;\n};\nvar returnUndefined = function() {};\nvar throwUndefined = function() {\n    throw undefined;\n};\n\nvar wrapper = function (value, action) {\n    if (action === 1) {\n        return function () {\n            throw value;\n        };\n    } else if (action === 2) {\n        return function () {\n            return value;\n        };\n    }\n};\n\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n    if (value === undefined) return this.then(returnUndefined);\n\n    if (isPrimitive(value)) {\n        return this._then(\n            wrapper(value, 2),\n            undefined,\n            undefined,\n            undefined,\n            undefined\n       );\n    } else if (value instanceof Promise) {\n        value._ignoreRejections();\n    }\n    return this._then(returner, undefined, undefined, value, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n    if (reason === undefined) return this.then(throwUndefined);\n\n    if (isPrimitive(reason)) {\n        return this._then(\n            wrapper(reason, 1),\n            undefined,\n            undefined,\n            undefined,\n            undefined\n       );\n    }\n    return this._then(thrower, undefined, undefined, reason, undefined);\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n    if (promise !== undefined) {\n        promise = promise._target();\n        this._bitField = promise._bitField;\n        this._settledValue = promise._settledValue;\n    }\n    else {\n        this._bitField = 0;\n        this._settledValue = undefined;\n    }\n}\n\nPromiseInspection.prototype.value = function () {\n    if (!this.isFulfilled()) {\n        throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a    See http://goo.gl/hc1DLj\\u000a\");\n    }\n    return this._settledValue;\n};\n\nPromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n    if (!this.isRejected()) {\n        throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a    See http://goo.gl/hPuiwB\\u000a\");\n    }\n    return this._settledValue;\n};\n\nPromiseInspection.prototype.isFulfilled =\nPromise.prototype._isFulfilled = function () {\n    return (this._bitField & 268435456) > 0;\n};\n\nPromiseInspection.prototype.isRejected =\nPromise.prototype._isRejected = function () {\n    return (this._bitField & 134217728) > 0;\n};\n\nPromiseInspection.prototype.isPending =\nPromise.prototype._isPending = function () {\n    return (this._bitField & 402653184) === 0;\n};\n\nPromiseInspection.prototype.isResolved =\nPromise.prototype._isResolved = function () {\n    return (this._bitField & 402653184) > 0;\n};\n\nPromise.prototype.isPending = function() {\n    return this._target()._isPending();\n};\n\nPromise.prototype.isRejected = function() {\n    return this._target()._isRejected();\n};\n\nPromise.prototype.isFulfilled = function() {\n    return this._target()._isFulfilled();\n};\n\nPromise.prototype.isResolved = function() {\n    return this._target()._isResolved();\n};\n\nPromise.prototype._value = function() {\n    return this._settledValue;\n};\n\nPromise.prototype._reason = function() {\n    this._unsetRejectionIsUnhandled();\n    return this._settledValue;\n};\n\nPromise.prototype.value = function() {\n    var target = this._target();\n    if (!target.isFulfilled()) {\n        throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a    See http://goo.gl/hc1DLj\\u000a\");\n    }\n    return target._settledValue;\n};\n\nPromise.prototype.reason = function() {\n    var target = this._target();\n    if (!target.isRejected()) {\n        throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a    See http://goo.gl/hPuiwB\\u000a\");\n    }\n    target._unsetRejectionIsUnhandled();\n    return target._settledValue;\n};\n\n\nPromise.PromiseInspection = PromiseInspection;\n};\n","\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL) {\nvar util = require(\"./util.js\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!false) {\nif (canEvaluate) {\n    var thenCallback = function(i) {\n        return new Function(\"value\", \"holder\", \"                             \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = value;                                           \\n\\\n            holder.checkFulfillment(this);                                   \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var caller = function(count) {\n        var values = [];\n        for (var i = 1; i <= count; ++i) values.push(\"holder.p\" + i);\n        return new Function(\"holder\", \"                                      \\n\\\n            'use strict';                                                    \\n\\\n            var callback = holder.fn;                                        \\n\\\n            return callback(values);                                         \\n\\\n            \".replace(/values/g, values.join(\", \")));\n    };\n    var thenCallbacks = [];\n    var callers = [undefined];\n    for (var i = 1; i <= 5; ++i) {\n        thenCallbacks.push(thenCallback(i));\n        callers.push(caller(i));\n    }\n\n    var Holder = function(total, fn) {\n        this.p1 = this.p2 = this.p3 = this.p4 = this.p5 = null;\n        this.fn = fn;\n        this.total = total;\n        this.now = 0;\n    };\n\n    Holder.prototype.callers = callers;\n    Holder.prototype.checkFulfillment = function(promise) {\n        var now = this.now;\n        now++;\n        var total = this.total;\n        if (now >= total) {\n            var handler = this.callers[total];\n            promise._pushContext();\n            var ret = tryCatch(handler)(this);\n            promise._popContext();\n            if (ret === errorObj) {\n                promise._rejectCallback(ret.e, false, true);\n            } else {\n                promise._resolveCallback(ret);\n            }\n        } else {\n            this.now = now;\n        }\n    };\n\n    var reject = function (reason) {\n        this._reject(reason);\n    };\n}\n}\n\nPromise.join = function () {\n    var last = arguments.length - 1;\n    var fn;\n    if (last > 0 && typeof arguments[last] === \"function\") {\n        fn = arguments[last];\n        if (!false) {\n            if (last < 6 && canEvaluate) {\n                var ret = new Promise(INTERNAL);\n                ret._captureStackTrace();\n                var holder = new Holder(last, fn);\n                var callbacks = thenCallbacks;\n                for (var i = 0; i < last; ++i) {\n                    var maybePromise = tryConvertToPromise(arguments[i], ret);\n                    if (maybePromise instanceof Promise) {\n                        maybePromise = maybePromise._target();\n                        if (maybePromise._isPending()) {\n                            maybePromise._then(callbacks[i], reject,\n                                               undefined, ret, holder);\n                        } else if (maybePromise._isFulfilled()) {\n                            callbacks[i].call(ret,\n                                              maybePromise._value(), holder);\n                        } else {\n                            ret._reject(maybePromise._reason());\n                        }\n                    } else {\n                        callbacks[i].call(ret, maybePromise, holder);\n                    }\n                }\n                return ret;\n            }\n        }\n    }\n    var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];}\n    if (fn) args.pop();\n    var ret = new PromiseArray(args).promise();\n    return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL) {\nvar getDomain = Promise._getDomain;\nvar async = require(\"./async.js\");\nvar util = require(\"./util.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar PENDING = {};\nvar EMPTY_ARRAY = [];\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n    this.constructor$(promises);\n    this._promise._captureStackTrace();\n    var domain = getDomain();\n    this._callback = domain === null ? fn : domain.bind(fn);\n    this._preservedValues = _filter === INTERNAL\n        ? new Array(this.length())\n        : null;\n    this._limit = limit;\n    this._inFlight = 0;\n    this._queue = limit >= 1 ? [] : EMPTY_ARRAY;\n    async.invoke(init, this, undefined);\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\nfunction init() {this._init$(undefined, -2);}\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var values = this._values;\n    var length = this.length();\n    var preservedValues = this._preservedValues;\n    var limit = this._limit;\n    if (values[index] === PENDING) {\n        values[index] = value;\n        if (limit >= 1) {\n            this._inFlight--;\n            this._drainQueue();\n            if (this._isResolved()) return;\n        }\n    } else {\n        if (limit >= 1 && this._inFlight >= limit) {\n            values[index] = value;\n            this._queue.push(index);\n            return;\n        }\n        if (preservedValues !== null) preservedValues[index] = value;\n\n        var callback = this._callback;\n        var receiver = this._promise._boundValue();\n        this._promise._pushContext();\n        var ret = tryCatch(callback).call(receiver, value, index, length);\n        this._promise._popContext();\n        if (ret === errorObj) return this._reject(ret.e);\n\n        var maybePromise = tryConvertToPromise(ret, this._promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            if (maybePromise._isPending()) {\n                if (limit >= 1) this._inFlight++;\n                values[index] = PENDING;\n                return maybePromise._proxyPromiseArray(this, index);\n            } else if (maybePromise._isFulfilled()) {\n                ret = maybePromise._value();\n            } else {\n                return this._reject(maybePromise._reason());\n            }\n        }\n        values[index] = ret;\n    }\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= length) {\n        if (preservedValues !== null) {\n            this._filter(values, preservedValues);\n        } else {\n            this._resolve(values);\n        }\n\n    }\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n    var queue = this._queue;\n    var limit = this._limit;\n    var values = this._values;\n    while (queue.length > 0 && this._inFlight < limit) {\n        if (this._isResolved()) return;\n        var index = queue.pop();\n        this._promiseFulfilled(values[index], index);\n    }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n    var len = values.length;\n    var ret = new Array(len);\n    var j = 0;\n    for (var i = 0; i < len; ++i) {\n        if (booleans[i]) ret[j++] = values[i];\n    }\n    ret.length = j;\n    this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n    return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n    var limit = typeof options === \"object\" && options !== null\n        ? options.concurrency\n        : 0;\n    limit = typeof limit === \"number\" &&\n        isFinite(limit) && limit >= 1 ? limit : 0;\n    return new MappingPromiseArray(promises, fn, limit, _filter);\n}\n\nPromise.prototype.map = function (fn, options) {\n    if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n\n    return map(this, fn, options, null).promise();\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n    if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    return map(promises, fn, options, _filter).promise();\n};\n\n\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar errors = require(\"./errors.js\");\nvar async = require(\"./async.js\");\nvar CancellationError = errors.CancellationError;\n\nPromise.prototype._cancel = function (reason) {\n    if (!this.isCancellable()) return this;\n    var parent;\n    var promiseToReject = this;\n    while ((parent = promiseToReject._cancellationParent) !== undefined &&\n        parent.isCancellable()) {\n        promiseToReject = parent;\n    }\n    this._unsetCancellable();\n    promiseToReject._target()._rejectCallback(reason, false, true);\n};\n\nPromise.prototype.cancel = function (reason) {\n    if (!this.isCancellable()) return this;\n    if (reason === undefined) reason = new CancellationError();\n    async.invokeLater(this._cancel, this, reason);\n    return this;\n};\n\nPromise.prototype.cancellable = function () {\n    if (this._cancellable()) return this;\n    async.enableTrampoline();\n    this._setCancellable();\n    this._cancellationParent = undefined;\n    return this;\n};\n\nPromise.prototype.uncancellable = function () {\n    var ret = this.then();\n    ret._unsetCancellable();\n    return ret;\n};\n\nPromise.prototype.fork = function (didFulfill, didReject, didProgress) {\n    var ret = this._then(didFulfill, didReject, didProgress,\n                         undefined, undefined);\n\n    ret._setCancellable();\n    ret._cancellationParent = undefined;\n    return ret;\n};\n};\n","\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n    createContext) {\n    var TypeError = require(\"./errors.js\").TypeError;\n    var inherits = require(\"./util.js\").inherits;\n    var PromiseInspection = Promise.PromiseInspection;\n\n    function inspectionMapper(inspections) {\n        var len = inspections.length;\n        for (var i = 0; i < len; ++i) {\n            var inspection = inspections[i];\n            if (inspection.isRejected()) {\n                return Promise.reject(inspection.error());\n            }\n            inspections[i] = inspection._settledValue;\n        }\n        return inspections;\n    }\n\n    function thrower(e) {\n        setTimeout(function(){throw e;}, 0);\n    }\n\n    function castPreservingDisposable(thenable) {\n        var maybePromise = tryConvertToPromise(thenable);\n        if (maybePromise !== thenable &&\n            typeof thenable._isDisposable === \"function\" &&\n            typeof thenable._getDisposer === \"function\" &&\n            thenable._isDisposable()) {\n            maybePromise._setDisposable(thenable._getDisposer());\n        }\n        return maybePromise;\n    }\n    function dispose(resources, inspection) {\n        var i = 0;\n        var len = resources.length;\n        var ret = Promise.defer();\n        function iterator() {\n            if (i >= len) return ret.resolve();\n            var maybePromise = castPreservingDisposable(resources[i++]);\n            if (maybePromise instanceof Promise &&\n                maybePromise._isDisposable()) {\n                try {\n                    maybePromise = tryConvertToPromise(\n                        maybePromise._getDisposer().tryDispose(inspection),\n                        resources.promise);\n                } catch (e) {\n                    return thrower(e);\n                }\n                if (maybePromise instanceof Promise) {\n                    return maybePromise._then(iterator, thrower,\n                                              null, null, null);\n                }\n            }\n            iterator();\n        }\n        iterator();\n        return ret.promise;\n    }\n\n    function disposerSuccess(value) {\n        var inspection = new PromiseInspection();\n        inspection._settledValue = value;\n        inspection._bitField = 268435456;\n        return dispose(this, inspection).thenReturn(value);\n    }\n\n    function disposerFail(reason) {\n        var inspection = new PromiseInspection();\n        inspection._settledValue = reason;\n        inspection._bitField = 134217728;\n        return dispose(this, inspection).thenThrow(reason);\n    }\n\n    function Disposer(data, promise, context) {\n        this._data = data;\n        this._promise = promise;\n        this._context = context;\n    }\n\n    Disposer.prototype.data = function () {\n        return this._data;\n    };\n\n    Disposer.prototype.promise = function () {\n        return this._promise;\n    };\n\n    Disposer.prototype.resource = function () {\n        if (this.promise().isFulfilled()) {\n            return this.promise().value();\n        }\n        return null;\n    };\n\n    Disposer.prototype.tryDispose = function(inspection) {\n        var resource = this.resource();\n        var context = this._context;\n        if (context !== undefined) context._pushContext();\n        var ret = resource !== null\n            ? this.doDispose(resource, inspection) : null;\n        if (context !== undefined) context._popContext();\n        this._promise._unsetDisposable();\n        this._data = null;\n        return ret;\n    };\n\n    Disposer.isDisposer = function (d) {\n        return (d != null &&\n                typeof d.resource === \"function\" &&\n                typeof d.tryDispose === \"function\");\n    };\n\n    function FunctionDisposer(fn, promise, context) {\n        this.constructor$(fn, promise, context);\n    }\n    inherits(FunctionDisposer, Disposer);\n\n    FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n        var fn = this.data();\n        return fn.call(resource, resource, inspection);\n    };\n\n    function maybeUnwrapDisposer(value) {\n        if (Disposer.isDisposer(value)) {\n            this.resources[this.index]._setDisposable(value);\n            return value.promise();\n        }\n        return value;\n    }\n\n    Promise.using = function () {\n        var len = arguments.length;\n        if (len < 2) return apiRejection(\n                        \"you must pass at least 2 arguments to Promise.using\");\n        var fn = arguments[len - 1];\n        if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n\n        var input;\n        var spreadArgs = true;\n        if (len === 2 && Array.isArray(arguments[0])) {\n            input = arguments[0];\n            len = input.length;\n            spreadArgs = false;\n        } else {\n            input = arguments;\n            len--;\n        }\n        var resources = new Array(len);\n        for (var i = 0; i < len; ++i) {\n            var resource = input[i];\n            if (Disposer.isDisposer(resource)) {\n                var disposer = resource;\n                resource = resource.promise();\n                resource._setDisposable(disposer);\n            } else {\n                var maybePromise = tryConvertToPromise(resource);\n                if (maybePromise instanceof Promise) {\n                    resource =\n                        maybePromise._then(maybeUnwrapDisposer, null, null, {\n                            resources: resources,\n                            index: i\n                    }, undefined);\n                }\n            }\n            resources[i] = resource;\n        }\n\n        var promise = Promise.settle(resources)\n            .then(inspectionMapper)\n            .then(function(vals) {\n                promise._pushContext();\n                var ret;\n                try {\n                    ret = spreadArgs\n                        ? fn.apply(undefined, vals) : fn.call(undefined,  vals);\n                } finally {\n                    promise._popContext();\n                }\n                return ret;\n            })\n            ._then(\n                disposerSuccess, disposerFail, undefined, resources, undefined);\n        resources.promise = promise;\n        return promise;\n    };\n\n    Promise.prototype._setDisposable = function (disposer) {\n        this._bitField = this._bitField | 262144;\n        this._disposer = disposer;\n    };\n\n    Promise.prototype._isDisposable = function () {\n        return (this._bitField & 262144) > 0;\n    };\n\n    Promise.prototype._getDisposer = function () {\n        return this._disposer;\n    };\n\n    Promise.prototype._unsetDisposable = function () {\n        this._bitField = this._bitField & (~262144);\n        this._disposer = undefined;\n    };\n\n    Promise.prototype.disposer = function (fn) {\n        if (typeof fn === \"function\") {\n            return new FunctionDisposer(fn, this, createContext());\n        }\n        throw new TypeError();\n    };\n\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n                          apiRejection,\n                          INTERNAL,\n                          tryConvertToPromise) {\nvar errors = require(\"./errors.js\");\nvar TypeError = errors.TypeError;\nvar util = require(\"./util.js\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n    for (var i = 0; i < yieldHandlers.length; ++i) {\n        traceParent._pushContext();\n        var result = tryCatch(yieldHandlers[i])(value);\n        traceParent._popContext();\n        if (result === errorObj) {\n            traceParent._pushContext();\n            var ret = Promise.reject(errorObj.e);\n            traceParent._popContext();\n            return ret;\n        }\n        var maybePromise = tryConvertToPromise(result, traceParent);\n        if (maybePromise instanceof Promise) return maybePromise;\n    }\n    return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n    var promise = this._promise = new Promise(INTERNAL);\n    promise._captureStackTrace();\n    this._stack = stack;\n    this._generatorFunction = generatorFunction;\n    this._receiver = receiver;\n    this._generator = undefined;\n    this._yieldHandlers = typeof yieldHandler === \"function\"\n        ? [yieldHandler].concat(yieldHandlers)\n        : yieldHandlers;\n}\n\nPromiseSpawn.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n    this._generator = this._generatorFunction.call(this._receiver);\n    this._receiver =\n        this._generatorFunction = undefined;\n    this._next(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n    if (result === errorObj) {\n        return this._promise._rejectCallback(result.e, false, true);\n    }\n\n    var value = result.value;\n    if (result.done === true) {\n        this._promise._resolveCallback(value);\n    } else {\n        var maybePromise = tryConvertToPromise(value, this._promise);\n        if (!(maybePromise instanceof Promise)) {\n            maybePromise =\n                promiseFromYieldHandler(maybePromise,\n                                        this._yieldHandlers,\n                                        this._promise);\n            if (maybePromise === null) {\n                this._throw(\n                    new TypeError(\n                        \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a    See http://goo.gl/4Y4pDk\\u000a\\u000a\".replace(\"%s\", value) +\n                        \"From coroutine:\\u000a\" +\n                        this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n                    )\n                );\n                return;\n            }\n        }\n        maybePromise._then(\n            this._next,\n            this._throw,\n            undefined,\n            this,\n            null\n       );\n    }\n};\n\nPromiseSpawn.prototype._throw = function (reason) {\n    this._promise._attachExtraTrace(reason);\n    this._promise._pushContext();\n    var result = tryCatch(this._generator[\"throw\"])\n        .call(this._generator, reason);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._next = function (value) {\n    this._promise._pushContext();\n    var result = tryCatch(this._generator.next).call(this._generator, value);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n    if (typeof generatorFunction !== \"function\") {\n        throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/6Vqhm0\\u000a\");\n    }\n    var yieldHandler = Object(options).yieldHandler;\n    var PromiseSpawn$ = PromiseSpawn;\n    var stack = new Error().stack;\n    return function () {\n        var generator = generatorFunction.apply(this, arguments);\n        var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n                                      stack);\n        spawn._generator = generator;\n        spawn._next(undefined);\n        return spawn.promise();\n    };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n    if (typeof fn !== \"function\") throw new TypeError(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n    if (typeof generatorFunction !== \"function\") {\n        return apiRejection(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/6Vqhm0\\u000a\");\n    }\n    var spawn = new PromiseSpawn(generatorFunction, this);\n    var ret = spawn.promise();\n    spawn._run(Promise.spawn);\n    return ret;\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar util = require(\"./util.js\");\nvar async = require(\"./async.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n    var promise = this;\n    if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n    var ret =\n        tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nfunction successAdapter(val, nodeback) {\n    var promise = this;\n    var receiver = promise._boundValue();\n    var ret = val === undefined\n        ? tryCatch(nodeback).call(receiver, null)\n        : tryCatch(nodeback).call(receiver, null, val);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\nfunction errorAdapter(reason, nodeback) {\n    var promise = this;\n    if (!reason) {\n        var target = promise._target();\n        var newReason = target._getCarriedStackTrace();\n        newReason.cause = reason;\n        reason = newReason;\n    }\n    var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nPromise.prototype.asCallback =\nPromise.prototype.nodeify = function (nodeback, options) {\n    if (typeof nodeback == \"function\") {\n        var adapter = successAdapter;\n        if (options !== undefined && Object(options).spread) {\n            adapter = spreadAdapter;\n        }\n        this._then(\n            adapter,\n            errorAdapter,\n            undefined,\n            this,\n            nodeback\n        );\n    }\n    return this;\n};\n};\n","\"use strict\";\nvar cr = Object.create;\nif (cr) {\n    var callerCache = cr(null);\n    var getterCache = cr(null);\n    callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = require(\"./util.js\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!false) {\nvar makeMethodCaller = function (methodName) {\n    return new Function(\"ensureMethod\", \"                                    \\n\\\n        return function(obj) {                                               \\n\\\n            'use strict'                                                     \\n\\\n            var len = this.length;                                           \\n\\\n            ensureMethod(obj, 'methodName');                                 \\n\\\n            switch(len) {                                                    \\n\\\n                case 1: return obj.methodName(this[0]);                      \\n\\\n                case 2: return obj.methodName(this[0], this[1]);             \\n\\\n                case 3: return obj.methodName(this[0], this[1], this[2]);    \\n\\\n                case 0: return obj.methodName();                             \\n\\\n                default:                                                     \\n\\\n                    return obj.methodName.apply(obj, this);                  \\n\\\n            }                                                                \\n\\\n        };                                                                   \\n\\\n        \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n    return new Function(\"obj\", \"                                             \\n\\\n        'use strict';                                                        \\n\\\n        return obj.propertyName;                                             \\n\\\n        \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n    var ret = cache[name];\n    if (typeof ret !== \"function\") {\n        if (!isIdentifier(name)) {\n            return null;\n        }\n        ret = compiler(name);\n        cache[name] = ret;\n        cache[\" size\"]++;\n        if (cache[\" size\"] > 512) {\n            var keys = Object.keys(cache);\n            for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n            cache[\" size\"] = keys.length - 256;\n        }\n    }\n    return ret;\n};\n\ngetMethodCaller = function(name) {\n    return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n    return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n    var fn;\n    if (obj != null) fn = obj[methodName];\n    if (typeof fn !== \"function\") {\n        var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n            util.toString(methodName) + \"'\";\n        throw new Promise.TypeError(message);\n    }\n    return fn;\n}\n\nfunction caller(obj) {\n    var methodName = this.pop();\n    var fn = ensureMethod(obj, methodName);\n    return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n    var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}\n    if (!false) {\n        if (canEvaluate) {\n            var maybeCaller = getMethodCaller(methodName);\n            if (maybeCaller !== null) {\n                return this._then(\n                    maybeCaller, undefined, undefined, args, undefined);\n            }\n        }\n    }\n    args.push(methodName);\n    return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n    return obj[this];\n}\nfunction indexedGetter(obj) {\n    var index = +this;\n    if (index < 0) index = Math.max(0, index + obj.length);\n    return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n    var isIndex = (typeof propertyName === \"number\");\n    var getter;\n    if (!isIndex) {\n        if (canEvaluate) {\n            var maybeGetter = getGetter(propertyName);\n            getter = maybeGetter !== null ? maybeGetter : namedGetter;\n        } else {\n            getter = namedGetter;\n        }\n    } else {\n        getter = indexedGetter;\n    }\n    return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n","\"use strict\";\nmodule.exports = function(\n    Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util.js\");\nvar isObject = util.isObject;\nvar es5 = require(\"./es5.js\");\n\nfunction PropertiesPromiseArray(obj) {\n    var keys = es5.keys(obj);\n    var len = keys.length;\n    var values = new Array(len * 2);\n    for (var i = 0; i < len; ++i) {\n        var key = keys[i];\n        values[i] = obj[key];\n        values[i + len] = key;\n    }\n    this.constructor$(values);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {\n    this._init$(undefined, -3) ;\n};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        var val = {};\n        var keyOffset = this.length();\n        for (var i = 0, len = this.length(); i < len; ++i) {\n            val[this._values[i + keyOffset]] = this._values[i];\n        }\n        this._resolve(val);\n    }\n};\n\nPropertiesPromiseArray.prototype._promiseProgressed = function (value, index) {\n    this._promise._progress({\n        key: this._values[index + this.length()],\n        value: value\n    });\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n    return len >> 1;\n};\n\nfunction props(promises) {\n    var ret;\n    var castValue = tryConvertToPromise(promises);\n\n    if (!isObject(castValue)) {\n        return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a    See http://goo.gl/OsFKC8\\u000a\");\n    } else if (castValue instanceof Promise) {\n        ret = castValue._then(\n            Promise.props, undefined, undefined, undefined, undefined);\n    } else {\n        ret = new PropertiesPromiseArray(castValue).promise();\n    }\n\n    if (castValue instanceof Promise) {\n        ret._propagateFrom(castValue, 4);\n    }\n    return ret;\n}\n\nPromise.prototype.props = function () {\n    return props(this);\n};\n\nPromise.props = function (promises) {\n    return props(promises);\n};\n};\n","\"use strict\";\nmodule.exports = function(\n    Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar isArray = require(\"./util.js\").isArray;\n\nvar raceLater = function (promise) {\n    return promise.then(function(array) {\n        return race(array, promise);\n    });\n};\n\nfunction race(promises, parent) {\n    var maybePromise = tryConvertToPromise(promises);\n\n    if (maybePromise instanceof Promise) {\n        return raceLater(maybePromise);\n    } else if (!isArray(promises)) {\n        return apiRejection(\"expecting an array, a promise or a thenable\\u000a\\u000a    See http://goo.gl/s8MMhc\\u000a\");\n    }\n\n    var ret = new Promise(INTERNAL);\n    if (parent !== undefined) {\n        ret._propagateFrom(parent, 4 | 1);\n    }\n    var fulfill = ret._fulfill;\n    var reject = ret._reject;\n    for (var i = 0, len = promises.length; i < len; ++i) {\n        var val = promises[i];\n\n        if (val === undefined && !(i in promises)) {\n            continue;\n        }\n\n        Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n    }\n    return ret;\n}\n\nPromise.race = function (promises) {\n    return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n    return race(this, undefined);\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL) {\nvar getDomain = Promise._getDomain;\nvar async = require(\"./async.js\");\nvar util = require(\"./util.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nfunction ReductionPromiseArray(promises, fn, accum, _each) {\n    this.constructor$(promises);\n    this._promise._captureStackTrace();\n    this._preservedValues = _each === INTERNAL ? [] : null;\n    this._zerothIsAccum = (accum === undefined);\n    this._gotAccum = false;\n    this._reducingIndex = (this._zerothIsAccum ? 1 : 0);\n    this._valuesPhase = undefined;\n    var maybePromise = tryConvertToPromise(accum, this._promise);\n    var rejected = false;\n    var isPromise = maybePromise instanceof Promise;\n    if (isPromise) {\n        maybePromise = maybePromise._target();\n        if (maybePromise._isPending()) {\n            maybePromise._proxyPromiseArray(this, -1);\n        } else if (maybePromise._isFulfilled()) {\n            accum = maybePromise._value();\n            this._gotAccum = true;\n        } else {\n            this._reject(maybePromise._reason());\n            rejected = true;\n        }\n    }\n    if (!(isPromise || this._zerothIsAccum)) this._gotAccum = true;\n    var domain = getDomain();\n    this._callback = domain === null ? fn : domain.bind(fn);\n    this._accum = accum;\n    if (!rejected) async.invoke(init, this, undefined);\n}\nfunction init() {\n    this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._init = function () {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function () {\n    if (this._gotAccum || this._zerothIsAccum) {\n        this._resolve(this._preservedValues !== null\n                        ? [] : this._accum);\n    }\n};\n\nReductionPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var values = this._values;\n    values[index] = value;\n    var length = this.length();\n    var preservedValues = this._preservedValues;\n    var isEach = preservedValues !== null;\n    var gotAccum = this._gotAccum;\n    var valuesPhase = this._valuesPhase;\n    var valuesPhaseIndex;\n    if (!valuesPhase) {\n        valuesPhase = this._valuesPhase = new Array(length);\n        for (valuesPhaseIndex=0; valuesPhaseIndex<length; ++valuesPhaseIndex) {\n            valuesPhase[valuesPhaseIndex] = 0;\n        }\n    }\n    valuesPhaseIndex = valuesPhase[index];\n\n    if (index === 0 && this._zerothIsAccum) {\n        this._accum = value;\n        this._gotAccum = gotAccum = true;\n        valuesPhase[index] = ((valuesPhaseIndex === 0)\n            ? 1 : 2);\n    } else if (index === -1) {\n        this._accum = value;\n        this._gotAccum = gotAccum = true;\n    } else {\n        if (valuesPhaseIndex === 0) {\n            valuesPhase[index] = 1;\n        } else {\n            valuesPhase[index] = 2;\n            this._accum = value;\n        }\n    }\n    if (!gotAccum) return;\n\n    var callback = this._callback;\n    var receiver = this._promise._boundValue();\n    var ret;\n\n    for (var i = this._reducingIndex; i < length; ++i) {\n        valuesPhaseIndex = valuesPhase[i];\n        if (valuesPhaseIndex === 2) {\n            this._reducingIndex = i + 1;\n            continue;\n        }\n        if (valuesPhaseIndex !== 1) return;\n        value = values[i];\n        this._promise._pushContext();\n        if (isEach) {\n            preservedValues.push(value);\n            ret = tryCatch(callback).call(receiver, value, i, length);\n        }\n        else {\n            ret = tryCatch(callback)\n                .call(receiver, this._accum, value, i, length);\n        }\n        this._promise._popContext();\n\n        if (ret === errorObj) return this._reject(ret.e);\n\n        var maybePromise = tryConvertToPromise(ret, this._promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            if (maybePromise._isPending()) {\n                valuesPhase[i] = 4;\n                return maybePromise._proxyPromiseArray(this, i);\n            } else if (maybePromise._isFulfilled()) {\n                ret = maybePromise._value();\n            } else {\n                return this._reject(maybePromise._reason());\n            }\n        }\n\n        this._reducingIndex = i + 1;\n        this._accum = ret;\n    }\n\n    this._resolve(isEach ? preservedValues : this._accum);\n};\n\nfunction reduce(promises, fn, initialValue, _each) {\n    if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n    return array.promise();\n}\n\nPromise.prototype.reduce = function (fn, initialValue) {\n    return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n    return reduce(promises, fn, initialValue, _each);\n};\n};\n","\"use strict\";\nmodule.exports =\n    function(Promise, PromiseArray) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = require(\"./util.js\");\n\nfunction SettledPromiseArray(values) {\n    this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n    this._values[index] = inspection;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n    }\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 268435456;\n    ret._settledValue = value;\n    this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 134217728;\n    ret._settledValue = reason;\n    this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n    return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n    return new SettledPromiseArray(this).promise();\n};\n};\n","\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = require(\"./util.js\");\nvar RangeError = require(\"./errors.js\").RangeError;\nvar AggregateError = require(\"./errors.js\").AggregateError;\nvar isArray = util.isArray;\n\n\nfunction SomePromiseArray(values) {\n    this.constructor$(values);\n    this._howMany = 0;\n    this._unwrap = false;\n    this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n    if (!this._initialized) {\n        return;\n    }\n    if (this._howMany === 0) {\n        this._resolve([]);\n        return;\n    }\n    this._init$(undefined, -5);\n    var isArrayResolved = isArray(this._values);\n    if (!this._isResolved() &&\n        isArrayResolved &&\n        this._howMany > this._canPossiblyFulfill()) {\n        this._reject(this._getRangeError(this.length()));\n    }\n};\n\nSomePromiseArray.prototype.init = function () {\n    this._initialized = true;\n    this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n    this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n    return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n    this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n    this._addFulfilled(value);\n    if (this._fulfilled() === this.howMany()) {\n        this._values.length = this.howMany();\n        if (this.howMany() === 1 && this._unwrap) {\n            this._resolve(this._values[0]);\n        } else {\n            this._resolve(this._values);\n        }\n    }\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n    this._addRejected(reason);\n    if (this.howMany() > this._canPossiblyFulfill()) {\n        var e = new AggregateError();\n        for (var i = this.length(); i < this._values.length; ++i) {\n            e.push(this._values[i]);\n        }\n        this._reject(e);\n    }\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n    return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n    return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n    this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n    this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n    return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n    var message = \"Input array must contain at least \" +\n            this._howMany + \" items but contains only \" + count + \" items\";\n    return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n    this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n    if ((howMany | 0) !== howMany || howMany < 0) {\n        return apiRejection(\"expecting a positive integer\\u000a\\u000a    See http://goo.gl/1wAmHx\\u000a\");\n    }\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(howMany);\n    ret.init();\n    return promise;\n}\n\nPromise.some = function (promises, howMany) {\n    return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n    return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = require(\"./util.js\");\nvar nodebackForPromise = require(\"./promise_resolver.js\")\n    ._nodebackForPromise;\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = require(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n    \"arity\",    \"length\",\n    \"name\",\n    \"arguments\",\n    \"caller\",\n    \"callee\",\n    \"prototype\",\n    \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n    return util.isIdentifier(name) &&\n        name.charAt(0) !== \"_\" &&\n        name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n    return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n    try {\n        return fn.__isPromisified__ === true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n    var val = util.getDataPropertyOrDefault(obj, key + suffix,\n                                            defaultPromisified);\n    return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n    for (var i = 0; i < ret.length; i += 2) {\n        var key = ret[i];\n        if (suffixRegexp.test(key)) {\n            var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n            for (var j = 0; j < ret.length; j += 2) {\n                if (ret[j] === keyWithoutAsyncSuffix) {\n                    throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a    See http://goo.gl/iWrZbw\\u000a\"\n                        .replace(\"%s\", suffix));\n                }\n            }\n        }\n    }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n    var keys = util.inheritedDataKeys(obj);\n    var ret = [];\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var value = obj[key];\n        var passesDefaultFilter = filter === defaultFilter\n            ? true : defaultFilter(key, value, obj);\n        if (typeof value === \"function\" &&\n            !isPromisified(value) &&\n            !hasPromisified(obj, key, suffix) &&\n            filter(key, value, obj, passesDefaultFilter)) {\n            ret.push(key, value);\n        }\n    }\n    checkValid(ret, suffix, suffixRegexp);\n    return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n    return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!false) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n    var ret = [likelyArgumentCount];\n    var min = Math.max(0, likelyArgumentCount - 1 - 3);\n    for(var i = likelyArgumentCount - 1; i >= min; --i) {\n        ret.push(i);\n    }\n    for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n        ret.push(i);\n    }\n    return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n    return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n    return util.filledRange(\n        Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n    if (typeof fn.length === \"number\") {\n        return Math.max(Math.min(fn.length, 1023 + 1), 0);\n    }\n    return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn) {\n    var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n    var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n    var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n    function generateCallForArgumentCount(count) {\n        var args = argumentSequence(count).join(\", \");\n        var comma = count > 0 ? \", \" : \"\";\n        var ret;\n        if (shouldProxyThis) {\n            ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n        } else {\n            ret = receiver === undefined\n                ? \"ret = callback({{args}}, nodeback); break;\\n\"\n                : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n        }\n        return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n    }\n\n    function generateArgumentSwitchCase() {\n        var ret = \"\";\n        for (var i = 0; i < argumentOrder.length; ++i) {\n            ret += \"case \" + argumentOrder[i] +\":\" +\n                generateCallForArgumentCount(argumentOrder[i]);\n        }\n\n        ret += \"                                                             \\n\\\n        default:                                                             \\n\\\n            var args = new Array(len + 1);                                   \\n\\\n            var i = 0;                                                       \\n\\\n            for (var i = 0; i < len; ++i) {                                  \\n\\\n               args[i] = arguments[i];                                       \\n\\\n            }                                                                \\n\\\n            args[i] = nodeback;                                              \\n\\\n            [CodeForCall]                                                    \\n\\\n            break;                                                           \\n\\\n        \".replace(\"[CodeForCall]\", (shouldProxyThis\n                                ? \"ret = callback.apply(this, args);\\n\"\n                                : \"ret = callback.apply(receiver, args);\\n\"));\n        return ret;\n    }\n\n    var getFunctionCode = typeof callback === \"string\"\n                                ? (\"this != null ? this['\"+callback+\"'] : fn\")\n                                : \"fn\";\n\n    return new Function(\"Promise\",\n                        \"fn\",\n                        \"receiver\",\n                        \"withAppended\",\n                        \"maybeWrapAsError\",\n                        \"nodebackForPromise\",\n                        \"tryCatch\",\n                        \"errorObj\",\n                        \"notEnumerableProp\",\n                        \"INTERNAL\",\"'use strict';                            \\n\\\n        var ret = function (Parameters) {                                    \\n\\\n            'use strict';                                                    \\n\\\n            var len = arguments.length;                                      \\n\\\n            var promise = new Promise(INTERNAL);                             \\n\\\n            promise._captureStackTrace();                                    \\n\\\n            var nodeback = nodebackForPromise(promise);                      \\n\\\n            var ret;                                                         \\n\\\n            var callback = tryCatch([GetFunctionCode]);                      \\n\\\n            switch(len) {                                                    \\n\\\n                [CodeForSwitchCase]                                          \\n\\\n            }                                                                \\n\\\n            if (ret === errorObj) {                                          \\n\\\n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n            }                                                                \\n\\\n            return promise;                                                  \\n\\\n        };                                                                   \\n\\\n        notEnumerableProp(ret, '__isPromisified__', true);                   \\n\\\n        return ret;                                                          \\n\\\n        \"\n        .replace(\"Parameters\", parameterDeclaration(newParameterCount))\n        .replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n        .replace(\"[GetFunctionCode]\", getFunctionCode))(\n            Promise,\n            fn,\n            receiver,\n            withAppended,\n            maybeWrapAsError,\n            nodebackForPromise,\n            util.tryCatch,\n            util.errorObj,\n            util.notEnumerableProp,\n            INTERNAL\n        );\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn) {\n    var defaultThis = (function() {return this;})();\n    var method = callback;\n    if (typeof method === \"string\") {\n        callback = fn;\n    }\n    function promisified() {\n        var _receiver = receiver;\n        if (receiver === THIS) _receiver = this;\n        var promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n        var cb = typeof method === \"string\" && this !== defaultThis\n            ? this[method] : callback;\n        var fn = nodebackForPromise(promise);\n        try {\n            cb.apply(_receiver, withAppended(arguments, fn));\n        } catch(e) {\n            promise._rejectCallback(maybeWrapAsError(e), true, true);\n        }\n        return promise;\n    }\n    util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n    return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n    ? makeNodePromisifiedEval\n    : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier) {\n    var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n    var methods =\n        promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n    for (var i = 0, len = methods.length; i < len; i+= 2) {\n        var key = methods[i];\n        var fn = methods[i+1];\n        var promisifiedKey = key + suffix;\n        if (promisifier === makeNodePromisified) {\n            obj[promisifiedKey] =\n                makeNodePromisified(key, THIS, key, fn, suffix);\n        } else {\n            var promisified = promisifier(fn, function() {\n                return makeNodePromisified(key, THIS, key, fn, suffix);\n            });\n            util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n            obj[promisifiedKey] = promisified;\n        }\n    }\n    util.toFastProperties(obj);\n    return obj;\n}\n\nfunction promisify(callback, receiver) {\n    return makeNodePromisified(callback, receiver, undefined, callback);\n}\n\nPromise.promisify = function (fn, receiver) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    }\n    if (isPromisified(fn)) {\n        return fn;\n    }\n    var ret = promisify(fn, arguments.length < 2 ? THIS : receiver);\n    util.copyDescriptors(fn, ret, propsFilter);\n    return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n    if (typeof target !== \"function\" && typeof target !== \"object\") {\n        throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a    See http://goo.gl/9ITlV0\\u000a\");\n    }\n    options = Object(options);\n    var suffix = options.suffix;\n    if (typeof suffix !== \"string\") suffix = defaultSuffix;\n    var filter = options.filter;\n    if (typeof filter !== \"function\") filter = defaultFilter;\n    var promisifier = options.promisifier;\n    if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n    if (!util.isIdentifier(suffix)) {\n        throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a    See http://goo.gl/8FZo5V\\u000a\");\n    }\n\n    var keys = util.inheritedDataKeys(target);\n    for (var i = 0; i < keys.length; ++i) {\n        var value = target[keys[i]];\n        if (keys[i] !== \"constructor\" &&\n            util.isClass(value)) {\n            promisifyAll(value.prototype, suffix, filter, promisifier);\n            promisifyAll(value, suffix, filter, promisifier);\n        }\n    }\n\n    return promisifyAll(target, suffix, filter, promisifier);\n};\n};\n\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar SomePromiseArray = Promise._SomePromiseArray;\nfunction any(promises) {\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(1);\n    ret.setUnwrap();\n    ret.init();\n    return promise;\n}\n\nPromise.any = function (promises) {\n    return any(promises);\n};\n\nPromise.prototype.any = function () {\n    return any(this);\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\n\nPromise.prototype.each = function (fn) {\n    return PromiseReduce(this, fn, null, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n    return PromiseReduce(promises, fn, null, INTERNAL);\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = require(\"./util.js\");\nvar TimeoutError = Promise.TimeoutError;\n\nvar afterTimeout = function (promise, message) {\n    if (!promise.isPending()) return;\n    \n    var err;\n    if(!util.isPrimitive(message) && (message instanceof Error)) {\n        err = message;\n    } else {\n        if (typeof message !== \"string\") {\n            message = \"operation timed out\";\n        }\n        err = new TimeoutError(message);\n    }\n    util.markAsOriginatingFromRejection(err);\n    promise._attachExtraTrace(err);\n    promise._cancel(err);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (value, ms) {\n    if (ms === undefined) {\n        ms = value;\n        value = undefined;\n        var ret = new Promise(INTERNAL);\n        setTimeout(function() { ret._fulfill(); }, ms);\n        return ret;\n    }\n    ms = +ms;\n    return Promise.resolve(value)._then(afterValue, null, null, ms, undefined);\n};\n\nPromise.prototype.delay = function (ms) {\n    return delay(this, ms);\n};\n\nfunction successClear(value) {\n    var handle = this;\n    if (handle instanceof Number) handle = +handle;\n    clearTimeout(handle);\n    return value;\n}\n\nfunction failureClear(reason) {\n    var handle = this;\n    if (handle instanceof Number) handle = +handle;\n    clearTimeout(handle);\n    throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n    ms = +ms;\n    var ret = this.then().cancellable();\n    ret._cancellationParent = this;\n    var handle = setTimeout(function timeoutTimeout() {\n        afterTimeout(ret, message);\n    }, ms);\n    return ret._then(successClear, failureClear, undefined, handle, undefined);\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n    return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n    return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n","\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n    return new TypeError(\"circular promise resolution chain\\u000a\\u000a    See http://goo.gl/LhFpo0\\u000a\");\n};\nvar reflect = function() {\n    return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n    return Promise.reject(new TypeError(msg));\n};\n\nvar util = require(\"./util.js\");\n\nvar getDomain;\nif (util.isNode) {\n    getDomain = function() {\n        var ret = process.domain;\n        if (ret === undefined) ret = null;\n        return ret;\n    };\n} else {\n    getDomain = function() {\n        return null;\n    };\n}\nutil.notEnumerableProp(Promise, \"_getDomain\", getDomain);\n\nvar UNDEFINED_BINDING = {};\nvar async = require(\"./async.js\");\nvar errors = require(\"./errors.js\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nPromise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {e: null};\nvar tryConvertToPromise = require(\"./thenables.js\")(Promise, INTERNAL);\nvar PromiseArray =\n    require(\"./promise_array.js\")(Promise, INTERNAL,\n                                    tryConvertToPromise, apiRejection);\nvar CapturedTrace = require(\"./captured_trace.js\")();\nvar isDebugging = require(\"./debuggability.js\")(Promise, CapturedTrace);\n /*jshint unused:false*/\nvar createContext =\n    require(\"./context.js\")(Promise, CapturedTrace, isDebugging);\nvar CatchFilter = require(\"./catch_filter.js\")(NEXT_FILTER);\nvar PromiseResolver = require(\"./promise_resolver.js\");\nvar nodebackForPromise = PromiseResolver._nodebackForPromise;\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\n\nfunction Promise(resolver) {\n    if (typeof resolver !== \"function\") {\n        throw new TypeError(\"the promise constructor requires a resolver function\\u000a\\u000a    See http://goo.gl/EC22Yn\\u000a\");\n    }\n    if (this.constructor !== Promise) {\n        throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a    See http://goo.gl/KsIlge\\u000a\");\n    }\n    this._bitField = 0;\n    this._fulfillmentHandler0 = undefined;\n    this._rejectionHandler0 = undefined;\n    this._progressHandler0 = undefined;\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._settledValue = undefined;\n    if (resolver !== INTERNAL) this._resolveFromResolver(resolver);\n}\n\nPromise.prototype.toString = function () {\n    return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n    var len = arguments.length;\n    if (len > 1) {\n        var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (typeof item === \"function\") {\n                catchInstances[j++] = item;\n            } else {\n                return Promise.reject(\n                    new TypeError(\"Catch filter must inherit from Error or be a simple predicate function\\u000a\\u000a    See http://goo.gl/o84o68\\u000a\"));\n            }\n        }\n        catchInstances.length = j;\n        fn = arguments[i];\n        var catchFilter = new CatchFilter(catchInstances, fn, this);\n        return this._then(undefined, catchFilter.doFilter, undefined,\n            catchFilter, undefined);\n    }\n    return this._then(undefined, fn, undefined, undefined, undefined);\n};\n\nPromise.prototype.reflect = function () {\n    return this._then(reflect, reflect, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject, didProgress) {\n    if (isDebugging() && arguments.length > 0 &&\n        typeof didFulfill !== \"function\" &&\n        typeof didReject !== \"function\") {\n        var msg = \".then() only accepts functions but was passed: \" +\n                util.classString(didFulfill);\n        if (arguments.length > 1) {\n            msg += \", \" + util.classString(didReject);\n        }\n        this._warn(msg);\n    }\n    return this._then(didFulfill, didReject, didProgress,\n        undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject, didProgress) {\n    var promise = this._then(didFulfill, didReject, didProgress,\n        undefined, undefined);\n    promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (didFulfill, didReject) {\n    return this.all()._then(didFulfill, didReject, undefined, APPLY, undefined);\n};\n\nPromise.prototype.isCancellable = function () {\n    return !this.isResolved() &&\n        this._cancellable();\n};\n\nPromise.prototype.toJSON = function () {\n    var ret = {\n        isFulfilled: false,\n        isRejected: false,\n        fulfillmentValue: undefined,\n        rejectionReason: undefined\n    };\n    if (this.isFulfilled()) {\n        ret.fulfillmentValue = this.value();\n        ret.isFulfilled = true;\n    } else if (this.isRejected()) {\n        ret.rejectionReason = this.reason();\n        ret.isRejected = true;\n    }\n    return ret;\n};\n\nPromise.prototype.all = function () {\n    return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n    return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n    return val instanceof Promise;\n};\n\nPromise.fromNode = function(fn) {\n    var ret = new Promise(INTERNAL);\n    var result = tryCatch(fn)(nodebackForPromise(ret));\n    if (result === errorObj) {\n        ret._rejectCallback(result.e, true, true);\n    }\n    return ret;\n};\n\nPromise.all = function (promises) {\n    return new PromiseArray(promises).promise();\n};\n\nPromise.defer = Promise.pending = function () {\n    var promise = new Promise(INTERNAL);\n    return new PromiseResolver(promise);\n};\n\nPromise.cast = function (obj) {\n    var ret = tryConvertToPromise(obj);\n    if (!(ret instanceof Promise)) {\n        var val = ret;\n        ret = new Promise(INTERNAL);\n        ret._fulfillUnchecked(val);\n    }\n    return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._rejectCallback(reason, true);\n    return ret;\n};\n\nPromise.setScheduler = function(fn) {\n    if (typeof fn !== \"function\") throw new TypeError(\"fn must be a function\\u000a\\u000a    See http://goo.gl/916lJJ\\u000a\");\n    var prev = async._schedule;\n    async._schedule = fn;\n    return prev;\n};\n\nPromise.prototype._then = function (\n    didFulfill,\n    didReject,\n    didProgress,\n    receiver,\n    internalData\n) {\n    var haveInternalData = internalData !== undefined;\n    var ret = haveInternalData ? internalData : new Promise(INTERNAL);\n\n    if (!haveInternalData) {\n        ret._propagateFrom(this, 4 | 1);\n        ret._captureStackTrace();\n    }\n\n    var target = this._target();\n    if (target !== this) {\n        if (receiver === undefined) receiver = this._boundTo;\n        if (!haveInternalData) ret._setIsMigrated();\n    }\n\n    var callbackIndex = target._addCallbacks(didFulfill,\n                                             didReject,\n                                             didProgress,\n                                             ret,\n                                             receiver,\n                                             getDomain());\n\n    if (target._isResolved() && !target._isSettlePromisesQueued()) {\n        async.invoke(\n            target._settlePromiseAtPostResolution, target, callbackIndex);\n    }\n\n    return ret;\n};\n\nPromise.prototype._settlePromiseAtPostResolution = function (index) {\n    if (this._isRejectionUnhandled()) this._unsetRejectionIsUnhandled();\n    this._settlePromiseAt(index);\n};\n\nPromise.prototype._length = function () {\n    return this._bitField & 131071;\n};\n\nPromise.prototype._isFollowingOrFulfilledOrRejected = function () {\n    return (this._bitField & 939524096) > 0;\n};\n\nPromise.prototype._isFollowing = function () {\n    return (this._bitField & 536870912) === 536870912;\n};\n\nPromise.prototype._setLength = function (len) {\n    this._bitField = (this._bitField & -131072) |\n        (len & 131071);\n};\n\nPromise.prototype._setFulfilled = function () {\n    this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._setRejected = function () {\n    this._bitField = this._bitField | 134217728;\n};\n\nPromise.prototype._setFollowing = function () {\n    this._bitField = this._bitField | 536870912;\n};\n\nPromise.prototype._setIsFinal = function () {\n    this._bitField = this._bitField | 33554432;\n};\n\nPromise.prototype._isFinal = function () {\n    return (this._bitField & 33554432) > 0;\n};\n\nPromise.prototype._cancellable = function () {\n    return (this._bitField & 67108864) > 0;\n};\n\nPromise.prototype._setCancellable = function () {\n    this._bitField = this._bitField | 67108864;\n};\n\nPromise.prototype._unsetCancellable = function () {\n    this._bitField = this._bitField & (~67108864);\n};\n\nPromise.prototype._setIsMigrated = function () {\n    this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._unsetIsMigrated = function () {\n    this._bitField = this._bitField & (~4194304);\n};\n\nPromise.prototype._isMigrated = function () {\n    return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._receiverAt = function (index) {\n    var ret = index === 0\n        ? this._receiver0\n        : this[\n            index * 5 - 5 + 4];\n    if (ret === UNDEFINED_BINDING) {\n        return undefined;\n    } else if (ret === undefined && this._isBound()) {\n        return this._boundValue();\n    }\n    return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n    return index === 0\n        ? this._promise0\n        : this[index * 5 - 5 + 3];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n    return index === 0\n        ? this._fulfillmentHandler0\n        : this[index * 5 - 5 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n    return index === 0\n        ? this._rejectionHandler0\n        : this[index * 5 - 5 + 1];\n};\n\nPromise.prototype._boundValue = function() {\n    var ret = this._boundTo;\n    if (ret !== undefined) {\n        if (ret instanceof Promise) {\n            if (ret.isFulfilled()) {\n                return ret.value();\n            } else {\n                return undefined;\n            }\n        }\n    }\n    return ret;\n};\n\nPromise.prototype._migrateCallbacks = function (follower, index) {\n    var fulfill = follower._fulfillmentHandlerAt(index);\n    var reject = follower._rejectionHandlerAt(index);\n    var progress = follower._progressHandlerAt(index);\n    var promise = follower._promiseAt(index);\n    var receiver = follower._receiverAt(index);\n    if (promise instanceof Promise) promise._setIsMigrated();\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, progress, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n    fulfill,\n    reject,\n    progress,\n    promise,\n    receiver,\n    domain\n) {\n    var index = this._length();\n\n    if (index >= 131071 - 5) {\n        index = 0;\n        this._setLength(0);\n    }\n\n    if (index === 0) {\n        this._promise0 = promise;\n        if (receiver !== undefined) this._receiver0 = receiver;\n        if (typeof fulfill === \"function\" && !this._isCarryingStackTrace()) {\n            this._fulfillmentHandler0 =\n                domain === null ? fulfill : domain.bind(fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this._rejectionHandler0 =\n                domain === null ? reject : domain.bind(reject);\n        }\n        if (typeof progress === \"function\") {\n            this._progressHandler0 =\n                domain === null ? progress : domain.bind(progress);\n        }\n    } else {\n        var base = index * 5 - 5;\n        this[base + 3] = promise;\n        this[base + 4] = receiver;\n        if (typeof fulfill === \"function\") {\n            this[base + 0] =\n                domain === null ? fulfill : domain.bind(fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this[base + 1] =\n                domain === null ? reject : domain.bind(reject);\n        }\n        if (typeof progress === \"function\") {\n            this[base + 2] =\n                domain === null ? progress : domain.bind(progress);\n        }\n    }\n    this._setLength(index + 1);\n    return index;\n};\n\nPromise.prototype._setProxyHandlers = function (receiver, promiseSlotValue) {\n    var index = this._length();\n\n    if (index >= 131071 - 5) {\n        index = 0;\n        this._setLength(0);\n    }\n    if (index === 0) {\n        this._promise0 = promiseSlotValue;\n        this._receiver0 = receiver;\n    } else {\n        var base = index * 5 - 5;\n        this[base + 3] = promiseSlotValue;\n        this[base + 4] = receiver;\n    }\n    this._setLength(index + 1);\n};\n\nPromise.prototype._proxyPromiseArray = function (promiseArray, index) {\n    this._setProxyHandlers(promiseArray, index);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n    if (this._isFollowingOrFulfilledOrRejected()) return;\n    if (value === this)\n        return this._rejectCallback(makeSelfResolutionError(), false, true);\n    var maybePromise = tryConvertToPromise(value, this);\n    if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n    var propagationFlags = 1 | (shouldBind ? 4 : 0);\n    this._propagateFrom(maybePromise, propagationFlags);\n    var promise = maybePromise._target();\n    if (promise._isPending()) {\n        var len = this._length();\n        for (var i = 0; i < len; ++i) {\n            promise._migrateCallbacks(this, i);\n        }\n        this._setFollowing();\n        this._setLength(0);\n        this._setFollowee(promise);\n    } else if (promise._isFulfilled()) {\n        this._fulfillUnchecked(promise._value());\n    } else {\n        this._rejectUnchecked(promise._reason(),\n            promise._getCarriedStackTrace());\n    }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, shouldNotMarkOriginatingFromRejection) {\n    if (!shouldNotMarkOriginatingFromRejection) {\n        util.markAsOriginatingFromRejection(reason);\n    }\n    var trace = util.ensureErrorObject(reason);\n    var hasStack = trace === reason;\n    this._attachExtraTrace(trace, synchronous ? hasStack : false);\n    this._reject(reason, hasStack ? undefined : trace);\n};\n\nPromise.prototype._resolveFromResolver = function (resolver) {\n    var promise = this;\n    this._captureStackTrace();\n    this._pushContext();\n    var synchronous = true;\n    var r = tryCatch(resolver)(function(value) {\n        if (promise === null) return;\n        promise._resolveCallback(value);\n        promise = null;\n    }, function (reason) {\n        if (promise === null) return;\n        promise._rejectCallback(reason, synchronous);\n        promise = null;\n    });\n    synchronous = false;\n    this._popContext();\n\n    if (r !== undefined && r === errorObj && promise !== null) {\n        promise._rejectCallback(r.e, true, true);\n        promise = null;\n    }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n    handler, receiver, value, promise\n) {\n    if (promise._isRejected()) return;\n    promise._pushContext();\n    var x;\n    if (receiver === APPLY && !this._isRejected()) {\n        x = tryCatch(handler).apply(this._boundValue(), value);\n    } else {\n        x = tryCatch(handler).call(receiver, value);\n    }\n    promise._popContext();\n\n    if (x === errorObj || x === promise || x === NEXT_FILTER) {\n        var err = x === promise ? makeSelfResolutionError() : x.e;\n        promise._rejectCallback(err, false, true);\n    } else {\n        promise._resolveCallback(x);\n    }\n};\n\nPromise.prototype._target = function() {\n    var ret = this;\n    while (ret._isFollowing()) ret = ret._followee();\n    return ret;\n};\n\nPromise.prototype._followee = function() {\n    return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n    this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._cleanValues = function () {\n    if (this._cancellable()) {\n        this._cancellationParent = undefined;\n    }\n};\n\nPromise.prototype._propagateFrom = function (parent, flags) {\n    if ((flags & 1) > 0 && parent._cancellable()) {\n        this._setCancellable();\n        this._cancellationParent = parent;\n    }\n    if ((flags & 4) > 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n};\n\nPromise.prototype._fulfill = function (value) {\n    if (this._isFollowingOrFulfilledOrRejected()) return;\n    this._fulfillUnchecked(value);\n};\n\nPromise.prototype._reject = function (reason, carriedStackTrace) {\n    if (this._isFollowingOrFulfilledOrRejected()) return;\n    this._rejectUnchecked(reason, carriedStackTrace);\n};\n\nPromise.prototype._settlePromiseAt = function (index) {\n    var promise = this._promiseAt(index);\n    var isPromise = promise instanceof Promise;\n\n    if (isPromise && promise._isMigrated()) {\n        promise._unsetIsMigrated();\n        return async.invoke(this._settlePromiseAt, this, index);\n    }\n    var handler = this._isFulfilled()\n        ? this._fulfillmentHandlerAt(index)\n        : this._rejectionHandlerAt(index);\n\n    var carriedStackTrace =\n        this._isCarryingStackTrace() ? this._getCarriedStackTrace() : undefined;\n    var value = this._settledValue;\n    var receiver = this._receiverAt(index);\n    this._clearCallbackDataAtIndex(index);\n\n    if (typeof handler === \"function\") {\n        if (!isPromise) {\n            handler.call(receiver, value, promise);\n        } else {\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (receiver instanceof PromiseArray) {\n        if (!receiver._isResolved()) {\n            if (this._isFulfilled()) {\n                receiver._promiseFulfilled(value, promise);\n            }\n            else {\n                receiver._promiseRejected(value, promise);\n            }\n        }\n    } else if (isPromise) {\n        if (this._isFulfilled()) {\n            promise._fulfill(value);\n        } else {\n            promise._reject(value, carriedStackTrace);\n        }\n    }\n\n    if (index >= 4 && (index & 31) === 4)\n        async.invokeLater(this._setLength, this, 0);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n    if (index === 0) {\n        if (!this._isCarryingStackTrace()) {\n            this._fulfillmentHandler0 = undefined;\n        }\n        this._rejectionHandler0 =\n        this._progressHandler0 =\n        this._receiver0 =\n        this._promise0 = undefined;\n    } else {\n        var base = index * 5 - 5;\n        this[base + 3] =\n        this[base + 4] =\n        this[base + 0] =\n        this[base + 1] =\n        this[base + 2] = undefined;\n    }\n};\n\nPromise.prototype._isSettlePromisesQueued = function () {\n    return (this._bitField &\n            -1073741824) === -1073741824;\n};\n\nPromise.prototype._setSettlePromisesQueued = function () {\n    this._bitField = this._bitField | -1073741824;\n};\n\nPromise.prototype._unsetSettlePromisesQueued = function () {\n    this._bitField = this._bitField & (~-1073741824);\n};\n\nPromise.prototype._queueSettlePromises = function() {\n    async.settlePromises(this);\n    this._setSettlePromisesQueued();\n};\n\nPromise.prototype._fulfillUnchecked = function (value) {\n    if (value === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._rejectUnchecked(err, undefined);\n    }\n    this._setFulfilled();\n    this._settledValue = value;\n    this._cleanValues();\n\n    if (this._length() > 0) {\n        this._queueSettlePromises();\n    }\n};\n\nPromise.prototype._rejectUncheckedCheckError = function (reason) {\n    var trace = util.ensureErrorObject(reason);\n    this._rejectUnchecked(reason, trace === reason ? undefined : trace);\n};\n\nPromise.prototype._rejectUnchecked = function (reason, trace) {\n    if (reason === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._rejectUnchecked(err);\n    }\n    this._setRejected();\n    this._settledValue = reason;\n    this._cleanValues();\n\n    if (this._isFinal()) {\n        async.throwLater(function(e) {\n            if (\"stack\" in e) {\n                async.invokeFirst(\n                    CapturedTrace.unhandledRejection, undefined, e);\n            }\n            throw e;\n        }, trace === undefined ? reason : trace);\n        return;\n    }\n\n    if (trace !== undefined && trace !== reason) {\n        this._setCarriedStackTrace(trace);\n    }\n\n    if (this._length() > 0) {\n        this._queueSettlePromises();\n    } else {\n        this._ensurePossibleRejectionHandled();\n    }\n};\n\nPromise.prototype._settlePromises = function () {\n    this._unsetSettlePromisesQueued();\n    var len = this._length();\n    for (var i = 0; i < len; i++) {\n        this._settlePromiseAt(i);\n    }\n};\n\n\nutil.notEnumerableProp(Promise,\n                       \"_makeSelfResolutionError\",\n                       makeSelfResolutionError);\n\nrequire(\"./progress.js\")(Promise, PromiseArray);\nrequire(\"./method.js\")(Promise, INTERNAL, tryConvertToPromise, apiRejection);\nrequire(\"./bind.js\")(Promise, INTERNAL, tryConvertToPromise);\nrequire(\"./finally.js\")(Promise, NEXT_FILTER, tryConvertToPromise);\nrequire(\"./direct_resolve.js\")(Promise);\nrequire(\"./synchronous_inspection.js\")(Promise);\nrequire(\"./join.js\")(Promise, PromiseArray, tryConvertToPromise, INTERNAL);\nPromise.version = \"2.11.0\";\nPromise.Promise = Promise;\nrequire('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);\nrequire('./cancel.js')(Promise);\nrequire('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext);\nrequire('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise);\nrequire('./nodeify.js')(Promise);\nrequire('./call_get.js')(Promise);\nrequire('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\nrequire('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\nrequire('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);\nrequire('./settle.js')(Promise, PromiseArray);\nrequire('./some.js')(Promise, PromiseArray, apiRejection);\nrequire('./promisify.js')(Promise, INTERNAL);\nrequire('./any.js')(Promise);\nrequire('./each.js')(Promise, INTERNAL);\nrequire('./timers.js')(Promise, INTERNAL);\nrequire('./filter.js')(Promise, INTERNAL);\n                                                         \n    util.toFastProperties(Promise);                                          \n    util.toFastProperties(Promise.prototype);                                \n    function fillTypes(value) {                                              \n        var p = new Promise(INTERNAL);                                       \n        p._fulfillmentHandler0 = value;                                      \n        p._rejectionHandler0 = value;                                        \n        p._progressHandler0 = value;                                         \n        p._promise0 = value;                                                 \n        p._receiver0 = value;                                                \n        p._settledValue = value;                                             \n    }                                                                        \n    // Complete slack tracking, opt out of field-type tracking and           \n    // stabilize map                                                         \n    fillTypes({a: 1});                                                       \n    fillTypes({b: 2});                                                       \n    fillTypes({c: 3});                                                       \n    fillTypes(1);                                                            \n    fillTypes(function(){});                                                 \n    fillTypes(undefined);                                                    \n    fillTypes(false);                                                        \n    fillTypes(new Promise(INTERNAL));                                        \n    CapturedTrace.setBounds(async.firstLineError, util.lastLineError);       \n    return Promise;                                                          \n\n};\n","\"use strict\";\nvar old;\nif (typeof Promise !== \"undefined\") old = Promise;\nfunction noConflict() {\n    try { if (Promise === bluebird) Promise = old; }\n    catch (e) {}\n    return bluebird;\n}\nvar bluebird = require(\"./promise.js\")();\nbluebird.noConflict = noConflict;\nmodule.exports = bluebird;\n","var Promise, createRetrieverPromise, fs, nodeifyWrapper, retrieveBuffer, retrieveCombinedStream, retrieveCoreHttpStream, retrieveFilesystemStream, retrieveRequestHttpStream;\n\nPromise = require(\"bluebird\");\n\nfs = Promise.promisifyAll(require(\"fs\"));\n\nnodeifyWrapper = function(callback, func) {\n  return func().nodeify(callback);\n};\n\ncreateRetrieverPromise = function(stream, retriever) {\n  return new Promise(function(resolve, reject) {\n    return retriever(stream, function(result) {\n      if (result != null) {\n        if (result instanceof Error) {\n          return reject(result);\n        } else {\n          return resolve(result);\n        }\n      } else {\n        return reject(new Error(\"Could not find a length using this lengthRetriever.\"));\n      }\n    });\n  });\n};\n\nretrieveBuffer = function(stream, callback) {\n  if (stream instanceof Buffer) {\n    return callback(stream.length);\n  } else {\n    return callback(null);\n  }\n};\n\nretrieveFilesystemStream = function(stream, callback) {\n  var _ref;\n  if (stream.hasOwnProperty(\"fd\")) {\n    if (stream.end !== void 0 && stream.end !== Infinity && stream.start !== void 0) {\n      return callback(stream.end + 1 - ((_ref = stream.start) != null ? _ref : 0));\n    } else {\n      return Promise[\"try\"](function() {\n        return fs.statAsync(stream.path);\n      }).then(function(stat) {\n        var _ref1;\n        return callback(stat.size - ((_ref1 = stream.start) != null ? _ref1 : 0));\n      })[\"catch\"](function(err) {\n        return callback(err);\n      });\n    }\n  } else {\n    return callback(null);\n  }\n};\n\nretrieveCoreHttpStream = function(stream, callback) {\n  if (stream.hasOwnProperty(\"httpVersion\") && (stream.headers[\"content-length\"] != null)) {\n    return callback(parseInt(stream.headers[\"content-length\"]));\n  } else {\n    return callback(null);\n  }\n};\n\nretrieveRequestHttpStream = function(stream, callback) {\n  if (stream.hasOwnProperty(\"httpModule\")) {\n    return stream.on(\"response\", function(response) {\n      if (response.headers[\"content-length\"] != null) {\n        return callback(parseInt(response.headers[\"content-length\"]));\n      } else {\n        return callback(null);\n      }\n    });\n  } else {\n    return callback(null);\n  }\n};\n\nretrieveCombinedStream = function(stream, callback) {\n  if (stream.getCombinedStreamLength != null) {\n    return stream.getCombinedStreamLength().then(function(length) {\n      return callback(length);\n    })[\"catch\"](function(err) {\n      return callback(err);\n    });\n  } else {\n    return callback(null);\n  }\n};\n\nmodule.exports = function(stream, options, callback) {\n  if (options == null) {\n    options = {};\n  }\n  return nodeifyWrapper(callback, function() {\n    var retriever, retrieverPromises, _i, _j, _len, _len1, _ref, _ref1;\n    retrieverPromises = [];\n    if (options.lengthRetrievers != null) {\n      _ref = options.lengthRetrievers;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        retriever = _ref[_i];\n        retrieverPromises.push(createRetrieverPromise(stream, retriever));\n      }\n    }\n    _ref1 = [retrieveBuffer, retrieveFilesystemStream, retrieveCoreHttpStream, retrieveRequestHttpStream, retrieveCombinedStream];\n    for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n      retriever = _ref1[_j];\n      retrieverPromises.push(createRetrieverPromise(stream, retriever));\n    }\n    return Promise.any(retrieverPromises);\n  });\n};\n","module.exports = require(\"./lib/stream-length\");\n","module.exports      = isTypedArray\nisTypedArray.strict = isStrictTypedArray\nisTypedArray.loose  = isLooseTypedArray\n\nvar toString = Object.prototype.toString\nvar names = {\n    '[object Int8Array]': true\n  , '[object Int16Array]': true\n  , '[object Int32Array]': true\n  , '[object Uint8Array]': true\n  , '[object Uint8ClampedArray]': true\n  , '[object Uint16Array]': true\n  , '[object Uint32Array]': true\n  , '[object Float32Array]': true\n  , '[object Float64Array]': true\n}\n\nfunction isTypedArray(arr) {\n  return (\n       isStrictTypedArray(arr)\n    || isLooseTypedArray(arr)\n  )\n}\n\nfunction isStrictTypedArray(arr) {\n  return (\n       arr instanceof Int8Array\n    || arr instanceof Int16Array\n    || arr instanceof Int32Array\n    || arr instanceof Uint8Array\n    || arr instanceof Uint8ClampedArray\n    || arr instanceof Uint16Array\n    || arr instanceof Uint32Array\n    || arr instanceof Float32Array\n    || arr instanceof Float64Array\n  )\n}\n\nfunction isLooseTypedArray(arr) {\n  return names[toString.call(arr)]\n}\n","exports = module.exports = stringify\nexports.getSerialize = serializer\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n  return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces)\n}\n\nfunction serializer(replacer, cycleReplacer) {\n  var stack = [], keys = []\n\n  if (cycleReplacer == null) cycleReplacer = function(key, value) {\n    if (stack[0] === value) return \"[Circular ~]\"\n    return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\"\n  }\n\n  return function(key, value) {\n    if (stack.length > 0) {\n      var thisPos = stack.indexOf(this)\n      ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)\n      ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)\n      if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value)\n    }\n    else stack.push(value)\n\n    return replacer == null ? value : replacer.call(this, key, value)\n  }\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","'use strict'\n\nvar jsonSafeStringify = require('json-stringify-safe')\nvar crypto = require('crypto')\nvar Buffer = require('safe-buffer').Buffer\nvar { Transform } = require('stream')\n\nvar defer = typeof setImmediate === 'undefined'\n  ? process.nextTick\n  : setImmediate\n\n// Reference: https://github.com/postmanlabs/postman-request/pull/23\n//\n// function paramsHaveRequestBody (params) {\n//   return (\n//     params.body ||\n//     params.requestBodyStream ||\n//     (params.json && typeof params.json !== 'boolean') ||\n//     params.multipart\n//   )\n// }\n\nfunction safeStringify (obj, replacer) {\n  var ret\n  try {\n    ret = JSON.stringify(obj, replacer)\n  } catch (e) {\n    ret = jsonSafeStringify(obj, replacer)\n  }\n  return ret\n}\n\nfunction md5 (str) {\n  return crypto.createHash('md5').update(str).digest('hex')\n}\n\nfunction isReadStream (rs) {\n  return rs.readable && rs.path && rs.mode\n}\n\nfunction toBase64 (str) {\n  return Buffer.from(str || '', 'utf8').toString('base64')\n}\n\nfunction copy (obj) {\n  var o = {}\n  Object.keys(obj).forEach(function (i) {\n    o[i] = obj[i]\n  })\n  return o\n}\n\nfunction version () {\n  var numbers = process.version.replace('v', '').split('.')\n  return {\n    major: parseInt(numbers[0], 10),\n    minor: parseInt(numbers[1], 10),\n    patch: parseInt(numbers[2], 10)\n  }\n}\n\nfunction now () {\n  return performance.now(); // eslint-disable-line\n}\n\nclass SizeTrackerStream extends Transform {\n  constructor (options) {\n    super(options)\n    this.size = 0\n  }\n\n  _transform (chunk, encoding, callback) {\n    this.size += chunk.length\n    this.push(chunk)\n    callback()\n  }\n\n  _flush (callback) {\n    callback()\n  }\n}\n\nexports.safeStringify = safeStringify\nexports.md5 = md5\nexports.isReadStream = isReadStream\nexports.toBase64 = toBase64\nexports.copy = copy\nexports.version = version\nexports.defer = defer\nexports.SizeTrackerStream = SizeTrackerStream\nexports.now = now\n","'use strict'\n\nfunction formatHostname (hostname) {\n  // canonicalize the hostname, so that 'oogle.com' won't match 'google.com'\n  return hostname.replace(/^\\.*/, '.').toLowerCase()\n}\n\nfunction parseNoProxyZone (zone) {\n  zone = zone.trim().toLowerCase()\n\n  var zoneParts = zone.split(':', 2)\n  var zoneHost = formatHostname(zoneParts[0])\n  var zonePort = zoneParts[1]\n  var hasPort = zone.indexOf(':') > -1\n\n  return {hostname: zoneHost, port: zonePort, hasPort: hasPort}\n}\n\nfunction uriInNoProxy (uri, noProxy) {\n  var port = uri.port || (uri.protocol === 'https:' ? '443' : '80')\n  var hostname = formatHostname(uri.hostname)\n  var noProxyList = noProxy.split(',')\n\n  // iterate through the noProxyList until it finds a match.\n  return noProxyList.map(parseNoProxyZone).some(function (noProxyZone) {\n    var isMatchedAt = hostname.indexOf(noProxyZone.hostname)\n    var hostnameMatched = (\n      isMatchedAt > -1 &&\n        (isMatchedAt === hostname.length - noProxyZone.hostname.length)\n    )\n\n    if (noProxyZone.hasPort) {\n      return (port === noProxyZone.port) && hostnameMatched\n    }\n\n    return hostnameMatched\n  })\n}\n\nfunction getProxyFromURI (uri) {\n  // Decide the proper request proxy to use based on the request URI object and the\n  // environmental variables (NO_PROXY, HTTP_PROXY, etc.)\n  // respect NO_PROXY environment variables (see: http://lynx.isc.org/current/breakout/lynx_help/keystrokes/environments.html)\n\n  var noProxy = process.env.NO_PROXY || process.env.no_proxy || ''\n\n  // if the noProxy is a wildcard then return null\n\n  if (noProxy === '*') {\n    return null\n  }\n\n  // if the noProxy is not empty and the uri is found return null\n\n  if (noProxy !== '' && uriInNoProxy(uri, noProxy)) {\n    return null\n  }\n\n  // Check for HTTP or HTTPS Proxy in environment Else default to null\n\n  if (uri.protocol === 'http:') {\n    return process.env.HTTP_PROXY ||\n      process.env.http_proxy || null\n  }\n\n  if (uri.protocol === 'https:') {\n    return process.env.HTTPS_PROXY ||\n      process.env.https_proxy ||\n      process.env.HTTP_PROXY ||\n      process.env.http_proxy || null\n  }\n\n  // if none of that works, return null\n  // (What uri protocol are you using then?)\n\n  return null\n}\n\nmodule.exports = getProxyFromURI\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    var obj;\n\n    while (queue.length) {\n        var item = queue.pop();\n        obj = item.obj[item.prop];\n\n        if (Array.isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n\n    return obj;\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (Array.isArray(target)) {\n            target.push(source);\n        } else if (target && typeof target === 'object') {\n            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (Array.isArray(target) && !Array.isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (Array.isArray(target) && Array.isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str) {\n    try {\n        return decodeURIComponent(str.replace(/\\+/g, ' '));\n    } catch (e) {\n        return str;\n    }\n};\n\nvar encode = function encode(str) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = typeof str === 'string' ? str : String(str);\n\n    var out = '';\n    for (var i = 0; i < string.length; ++i) {\n        var c = string.charCodeAt(i);\n\n        if (\n            c === 0x2D // -\n            || c === 0x2E // .\n            || c === 0x5F // _\n            || c === 0x7E // ~\n            || (c >= 0x30 && c <= 0x39) // 0-9\n            || (c >= 0x41 && c <= 0x5A) // a-z\n            || (c >= 0x61 && c <= 0x7A) // A-Z\n        ) {\n            out += string.charAt(i);\n            continue;\n        }\n\n        if (c < 0x80) {\n            out = out + hexTable[c];\n            continue;\n        }\n\n        if (c < 0x800) {\n            out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        if (c < 0xD800 || c >= 0xE000) {\n            out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        i += 1;\n        c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n        /* eslint operator-linebreak: [2, \"before\"] */\n        out += hexTable[0xF0 | (c >> 18)]\n            + hexTable[0x80 | ((c >> 12) & 0x3F)]\n            + hexTable[0x80 | ((c >> 6) & 0x3F)]\n            + hexTable[0x80 | (c & 0x3F)];\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    return compactQueue(queue);\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (obj === null || typeof obj === 'undefined') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    merge: merge\n};\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nmodule.exports = {\n    'default': 'RFC3986',\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar formats = require('./formats');\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaults = {\n    delimiter: '&',\n    encode: true,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    strictNullHandling,\n    skipNulls,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    formatter,\n    encodeValuesOnly\n) {\n    var obj = object;\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (skipNulls && obj[key] === null) {\n            continue;\n        }\n\n        if (isArray(obj)) {\n            pushToArray(values, stringify(\n                obj[key],\n                generateArrayPrefix(prefix, key),\n                generateArrayPrefix,\n                strictNullHandling,\n                skipNulls,\n                encoder,\n                filter,\n                sort,\n                allowDots,\n                serializeDate,\n                formatter,\n                encodeValuesOnly\n            ));\n        } else {\n            pushToArray(values, stringify(\n                obj[key],\n                prefix + (allowDots ? '.' + key : '[' + key + ']'),\n                generateArrayPrefix,\n                strictNullHandling,\n                skipNulls,\n                encoder,\n                filter,\n                sort,\n                allowDots,\n                serializeDate,\n                formatter,\n                encodeValuesOnly\n            ));\n        }\n    }\n\n    return values;\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = opts ? utils.assign({}, opts) : {};\n\n    if (options.encoder !== null && typeof options.encoder !== 'undefined' && typeof options.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;\n    var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;\n    var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;\n    var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;\n    var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder;\n    var sort = typeof options.sort === 'function' ? options.sort : null;\n    var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;\n    var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate;\n    var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly;\n    if (typeof options.format === 'undefined') {\n        options.format = formats['default'];\n    } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) {\n        throw new TypeError('Unknown format option provided.');\n    }\n    var formatter = formats.formatters[options.format];\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var arrayFormat;\n    if (options.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = options.arrayFormat;\n    } else if ('indices' in options) {\n        arrayFormat = options.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = 'indices';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (sort) {\n        objKeys.sort(sort);\n    }\n\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (skipNulls && obj[key] === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            strictNullHandling,\n            skipNulls,\n            encode ? encoder : null,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            formatter,\n            encodeValuesOnly\n        ));\n    }\n\n    var joined = keys.join(delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar defaults = {\n    allowDots: false,\n    allowPrototypes: false,\n    arrayLimit: 20,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    parameterLimit: 1000,\n    plainObjects: false,\n    strictNullHandling: false\n};\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = {};\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n\n    for (var i = 0; i < parts.length; ++i) {\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder);\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder);\n            val = options.decoder(part.slice(pos + 1), defaults.decoder);\n        }\n        if (has.call(obj, key)) {\n            obj[key] = [].concat(obj[key]).concat(val);\n        } else {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options) {\n    var leaf = val;\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            obj = [].concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var index = parseInt(cleanRoot, 10);\n            if (!options.parseArrays && cleanRoot === '') {\n                obj = { 0: leaf };\n            } else if (\n                !isNaN(index)\n                && root !== cleanRoot\n                && String(index) === cleanRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (cleanRoot !== '__proto__') {\n                obj[cleanRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys\n        // that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while ((segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, just add whatever is left\n\n    if (segment) {\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options);\n};\n\nmodule.exports = function (str, opts) {\n    var options = opts ? utils.assign({}, opts) : {};\n\n    if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    options.ignoreQueryPrefix = options.ignoreQueryPrefix === true;\n    options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter;\n    options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth;\n    options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit;\n    options.parseArrays = options.parseArrays !== false;\n    options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder;\n    options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots;\n    options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects;\n    options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes;\n    options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit;\n    options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options);\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    return utils.compact(obj);\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n","'use strict'\n\nvar qs = require('qs')\nvar querystring = require('querystring')\n\nfunction Querystring (request) {\n  this.request = request\n  this.lib = null\n  this.useQuerystring = null\n  this.parseOptions = null\n  this.stringifyOptions = null\n}\n\nQuerystring.prototype.init = function (options) {\n  if (this.lib) { return }\n\n  this.useQuerystring = options.useQuerystring\n  this.lib = (this.useQuerystring ? querystring : qs)\n\n  this.parseOptions = options.qsParseOptions || {}\n  this.stringifyOptions = options.qsStringifyOptions || {}\n}\n\nQuerystring.prototype.stringify = function (obj) {\n  return (this.useQuerystring)\n    ? this.rfc3986(this.lib.stringify(obj,\n      this.stringifyOptions.sep || null,\n      this.stringifyOptions.eq || null,\n      this.stringifyOptions))\n    : this.lib.stringify(obj, this.stringifyOptions)\n}\n\nQuerystring.prototype.parse = function (str) {\n  return (this.useQuerystring)\n    ? this.lib.parse(str,\n      this.parseOptions.sep || null,\n      this.parseOptions.eq || null,\n      this.parseOptions)\n    : this.lib.parse(str, this.parseOptions)\n}\n\nQuerystring.prototype.rfc3986 = function (str) {\n  return str.replace(/[!'()*]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\nQuerystring.prototype.unescape = querystring.unescape\n\nexports.Querystring = Querystring\n","'use strict'\n\nvar fs = require('fs')\nvar qs = require('querystring')\nvar extend = require('extend')\n\nfunction Har (request) {\n  this.request = request\n}\n\nHar.prototype.reducer = function (obj, pair) {\n  // new property ?\n  if (obj[pair.name] === undefined) {\n    obj[pair.name] = pair.value\n    return obj\n  }\n\n  // existing? convert to array\n  var arr = [\n    obj[pair.name],\n    pair.value\n  ]\n\n  obj[pair.name] = arr\n\n  return obj\n}\n\nHar.prototype.prep = function (data) {\n  // construct utility properties\n  data.queryObj = {}\n  data.headersObj = {}\n  data.postData.jsonObj = false\n  data.postData.paramsObj = false\n\n  // construct query objects\n  if (data.queryString && data.queryString.length) {\n    data.queryObj = data.queryString.reduce(this.reducer, {})\n  }\n\n  // construct headers objects\n  if (data.headers && data.headers.length) {\n    // loweCase header keys\n    data.headersObj = data.headers.reduceRight(function (headers, header) {\n      headers[header.name] = header.value\n      return headers\n    }, {})\n  }\n\n  // construct Cookie header\n  if (data.cookies && data.cookies.length) {\n    var cookies = data.cookies.map(function (cookie) {\n      return cookie.name + '=' + cookie.value\n    })\n\n    if (cookies.length) {\n      data.headersObj.cookie = cookies.join('; ')\n    }\n  }\n\n  // prep body\n  function some (arr) {\n    return arr.some(function (type) {\n      return data.postData.mimeType.indexOf(type) === 0\n    })\n  }\n\n  if (some([\n    'multipart/mixed',\n    'multipart/related',\n    'multipart/form-data',\n    'multipart/alternative'])) {\n    // reset values\n    data.postData.mimeType = 'multipart/form-data'\n  } else if (some([\n    'application/x-www-form-urlencoded'])) {\n    if (!data.postData.params) {\n      data.postData.text = ''\n    } else {\n      data.postData.paramsObj = data.postData.params.reduce(this.reducer, {})\n\n      // always overwrite\n      data.postData.text = qs.stringify(data.postData.paramsObj)\n    }\n  } else if (some([\n    'text/json',\n    'text/x-json',\n    'application/json',\n    'application/x-json'])) {\n    data.postData.mimeType = 'application/json'\n\n    if (data.postData.text) {\n      try {\n        data.postData.jsonObj = JSON.parse(data.postData.text)\n      } catch (e) {\n        this.request.debug(e)\n\n        // force back to text/plain\n        data.postData.mimeType = 'text/plain'\n      }\n    }\n  }\n\n  return data\n}\n\nHar.prototype.options = function (options) {\n  // skip if no har property defined\n  if (!options.har) {\n    return options\n  }\n\n  var har = {}\n  extend(har, options.har)\n\n  // only process the first entry\n  if (har.log && har.log.entries) {\n    har = har.log.entries[0]\n  }\n\n  // add optional properties to make validation successful\n  har.url = har.url || options.url || options.uri || options.baseUrl || '/'\n  har.httpVersion = har.httpVersion || 'HTTP/1.1'\n  har.queryString = har.queryString || []\n  har.headers = har.headers || []\n  har.cookies = har.cookies || []\n  har.postData = har.postData || {}\n  har.postData.mimeType = har.postData.mimeType || 'application/octet-stream'\n\n  har.bodySize = 0\n  har.headersSize = 0\n  har.postData.size = 0\n\n  // clean up and get some utility properties\n  var req = this.prep(har)\n\n  // construct new options\n  if (req.url) {\n    options.url = req.url\n  }\n\n  if (req.method) {\n    options.method = req.method\n  }\n\n  if (Object.keys(req.queryObj).length) {\n    options.qs = req.queryObj\n  }\n\n  if (Object.keys(req.headersObj).length) {\n    options.headers = req.headersObj\n  }\n\n  function test (type) {\n    return req.postData.mimeType.indexOf(type) === 0\n  }\n  if (test('application/x-www-form-urlencoded')) {\n    options.form = req.postData.paramsObj\n  } else if (test('application/json')) {\n    if (req.postData.jsonObj) {\n      options.body = req.postData.jsonObj\n      options.json = true\n    }\n  } else if (test('multipart/form-data')) {\n    options.formData = {}\n\n    req.postData.params.forEach(function (param) {\n      var attachment = {}\n\n      if (!param.fileName && !param.contentType) {\n        options.formData[param.name] = param.value\n        return\n      }\n\n      // attempt to read from disk!\n      if (param.fileName && !param.value) {\n        attachment.value = fs.createReadStream(param.fileName)\n      } else if (param.value) {\n        attachment.value = param.value\n      }\n\n      if (param.fileName) {\n        attachment.options = {\n          filename: param.fileName,\n          contentType: param.contentType ? param.contentType : null\n        }\n      }\n\n      options.formData[param.name] = attachment\n    })\n  } else {\n    if (req.postData.text) {\n      options.body = req.postData.text\n    }\n  }\n\n  return options\n}\n\nexports.Har = Har\n","'use strict'\n\nvar caseless = require('caseless')\nvar uuid = require('uuid').v4\nvar helpers = require('./helpers')\n\nvar md5 = helpers.md5\nvar toBase64 = helpers.toBase64\n\nfunction Auth (request) {\n  // define all public properties here\n  this.request = request\n  this.hasAuth = false\n  this.sentAuth = false\n  this.bearerToken = null\n  this.user = null\n  this.pass = null\n}\n\nAuth.prototype.basic = function (user, pass, sendImmediately) {\n  var self = this\n  if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) {\n    self.request.emit('error', new Error('auth() received invalid user or password'))\n  }\n  self.user = user\n  self.pass = pass\n  self.hasAuth = true\n  var header = user + ':' + (pass || '')\n  if (sendImmediately || typeof sendImmediately === 'undefined') {\n    var authHeader = 'Basic ' + toBase64(header)\n    self.sentAuth = true\n    return authHeader\n  }\n}\n\nAuth.prototype.bearer = function (bearer, sendImmediately) {\n  var self = this\n  self.bearerToken = bearer\n  self.hasAuth = true\n  if (sendImmediately || typeof sendImmediately === 'undefined') {\n    if (typeof bearer === 'function') {\n      bearer = bearer()\n    }\n    var authHeader = 'Bearer ' + (bearer || '')\n    self.sentAuth = true\n    return authHeader\n  }\n}\n\nAuth.prototype.digest = function (method, path, authHeader) {\n  // TODO: More complete implementation of RFC 2617.\n  //   - handle challenge.domain\n  //   - support qop=\"auth-int\" only\n  //   - handle Authentication-Info (not necessarily?)\n  //   - check challenge.stale (not necessarily?)\n  //   - increase nc (not necessarily?)\n  // For reference:\n  // http://tools.ietf.org/html/rfc2617#section-3\n  // https://github.com/bagder/curl/blob/master/lib/http_digest.c\n\n  var self = this\n\n  var challenge = {}\n  var re = /([a-z0-9_-]+)=(?:\"([^\"]+)\"|([a-z0-9_-]+))/gi\n  while (true) {\n    var match = re.exec(authHeader)\n    if (!match) {\n      break\n    }\n    challenge[match[1]] = match[2] || match[3]\n  }\n\n  /**\n   * RFC 2617: handle both MD5 and MD5-sess algorithms.\n   *\n   * If the algorithm directive's value is \"MD5\" or unspecified, then HA1 is\n   *   HA1=MD5(username:realm:password)\n   * If the algorithm directive's value is \"MD5-sess\", then HA1 is\n   *   HA1=MD5(MD5(username:realm:password):nonce:cnonce)\n   */\n  var ha1Compute = function (algorithm, user, realm, pass, nonce, cnonce) {\n    var ha1 = md5(user + ':' + realm + ':' + pass)\n    if (algorithm && algorithm.toLowerCase() === 'md5-sess') {\n      return md5(ha1 + ':' + nonce + ':' + cnonce)\n    } else {\n      return ha1\n    }\n  }\n\n  var qop = /(^|,)\\s*auth\\s*($|,)/.test(challenge.qop) && 'auth'\n  var nc = qop && '00000001'\n  var cnonce = qop && uuid().replace(/-/g, '')\n  var ha1 = ha1Compute(challenge.algorithm, self.user, challenge.realm, self.pass, challenge.nonce, cnonce)\n  var ha2 = md5(method + ':' + path)\n  var digestResponse = qop\n    ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2)\n    : md5(ha1 + ':' + challenge.nonce + ':' + ha2)\n  var authValues = {\n    username: self.user,\n    realm: challenge.realm,\n    nonce: challenge.nonce,\n    uri: path,\n    qop: qop,\n    response: digestResponse,\n    nc: nc,\n    cnonce: cnonce,\n    algorithm: challenge.algorithm,\n    opaque: challenge.opaque\n  }\n\n  authHeader = []\n  for (var k in authValues) {\n    if (authValues[k]) {\n      if (k === 'qop' || k === 'nc' || k === 'algorithm') {\n        authHeader.push(k + '=' + authValues[k])\n      } else {\n        authHeader.push(k + '=\"' + authValues[k] + '\"')\n      }\n    }\n  }\n  authHeader = 'Digest ' + authHeader.join(', ')\n  self.sentAuth = true\n  return authHeader\n}\n\nAuth.prototype.onRequest = function (user, pass, sendImmediately, bearer) {\n  var self = this\n  var request = self.request\n\n  var authHeader\n  if (bearer === undefined && user === undefined) {\n    self.request.emit('error', new Error('no auth mechanism defined'))\n  } else if (bearer !== undefined) {\n    authHeader = self.bearer(bearer, sendImmediately)\n  } else {\n    authHeader = self.basic(user, pass, sendImmediately)\n  }\n  if (authHeader) {\n    request.setHeader('Authorization', authHeader)\n  }\n}\n\nAuth.prototype.onResponse = function (response) {\n  var self = this\n  var request = self.request\n\n  if (!self.hasAuth || self.sentAuth) { return null }\n\n  var c = caseless(response.headers)\n\n  var authHeader = c.get('www-authenticate')\n  var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase()\n  request.debug('reauth', authVerb)\n\n  switch (authVerb) {\n    case 'basic':\n      return self.basic(self.user, self.pass, true)\n\n    case 'bearer':\n      return self.bearer(self.bearerToken, true)\n\n    case 'digest':\n      return self.digest(request.method, request.path, authHeader)\n  }\n}\n\nexports.Auth = Auth\n","var crypto = require('crypto')\n\nfunction sha (key, body, algorithm) {\n  return crypto.createHmac(algorithm, key).update(body).digest('base64')\n}\n\nfunction rsa (key, body) {\n  return crypto.createSign('RSA-SHA1').update(body).sign(key, 'base64')\n}\n\nfunction rfc3986 (str) {\n  return encodeURIComponent(str)\n    .replace(/!/g,'%21')\n    .replace(/\\*/g,'%2A')\n    .replace(/\\(/g,'%28')\n    .replace(/\\)/g,'%29')\n    .replace(/'/g,'%27')\n}\n\n// Maps object to bi-dimensional array\n// Converts { foo: 'A', bar: [ 'b', 'B' ]} to\n// [ ['foo', 'A'], ['bar', 'b'], ['bar', 'B'] ]\nfunction map (obj) {\n  var key, val, arr = []\n  for (key in obj) {\n    val = obj[key]\n    if (Array.isArray(val))\n      for (var i = 0; i < val.length; i++)\n        arr.push([key, val[i]])\n    else if (typeof val === 'object')\n      for (var prop in val)\n        arr.push([key + '[' + prop + ']', val[prop]])\n    else\n      arr.push([key, val])\n  }\n  return arr\n}\n\n// Compare function for sort\nfunction compare (a, b) {\n  return a > b ? 1 : a < b ? -1 : 0\n}\n\nfunction generateBase (httpMethod, base_uri, params) {\n  // adapted from https://dev.twitter.com/docs/auth/oauth and \n  // https://dev.twitter.com/docs/auth/creating-signature\n\n  // Parameter normalization\n  // http://tools.ietf.org/html/rfc5849#section-3.4.1.3.2\n  var normalized = map(params)\n  // 1.  First, the name and value of each parameter are encoded\n  .map(function (p) {\n    return [ rfc3986(p[0]), rfc3986(p[1] || '') ]\n  })\n  // 2.  The parameters are sorted by name, using ascending byte value\n  //     ordering.  If two or more parameters share the same name, they\n  //     are sorted by their value.\n  .sort(function (a, b) {\n    return compare(a[0], b[0]) || compare(a[1], b[1])\n  })\n  // 3.  The name of each parameter is concatenated to its corresponding\n  //     value using an \"=\" character (ASCII code 61) as a separator, even\n  //     if the value is empty.\n  .map(function (p) { return p.join('=') })\n   // 4.  The sorted name/value pairs are concatenated together into a\n   //     single string by using an \"&\" character (ASCII code 38) as\n   //     separator.\n  .join('&')\n\n  var base = [\n    rfc3986(httpMethod ? httpMethod.toUpperCase() : 'GET'),\n    rfc3986(base_uri),\n    rfc3986(normalized)\n  ].join('&')\n\n  return base\n}\n\nfunction hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) {\n  var base = generateBase(httpMethod, base_uri, params)\n  var key = [\n    consumer_secret || '',\n    token_secret || ''\n  ].map(rfc3986).join('&')\n\n  return sha(key, base, 'sha1')\n}\n\nfunction hmacsign256 (httpMethod, base_uri, params, consumer_secret, token_secret) {\n  var base = generateBase(httpMethod, base_uri, params)\n  var key = [\n    consumer_secret || '',\n    token_secret || ''\n  ].map(rfc3986).join('&')\n\n  return sha(key, base, 'sha256')\n}\n\nfunction rsasign (httpMethod, base_uri, params, private_key, token_secret) {\n  var base = generateBase(httpMethod, base_uri, params)\n  var key = private_key || ''\n\n  return rsa(key, base)\n}\n\nfunction plaintext (consumer_secret, token_secret) {\n  var key = [\n    consumer_secret || '',\n    token_secret || ''\n  ].map(rfc3986).join('&')\n\n  return key\n}\n\nfunction sign (signMethod, httpMethod, base_uri, params, consumer_secret, token_secret) {\n  var method\n  var skipArgs = 1\n\n  switch (signMethod) {\n    case 'RSA-SHA1':\n      method = rsasign\n      break\n    case 'HMAC-SHA1':\n      method = hmacsign\n      break\n    case 'HMAC-SHA256':\n      method = hmacsign256\n      break\n    case 'PLAINTEXT':\n      method = plaintext\n      skipArgs = 4\n      break\n    default:\n     throw new Error('Signature method not supported: ' + signMethod)\n  }\n\n  return method.apply(null, [].slice.call(arguments, skipArgs))\n}\n\nexports.hmacsign = hmacsign\nexports.hmacsign256 = hmacsign256\nexports.rsasign = rsasign\nexports.plaintext = plaintext\nexports.sign = sign\nexports.rfc3986 = rfc3986\nexports.generateBase = generateBase","'use strict'\n\nvar qs = require('qs')\nvar caseless = require('caseless')\nvar uuid = require('uuid').v4\nvar oauth = require('oauth-sign')\nvar crypto = require('crypto')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction OAuth (request) {\n  this.request = request\n  this.params = null\n}\n\nOAuth.prototype.buildParams = function (_oauth, uri, method, query, form, qsLib) {\n  var oa = {}\n  for (var i in _oauth) {\n    oa['oauth_' + i] = _oauth[i]\n  }\n  if (!oa.oauth_version) {\n    oa.oauth_version = '1.0'\n  }\n  if (!oa.oauth_timestamp) {\n    oa.oauth_timestamp = Math.floor(Date.now() / 1000).toString()\n  }\n  if (!oa.oauth_nonce) {\n    oa.oauth_nonce = uuid().replace(/-/g, '')\n  }\n  if (!oa.oauth_signature_method) {\n    oa.oauth_signature_method = 'HMAC-SHA1'\n  }\n\n  var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key // eslint-disable-line camelcase\n  delete oa.oauth_consumer_secret\n  delete oa.oauth_private_key\n\n  var token_secret = oa.oauth_token_secret // eslint-disable-line camelcase\n  delete oa.oauth_token_secret\n\n  var realm = oa.oauth_realm\n  delete oa.oauth_realm\n  delete oa.oauth_transport_method\n\n  var baseurl = uri.protocol + '//' + uri.host + uri.pathname\n  var params = qsLib.parse([].concat(query, form, qsLib.stringify(oa)).join('&'))\n\n  oa.oauth_signature = oauth.sign(\n    oa.oauth_signature_method,\n    method,\n    baseurl,\n    params,\n    consumer_secret_or_private_key, // eslint-disable-line camelcase\n    token_secret // eslint-disable-line camelcase\n  )\n\n  if (realm) {\n    oa.realm = realm\n  }\n\n  return oa\n}\n\nOAuth.prototype.buildBodyHash = function (_oauth, body) {\n  if (['HMAC-SHA1', 'RSA-SHA1'].indexOf(_oauth.signature_method || 'HMAC-SHA1') < 0) {\n    this.request.emit('error', new Error('oauth: ' + _oauth.signature_method +\n      ' signature_method not supported with body_hash signing.'))\n  }\n\n  var shasum = crypto.createHash('sha1')\n  shasum.update(body || '')\n  var sha1 = shasum.digest('hex')\n\n  return Buffer.from(sha1, 'hex').toString('base64')\n}\n\nOAuth.prototype.concatParams = function (oa, sep, wrap) {\n  wrap = wrap || ''\n\n  var params = Object.keys(oa).filter(function (i) {\n    return i !== 'realm' && i !== 'oauth_signature'\n  }).sort()\n\n  if (oa.realm) {\n    params.splice(0, 0, 'realm')\n  }\n  params.push('oauth_signature')\n\n  return params.map(function (i) {\n    return i + '=' + wrap + oauth.rfc3986(oa[i]) + wrap\n  }).join(sep)\n}\n\nOAuth.prototype.onRequest = function (_oauth) {\n  var self = this\n  self.params = _oauth\n\n  var uri = self.request.uri || {}\n  var method = self.request.method || ''\n  var headers = caseless(self.request.headers)\n  var body = self.request.body || ''\n  var qsLib = self.request.qsLib || qs\n\n  var form\n  var query\n  var contentType = headers.get('content-type') || ''\n  var formContentType = 'application/x-www-form-urlencoded'\n  var transport = _oauth.transport_method || 'header'\n\n  if (contentType.slice(0, formContentType.length) === formContentType) {\n    contentType = formContentType\n    form = body\n  }\n  if (uri.query) {\n    query = uri.query\n  }\n  if (transport === 'body' && (method !== 'POST' || contentType !== formContentType)) {\n    self.request.emit('error', new Error('oauth: transport_method of body requires POST ' +\n      'and content-type ' + formContentType))\n  }\n\n  if (!form && typeof _oauth.body_hash === 'boolean') {\n    _oauth.body_hash = self.buildBodyHash(_oauth, self.request.body.toString())\n  }\n\n  var oa = self.buildParams(_oauth, uri, method, query, form, qsLib)\n\n  switch (transport) {\n    case 'header':\n      self.request.setHeader('Authorization', 'OAuth ' + self.concatParams(oa, ',', '\"'))\n      break\n\n    case 'query':\n      var href = self.request.uri.href += (query ? '&' : '?') + self.concatParams(oa, '&')\n      self.request.uri = self.request.urlParser.parse(href)\n      self.request.path = self.request.uri.path\n      break\n\n    case 'body':\n      self.request.body = (form ? form + '&' : '') + self.concatParams(oa, '&')\n      break\n\n    default:\n      self.request.emit('error', new Error('oauth: transport_method invalid'))\n  }\n}\n\nexports.OAuth = OAuth\n","'use strict'\n\nvar crypto = require('crypto')\n\nfunction randomString (size) {\n  var bits = (size + 1) * 6\n  var buffer = crypto.randomBytes(Math.ceil(bits / 8))\n  var string = buffer.toString('base64').replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n  return string.slice(0, size)\n}\n\nfunction calculatePayloadHash (payload, algorithm, contentType) {\n  var hash = crypto.createHash(algorithm)\n  hash.update('hawk.1.payload\\n')\n  hash.update((contentType ? contentType.split(';')[0].trim().toLowerCase() : '') + '\\n')\n  hash.update(payload || '')\n  hash.update('\\n')\n  return hash.digest('base64')\n}\n\nexports.calculateMac = function (credentials, opts) {\n  var normalized = 'hawk.1.header\\n' +\n    opts.ts + '\\n' +\n    opts.nonce + '\\n' +\n    (opts.method || '').toUpperCase() + '\\n' +\n    opts.resource + '\\n' +\n    opts.host.toLowerCase() + '\\n' +\n    opts.port + '\\n' +\n    (opts.hash || '') + '\\n'\n\n  if (opts.ext) {\n    normalized = normalized + opts.ext.replace('\\\\', '\\\\\\\\').replace('\\n', '\\\\n')\n  }\n\n  normalized = normalized + '\\n'\n\n  if (opts.app) {\n    normalized = normalized + opts.app + '\\n' + (opts.dlg || '') + '\\n'\n  }\n\n  var hmac = crypto.createHmac(credentials.algorithm, credentials.key).update(normalized)\n  var digest = hmac.digest('base64')\n  return digest\n}\n\nexports.header = function (uri, method, opts) {\n  var timestamp = opts.timestamp || Math.floor((Date.now() + (opts.localtimeOffsetMsec || 0)) / 1000)\n  var credentials = opts.credentials\n  if (!credentials || !credentials.id || !credentials.key || !credentials.algorithm) {\n    return ''\n  }\n\n  if (['sha1', 'sha256'].indexOf(credentials.algorithm) === -1) {\n    return ''\n  }\n\n  var artifacts = {\n    ts: timestamp,\n    nonce: opts.nonce || randomString(6),\n    method: method,\n    resource: uri.pathname + (uri.search || ''),\n    host: uri.hostname,\n    port: uri.port || (uri.protocol === 'http:' ? 80 : 443),\n    hash: opts.hash,\n    ext: opts.ext,\n    app: opts.app,\n    dlg: opts.dlg\n  }\n\n  if (!artifacts.hash && (opts.payload || opts.payload === '')) {\n    artifacts.hash = calculatePayloadHash(opts.payload, credentials.algorithm, opts.contentType)\n  }\n\n  var mac = exports.calculateMac(credentials, artifacts)\n\n  var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''\n  var header = 'Hawk id=\"' + credentials.id +\n    '\", ts=\"' + artifacts.ts +\n    '\", nonce=\"' + artifacts.nonce +\n    (artifacts.hash ? '\", hash=\"' + artifacts.hash : '') +\n    (hasExt ? '\", ext=\"' + artifacts.ext.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"') : '') +\n    '\", mac=\"' + mac + '\"'\n\n  if (artifacts.app) {\n    header = header + ', app=\"' + artifacts.app + (artifacts.dlg ? '\", dlg=\"' + artifacts.dlg : '') + '\"'\n  }\n\n  return header\n}\n","'use strict'\n\nvar uuid = require('uuid').v4\nvar CombinedStream = require('combined-stream')\nvar isstream = require('isstream')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction Multipart (request) {\n  this.request = request\n  this.boundary = uuid()\n  this.chunked = false\n  this.body = null\n}\n\nMultipart.prototype.isChunked = function (options) {\n  var self = this\n  var chunked = false\n  var parts = options.data || options\n\n  if (!parts.forEach) {\n    self.request.emit('error', new Error('Argument error, options.multipart.'))\n  }\n\n  if (options.chunked !== undefined) {\n    chunked = options.chunked\n  }\n\n  if (self.request.getHeader('transfer-encoding') === 'chunked') {\n    chunked = true\n  }\n\n  if (!chunked) {\n    parts.forEach(function (part) {\n      if (typeof part.body === 'undefined') {\n        self.request.emit('error', new Error('Body attribute missing in multipart.'))\n      }\n      if (isstream(part.body)) {\n        chunked = true\n      }\n    })\n  }\n\n  return chunked\n}\n\nMultipart.prototype.setHeaders = function (chunked) {\n  var self = this\n\n  if (chunked && !self.request.hasHeader('transfer-encoding')) {\n    self.request.setHeader('Transfer-Encoding', 'chunked')\n  }\n\n  var header = self.request.getHeader('content-type')\n\n  if (!header || header.indexOf('multipart') === -1) {\n    self.request.setHeader('Content-Type', 'multipart/related; boundary=' + self.boundary)\n  } else {\n    if (header.indexOf('boundary') !== -1) {\n      self.boundary = header.replace(/.*boundary=([^\\s;]+).*/, '$1')\n    } else {\n      self.request.setHeader('Content-Type', header + '; boundary=' + self.boundary)\n    }\n  }\n}\n\nMultipart.prototype.build = function (parts, chunked) {\n  var self = this\n  var body = chunked ? new CombinedStream() : []\n\n  function add (part) {\n    if (typeof part === 'number') {\n      part = part.toString()\n    }\n    return chunked ? body.append(part) : body.push(Buffer.from(part))\n  }\n\n  if (self.request.preambleCRLF) {\n    add('\\r\\n')\n  }\n\n  parts.forEach(function (part) {\n    var preamble = '--' + self.boundary + '\\r\\n'\n    Object.keys(part).forEach(function (key) {\n      if (key === 'body') { return }\n      preamble += key + ': ' + part[key] + '\\r\\n'\n    })\n    preamble += '\\r\\n'\n    add(preamble)\n    add(part.body)\n    add('\\r\\n')\n  })\n  add('--' + self.boundary + '--')\n\n  if (self.request.postambleCRLF) {\n    add('\\r\\n')\n  }\n\n  return body\n}\n\nMultipart.prototype.onRequest = function (options) {\n  var self = this\n\n  var chunked = self.isChunked(options)\n  var parts = options.data || options\n\n  self.setHeaders(chunked)\n  self.chunked = chunked\n  self.body = self.build(parts, chunked)\n}\n\nexports.Multipart = Multipart\n","'use strict'\n\nvar fs = require('fs')\nvar isUrl = /^https?:/\n\nfunction Redirect (request) {\n  this.request = request\n  this.followRedirect = true\n  this.followRedirects = true\n  this.followAllRedirects = false\n  this.followOriginalHttpMethod = false\n  this.followAuthorizationHeader = false\n  this.allowRedirect = function () { return true }\n  this.maxRedirects = 10\n  this.redirects = []\n  this.redirectsFollowed = 0\n  this.removeRefererHeader = false\n}\n\nRedirect.prototype.onRequest = function (options) {\n  var self = this\n\n  if (options.maxRedirects !== undefined) {\n    self.maxRedirects = options.maxRedirects\n  }\n  if (typeof options.followRedirect === 'function') {\n    self.allowRedirect = options.followRedirect\n  }\n  if (options.followRedirect !== undefined) {\n    self.followRedirects = !!options.followRedirect\n  }\n  if (options.followAllRedirects !== undefined) {\n    self.followAllRedirects = options.followAllRedirects\n  }\n  if (self.followRedirects || self.followAllRedirects) {\n    self.redirects = self.redirects || []\n  }\n  if (options.removeRefererHeader !== undefined) {\n    self.removeRefererHeader = options.removeRefererHeader\n  }\n  if (options.followOriginalHttpMethod !== undefined) {\n    self.followOriginalHttpMethod = options.followOriginalHttpMethod\n  }\n  if (options.followAuthorizationHeader !== undefined) {\n    self.followAuthorizationHeader = options.followAuthorizationHeader\n  }\n}\n\nRedirect.prototype.redirectTo = function (response) {\n  var self = this\n  var request = self.request\n\n  var redirectTo = null\n  if (response.statusCode >= 300 && response.statusCode < 400 && response.caseless.has('location')) {\n    var location = response.caseless.get('location')\n    request.debug('redirect', location)\n\n    if (self.followAllRedirects) {\n      redirectTo = location\n    } else if (self.followRedirects) {\n      switch (request.method) {\n        case 'PATCH':\n        case 'PUT':\n        case 'POST':\n        case 'DELETE':\n          // Do not follow redirects\n          break\n        default:\n          redirectTo = location\n          break\n      }\n    }\n  } else if (response.statusCode === 401) {\n    // retry the request with the new Authorization header value using\n    // WWW-Authenticate response header.\n    // https://tools.ietf.org/html/rfc7235#section-3.1\n    var authHeader = request._auth.onResponse(response)\n    if (authHeader) {\n      request.setHeader('Authorization', authHeader)\n      redirectTo = request.uri\n    }\n  }\n  return redirectTo\n}\n\nRedirect.prototype.onResponse = function (response) {\n  var self = this\n  var request = self.request\n  var urlParser = request.urlParser\n  var options = {}\n\n  var redirectTo = self.redirectTo(response)\n  if (!redirectTo || !self.allowRedirect.call(request, response)) {\n    return false\n  }\n\n  request.debug('redirect to', redirectTo)\n\n  // ignore any potential response body.  it cannot possibly be useful\n  // to us at this point.\n  // response.resume should be defined, but check anyway before calling. Workaround for browserify.\n  if (response.resume) {\n    response.resume()\n  }\n\n  if (self.redirectsFollowed >= self.maxRedirects) {\n    request.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + request.uri.href))\n    return false\n  }\n  self.redirectsFollowed += 1\n\n  if (!isUrl.test(redirectTo)) {\n    redirectTo = urlParser.resolve(request.uri.href, redirectTo)\n  }\n\n  var uriPrev = request.uri\n  request.uri = urlParser.parse(redirectTo)\n\n  // handle the case where we change protocol from https to http or vice versa\n  if (request.uri.protocol !== uriPrev.protocol) {\n    delete request.agent\n  }\n\n  self.redirects.push({ statusCode: response.statusCode, redirectUri: redirectTo })\n\n  // if the redirect hostname (not just port or protocol) is changed:\n  //  1. remove host header, the new host will be populated on request.init\n  //  2. remove authorization header, avoid authentication leak\n  // @note: This is done because of security reasons, irrespective of the\n  // status code or request method used.\n  if (request.headers && uriPrev.hostname !== request.uri.hostname) {\n    request.removeHeader('host')\n\n    // use followAuthorizationHeader option to retain authorization header\n    if (!self.followAuthorizationHeader) {\n      request.removeHeader('authorization')\n    }\n  }\n\n  delete request.src\n  delete request.req\n  delete request._started\n\n  // Switch request method to GET\n  // - if followOriginalHttpMethod is not set [OVERRIDE]\n  // - or, statusCode code is not 401, 307 or 308 [STANDARD]\n  // - also, remove request body for the GET redirect [STANDARD]\n  // @note: when followOriginalHttpMethod is set,\n  // it will always retain the request body irrespective of the method (say GET) or status code (any 3XX).\n  if (!self.followOriginalHttpMethod &&\n    response.statusCode !== 401 && response.statusCode !== 307 && response.statusCode !== 308) {\n      // force all redirects to use GET (legacy reasons)\n      // but, HEAD is considered as a safe method so, the method is retained.\n    if (request.method !== 'HEAD') {\n      request.method = 'GET'\n    }\n\n    // Remove parameters from the previous response, unless this is the second request\n    // for a server that requires digest authentication.\n    delete request.body\n    delete request._form\n    delete request._multipart\n    if (request.headers) {\n      request.removeHeader('content-type')\n      request.removeHeader('content-length')\n    }\n  }\n\n  // Restore form-data stream if request body is retained\n  if (request.formData &&\n      // make sure _form is released and there's no pending _streams left\n      // which will be the case for 401 redirects. so, reuse _form on redirect\n      // @note: multiple form-param / file-streams may cause following issue:\n      // https://github.com/request/request/issues/887\n      // @todo: expose stream errors as events\n      request._form && request._form._released &&\n      request._form._streams && !request._form._streams.length) {\n    // reinitialize FormData stream for 307 or 308 redirects\n    delete request._form\n    // remove content-type header for new boundary\n    request.removeHeader('content-type')\n    // remove content-length header since FormValue may be dropped if its not a file stream\n    request.removeHeader('content-length')\n\n    var formData = []\n    var resetFormData = function (key, value, paramOptions) {\n      // if `value` is of type stream\n      if (typeof (value && value.pipe) === 'function') {\n        // bail out if not a file stream\n        if (!(value.hasOwnProperty('fd') && value.path)) return\n        // create new file stream\n        value = fs.createReadStream(value.path)\n      }\n\n      formData.push({key: key, value: value, options: paramOptions})\n    }\n    for (var i = 0, ii = request.formData.length; i < ii; i++) {\n      var formParam = request.formData[i]\n      if (!formParam) { continue }\n      resetFormData(formParam.key, formParam.value, formParam.options)\n    }\n\n    // setting `options.formData` will reinitialize FormData in `request.init`\n    options.formData = formData\n  }\n\n  if (!self.removeRefererHeader) {\n    request.setHeader('Referer', uriPrev.href)\n  }\n\n  request.emit('redirect')\n\n  request.init(options)\n\n  return true\n}\n\nexports.Redirect = Redirect\n","'use strict'\n\nvar net = require('net')\n  , tls = require('tls')\n  , http = require('http')\n  , https = require('https')\n  , events = require('events')\n  , util = require('util')\n  , Buffer = require('safe-buffer').Buffer\n  ;\n\nexports.httpOverHttp = httpOverHttp\nexports.httpsOverHttp = httpsOverHttp\nexports.httpOverHttps = httpOverHttps\nexports.httpsOverHttps = httpsOverHttps\n\n\nfunction httpOverHttp(options) {\n  var agent = new TunnelingAgent(options)\n  agent.request = http.request\n  return agent\n}\n\nfunction httpsOverHttp(options) {\n  var agent = new TunnelingAgent(options)\n  agent.request = http.request\n  agent.createSocket = createSecureSocket\n  agent.defaultPort = 443\n  return agent\n}\n\nfunction httpOverHttps(options) {\n  var agent = new TunnelingAgent(options)\n  agent.request = https.request\n  return agent\n}\n\nfunction httpsOverHttps(options) {\n  var agent = new TunnelingAgent(options)\n  agent.request = https.request\n  agent.createSocket = createSecureSocket\n  agent.defaultPort = 443\n  return agent\n}\n\n\nfunction TunnelingAgent(options) {\n  var self = this\n  self.options = options || {}\n  self.proxyOptions = self.options.proxy || {}\n  self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets\n  self.requests = []\n  self.sockets = []\n\n  self.on('free', function onFree(socket, host, port) {\n    for (var i = 0, len = self.requests.length; i < len; ++i) {\n      var pending = self.requests[i]\n      if (pending.host === host && pending.port === port) {\n        // Detect the request to connect same origin server,\n        // reuse the connection.\n        self.requests.splice(i, 1)\n        pending.request.onSocket(socket)\n        return\n      }\n    }\n    socket.destroy()\n    self.removeSocket(socket)\n  })\n}\nutil.inherits(TunnelingAgent, events.EventEmitter)\n\nTunnelingAgent.prototype.addRequest = function addRequest(req, options) {\n  var self = this\n\n   // Legacy API: addRequest(req, host, port, path)\n  if (typeof options === 'string') {\n    options = {\n      host: options,\n      port: arguments[2],\n      path: arguments[3]\n    };\n  }\n\n  if (self.sockets.length >= this.maxSockets) {\n    // We are over limit so we'll add it to the queue.\n    self.requests.push({host: options.host, port: options.port, request: req})\n    return\n  }\n\n  // If we are under maxSockets create a new one.\n  self.createConnection({host: options.host, port: options.port, request: req})\n}\n\nTunnelingAgent.prototype.createConnection = function createConnection(pending) {\n  var self = this\n\n  self.createSocket(pending, function(err, socket) {\n    if (err) {\n      pending.request.emit('error', err)\n      return\n    }\n\n    socket.on('free', onFree)\n    socket.on('close', onCloseOrRemove)\n    socket.on('agentRemove', onCloseOrRemove)\n    pending.request.onSocket(socket)\n\n    function onFree() {\n      self.emit('free', socket, pending.host, pending.port)\n    }\n\n    function onCloseOrRemove(err) {\n      self.removeSocket(socket)\n      socket.removeListener('free', onFree)\n      socket.removeListener('close', onCloseOrRemove)\n      socket.removeListener('agentRemove', onCloseOrRemove)\n    }\n  })\n}\n\nTunnelingAgent.prototype.createSocket = function createSocket(options, cb) {\n  var self = this\n  var placeholder = {}\n  self.sockets.push(placeholder)\n\n  var connectOptions = mergeOptions({}, self.proxyOptions,\n    { method: 'CONNECT'\n    , path: options.host + ':' + options.port\n    , agent: false\n    }\n  )\n  if (connectOptions.proxyAuth) {\n    connectOptions.headers = connectOptions.headers || {}\n    connectOptions.headers['Proxy-Authorization'] = 'Basic ' +\n        Buffer.from(connectOptions.proxyAuth).toString('base64')\n  }\n\n  debug('making CONNECT request')\n  var connectReq = self.request(connectOptions)\n  connectReq.useChunkedEncodingByDefault = false // for v0.6\n  connectReq.once('response', onResponse) // for v0.6\n  connectReq.once('upgrade', onUpgrade)   // for v0.6\n  connectReq.once('connect', onConnect)   // for v0.7 or later\n  connectReq.once('error', onError)\n  connectReq.end()\n\n  function onResponse(res) {\n    // Very hacky. This is necessary to avoid http-parser leaks.\n    res.upgrade = true\n  }\n\n  function onUpgrade(res, socket, head) {\n    // Hacky.\n    process.nextTick(function() {\n      onConnect(res, socket, head)\n    })\n  }\n\n  function onConnect(res, socket, head) {\n    connectReq.removeAllListeners()\n    socket.removeAllListeners()\n\n    if (res.statusCode === 200) {\n      // @note `head` is the buffer for the response sent by the proxy server\n      // after a successful tunnel is established. The RFC says that any\n      // response sent after the successful response headers is to be considered\n      // to be sent from the target server. But handling this edge-case requires\n      // a lot of architecture changes which we're deferring for later.\n      //\n      // RFC: https://tools.ietf.org/html/rfc7231#section-4.3.6\n      //\n      // To prevent assertion error for this case we're commenting out the\n      // following statement:\n      //\n      // assert.equal(head.length, 0)\n\n      debug('tunneling connection has established')\n      self.sockets[self.sockets.indexOf(placeholder)] = socket\n      cb(null, socket)\n    } else {\n      debug('tunneling socket could not be established, statusCode=%d', res.statusCode)\n      var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode)\n      error.code = 'ECONNRESET'\n      self.removeSocket(placeholder)\n      cb(error)\n    }\n  }\n\n  function onError(cause) {\n    connectReq.removeAllListeners()\n\n    debug('tunneling socket could not be established, cause=%s\\n', cause.message, cause.stack)\n    var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message)\n    error.code = 'ECONNRESET'\n    options.request.emit('error', error)\n    self.removeSocket(placeholder)\n  }\n}\n\nTunnelingAgent.prototype.removeSocket = function removeSocket(socket) {\n  var pos = this.sockets.indexOf(socket)\n  if (pos === -1) return\n\n  this.sockets.splice(pos, 1)\n\n  var pending = this.requests.shift()\n  if (pending) {\n    // If we have pending requests and a socket gets closed a new one\n    // needs to be created to take over in the pool for the one that closed.\n    this.createConnection(pending)\n  }\n}\n\nfunction createSecureSocket(options, cb) {\n  var self = this\n  TunnelingAgent.prototype.createSocket.call(self, options, function(err, socket) {\n    if (err) {\n      return cb(err)\n    }\n\n    var secureSocket\n    var secureContext\n\n    if(self.options.extraCA) {\n      secureContext = tls.createSecureContext(self.options)\n      secureContext.context.addCACert(self.options.extraCA)\n    }\n\n    try {\n      // 0 is dummy port for v0.6\n      secureSocket = tls.connect(0, mergeOptions({}, self.options,\n        { servername: options.host\n        , socket: socket\n        , secureContext: secureContext\n        }\n      ))\n    }\n    catch (error) {\n      self.removeSocket(socket)\n      socket.destroy()\n      return cb(error)\n    }\n\n    self.sockets[self.sockets.indexOf(socket)] = secureSocket\n    cb(null, secureSocket)\n  })\n}\n\n\nfunction mergeOptions(target) {\n  for (var i = 1, len = arguments.length; i < len; ++i) {\n    var overrides = arguments[i]\n    if (typeof overrides === 'object') {\n      var keys = Object.keys(overrides)\n      for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {\n        var k = keys[j]\n        if (overrides[k] !== undefined) {\n          target[k] = overrides[k]\n        }\n      }\n    }\n  }\n  return target\n}\n\n\nvar debug\nif (process.env.NODE_DEBUG && /\\btunnel\\b/.test(process.env.NODE_DEBUG)) {\n  debug = function() {\n    var args = Array.prototype.slice.call(arguments)\n    if (typeof args[0] === 'string') {\n      args[0] = 'TUNNEL: ' + args[0]\n    } else {\n      args.unshift('TUNNEL:')\n    }\n    console.error.apply(console, args)\n  }\n} else {\n  debug = function() {}\n}\nexports.debug = debug // for test\n","'use strict'\n\nvar tunnel = require('@postman/tunnel-agent')\n\nvar defaultProxyHeaderWhiteList = [\n  'accept',\n  'accept-charset',\n  'accept-encoding',\n  'accept-language',\n  'accept-ranges',\n  'cache-control',\n  'content-encoding',\n  'content-language',\n  'content-location',\n  'content-md5',\n  'content-range',\n  'content-type',\n  'connection',\n  'date',\n  'expect',\n  'max-forwards',\n  'pragma',\n  'referer',\n  'te',\n  'user-agent',\n  'via'\n]\n\nvar defaultProxyHeaderExclusiveList = [\n  'proxy-authorization'\n]\n\nfunction constructProxyHost (uriObject) {\n  var port = uriObject.port\n  var protocol = uriObject.protocol\n  var proxyHost = uriObject.hostname + ':'\n\n  if (port) {\n    proxyHost += port\n  } else if (protocol === 'https:') {\n    proxyHost += '443'\n  } else {\n    proxyHost += '80'\n  }\n\n  return proxyHost\n}\n\nfunction constructProxyHeaderWhiteList (headers, proxyHeaderWhiteList) {\n  var whiteList = proxyHeaderWhiteList\n    .reduce(function (set, header) {\n      set[header.toLowerCase()] = true\n      return set\n    }, {})\n\n  return Object.keys(headers)\n    .filter(function (header) {\n      return whiteList[header.toLowerCase()]\n    })\n    .reduce(function (set, header) {\n      set[header] = headers[header]\n      return set\n    }, {})\n}\n\nfunction constructTunnelOptions (request, proxyHeaders) {\n  var proxy = request.proxy\n\n  var tunnelOptions = {\n    proxy: {\n      host: proxy.hostname,\n      port: +proxy.port,\n      proxyAuth: proxy.auth,\n      headers: proxyHeaders\n    },\n    headers: request.headers,\n    ca: request.ca,\n    cert: request.cert,\n    key: request.key,\n    passphrase: request.passphrase,\n    pfx: request.pfx,\n    ciphers: request.ciphers,\n    rejectUnauthorized: request.rejectUnauthorized,\n    secureOptions: request.secureOptions,\n    secureProtocol: request.secureProtocol,\n    extraCA: request.extraCA\n  }\n\n  return tunnelOptions\n}\n\nfunction constructTunnelFnName (uri, proxy) {\n  var uriProtocol = (uri.protocol === 'https:' ? 'https' : 'http')\n  var proxyProtocol = (proxy.protocol === 'https:' ? 'Https' : 'Http')\n  return [uriProtocol, proxyProtocol].join('Over')\n}\n\nfunction getTunnelFn (request) {\n  var uri = request.uri\n  var proxy = request.proxy\n  var tunnelFnName = constructTunnelFnName(uri, proxy)\n  return tunnel[tunnelFnName]\n}\n\nfunction Tunnel (request) {\n  this.request = request\n  this.proxyHeaderWhiteList = defaultProxyHeaderWhiteList\n  this.proxyHeaderExclusiveList = []\n  if (typeof request.tunnel !== 'undefined') {\n    this.tunnelOverride = request.tunnel\n  }\n}\n\nTunnel.prototype.isEnabled = function () {\n  var self = this\n  var request = self.request\n    // Tunnel HTTPS by default. Allow the user to override this setting.\n\n  // If self.tunnelOverride is set (the user specified a value), use it.\n  if (typeof self.tunnelOverride !== 'undefined') {\n    return self.tunnelOverride\n  }\n\n  // If the destination is HTTPS, tunnel.\n  if (request.uri.protocol === 'https:') {\n    return true\n  }\n\n  // Otherwise, do not use tunnel.\n  return false\n}\n\nTunnel.prototype.setup = function (options) {\n  var self = this\n  var request = self.request\n\n  options = options || {}\n\n  if (typeof request.proxy === 'string') {\n    request.proxy = request.urlParser.parse(request.proxy)\n  }\n\n  if (!request.proxy || !request.tunnel) {\n    return false\n  }\n\n  // Setup Proxy Header Exclusive List and White List\n  if (options.proxyHeaderWhiteList) {\n    self.proxyHeaderWhiteList = options.proxyHeaderWhiteList\n  }\n  if (options.proxyHeaderExclusiveList) {\n    self.proxyHeaderExclusiveList = options.proxyHeaderExclusiveList\n  }\n\n  var proxyHeaderExclusiveList = self.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList)\n  var proxyHeaderWhiteList = self.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList)\n\n  // Setup Proxy Headers and Proxy Headers Host\n  // Only send the Proxy White Listed Header names\n  var proxyHeaders = constructProxyHeaderWhiteList(request.headers, proxyHeaderWhiteList)\n  proxyHeaders.host = constructProxyHost(request.uri)\n\n  proxyHeaderExclusiveList.forEach(request.removeHeader, request)\n\n  // Set Agent from Tunnel Data\n  var tunnelFn = getTunnelFn(request)\n  var tunnelOptions = constructTunnelOptions(request, proxyHeaders)\n  request.agent = tunnelFn(tunnelOptions)\n\n  return true\n}\n\nTunnel.defaultProxyHeaderWhiteList = defaultProxyHeaderWhiteList\nTunnel.defaultProxyHeaderExclusiveList = defaultProxyHeaderExclusiveList\nexports.Tunnel = Tunnel\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst buffer_1 = require(\"buffer\");\n/**\n * Error strings\n */\nconst ERRORS = {\n    INVALID_ENCODING: 'Invalid encoding provided. Please specify a valid encoding the internal Node.js Buffer supports.',\n    INVALID_SMARTBUFFER_SIZE: 'Invalid size provided. Size must be a valid integer greater than zero.',\n    INVALID_SMARTBUFFER_BUFFER: 'Invalid Buffer provided in SmartBufferOptions.',\n    INVALID_SMARTBUFFER_OBJECT: 'Invalid SmartBufferOptions object supplied to SmartBuffer constructor or factory methods.',\n    INVALID_OFFSET: 'An invalid offset value was provided.',\n    INVALID_OFFSET_NON_NUMBER: 'An invalid offset value was provided. A numeric value is required.',\n    INVALID_LENGTH: 'An invalid length value was provided.',\n    INVALID_LENGTH_NON_NUMBER: 'An invalid length value was provived. A numeric value is required.',\n    INVALID_TARGET_OFFSET: 'Target offset is beyond the bounds of the internal SmartBuffer data.',\n    INVALID_TARGET_LENGTH: 'Specified length value moves cursor beyong the bounds of the internal SmartBuffer data.',\n    INVALID_READ_BEYOND_BOUNDS: 'Attempted to read beyond the bounds of the managed data.',\n    INVALID_WRITE_BEYOND_BOUNDS: 'Attempted to write beyond the bounds of the managed data.'\n};\nexports.ERRORS = ERRORS;\n/**\n * Checks if a given encoding is a valid Buffer encoding. (Throws an exception if check fails)\n *\n * @param { String } encoding The encoding string to check.\n */\nfunction checkEncoding(encoding) {\n    if (!buffer_1.Buffer.isEncoding(encoding)) {\n        throw new Error(ERRORS.INVALID_ENCODING);\n    }\n}\nexports.checkEncoding = checkEncoding;\n/**\n * Checks if a given number is a finite integer. (Throws an exception if check fails)\n *\n * @param { Number } value The number value to check.\n */\nfunction isFiniteInteger(value) {\n    return typeof value === 'number' && isFinite(value) && isInteger(value);\n}\nexports.isFiniteInteger = isFiniteInteger;\n/**\n * Checks if an offset/length value is valid. (Throws an exception if check fails)\n *\n * @param value The value to check.\n * @param offset True if checking an offset, false if checking a length.\n */\nfunction checkOffsetOrLengthValue(value, offset) {\n    if (typeof value === 'number') {\n        // Check for non finite/non integers\n        if (!isFiniteInteger(value) || value < 0) {\n            throw new Error(offset ? ERRORS.INVALID_OFFSET : ERRORS.INVALID_LENGTH);\n        }\n    }\n    else {\n        throw new Error(offset ? ERRORS.INVALID_OFFSET_NON_NUMBER : ERRORS.INVALID_LENGTH_NON_NUMBER);\n    }\n}\n/**\n * Checks if a length value is valid. (Throws an exception if check fails)\n *\n * @param { Number } length The value to check.\n */\nfunction checkLengthValue(length) {\n    checkOffsetOrLengthValue(length, false);\n}\nexports.checkLengthValue = checkLengthValue;\n/**\n * Checks if a offset value is valid. (Throws an exception if check fails)\n *\n * @param { Number } offset The value to check.\n */\nfunction checkOffsetValue(offset) {\n    checkOffsetOrLengthValue(offset, true);\n}\nexports.checkOffsetValue = checkOffsetValue;\n/**\n * Checks if a target offset value is out of bounds. (Throws an exception if check fails)\n *\n * @param { Number } offset The offset value to check.\n * @param { SmartBuffer } buff The SmartBuffer instance to check against.\n */\nfunction checkTargetOffset(offset, buff) {\n    if (offset < 0 || offset > buff.length) {\n        throw new Error(ERRORS.INVALID_TARGET_OFFSET);\n    }\n}\nexports.checkTargetOffset = checkTargetOffset;\n/**\n * Determines whether a given number is a integer.\n * @param value The number to check.\n */\nfunction isInteger(value) {\n    return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Throws if Node.js version is too low to support bigint\n */\nfunction bigIntAndBufferInt64Check(bufferMethod) {\n    if (typeof BigInt === 'undefined') {\n        throw new Error('Platform does not support JS BigInt type.');\n    }\n    if (typeof buffer_1.Buffer.prototype[bufferMethod] === 'undefined') {\n        throw new Error(`Platform does not support Buffer.prototype.${bufferMethod}.`);\n    }\n}\nexports.bigIntAndBufferInt64Check = bigIntAndBufferInt64Check;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"./utils\");\n// The default Buffer size if one is not provided.\nconst DEFAULT_SMARTBUFFER_SIZE = 4096;\n// The default string encoding to use for reading/writing strings.\nconst DEFAULT_SMARTBUFFER_ENCODING = 'utf8';\nclass SmartBuffer {\n    /**\n     * Creates a new SmartBuffer instance.\n     *\n     * @param options { SmartBufferOptions } The SmartBufferOptions to apply to this instance.\n     */\n    constructor(options) {\n        this.length = 0;\n        this._encoding = DEFAULT_SMARTBUFFER_ENCODING;\n        this._writeOffset = 0;\n        this._readOffset = 0;\n        if (SmartBuffer.isSmartBufferOptions(options)) {\n            // Checks for encoding\n            if (options.encoding) {\n                utils_1.checkEncoding(options.encoding);\n                this._encoding = options.encoding;\n            }\n            // Checks for initial size length\n            if (options.size) {\n                if (utils_1.isFiniteInteger(options.size) && options.size > 0) {\n                    this._buff = Buffer.allocUnsafe(options.size);\n                }\n                else {\n                    throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_SIZE);\n                }\n                // Check for initial Buffer\n            }\n            else if (options.buff) {\n                if (Buffer.isBuffer(options.buff)) {\n                    this._buff = options.buff;\n                    this.length = options.buff.length;\n                }\n                else {\n                    throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_BUFFER);\n                }\n            }\n            else {\n                this._buff = Buffer.allocUnsafe(DEFAULT_SMARTBUFFER_SIZE);\n            }\n        }\n        else {\n            // If something was passed but it's not a SmartBufferOptions object\n            if (typeof options !== 'undefined') {\n                throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_OBJECT);\n            }\n            // Otherwise default to sane options\n            this._buff = Buffer.allocUnsafe(DEFAULT_SMARTBUFFER_SIZE);\n        }\n    }\n    /**\n     * Creates a new SmartBuffer instance with the provided internal Buffer size and optional encoding.\n     *\n     * @param size { Number } The size of the internal Buffer.\n     * @param encoding { String } The BufferEncoding to use for strings.\n     *\n     * @return { SmartBuffer }\n     */\n    static fromSize(size, encoding) {\n        return new this({\n            size: size,\n            encoding: encoding\n        });\n    }\n    /**\n     * Creates a new SmartBuffer instance with the provided Buffer and optional encoding.\n     *\n     * @param buffer { Buffer } The Buffer to use as the internal Buffer value.\n     * @param encoding { String } The BufferEncoding to use for strings.\n     *\n     * @return { SmartBuffer }\n     */\n    static fromBuffer(buff, encoding) {\n        return new this({\n            buff: buff,\n            encoding: encoding\n        });\n    }\n    /**\n     * Creates a new SmartBuffer instance with the provided SmartBufferOptions options.\n     *\n     * @param options { SmartBufferOptions } The options to use when creating the SmartBuffer instance.\n     */\n    static fromOptions(options) {\n        return new this(options);\n    }\n    /**\n     * Type checking function that determines if an object is a SmartBufferOptions object.\n     */\n    static isSmartBufferOptions(options) {\n        const castOptions = options;\n        return (castOptions &&\n            (castOptions.encoding !== undefined || castOptions.size !== undefined || castOptions.buff !== undefined));\n    }\n    // Signed integers\n    /**\n     * Reads an Int8 value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readInt8(offset) {\n        return this._readNumberValue(Buffer.prototype.readInt8, 1, offset);\n    }\n    /**\n     * Reads an Int16BE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readInt16BE(offset) {\n        return this._readNumberValue(Buffer.prototype.readInt16BE, 2, offset);\n    }\n    /**\n     * Reads an Int16LE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readInt16LE(offset) {\n        return this._readNumberValue(Buffer.prototype.readInt16LE, 2, offset);\n    }\n    /**\n     * Reads an Int32BE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readInt32BE(offset) {\n        return this._readNumberValue(Buffer.prototype.readInt32BE, 4, offset);\n    }\n    /**\n     * Reads an Int32LE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readInt32LE(offset) {\n        return this._readNumberValue(Buffer.prototype.readInt32LE, 4, offset);\n    }\n    /**\n     * Reads a BigInt64BE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { BigInt }\n     */\n    readBigInt64BE(offset) {\n        utils_1.bigIntAndBufferInt64Check('readBigInt64BE');\n        return this._readNumberValue(Buffer.prototype.readBigInt64BE, 8, offset);\n    }\n    /**\n     * Reads a BigInt64LE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { BigInt }\n     */\n    readBigInt64LE(offset) {\n        utils_1.bigIntAndBufferInt64Check('readBigInt64LE');\n        return this._readNumberValue(Buffer.prototype.readBigInt64LE, 8, offset);\n    }\n    /**\n     * Writes an Int8 value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeInt8(value, offset) {\n        this._writeNumberValue(Buffer.prototype.writeInt8, 1, value, offset);\n        return this;\n    }\n    /**\n     * Inserts an Int8 value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertInt8(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeInt8, 1, value, offset);\n    }\n    /**\n     * Writes an Int16BE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeInt16BE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeInt16BE, 2, value, offset);\n    }\n    /**\n     * Inserts an Int16BE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertInt16BE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeInt16BE, 2, value, offset);\n    }\n    /**\n     * Writes an Int16LE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeInt16LE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeInt16LE, 2, value, offset);\n    }\n    /**\n     * Inserts an Int16LE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertInt16LE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeInt16LE, 2, value, offset);\n    }\n    /**\n     * Writes an Int32BE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeInt32BE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeInt32BE, 4, value, offset);\n    }\n    /**\n     * Inserts an Int32BE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertInt32BE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeInt32BE, 4, value, offset);\n    }\n    /**\n     * Writes an Int32LE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeInt32LE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeInt32LE, 4, value, offset);\n    }\n    /**\n     * Inserts an Int32LE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertInt32LE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeInt32LE, 4, value, offset);\n    }\n    /**\n     * Writes a BigInt64BE value to the current write position (or at optional offset).\n     *\n     * @param value { BigInt } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeBigInt64BE(value, offset) {\n        utils_1.bigIntAndBufferInt64Check('writeBigInt64BE');\n        return this._writeNumberValue(Buffer.prototype.writeBigInt64BE, 8, value, offset);\n    }\n    /**\n     * Inserts a BigInt64BE value at the given offset value.\n     *\n     * @param value { BigInt } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertBigInt64BE(value, offset) {\n        utils_1.bigIntAndBufferInt64Check('writeBigInt64BE');\n        return this._insertNumberValue(Buffer.prototype.writeBigInt64BE, 8, value, offset);\n    }\n    /**\n     * Writes a BigInt64LE value to the current write position (or at optional offset).\n     *\n     * @param value { BigInt } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeBigInt64LE(value, offset) {\n        utils_1.bigIntAndBufferInt64Check('writeBigInt64LE');\n        return this._writeNumberValue(Buffer.prototype.writeBigInt64LE, 8, value, offset);\n    }\n    /**\n     * Inserts a Int64LE value at the given offset value.\n     *\n     * @param value { BigInt } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertBigInt64LE(value, offset) {\n        utils_1.bigIntAndBufferInt64Check('writeBigInt64LE');\n        return this._insertNumberValue(Buffer.prototype.writeBigInt64LE, 8, value, offset);\n    }\n    // Unsigned Integers\n    /**\n     * Reads an UInt8 value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readUInt8(offset) {\n        return this._readNumberValue(Buffer.prototype.readUInt8, 1, offset);\n    }\n    /**\n     * Reads an UInt16BE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readUInt16BE(offset) {\n        return this._readNumberValue(Buffer.prototype.readUInt16BE, 2, offset);\n    }\n    /**\n     * Reads an UInt16LE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readUInt16LE(offset) {\n        return this._readNumberValue(Buffer.prototype.readUInt16LE, 2, offset);\n    }\n    /**\n     * Reads an UInt32BE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readUInt32BE(offset) {\n        return this._readNumberValue(Buffer.prototype.readUInt32BE, 4, offset);\n    }\n    /**\n     * Reads an UInt32LE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readUInt32LE(offset) {\n        return this._readNumberValue(Buffer.prototype.readUInt32LE, 4, offset);\n    }\n    /**\n     * Reads a BigUInt64BE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { BigInt }\n     */\n    readBigUInt64BE(offset) {\n        utils_1.bigIntAndBufferInt64Check('readBigUInt64BE');\n        return this._readNumberValue(Buffer.prototype.readBigUInt64BE, 8, offset);\n    }\n    /**\n     * Reads a BigUInt64LE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { BigInt }\n     */\n    readBigUInt64LE(offset) {\n        utils_1.bigIntAndBufferInt64Check('readBigUInt64LE');\n        return this._readNumberValue(Buffer.prototype.readBigUInt64LE, 8, offset);\n    }\n    /**\n     * Writes an UInt8 value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeUInt8(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeUInt8, 1, value, offset);\n    }\n    /**\n     * Inserts an UInt8 value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertUInt8(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeUInt8, 1, value, offset);\n    }\n    /**\n     * Writes an UInt16BE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeUInt16BE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeUInt16BE, 2, value, offset);\n    }\n    /**\n     * Inserts an UInt16BE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertUInt16BE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeUInt16BE, 2, value, offset);\n    }\n    /**\n     * Writes an UInt16LE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeUInt16LE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeUInt16LE, 2, value, offset);\n    }\n    /**\n     * Inserts an UInt16LE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertUInt16LE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeUInt16LE, 2, value, offset);\n    }\n    /**\n     * Writes an UInt32BE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeUInt32BE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeUInt32BE, 4, value, offset);\n    }\n    /**\n     * Inserts an UInt32BE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertUInt32BE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeUInt32BE, 4, value, offset);\n    }\n    /**\n     * Writes an UInt32LE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeUInt32LE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeUInt32LE, 4, value, offset);\n    }\n    /**\n     * Inserts an UInt32LE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertUInt32LE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeUInt32LE, 4, value, offset);\n    }\n    /**\n     * Writes a BigUInt64BE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeBigUInt64BE(value, offset) {\n        utils_1.bigIntAndBufferInt64Check('writeBigUInt64BE');\n        return this._writeNumberValue(Buffer.prototype.writeBigUInt64BE, 8, value, offset);\n    }\n    /**\n     * Inserts a BigUInt64BE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertBigUInt64BE(value, offset) {\n        utils_1.bigIntAndBufferInt64Check('writeBigUInt64BE');\n        return this._insertNumberValue(Buffer.prototype.writeBigUInt64BE, 8, value, offset);\n    }\n    /**\n     * Writes a BigUInt64LE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeBigUInt64LE(value, offset) {\n        utils_1.bigIntAndBufferInt64Check('writeBigUInt64LE');\n        return this._writeNumberValue(Buffer.prototype.writeBigUInt64LE, 8, value, offset);\n    }\n    /**\n     * Inserts a BigUInt64LE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertBigUInt64LE(value, offset) {\n        utils_1.bigIntAndBufferInt64Check('writeBigUInt64LE');\n        return this._insertNumberValue(Buffer.prototype.writeBigUInt64LE, 8, value, offset);\n    }\n    // Floating Point\n    /**\n     * Reads an FloatBE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readFloatBE(offset) {\n        return this._readNumberValue(Buffer.prototype.readFloatBE, 4, offset);\n    }\n    /**\n     * Reads an FloatLE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readFloatLE(offset) {\n        return this._readNumberValue(Buffer.prototype.readFloatLE, 4, offset);\n    }\n    /**\n     * Writes a FloatBE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeFloatBE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeFloatBE, 4, value, offset);\n    }\n    /**\n     * Inserts a FloatBE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertFloatBE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeFloatBE, 4, value, offset);\n    }\n    /**\n     * Writes a FloatLE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeFloatLE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeFloatLE, 4, value, offset);\n    }\n    /**\n     * Inserts a FloatLE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertFloatLE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeFloatLE, 4, value, offset);\n    }\n    // Double Floating Point\n    /**\n     * Reads an DoublEBE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readDoubleBE(offset) {\n        return this._readNumberValue(Buffer.prototype.readDoubleBE, 8, offset);\n    }\n    /**\n     * Reads an DoubleLE value from the current read position or an optionally provided offset.\n     *\n     * @param offset { Number } The offset to read data from (optional)\n     * @return { Number }\n     */\n    readDoubleLE(offset) {\n        return this._readNumberValue(Buffer.prototype.readDoubleLE, 8, offset);\n    }\n    /**\n     * Writes a DoubleBE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeDoubleBE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeDoubleBE, 8, value, offset);\n    }\n    /**\n     * Inserts a DoubleBE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertDoubleBE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeDoubleBE, 8, value, offset);\n    }\n    /**\n     * Writes a DoubleLE value to the current write position (or at optional offset).\n     *\n     * @param value { Number } The value to write.\n     * @param offset { Number } The offset to write the value at.\n     *\n     * @return this\n     */\n    writeDoubleLE(value, offset) {\n        return this._writeNumberValue(Buffer.prototype.writeDoubleLE, 8, value, offset);\n    }\n    /**\n     * Inserts a DoubleLE value at the given offset value.\n     *\n     * @param value { Number } The value to insert.\n     * @param offset { Number } The offset to insert the value at.\n     *\n     * @return this\n     */\n    insertDoubleLE(value, offset) {\n        return this._insertNumberValue(Buffer.prototype.writeDoubleLE, 8, value, offset);\n    }\n    // Strings\n    /**\n     * Reads a String from the current read position.\n     *\n     * @param arg1 { Number | String } The number of bytes to read as a String, or the BufferEncoding to use for\n     *             the string (Defaults to instance level encoding).\n     * @param encoding { String } The BufferEncoding to use for the string (Defaults to instance level encoding).\n     *\n     * @return { String }\n     */\n    readString(arg1, encoding) {\n        let lengthVal;\n        // Length provided\n        if (typeof arg1 === 'number') {\n            utils_1.checkLengthValue(arg1);\n            lengthVal = Math.min(arg1, this.length - this._readOffset);\n        }\n        else {\n            encoding = arg1;\n            lengthVal = this.length - this._readOffset;\n        }\n        // Check encoding\n        if (typeof encoding !== 'undefined') {\n            utils_1.checkEncoding(encoding);\n        }\n        const value = this._buff.slice(this._readOffset, this._readOffset + lengthVal).toString(encoding || this._encoding);\n        this._readOffset += lengthVal;\n        return value;\n    }\n    /**\n     * Inserts a String\n     *\n     * @param value { String } The String value to insert.\n     * @param offset { Number } The offset to insert the string at.\n     * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).\n     *\n     * @return this\n     */\n    insertString(value, offset, encoding) {\n        utils_1.checkOffsetValue(offset);\n        return this._handleString(value, true, offset, encoding);\n    }\n    /**\n     * Writes a String\n     *\n     * @param value { String } The String value to write.\n     * @param arg2 { Number | String } The offset to write the string at, or the BufferEncoding to use.\n     * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).\n     *\n     * @return this\n     */\n    writeString(value, arg2, encoding) {\n        return this._handleString(value, false, arg2, encoding);\n    }\n    /**\n     * Reads a null-terminated String from the current read position.\n     *\n     * @param encoding { String } The BufferEncoding to use for the string (Defaults to instance level encoding).\n     *\n     * @return { String }\n     */\n    readStringNT(encoding) {\n        if (typeof encoding !== 'undefined') {\n            utils_1.checkEncoding(encoding);\n        }\n        // Set null character position to the end SmartBuffer instance.\n        let nullPos = this.length;\n        // Find next null character (if one is not found, default from above is used)\n        for (let i = this._readOffset; i < this.length; i++) {\n            if (this._buff[i] === 0x00) {\n                nullPos = i;\n                break;\n            }\n        }\n        // Read string value\n        const value = this._buff.slice(this._readOffset, nullPos);\n        // Increment internal Buffer read offset\n        this._readOffset = nullPos + 1;\n        return value.toString(encoding || this._encoding);\n    }\n    /**\n     * Inserts a null-terminated String.\n     *\n     * @param value { String } The String value to write.\n     * @param arg2 { Number | String } The offset to write the string to, or the BufferEncoding to use.\n     * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).\n     *\n     * @return this\n     */\n    insertStringNT(value, offset, encoding) {\n        utils_1.checkOffsetValue(offset);\n        // Write Values\n        this.insertString(value, offset, encoding);\n        this.insertUInt8(0x00, offset + value.length);\n        return this;\n    }\n    /**\n     * Writes a null-terminated String.\n     *\n     * @param value { String } The String value to write.\n     * @param arg2 { Number | String } The offset to write the string to, or the BufferEncoding to use.\n     * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).\n     *\n     * @return this\n     */\n    writeStringNT(value, arg2, encoding) {\n        // Write Values\n        this.writeString(value, arg2, encoding);\n        this.writeUInt8(0x00, typeof arg2 === 'number' ? arg2 + value.length : this.writeOffset);\n        return this;\n    }\n    // Buffers\n    /**\n     * Reads a Buffer from the internal read position.\n     *\n     * @param length { Number } The length of data to read as a Buffer.\n     *\n     * @return { Buffer }\n     */\n    readBuffer(length) {\n        if (typeof length !== 'undefined') {\n            utils_1.checkLengthValue(length);\n        }\n        const lengthVal = typeof length === 'number' ? length : this.length;\n        const endPoint = Math.min(this.length, this._readOffset + lengthVal);\n        // Read buffer value\n        const value = this._buff.slice(this._readOffset, endPoint);\n        // Increment internal Buffer read offset\n        this._readOffset = endPoint;\n        return value;\n    }\n    /**\n     * Writes a Buffer to the current write position.\n     *\n     * @param value { Buffer } The Buffer to write.\n     * @param offset { Number } The offset to write the Buffer to.\n     *\n     * @return this\n     */\n    insertBuffer(value, offset) {\n        utils_1.checkOffsetValue(offset);\n        return this._handleBuffer(value, true, offset);\n    }\n    /**\n     * Writes a Buffer to the current write position.\n     *\n     * @param value { Buffer } The Buffer to write.\n     * @param offset { Number } The offset to write the Buffer to.\n     *\n     * @return this\n     */\n    writeBuffer(value, offset) {\n        return this._handleBuffer(value, false, offset);\n    }\n    /**\n     * Reads a null-terminated Buffer from the current read poisiton.\n     *\n     * @return { Buffer }\n     */\n    readBufferNT() {\n        // Set null character position to the end SmartBuffer instance.\n        let nullPos = this.length;\n        // Find next null character (if one is not found, default from above is used)\n        for (let i = this._readOffset; i < this.length; i++) {\n            if (this._buff[i] === 0x00) {\n                nullPos = i;\n                break;\n            }\n        }\n        // Read value\n        const value = this._buff.slice(this._readOffset, nullPos);\n        // Increment internal Buffer read offset\n        this._readOffset = nullPos + 1;\n        return value;\n    }\n    /**\n     * Inserts a null-terminated Buffer.\n     *\n     * @param value { Buffer } The Buffer to write.\n     * @param offset { Number } The offset to write the Buffer to.\n     *\n     * @return this\n     */\n    insertBufferNT(value, offset) {\n        utils_1.checkOffsetValue(offset);\n        // Write Values\n        this.insertBuffer(value, offset);\n        this.insertUInt8(0x00, offset + value.length);\n        return this;\n    }\n    /**\n     * Writes a null-terminated Buffer.\n     *\n     * @param value { Buffer } The Buffer to write.\n     * @param offset { Number } The offset to write the Buffer to.\n     *\n     * @return this\n     */\n    writeBufferNT(value, offset) {\n        // Checks for valid numberic value;\n        if (typeof offset !== 'undefined') {\n            utils_1.checkOffsetValue(offset);\n        }\n        // Write Values\n        this.writeBuffer(value, offset);\n        this.writeUInt8(0x00, typeof offset === 'number' ? offset + value.length : this._writeOffset);\n        return this;\n    }\n    /**\n     * Clears the SmartBuffer instance to its original empty state.\n     */\n    clear() {\n        this._writeOffset = 0;\n        this._readOffset = 0;\n        this.length = 0;\n        return this;\n    }\n    /**\n     * Gets the remaining data left to be read from the SmartBuffer instance.\n     *\n     * @return { Number }\n     */\n    remaining() {\n        return this.length - this._readOffset;\n    }\n    /**\n     * Gets the current read offset value of the SmartBuffer instance.\n     *\n     * @return { Number }\n     */\n    get readOffset() {\n        return this._readOffset;\n    }\n    /**\n     * Sets the read offset value of the SmartBuffer instance.\n     *\n     * @param offset { Number } - The offset value to set.\n     */\n    set readOffset(offset) {\n        utils_1.checkOffsetValue(offset);\n        // Check for bounds.\n        utils_1.checkTargetOffset(offset, this);\n        this._readOffset = offset;\n    }\n    /**\n     * Gets the current write offset value of the SmartBuffer instance.\n     *\n     * @return { Number }\n     */\n    get writeOffset() {\n        return this._writeOffset;\n    }\n    /**\n     * Sets the write offset value of the SmartBuffer instance.\n     *\n     * @param offset { Number } - The offset value to set.\n     */\n    set writeOffset(offset) {\n        utils_1.checkOffsetValue(offset);\n        // Check for bounds.\n        utils_1.checkTargetOffset(offset, this);\n        this._writeOffset = offset;\n    }\n    /**\n     * Gets the currently set string encoding of the SmartBuffer instance.\n     *\n     * @return { BufferEncoding } The string Buffer encoding currently set.\n     */\n    get encoding() {\n        return this._encoding;\n    }\n    /**\n     * Sets the string encoding of the SmartBuffer instance.\n     *\n     * @param encoding { BufferEncoding } The string Buffer encoding to set.\n     */\n    set encoding(encoding) {\n        utils_1.checkEncoding(encoding);\n        this._encoding = encoding;\n    }\n    /**\n     * Gets the underlying internal Buffer. (This includes unmanaged data in the Buffer)\n     *\n     * @return { Buffer } The Buffer value.\n     */\n    get internalBuffer() {\n        return this._buff;\n    }\n    /**\n     * Gets the value of the internal managed Buffer (Includes managed data only)\n     *\n     * @param { Buffer }\n     */\n    toBuffer() {\n        return this._buff.slice(0, this.length);\n    }\n    /**\n     * Gets the String value of the internal managed Buffer\n     *\n     * @param encoding { String } The BufferEncoding to display the Buffer as (defaults to instance level encoding).\n     */\n    toString(encoding) {\n        const encodingVal = typeof encoding === 'string' ? encoding : this._encoding;\n        // Check for invalid encoding.\n        utils_1.checkEncoding(encodingVal);\n        return this._buff.toString(encodingVal, 0, this.length);\n    }\n    /**\n     * Destroys the SmartBuffer instance.\n     */\n    destroy() {\n        this.clear();\n        return this;\n    }\n    /**\n     * Handles inserting and writing strings.\n     *\n     * @param value { String } The String value to insert.\n     * @param isInsert { Boolean } True if inserting a string, false if writing.\n     * @param arg2 { Number | String } The offset to insert the string at, or the BufferEncoding to use.\n     * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).\n     */\n    _handleString(value, isInsert, arg3, encoding) {\n        let offsetVal = this._writeOffset;\n        let encodingVal = this._encoding;\n        // Check for offset\n        if (typeof arg3 === 'number') {\n            offsetVal = arg3;\n            // Check for encoding\n        }\n        else if (typeof arg3 === 'string') {\n            utils_1.checkEncoding(arg3);\n            encodingVal = arg3;\n        }\n        // Check for encoding (third param)\n        if (typeof encoding === 'string') {\n            utils_1.checkEncoding(encoding);\n            encodingVal = encoding;\n        }\n        // Calculate bytelength of string.\n        const byteLength = Buffer.byteLength(value, encodingVal);\n        // Ensure there is enough internal Buffer capacity.\n        if (isInsert) {\n            this.ensureInsertable(byteLength, offsetVal);\n        }\n        else {\n            this._ensureWriteable(byteLength, offsetVal);\n        }\n        // Write value\n        this._buff.write(value, offsetVal, byteLength, encodingVal);\n        // Increment internal Buffer write offset;\n        if (isInsert) {\n            this._writeOffset += byteLength;\n        }\n        else {\n            // If an offset was given, check to see if we wrote beyond the current writeOffset.\n            if (typeof arg3 === 'number') {\n                this._writeOffset = Math.max(this._writeOffset, offsetVal + byteLength);\n            }\n            else {\n                // If no offset was given, we wrote to the end of the SmartBuffer so increment writeOffset.\n                this._writeOffset += byteLength;\n            }\n        }\n        return this;\n    }\n    /**\n     * Handles writing or insert of a Buffer.\n     *\n     * @param value { Buffer } The Buffer to write.\n     * @param offset { Number } The offset to write the Buffer to.\n     */\n    _handleBuffer(value, isInsert, offset) {\n        const offsetVal = typeof offset === 'number' ? offset : this._writeOffset;\n        // Ensure there is enough internal Buffer capacity.\n        if (isInsert) {\n            this.ensureInsertable(value.length, offsetVal);\n        }\n        else {\n            this._ensureWriteable(value.length, offsetVal);\n        }\n        // Write buffer value\n        value.copy(this._buff, offsetVal);\n        // Increment internal Buffer write offset;\n        if (isInsert) {\n            this._writeOffset += value.length;\n        }\n        else {\n            // If an offset was given, check to see if we wrote beyond the current writeOffset.\n            if (typeof offset === 'number') {\n                this._writeOffset = Math.max(this._writeOffset, offsetVal + value.length);\n            }\n            else {\n                // If no offset was given, we wrote to the end of the SmartBuffer so increment writeOffset.\n                this._writeOffset += value.length;\n            }\n        }\n        return this;\n    }\n    /**\n     * Ensures that the internal Buffer is large enough to read data.\n     *\n     * @param length { Number } The length of the data that needs to be read.\n     * @param offset { Number } The offset of the data that needs to be read.\n     */\n    ensureReadable(length, offset) {\n        // Offset value defaults to managed read offset.\n        let offsetVal = this._readOffset;\n        // If an offset was provided, use it.\n        if (typeof offset !== 'undefined') {\n            // Checks for valid numberic value;\n            utils_1.checkOffsetValue(offset);\n            // Overide with custom offset.\n            offsetVal = offset;\n        }\n        // Checks if offset is below zero, or the offset+length offset is beyond the total length of the managed data.\n        if (offsetVal < 0 || offsetVal + length > this.length) {\n            throw new Error(utils_1.ERRORS.INVALID_READ_BEYOND_BOUNDS);\n        }\n    }\n    /**\n     * Ensures that the internal Buffer is large enough to insert data.\n     *\n     * @param dataLength { Number } The length of the data that needs to be written.\n     * @param offset { Number } The offset of the data to be written.\n     */\n    ensureInsertable(dataLength, offset) {\n        // Checks for valid numberic value;\n        utils_1.checkOffsetValue(offset);\n        // Ensure there is enough internal Buffer capacity.\n        this._ensureCapacity(this.length + dataLength);\n        // If an offset was provided and its not the very end of the buffer, copy data into appropriate location in regards to the offset.\n        if (offset < this.length) {\n            this._buff.copy(this._buff, offset + dataLength, offset, this._buff.length);\n        }\n        // Adjust tracked smart buffer length\n        if (offset + dataLength > this.length) {\n            this.length = offset + dataLength;\n        }\n        else {\n            this.length += dataLength;\n        }\n    }\n    /**\n     * Ensures that the internal Buffer is large enough to write data.\n     *\n     * @param dataLength { Number } The length of the data that needs to be written.\n     * @param offset { Number } The offset of the data to be written (defaults to writeOffset).\n     */\n    _ensureWriteable(dataLength, offset) {\n        const offsetVal = typeof offset === 'number' ? offset : this._writeOffset;\n        // Ensure enough capacity to write data.\n        this._ensureCapacity(offsetVal + dataLength);\n        // Adjust SmartBuffer length (if offset + length is larger than managed length, adjust length)\n        if (offsetVal + dataLength > this.length) {\n            this.length = offsetVal + dataLength;\n        }\n    }\n    /**\n     * Ensures that the internal Buffer is large enough to write at least the given amount of data.\n     *\n     * @param minLength { Number } The minimum length of the data needs to be written.\n     */\n    _ensureCapacity(minLength) {\n        const oldLength = this._buff.length;\n        if (minLength > oldLength) {\n            let data = this._buff;\n            let newLength = (oldLength * 3) / 2 + 1;\n            if (newLength < minLength) {\n                newLength = minLength;\n            }\n            this._buff = Buffer.allocUnsafe(newLength);\n            data.copy(this._buff, 0, 0, oldLength);\n        }\n    }\n    /**\n     * Reads a numeric number value using the provided function.\n     *\n     * @typeparam T { number | bigint } The type of the value to be read\n     *\n     * @param func { Function(offset: number) => number } The function to read data on the internal Buffer with.\n     * @param byteSize { Number } The number of bytes read.\n     * @param offset { Number } The offset to read from (optional). When this is not provided, the managed readOffset is used instead.\n     *\n     * @returns { T } the number value\n     */\n    _readNumberValue(func, byteSize, offset) {\n        this.ensureReadable(byteSize, offset);\n        // Call Buffer.readXXXX();\n        const value = func.call(this._buff, typeof offset === 'number' ? offset : this._readOffset);\n        // Adjust internal read offset if an optional read offset was not provided.\n        if (typeof offset === 'undefined') {\n            this._readOffset += byteSize;\n        }\n        return value;\n    }\n    /**\n     * Inserts a numeric number value based on the given offset and value.\n     *\n     * @typeparam T { number | bigint } The type of the value to be written\n     *\n     * @param func { Function(offset: T, offset?) => number} The function to write data on the internal Buffer with.\n     * @param byteSize { Number } The number of bytes written.\n     * @param value { T } The number value to write.\n     * @param offset { Number } the offset to write the number at (REQUIRED).\n     *\n     * @returns SmartBuffer this buffer\n     */\n    _insertNumberValue(func, byteSize, value, offset) {\n        // Check for invalid offset values.\n        utils_1.checkOffsetValue(offset);\n        // Ensure there is enough internal Buffer capacity. (raw offset is passed)\n        this.ensureInsertable(byteSize, offset);\n        // Call buffer.writeXXXX();\n        func.call(this._buff, value, offset);\n        // Adjusts internally managed write offset.\n        this._writeOffset += byteSize;\n        return this;\n    }\n    /**\n     * Writes a numeric number value based on the given offset and value.\n     *\n     * @typeparam T { number | bigint } The type of the value to be written\n     *\n     * @param func { Function(offset: T, offset?) => number} The function to write data on the internal Buffer with.\n     * @param byteSize { Number } The number of bytes written.\n     * @param value { T } The number value to write.\n     * @param offset { Number } the offset to write the number at (REQUIRED).\n     *\n     * @returns SmartBuffer this buffer\n     */\n    _writeNumberValue(func, byteSize, value, offset) {\n        // If an offset was provided, validate it.\n        if (typeof offset === 'number') {\n            // Check if we're writing beyond the bounds of the managed data.\n            if (offset < 0) {\n                throw new Error(utils_1.ERRORS.INVALID_WRITE_BEYOND_BOUNDS);\n            }\n            utils_1.checkOffsetValue(offset);\n        }\n        // Default to writeOffset if no offset value was given.\n        const offsetVal = typeof offset === 'number' ? offset : this._writeOffset;\n        // Ensure there is enough internal Buffer capacity. (raw offset is passed)\n        this._ensureWriteable(byteSize, offsetVal);\n        func.call(this._buff, value, offsetVal);\n        // If an offset was given, check to see if we wrote beyond the current writeOffset.\n        if (typeof offset === 'number') {\n            this._writeOffset = Math.max(this._writeOffset, offsetVal + byteSize);\n        }\n        else {\n            // If no numeric offset was given, we wrote to the end of the SmartBuffer so increment writeOffset.\n            this._writeOffset += byteSize;\n        }\n        return this;\n    }\n}\nexports.SmartBuffer = SmartBuffer;\n//# sourceMappingURL=smartbuffer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SOCKS5_NO_ACCEPTABLE_AUTH = exports.SOCKS5_CUSTOM_AUTH_END = exports.SOCKS5_CUSTOM_AUTH_START = exports.SOCKS_INCOMING_PACKET_SIZES = exports.SocksClientState = exports.Socks5Response = exports.Socks5HostType = exports.Socks5Auth = exports.Socks4Response = exports.SocksCommand = exports.ERRORS = exports.DEFAULT_TIMEOUT = void 0;\nconst DEFAULT_TIMEOUT = 30000;\nexports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;\n// prettier-ignore\nconst ERRORS = {\n    InvalidSocksCommand: 'An invalid SOCKS command was provided. Valid options are connect, bind, and associate.',\n    InvalidSocksCommandForOperation: 'An invalid SOCKS command was provided. Only a subset of commands are supported for this operation.',\n    InvalidSocksCommandChain: 'An invalid SOCKS command was provided. Chaining currently only supports the connect command.',\n    InvalidSocksClientOptionsDestination: 'An invalid destination host was provided.',\n    InvalidSocksClientOptionsExistingSocket: 'An invalid existing socket was provided. This should be an instance of stream.Duplex.',\n    InvalidSocksClientOptionsProxy: 'Invalid SOCKS proxy details were provided.',\n    InvalidSocksClientOptionsTimeout: 'An invalid timeout value was provided. Please enter a value above 0 (in ms).',\n    InvalidSocksClientOptionsProxiesLength: 'At least two socks proxies must be provided for chaining.',\n    InvalidSocksClientOptionsCustomAuthRange: 'Custom auth must be a value between 0x80 and 0xFE.',\n    InvalidSocksClientOptionsCustomAuthOptions: 'When a custom_auth_method is provided, custom_auth_request_handler, custom_auth_response_size, and custom_auth_response_handler must also be provided and valid.',\n    NegotiationError: 'Negotiation error',\n    SocketClosed: 'Socket closed',\n    ProxyConnectionTimedOut: 'Proxy connection timed out',\n    InternalError: 'SocksClient internal error (this should not happen)',\n    InvalidSocks4HandshakeResponse: 'Received invalid Socks4 handshake response',\n    Socks4ProxyRejectedConnection: 'Socks4 Proxy rejected connection',\n    InvalidSocks4IncomingConnectionResponse: 'Socks4 invalid incoming connection response',\n    Socks4ProxyRejectedIncomingBoundConnection: 'Socks4 Proxy rejected incoming bound connection',\n    InvalidSocks5InitialHandshakeResponse: 'Received invalid Socks5 initial handshake response',\n    InvalidSocks5IntiailHandshakeSocksVersion: 'Received invalid Socks5 initial handshake (invalid socks version)',\n    InvalidSocks5InitialHandshakeNoAcceptedAuthType: 'Received invalid Socks5 initial handshake (no accepted authentication type)',\n    InvalidSocks5InitialHandshakeUnknownAuthType: 'Received invalid Socks5 initial handshake (unknown authentication type)',\n    Socks5AuthenticationFailed: 'Socks5 Authentication failed',\n    InvalidSocks5FinalHandshake: 'Received invalid Socks5 final handshake response',\n    InvalidSocks5FinalHandshakeRejected: 'Socks5 proxy rejected connection',\n    InvalidSocks5IncomingConnectionResponse: 'Received invalid Socks5 incoming connection response',\n    Socks5ProxyRejectedIncomingBoundConnection: 'Socks5 Proxy rejected incoming bound connection',\n};\nexports.ERRORS = ERRORS;\nconst SOCKS_INCOMING_PACKET_SIZES = {\n    Socks5InitialHandshakeResponse: 2,\n    Socks5UserPassAuthenticationResponse: 2,\n    // Command response + incoming connection (bind)\n    Socks5ResponseHeader: 5, // We need at least 5 to read the hostname length, then we wait for the address+port information.\n    Socks5ResponseIPv4: 10, // 4 header + 4 ip + 2 port\n    Socks5ResponseIPv6: 22, // 4 header + 16 ip + 2 port\n    Socks5ResponseHostname: (hostNameLength) => hostNameLength + 7, // 4 header + 1 host length + host + 2 port\n    // Command response + incoming connection (bind)\n    Socks4Response: 8, // 2 header + 2 port + 4 ip\n};\nexports.SOCKS_INCOMING_PACKET_SIZES = SOCKS_INCOMING_PACKET_SIZES;\nvar SocksCommand;\n(function (SocksCommand) {\n    SocksCommand[SocksCommand[\"connect\"] = 1] = \"connect\";\n    SocksCommand[SocksCommand[\"bind\"] = 2] = \"bind\";\n    SocksCommand[SocksCommand[\"associate\"] = 3] = \"associate\";\n})(SocksCommand || (exports.SocksCommand = SocksCommand = {}));\nvar Socks4Response;\n(function (Socks4Response) {\n    Socks4Response[Socks4Response[\"Granted\"] = 90] = \"Granted\";\n    Socks4Response[Socks4Response[\"Failed\"] = 91] = \"Failed\";\n    Socks4Response[Socks4Response[\"Rejected\"] = 92] = \"Rejected\";\n    Socks4Response[Socks4Response[\"RejectedIdent\"] = 93] = \"RejectedIdent\";\n})(Socks4Response || (exports.Socks4Response = Socks4Response = {}));\nvar Socks5Auth;\n(function (Socks5Auth) {\n    Socks5Auth[Socks5Auth[\"NoAuth\"] = 0] = \"NoAuth\";\n    Socks5Auth[Socks5Auth[\"GSSApi\"] = 1] = \"GSSApi\";\n    Socks5Auth[Socks5Auth[\"UserPass\"] = 2] = \"UserPass\";\n})(Socks5Auth || (exports.Socks5Auth = Socks5Auth = {}));\nconst SOCKS5_CUSTOM_AUTH_START = 0x80;\nexports.SOCKS5_CUSTOM_AUTH_START = SOCKS5_CUSTOM_AUTH_START;\nconst SOCKS5_CUSTOM_AUTH_END = 0xfe;\nexports.SOCKS5_CUSTOM_AUTH_END = SOCKS5_CUSTOM_AUTH_END;\nconst SOCKS5_NO_ACCEPTABLE_AUTH = 0xff;\nexports.SOCKS5_NO_ACCEPTABLE_AUTH = SOCKS5_NO_ACCEPTABLE_AUTH;\nvar Socks5Response;\n(function (Socks5Response) {\n    Socks5Response[Socks5Response[\"Granted\"] = 0] = \"Granted\";\n    Socks5Response[Socks5Response[\"Failure\"] = 1] = \"Failure\";\n    Socks5Response[Socks5Response[\"NotAllowed\"] = 2] = \"NotAllowed\";\n    Socks5Response[Socks5Response[\"NetworkUnreachable\"] = 3] = \"NetworkUnreachable\";\n    Socks5Response[Socks5Response[\"HostUnreachable\"] = 4] = \"HostUnreachable\";\n    Socks5Response[Socks5Response[\"ConnectionRefused\"] = 5] = \"ConnectionRefused\";\n    Socks5Response[Socks5Response[\"TTLExpired\"] = 6] = \"TTLExpired\";\n    Socks5Response[Socks5Response[\"CommandNotSupported\"] = 7] = \"CommandNotSupported\";\n    Socks5Response[Socks5Response[\"AddressNotSupported\"] = 8] = \"AddressNotSupported\";\n})(Socks5Response || (exports.Socks5Response = Socks5Response = {}));\nvar Socks5HostType;\n(function (Socks5HostType) {\n    Socks5HostType[Socks5HostType[\"IPv4\"] = 1] = \"IPv4\";\n    Socks5HostType[Socks5HostType[\"Hostname\"] = 3] = \"Hostname\";\n    Socks5HostType[Socks5HostType[\"IPv6\"] = 4] = \"IPv6\";\n})(Socks5HostType || (exports.Socks5HostType = Socks5HostType = {}));\nvar SocksClientState;\n(function (SocksClientState) {\n    SocksClientState[SocksClientState[\"Created\"] = 0] = \"Created\";\n    SocksClientState[SocksClientState[\"Connecting\"] = 1] = \"Connecting\";\n    SocksClientState[SocksClientState[\"Connected\"] = 2] = \"Connected\";\n    SocksClientState[SocksClientState[\"SentInitialHandshake\"] = 3] = \"SentInitialHandshake\";\n    SocksClientState[SocksClientState[\"ReceivedInitialHandshakeResponse\"] = 4] = \"ReceivedInitialHandshakeResponse\";\n    SocksClientState[SocksClientState[\"SentAuthentication\"] = 5] = \"SentAuthentication\";\n    SocksClientState[SocksClientState[\"ReceivedAuthenticationResponse\"] = 6] = \"ReceivedAuthenticationResponse\";\n    SocksClientState[SocksClientState[\"SentFinalHandshake\"] = 7] = \"SentFinalHandshake\";\n    SocksClientState[SocksClientState[\"ReceivedFinalResponse\"] = 8] = \"ReceivedFinalResponse\";\n    SocksClientState[SocksClientState[\"BoundWaitingForConnection\"] = 9] = \"BoundWaitingForConnection\";\n    SocksClientState[SocksClientState[\"Established\"] = 10] = \"Established\";\n    SocksClientState[SocksClientState[\"Disconnected\"] = 11] = \"Disconnected\";\n    SocksClientState[SocksClientState[\"Error\"] = 99] = \"Error\";\n})(SocksClientState || (exports.SocksClientState = SocksClientState = {}));\n//# sourceMappingURL=constants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shuffleArray = exports.SocksClientError = void 0;\n/**\n * Error wrapper for SocksClient\n */\nclass SocksClientError extends Error {\n    constructor(message, options) {\n        super(message);\n        this.options = options;\n    }\n}\nexports.SocksClientError = SocksClientError;\n/**\n * Shuffles a given array.\n * @param array The array to shuffle.\n */\nfunction shuffleArray(array) {\n    for (let i = array.length - 1; i > 0; i--) {\n        const j = Math.floor(Math.random() * (i + 1));\n        [array[i], array[j]] = [array[j], array[i]];\n    }\n}\nexports.shuffleArray = shuffleArray;\n//# sourceMappingURL=util.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isInSubnet = isInSubnet;\nexports.isCorrect = isCorrect;\nexports.numberToPaddedHex = numberToPaddedHex;\nexports.stringToPaddedHex = stringToPaddedHex;\nexports.testBit = testBit;\nfunction isInSubnet(address) {\n    if (this.subnetMask < address.subnetMask) {\n        return false;\n    }\n    if (this.mask(address.subnetMask) === address.mask()) {\n        return true;\n    }\n    return false;\n}\nfunction isCorrect(defaultBits) {\n    return function () {\n        if (this.addressMinusSuffix !== this.correctForm()) {\n            return false;\n        }\n        if (this.subnetMask === defaultBits && !this.parsedSubnet) {\n            return true;\n        }\n        return this.parsedSubnet === String(this.subnetMask);\n    };\n}\nfunction numberToPaddedHex(number) {\n    return number.toString(16).padStart(2, '0');\n}\nfunction stringToPaddedHex(numberString) {\n    return numberToPaddedHex(parseInt(numberString, 10));\n}\n/**\n * @param binaryValue Binary representation of a value (e.g. `10`)\n * @param position Byte position, where 0 is the least significant bit\n */\nfunction testBit(binaryValue, position) {\n    const { length } = binaryValue;\n    if (position > length) {\n        return false;\n    }\n    const positionInString = length - position;\n    return binaryValue.substring(positionInString, positionInString + 1) === '1';\n}\n//# sourceMappingURL=common.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RE_SUBNET_STRING = exports.RE_ADDRESS = exports.GROUPS = exports.BITS = void 0;\nexports.BITS = 32;\nexports.GROUPS = 4;\nexports.RE_ADDRESS = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/g;\nexports.RE_SUBNET_STRING = /\\/\\d{1,2}$/;\n//# sourceMappingURL=constants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AddressError = void 0;\nclass AddressError extends Error {\n    constructor(message, parseMessage) {\n        super(message);\n        this.name = 'AddressError';\n        this.parseMessage = parseMessage;\n    }\n}\nexports.AddressError = AddressError;\n//# sourceMappingURL=address-error.js.map","\"use strict\";\n/* eslint-disable no-param-reassign */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Address4 = void 0;\nconst common = __importStar(require(\"./common\"));\nconst constants = __importStar(require(\"./v4/constants\"));\nconst address_error_1 = require(\"./address-error\");\n/**\n * Represents an IPv4 address\n * @class Address4\n * @param {string} address - An IPv4 address string\n */\nclass Address4 {\n    constructor(address) {\n        this.groups = constants.GROUPS;\n        this.parsedAddress = [];\n        this.parsedSubnet = '';\n        this.subnet = '/32';\n        this.subnetMask = 32;\n        this.v4 = true;\n        /**\n         * Returns true if the address is correct, false otherwise\n         * @memberof Address4\n         * @instance\n         * @returns {Boolean}\n         */\n        this.isCorrect = common.isCorrect(constants.BITS);\n        /**\n         * Returns true if the given address is in the subnet of the current address\n         * @memberof Address4\n         * @instance\n         * @returns {boolean}\n         */\n        this.isInSubnet = common.isInSubnet;\n        this.address = address;\n        const subnet = constants.RE_SUBNET_STRING.exec(address);\n        if (subnet) {\n            this.parsedSubnet = subnet[0].replace('/', '');\n            this.subnetMask = parseInt(this.parsedSubnet, 10);\n            this.subnet = `/${this.subnetMask}`;\n            if (this.subnetMask < 0 || this.subnetMask > constants.BITS) {\n                throw new address_error_1.AddressError('Invalid subnet mask.');\n            }\n            address = address.replace(constants.RE_SUBNET_STRING, '');\n        }\n        this.addressMinusSuffix = address;\n        this.parsedAddress = this.parse(address);\n    }\n    static isValid(address) {\n        try {\n            // eslint-disable-next-line no-new\n            new Address4(address);\n            return true;\n        }\n        catch (e) {\n            return false;\n        }\n    }\n    /*\n     * Parses a v4 address\n     */\n    parse(address) {\n        const groups = address.split('.');\n        if (!address.match(constants.RE_ADDRESS)) {\n            throw new address_error_1.AddressError('Invalid IPv4 address.');\n        }\n        return groups;\n    }\n    /**\n     * Returns the correct form of an address\n     * @memberof Address4\n     * @instance\n     * @returns {String}\n     */\n    correctForm() {\n        return this.parsedAddress.map((part) => parseInt(part, 10)).join('.');\n    }\n    /**\n     * Converts a hex string to an IPv4 address object\n     * @memberof Address4\n     * @static\n     * @param {string} hex - a hex string to convert\n     * @returns {Address4}\n     */\n    static fromHex(hex) {\n        const padded = hex.replace(/:/g, '').padStart(8, '0');\n        const groups = [];\n        let i;\n        for (i = 0; i < 8; i += 2) {\n            const h = padded.slice(i, i + 2);\n            groups.push(parseInt(h, 16));\n        }\n        return new Address4(groups.join('.'));\n    }\n    /**\n     * Converts an integer into a IPv4 address object\n     * @memberof Address4\n     * @static\n     * @param {integer} integer - a number to convert\n     * @returns {Address4}\n     */\n    static fromInteger(integer) {\n        return Address4.fromHex(integer.toString(16));\n    }\n    /**\n     * Return an address from in-addr.arpa form\n     * @memberof Address4\n     * @static\n     * @param {string} arpaFormAddress - an 'in-addr.arpa' form ipv4 address\n     * @returns {Adress4}\n     * @example\n     * var address = Address4.fromArpa(42.2.0.192.in-addr.arpa.)\n     * address.correctForm(); // '192.0.2.42'\n     */\n    static fromArpa(arpaFormAddress) {\n        // remove ending \".in-addr.arpa.\" or just \".\"\n        const leader = arpaFormAddress.replace(/(\\.in-addr\\.arpa)?\\.$/, '');\n        const address = leader.split('.').reverse().join('.');\n        return new Address4(address);\n    }\n    /**\n     * Converts an IPv4 address object to a hex string\n     * @memberof Address4\n     * @instance\n     * @returns {String}\n     */\n    toHex() {\n        return this.parsedAddress.map((part) => common.stringToPaddedHex(part)).join(':');\n    }\n    /**\n     * Converts an IPv4 address object to an array of bytes\n     * @memberof Address4\n     * @instance\n     * @returns {Array}\n     */\n    toArray() {\n        return this.parsedAddress.map((part) => parseInt(part, 10));\n    }\n    /**\n     * Converts an IPv4 address object to an IPv6 address group\n     * @memberof Address4\n     * @instance\n     * @returns {String}\n     */\n    toGroup6() {\n        const output = [];\n        let i;\n        for (i = 0; i < constants.GROUPS; i += 2) {\n            output.push(`${common.stringToPaddedHex(this.parsedAddress[i])}${common.stringToPaddedHex(this.parsedAddress[i + 1])}`);\n        }\n        return output.join(':');\n    }\n    /**\n     * Returns the address as a `bigint`\n     * @memberof Address4\n     * @instance\n     * @returns {bigint}\n     */\n    bigInt() {\n        return BigInt(`0x${this.parsedAddress.map((n) => common.stringToPaddedHex(n)).join('')}`);\n    }\n    /**\n     * Helper function getting start address.\n     * @memberof Address4\n     * @instance\n     * @returns {bigint}\n     */\n    _startAddress() {\n        return BigInt(`0b${this.mask() + '0'.repeat(constants.BITS - this.subnetMask)}`);\n    }\n    /**\n     * The first address in the range given by this address' subnet.\n     * Often referred to as the Network Address.\n     * @memberof Address4\n     * @instance\n     * @returns {Address4}\n     */\n    startAddress() {\n        return Address4.fromBigInt(this._startAddress());\n    }\n    /**\n     * The first host address in the range given by this address's subnet ie\n     * the first address after the Network Address\n     * @memberof Address4\n     * @instance\n     * @returns {Address4}\n     */\n    startAddressExclusive() {\n        const adjust = BigInt('1');\n        return Address4.fromBigInt(this._startAddress() + adjust);\n    }\n    /**\n     * Helper function getting end address.\n     * @memberof Address4\n     * @instance\n     * @returns {bigint}\n     */\n    _endAddress() {\n        return BigInt(`0b${this.mask() + '1'.repeat(constants.BITS - this.subnetMask)}`);\n    }\n    /**\n     * The last address in the range given by this address' subnet\n     * Often referred to as the Broadcast\n     * @memberof Address4\n     * @instance\n     * @returns {Address4}\n     */\n    endAddress() {\n        return Address4.fromBigInt(this._endAddress());\n    }\n    /**\n     * The last host address in the range given by this address's subnet ie\n     * the last address prior to the Broadcast Address\n     * @memberof Address4\n     * @instance\n     * @returns {Address4}\n     */\n    endAddressExclusive() {\n        const adjust = BigInt('1');\n        return Address4.fromBigInt(this._endAddress() - adjust);\n    }\n    /**\n     * Converts a BigInt to a v4 address object\n     * @memberof Address4\n     * @static\n     * @param {bigint} bigInt - a BigInt to convert\n     * @returns {Address4}\n     */\n    static fromBigInt(bigInt) {\n        return Address4.fromHex(bigInt.toString(16));\n    }\n    /**\n     * Returns the first n bits of the address, defaulting to the\n     * subnet mask\n     * @memberof Address4\n     * @instance\n     * @returns {String}\n     */\n    mask(mask) {\n        if (mask === undefined) {\n            mask = this.subnetMask;\n        }\n        return this.getBitsBase2(0, mask);\n    }\n    /**\n     * Returns the bits in the given range as a base-2 string\n     * @memberof Address4\n     * @instance\n     * @returns {string}\n     */\n    getBitsBase2(start, end) {\n        return this.binaryZeroPad().slice(start, end);\n    }\n    /**\n     * Return the reversed ip6.arpa form of the address\n     * @memberof Address4\n     * @param {Object} options\n     * @param {boolean} options.omitSuffix - omit the \"in-addr.arpa\" suffix\n     * @instance\n     * @returns {String}\n     */\n    reverseForm(options) {\n        if (!options) {\n            options = {};\n        }\n        const reversed = this.correctForm().split('.').reverse().join('.');\n        if (options.omitSuffix) {\n            return reversed;\n        }\n        return `${reversed}.in-addr.arpa.`;\n    }\n    /**\n     * Returns true if the given address is a multicast address\n     * @memberof Address4\n     * @instance\n     * @returns {boolean}\n     */\n    isMulticast() {\n        return this.isInSubnet(new Address4('224.0.0.0/4'));\n    }\n    /**\n     * Returns a zero-padded base-2 string representation of the address\n     * @memberof Address4\n     * @instance\n     * @returns {string}\n     */\n    binaryZeroPad() {\n        return this.bigInt().toString(2).padStart(constants.BITS, '0');\n    }\n    /**\n     * Groups an IPv4 address for inclusion at the end of an IPv6 address\n     * @returns {String}\n     */\n    groupForV6() {\n        const segments = this.parsedAddress;\n        return this.address.replace(constants.RE_ADDRESS, `<span class=\"hover-group group-v4 group-6\">${segments\n            .slice(0, 2)\n            .join('.')}</span>.<span class=\"hover-group group-v4 group-7\">${segments\n            .slice(2, 4)\n            .join('.')}</span>`);\n    }\n}\nexports.Address4 = Address4;\n//# sourceMappingURL=ipv4.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RE_URL_WITH_PORT = exports.RE_URL = exports.RE_ZONE_STRING = exports.RE_SUBNET_STRING = exports.RE_BAD_ADDRESS = exports.RE_BAD_CHARACTERS = exports.TYPES = exports.SCOPES = exports.GROUPS = exports.BITS = void 0;\nexports.BITS = 128;\nexports.GROUPS = 8;\n/**\n * Represents IPv6 address scopes\n * @memberof Address6\n * @static\n */\nexports.SCOPES = {\n    0: 'Reserved',\n    1: 'Interface local',\n    2: 'Link local',\n    4: 'Admin local',\n    5: 'Site local',\n    8: 'Organization local',\n    14: 'Global',\n    15: 'Reserved',\n};\n/**\n * Represents IPv6 address types\n * @memberof Address6\n * @static\n */\nexports.TYPES = {\n    'ff01::1/128': 'Multicast (All nodes on this interface)',\n    'ff01::2/128': 'Multicast (All routers on this interface)',\n    'ff02::1/128': 'Multicast (All nodes on this link)',\n    'ff02::2/128': 'Multicast (All routers on this link)',\n    'ff05::2/128': 'Multicast (All routers in this site)',\n    'ff02::5/128': 'Multicast (OSPFv3 AllSPF routers)',\n    'ff02::6/128': 'Multicast (OSPFv3 AllDR routers)',\n    'ff02::9/128': 'Multicast (RIP routers)',\n    'ff02::a/128': 'Multicast (EIGRP routers)',\n    'ff02::d/128': 'Multicast (PIM routers)',\n    'ff02::16/128': 'Multicast (MLDv2 reports)',\n    'ff01::fb/128': 'Multicast (mDNSv6)',\n    'ff02::fb/128': 'Multicast (mDNSv6)',\n    'ff05::fb/128': 'Multicast (mDNSv6)',\n    'ff02::1:2/128': 'Multicast (All DHCP servers and relay agents on this link)',\n    'ff05::1:2/128': 'Multicast (All DHCP servers and relay agents in this site)',\n    'ff02::1:3/128': 'Multicast (All DHCP servers on this link)',\n    'ff05::1:3/128': 'Multicast (All DHCP servers in this site)',\n    '::/128': 'Unspecified',\n    '::1/128': 'Loopback',\n    'ff00::/8': 'Multicast',\n    'fe80::/10': 'Link-local unicast',\n};\n/**\n * A regular expression that matches bad characters in an IPv6 address\n * @memberof Address6\n * @static\n */\nexports.RE_BAD_CHARACTERS = /([^0-9a-f:/%])/gi;\n/**\n * A regular expression that matches an incorrect IPv6 address\n * @memberof Address6\n * @static\n */\nexports.RE_BAD_ADDRESS = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\\/$)/gi;\n/**\n * A regular expression that matches an IPv6 subnet\n * @memberof Address6\n * @static\n */\nexports.RE_SUBNET_STRING = /\\/\\d{1,3}(?=%|$)/;\n/**\n * A regular expression that matches an IPv6 zone\n * @memberof Address6\n * @static\n */\nexports.RE_ZONE_STRING = /%.*$/;\nexports.RE_URL = /^\\[{0,1}([0-9a-f:]+)\\]{0,1}/;\nexports.RE_URL_WITH_PORT = /\\[([0-9a-f:]+)\\]:([0-9]{1,5})/;\n//# sourceMappingURL=constants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.spanAllZeroes = spanAllZeroes;\nexports.spanAll = spanAll;\nexports.spanLeadingZeroes = spanLeadingZeroes;\nexports.simpleGroup = simpleGroup;\n/**\n * @returns {String} the string with all zeroes contained in a <span>\n */\nfunction spanAllZeroes(s) {\n    return s.replace(/(0+)/g, '<span class=\"zero\">$1</span>');\n}\n/**\n * @returns {String} the string with each character contained in a <span>\n */\nfunction spanAll(s, offset = 0) {\n    const letters = s.split('');\n    return letters\n        .map((n, i) => `<span class=\"digit value-${n} position-${i + offset}\">${spanAllZeroes(n)}</span>`)\n        .join('');\n}\nfunction spanLeadingZeroesSimple(group) {\n    return group.replace(/^(0+)/, '<span class=\"zero\">$1</span>');\n}\n/**\n * @returns {String} the string with leading zeroes contained in a <span>\n */\nfunction spanLeadingZeroes(address) {\n    const groups = address.split(':');\n    return groups.map((g) => spanLeadingZeroesSimple(g)).join(':');\n}\n/**\n * Groups an address\n * @returns {String} a grouped address\n */\nfunction simpleGroup(addressString, offset = 0) {\n    const groups = addressString.split(':');\n    return groups.map((g, i) => {\n        if (/group-v4/.test(g)) {\n            return g;\n        }\n        return `<span class=\"hover-group group-${i + offset}\">${spanLeadingZeroesSimple(g)}</span>`;\n    });\n}\n//# sourceMappingURL=helpers.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ADDRESS_BOUNDARY = void 0;\nexports.groupPossibilities = groupPossibilities;\nexports.padGroup = padGroup;\nexports.simpleRegularExpression = simpleRegularExpression;\nexports.possibleElisions = possibleElisions;\nconst v6 = __importStar(require(\"./constants\"));\nfunction groupPossibilities(possibilities) {\n    return `(${possibilities.join('|')})`;\n}\nfunction padGroup(group) {\n    if (group.length < 4) {\n        return `0{0,${4 - group.length}}${group}`;\n    }\n    return group;\n}\nexports.ADDRESS_BOUNDARY = '[^A-Fa-f0-9:]';\nfunction simpleRegularExpression(groups) {\n    const zeroIndexes = [];\n    groups.forEach((group, i) => {\n        const groupInteger = parseInt(group, 16);\n        if (groupInteger === 0) {\n            zeroIndexes.push(i);\n        }\n    });\n    // You can technically elide a single 0, this creates the regular expressions\n    // to match that eventuality\n    const possibilities = zeroIndexes.map((zeroIndex) => groups\n        .map((group, i) => {\n        if (i === zeroIndex) {\n            const elision = i === 0 || i === v6.GROUPS - 1 ? ':' : '';\n            return groupPossibilities([padGroup(group), elision]);\n        }\n        return padGroup(group);\n    })\n        .join(':'));\n    // The simplest case\n    possibilities.push(groups.map(padGroup).join(':'));\n    return groupPossibilities(possibilities);\n}\nfunction possibleElisions(elidedGroups, moreLeft, moreRight) {\n    const left = moreLeft ? '' : ':';\n    const right = moreRight ? '' : ':';\n    const possibilities = [];\n    // 1. elision of everything (::)\n    if (!moreLeft && !moreRight) {\n        possibilities.push('::');\n    }\n    // 2. complete elision of the middle\n    if (moreLeft && moreRight) {\n        possibilities.push('');\n    }\n    if ((moreRight && !moreLeft) || (!moreRight && moreLeft)) {\n        // 3. complete elision of one side\n        possibilities.push(':');\n    }\n    // 4. elision from the left side\n    possibilities.push(`${left}(:0{1,4}){1,${elidedGroups - 1}}`);\n    // 5. elision from the right side\n    possibilities.push(`(0{1,4}:){1,${elidedGroups - 1}}${right}`);\n    // 6. no elision\n    possibilities.push(`(0{1,4}:){${elidedGroups - 1}}0{1,4}`);\n    // 7. elision (including sloppy elision) from the middle\n    for (let groups = 1; groups < elidedGroups - 1; groups++) {\n        for (let position = 1; position < elidedGroups - groups; position++) {\n            possibilities.push(`(0{1,4}:){${position}}:(0{1,4}:){${elidedGroups - position - groups - 1}}0{1,4}`);\n        }\n    }\n    return groupPossibilities(possibilities);\n}\n//# sourceMappingURL=regular-expressions.js.map","\"use strict\";\n/* eslint-disable prefer-destructuring */\n/* eslint-disable no-param-reassign */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Address6 = void 0;\nconst common = __importStar(require(\"./common\"));\nconst constants4 = __importStar(require(\"./v4/constants\"));\nconst constants6 = __importStar(require(\"./v6/constants\"));\nconst helpers = __importStar(require(\"./v6/helpers\"));\nconst ipv4_1 = require(\"./ipv4\");\nconst regular_expressions_1 = require(\"./v6/regular-expressions\");\nconst address_error_1 = require(\"./address-error\");\nconst common_1 = require(\"./common\");\nfunction assert(condition) {\n    if (!condition) {\n        throw new Error('Assertion failed.');\n    }\n}\nfunction addCommas(number) {\n    const r = /(\\d+)(\\d{3})/;\n    while (r.test(number)) {\n        number = number.replace(r, '$1,$2');\n    }\n    return number;\n}\nfunction spanLeadingZeroes4(n) {\n    n = n.replace(/^(0{1,})([1-9]+)$/, '<span class=\"parse-error\">$1</span>$2');\n    n = n.replace(/^(0{1,})(0)$/, '<span class=\"parse-error\">$1</span>$2');\n    return n;\n}\n/*\n * A helper function to compact an array\n */\nfunction compact(address, slice) {\n    const s1 = [];\n    const s2 = [];\n    let i;\n    for (i = 0; i < address.length; i++) {\n        if (i < slice[0]) {\n            s1.push(address[i]);\n        }\n        else if (i > slice[1]) {\n            s2.push(address[i]);\n        }\n    }\n    return s1.concat(['compact']).concat(s2);\n}\nfunction paddedHex(octet) {\n    return parseInt(octet, 16).toString(16).padStart(4, '0');\n}\nfunction unsignByte(b) {\n    // eslint-disable-next-line no-bitwise\n    return b & 0xff;\n}\n/**\n * Represents an IPv6 address\n * @class Address6\n * @param {string} address - An IPv6 address string\n * @param {number} [groups=8] - How many octets to parse\n * @example\n * var address = new Address6('2001::/32');\n */\nclass Address6 {\n    constructor(address, optionalGroups) {\n        this.addressMinusSuffix = '';\n        this.parsedSubnet = '';\n        this.subnet = '/128';\n        this.subnetMask = 128;\n        this.v4 = false;\n        this.zone = '';\n        // #region Attributes\n        /**\n         * Returns true if the given address is in the subnet of the current address\n         * @memberof Address6\n         * @instance\n         * @returns {boolean}\n         */\n        this.isInSubnet = common.isInSubnet;\n        /**\n         * Returns true if the address is correct, false otherwise\n         * @memberof Address6\n         * @instance\n         * @returns {boolean}\n         */\n        this.isCorrect = common.isCorrect(constants6.BITS);\n        if (optionalGroups === undefined) {\n            this.groups = constants6.GROUPS;\n        }\n        else {\n            this.groups = optionalGroups;\n        }\n        this.address = address;\n        const subnet = constants6.RE_SUBNET_STRING.exec(address);\n        if (subnet) {\n            this.parsedSubnet = subnet[0].replace('/', '');\n            this.subnetMask = parseInt(this.parsedSubnet, 10);\n            this.subnet = `/${this.subnetMask}`;\n            if (Number.isNaN(this.subnetMask) ||\n                this.subnetMask < 0 ||\n                this.subnetMask > constants6.BITS) {\n                throw new address_error_1.AddressError('Invalid subnet mask.');\n            }\n            address = address.replace(constants6.RE_SUBNET_STRING, '');\n        }\n        else if (/\\//.test(address)) {\n            throw new address_error_1.AddressError('Invalid subnet mask.');\n        }\n        const zone = constants6.RE_ZONE_STRING.exec(address);\n        if (zone) {\n            this.zone = zone[0];\n            address = address.replace(constants6.RE_ZONE_STRING, '');\n        }\n        this.addressMinusSuffix = address;\n        this.parsedAddress = this.parse(this.addressMinusSuffix);\n    }\n    static isValid(address) {\n        try {\n            // eslint-disable-next-line no-new\n            new Address6(address);\n            return true;\n        }\n        catch (e) {\n            return false;\n        }\n    }\n    /**\n     * Convert a BigInt to a v6 address object\n     * @memberof Address6\n     * @static\n     * @param {bigint} bigInt - a BigInt to convert\n     * @returns {Address6}\n     * @example\n     * var bigInt = BigInt('1000000000000');\n     * var address = Address6.fromBigInt(bigInt);\n     * address.correctForm(); // '::e8:d4a5:1000'\n     */\n    static fromBigInt(bigInt) {\n        const hex = bigInt.toString(16).padStart(32, '0');\n        const groups = [];\n        let i;\n        for (i = 0; i < constants6.GROUPS; i++) {\n            groups.push(hex.slice(i * 4, (i + 1) * 4));\n        }\n        return new Address6(groups.join(':'));\n    }\n    /**\n     * Convert a URL (with optional port number) to an address object\n     * @memberof Address6\n     * @static\n     * @param {string} url - a URL with optional port number\n     * @example\n     * var addressAndPort = Address6.fromURL('http://[ffff::]:8080/foo/');\n     * addressAndPort.address.correctForm(); // 'ffff::'\n     * addressAndPort.port; // 8080\n     */\n    static fromURL(url) {\n        let host;\n        let port = null;\n        let result;\n        // If we have brackets parse them and find a port\n        if (url.indexOf('[') !== -1 && url.indexOf(']:') !== -1) {\n            result = constants6.RE_URL_WITH_PORT.exec(url);\n            if (result === null) {\n                return {\n                    error: 'failed to parse address with port',\n                    address: null,\n                    port: null,\n                };\n            }\n            host = result[1];\n            port = result[2];\n            // If there's a URL extract the address\n        }\n        else if (url.indexOf('/') !== -1) {\n            // Remove the protocol prefix\n            url = url.replace(/^[a-z0-9]+:\\/\\//, '');\n            // Parse the address\n            result = constants6.RE_URL.exec(url);\n            if (result === null) {\n                return {\n                    error: 'failed to parse address from URL',\n                    address: null,\n                    port: null,\n                };\n            }\n            host = result[1];\n            // Otherwise just assign the URL to the host and let the library parse it\n        }\n        else {\n            host = url;\n        }\n        // If there's a port convert it to an integer\n        if (port) {\n            port = parseInt(port, 10);\n            // squelch out of range ports\n            if (port < 0 || port > 65536) {\n                port = null;\n            }\n        }\n        else {\n            // Standardize `undefined` to `null`\n            port = null;\n        }\n        return {\n            address: new Address6(host),\n            port,\n        };\n    }\n    /**\n     * Create an IPv6-mapped address given an IPv4 address\n     * @memberof Address6\n     * @static\n     * @param {string} address - An IPv4 address string\n     * @returns {Address6}\n     * @example\n     * var address = Address6.fromAddress4('192.168.0.1');\n     * address.correctForm(); // '::ffff:c0a8:1'\n     * address.to4in6(); // '::ffff:192.168.0.1'\n     */\n    static fromAddress4(address) {\n        const address4 = new ipv4_1.Address4(address);\n        const mask6 = constants6.BITS - (constants4.BITS - address4.subnetMask);\n        return new Address6(`::ffff:${address4.correctForm()}/${mask6}`);\n    }\n    /**\n     * Return an address from ip6.arpa form\n     * @memberof Address6\n     * @static\n     * @param {string} arpaFormAddress - an 'ip6.arpa' form address\n     * @returns {Adress6}\n     * @example\n     * var address = Address6.fromArpa(e.f.f.f.3.c.2.6.f.f.f.e.6.6.8.e.1.0.6.7.9.4.e.c.0.0.0.0.1.0.0.2.ip6.arpa.)\n     * address.correctForm(); // '2001:0:ce49:7601:e866:efff:62c3:fffe'\n     */\n    static fromArpa(arpaFormAddress) {\n        // remove ending \".ip6.arpa.\" or just \".\"\n        let address = arpaFormAddress.replace(/(\\.ip6\\.arpa)?\\.$/, '');\n        const semicolonAmount = 7;\n        // correct ip6.arpa form with ending removed will be 63 characters\n        if (address.length !== 63) {\n            throw new address_error_1.AddressError(\"Invalid 'ip6.arpa' form.\");\n        }\n        const parts = address.split('.').reverse();\n        for (let i = semicolonAmount; i > 0; i--) {\n            const insertIndex = i * 4;\n            parts.splice(insertIndex, 0, ':');\n        }\n        address = parts.join('');\n        return new Address6(address);\n    }\n    /**\n     * Return the Microsoft UNC transcription of the address\n     * @memberof Address6\n     * @instance\n     * @returns {String} the Microsoft UNC transcription of the address\n     */\n    microsoftTranscription() {\n        return `${this.correctForm().replace(/:/g, '-')}.ipv6-literal.net`;\n    }\n    /**\n     * Return the first n bits of the address, defaulting to the subnet mask\n     * @memberof Address6\n     * @instance\n     * @param {number} [mask=subnet] - the number of bits to mask\n     * @returns {String} the first n bits of the address as a string\n     */\n    mask(mask = this.subnetMask) {\n        return this.getBitsBase2(0, mask);\n    }\n    /**\n     * Return the number of possible subnets of a given size in the address\n     * @memberof Address6\n     * @instance\n     * @param {number} [subnetSize=128] - the subnet size\n     * @returns {String}\n     */\n    // TODO: probably useful to have a numeric version of this too\n    possibleSubnets(subnetSize = 128) {\n        const availableBits = constants6.BITS - this.subnetMask;\n        const subnetBits = Math.abs(subnetSize - constants6.BITS);\n        const subnetPowers = availableBits - subnetBits;\n        if (subnetPowers < 0) {\n            return '0';\n        }\n        return addCommas((BigInt('2') ** BigInt(subnetPowers)).toString(10));\n    }\n    /**\n     * Helper function getting start address.\n     * @memberof Address6\n     * @instance\n     * @returns {bigint}\n     */\n    _startAddress() {\n        return BigInt(`0b${this.mask() + '0'.repeat(constants6.BITS - this.subnetMask)}`);\n    }\n    /**\n     * The first address in the range given by this address' subnet\n     * Often referred to as the Network Address.\n     * @memberof Address6\n     * @instance\n     * @returns {Address6}\n     */\n    startAddress() {\n        return Address6.fromBigInt(this._startAddress());\n    }\n    /**\n     * The first host address in the range given by this address's subnet ie\n     * the first address after the Network Address\n     * @memberof Address6\n     * @instance\n     * @returns {Address6}\n     */\n    startAddressExclusive() {\n        const adjust = BigInt('1');\n        return Address6.fromBigInt(this._startAddress() + adjust);\n    }\n    /**\n     * Helper function getting end address.\n     * @memberof Address6\n     * @instance\n     * @returns {bigint}\n     */\n    _endAddress() {\n        return BigInt(`0b${this.mask() + '1'.repeat(constants6.BITS - this.subnetMask)}`);\n    }\n    /**\n     * The last address in the range given by this address' subnet\n     * Often referred to as the Broadcast\n     * @memberof Address6\n     * @instance\n     * @returns {Address6}\n     */\n    endAddress() {\n        return Address6.fromBigInt(this._endAddress());\n    }\n    /**\n     * The last host address in the range given by this address's subnet ie\n     * the last address prior to the Broadcast Address\n     * @memberof Address6\n     * @instance\n     * @returns {Address6}\n     */\n    endAddressExclusive() {\n        const adjust = BigInt('1');\n        return Address6.fromBigInt(this._endAddress() - adjust);\n    }\n    /**\n     * Return the scope of the address\n     * @memberof Address6\n     * @instance\n     * @returns {String}\n     */\n    getScope() {\n        let scope = constants6.SCOPES[parseInt(this.getBits(12, 16).toString(10), 10)];\n        if (this.getType() === 'Global unicast' && scope !== 'Link local') {\n            scope = 'Global';\n        }\n        return scope || 'Unknown';\n    }\n    /**\n     * Return the type of the address\n     * @memberof Address6\n     * @instance\n     * @returns {String}\n     */\n    getType() {\n        for (const subnet of Object.keys(constants6.TYPES)) {\n            if (this.isInSubnet(new Address6(subnet))) {\n                return constants6.TYPES[subnet];\n            }\n        }\n        return 'Global unicast';\n    }\n    /**\n     * Return the bits in the given range as a BigInt\n     * @memberof Address6\n     * @instance\n     * @returns {bigint}\n     */\n    getBits(start, end) {\n        return BigInt(`0b${this.getBitsBase2(start, end)}`);\n    }\n    /**\n     * Return the bits in the given range as a base-2 string\n     * @memberof Address6\n     * @instance\n     * @returns {String}\n     */\n    getBitsBase2(start, end) {\n        return this.binaryZeroPad().slice(start, end);\n    }\n    /**\n     * Return the bits in the given range as a base-16 string\n     * @memberof Address6\n     * @instance\n     * @returns {String}\n     */\n    getBitsBase16(start, end) {\n        const length = end - start;\n        if (length % 4 !== 0) {\n            throw new Error('Length of bits to retrieve must be divisible by four');\n        }\n        return this.getBits(start, end)\n            .toString(16)\n            .padStart(length / 4, '0');\n    }\n    /**\n     * Return the bits that are set past the subnet mask length\n     * @memberof Address6\n     * @instance\n     * @returns {String}\n     */\n    getBitsPastSubnet() {\n        return this.getBitsBase2(this.subnetMask, constants6.BITS);\n    }\n    /**\n     * Return the reversed ip6.arpa form of the address\n     * @memberof Address6\n     * @param {Object} options\n     * @param {boolean} options.omitSuffix - omit the \"ip6.arpa\" suffix\n     * @instance\n     * @returns {String}\n     */\n    reverseForm(options) {\n        if (!options) {\n            options = {};\n        }\n        const characters = Math.floor(this.subnetMask / 4);\n        const reversed = this.canonicalForm()\n            .replace(/:/g, '')\n            .split('')\n            .slice(0, characters)\n            .reverse()\n            .join('.');\n        if (characters > 0) {\n            if (options.omitSuffix) {\n                return reversed;\n            }\n            return `${reversed}.ip6.arpa.`;\n        }\n        if (options.omitSuffix) {\n            return '';\n        }\n        return 'ip6.arpa.';\n    }\n    /**\n     * Return the correct form of the address\n     * @memberof Address6\n     * @instance\n     * @returns {String}\n     */\n    correctForm() {\n        let i;\n        let groups = [];\n        let zeroCounter = 0;\n        const zeroes = [];\n        for (i = 0; i < this.parsedAddress.length; i++) {\n            const value = parseInt(this.parsedAddress[i], 16);\n            if (value === 0) {\n                zeroCounter++;\n            }\n            if (value !== 0 && zeroCounter > 0) {\n                if (zeroCounter > 1) {\n                    zeroes.push([i - zeroCounter, i - 1]);\n                }\n                zeroCounter = 0;\n            }\n        }\n        // Do we end with a string of zeroes?\n        if (zeroCounter > 1) {\n            zeroes.push([this.parsedAddress.length - zeroCounter, this.parsedAddress.length - 1]);\n        }\n        const zeroLengths = zeroes.map((n) => n[1] - n[0] + 1);\n        if (zeroes.length > 0) {\n            const index = zeroLengths.indexOf(Math.max(...zeroLengths));\n            groups = compact(this.parsedAddress, zeroes[index]);\n        }\n        else {\n            groups = this.parsedAddress;\n        }\n        for (i = 0; i < groups.length; i++) {\n            if (groups[i] !== 'compact') {\n                groups[i] = parseInt(groups[i], 16).toString(16);\n            }\n        }\n        let correct = groups.join(':');\n        correct = correct.replace(/^compact$/, '::');\n        correct = correct.replace(/(^compact)|(compact$)/, ':');\n        correct = correct.replace(/compact/, '');\n        return correct;\n    }\n    /**\n     * Return a zero-padded base-2 string representation of the address\n     * @memberof Address6\n     * @instance\n     * @returns {String}\n     * @example\n     * var address = new Address6('2001:4860:4001:803::1011');\n     * address.binaryZeroPad();\n     * // '0010000000000001010010000110000001000000000000010000100000000011\n     * //  0000000000000000000000000000000000000000000000000001000000010001'\n     */\n    binaryZeroPad() {\n        return this.bigInt().toString(2).padStart(constants6.BITS, '0');\n    }\n    // TODO: Improve the semantics of this helper function\n    parse4in6(address) {\n        const groups = address.split(':');\n        const lastGroup = groups.slice(-1)[0];\n        const address4 = lastGroup.match(constants4.RE_ADDRESS);\n        if (address4) {\n            this.parsedAddress4 = address4[0];\n            this.address4 = new ipv4_1.Address4(this.parsedAddress4);\n            for (let i = 0; i < this.address4.groups; i++) {\n                if (/^0[0-9]+/.test(this.address4.parsedAddress[i])) {\n                    throw new address_error_1.AddressError(\"IPv4 addresses can't have leading zeroes.\", address.replace(constants4.RE_ADDRESS, this.address4.parsedAddress.map(spanLeadingZeroes4).join('.')));\n                }\n            }\n            this.v4 = true;\n            groups[groups.length - 1] = this.address4.toGroup6();\n            address = groups.join(':');\n        }\n        return address;\n    }\n    // TODO: Make private?\n    parse(address) {\n        address = this.parse4in6(address);\n        const badCharacters = address.match(constants6.RE_BAD_CHARACTERS);\n        if (badCharacters) {\n            throw new address_error_1.AddressError(`Bad character${badCharacters.length > 1 ? 's' : ''} detected in address: ${badCharacters.join('')}`, address.replace(constants6.RE_BAD_CHARACTERS, '<span class=\"parse-error\">$1</span>'));\n        }\n        const badAddress = address.match(constants6.RE_BAD_ADDRESS);\n        if (badAddress) {\n            throw new address_error_1.AddressError(`Address failed regex: ${badAddress.join('')}`, address.replace(constants6.RE_BAD_ADDRESS, '<span class=\"parse-error\">$1</span>'));\n        }\n        let groups = [];\n        const halves = address.split('::');\n        if (halves.length === 2) {\n            let first = halves[0].split(':');\n            let last = halves[1].split(':');\n            if (first.length === 1 && first[0] === '') {\n                first = [];\n            }\n            if (last.length === 1 && last[0] === '') {\n                last = [];\n            }\n            const remaining = this.groups - (first.length + last.length);\n            if (!remaining) {\n                throw new address_error_1.AddressError('Error parsing groups');\n            }\n            this.elidedGroups = remaining;\n            this.elisionBegin = first.length;\n            this.elisionEnd = first.length + this.elidedGroups;\n            groups = groups.concat(first);\n            for (let i = 0; i < remaining; i++) {\n                groups.push('0');\n            }\n            groups = groups.concat(last);\n        }\n        else if (halves.length === 1) {\n            groups = address.split(':');\n            this.elidedGroups = 0;\n        }\n        else {\n            throw new address_error_1.AddressError('Too many :: groups found');\n        }\n        groups = groups.map((group) => parseInt(group, 16).toString(16));\n        if (groups.length !== this.groups) {\n            throw new address_error_1.AddressError('Incorrect number of groups found');\n        }\n        return groups;\n    }\n    /**\n     * Return the canonical form of the address\n     * @memberof Address6\n     * @instance\n     * @returns {String}\n     */\n    canonicalForm() {\n        return this.parsedAddress.map(paddedHex).join(':');\n    }\n    /**\n     * Return the decimal form of the address\n     * @memberof Address6\n     * @instance\n     * @returns {String}\n     */\n    decimal() {\n        return this.parsedAddress.map((n) => parseInt(n, 16).toString(10).padStart(5, '0')).join(':');\n    }\n    /**\n     * Return the address as a BigInt\n     * @memberof Address6\n     * @instance\n     * @returns {bigint}\n     */\n    bigInt() {\n        return BigInt(`0x${this.parsedAddress.map(paddedHex).join('')}`);\n    }\n    /**\n     * Return the last two groups of this address as an IPv4 address string\n     * @memberof Address6\n     * @instance\n     * @returns {Address4}\n     * @example\n     * var address = new Address6('2001:4860:4001::1825:bf11');\n     * address.to4().correctForm(); // '24.37.191.17'\n     */\n    to4() {\n        const binary = this.binaryZeroPad().split('');\n        return ipv4_1.Address4.fromHex(BigInt(`0b${binary.slice(96, 128).join('')}`).toString(16));\n    }\n    /**\n     * Return the v4-in-v6 form of the address\n     * @memberof Address6\n     * @instance\n     * @returns {String}\n     */\n    to4in6() {\n        const address4 = this.to4();\n        const address6 = new Address6(this.parsedAddress.slice(0, 6).join(':'), 6);\n        const correct = address6.correctForm();\n        let infix = '';\n        if (!/:$/.test(correct)) {\n            infix = ':';\n        }\n        return correct + infix + address4.address;\n    }\n    /**\n     * Return an object containing the Teredo properties of the address\n     * @memberof Address6\n     * @instance\n     * @returns {Object}\n     */\n    inspectTeredo() {\n        /*\n        - Bits 0 to 31 are set to the Teredo prefix (normally 2001:0000::/32).\n        - Bits 32 to 63 embed the primary IPv4 address of the Teredo server that\n          is used.\n        - Bits 64 to 79 can be used to define some flags. Currently only the\n          higher order bit is used; it is set to 1 if the Teredo client is\n          located behind a cone NAT, 0 otherwise. For Microsoft's Windows Vista\n          and Windows Server 2008 implementations, more bits are used. In those\n          implementations, the format for these 16 bits is \"CRAAAAUG AAAAAAAA\",\n          where \"C\" remains the \"Cone\" flag. The \"R\" bit is reserved for future\n          use. The \"U\" bit is for the Universal/Local flag (set to 0). The \"G\" bit\n          is Individual/Group flag (set to 0). The A bits are set to a 12-bit\n          randomly generated number chosen by the Teredo client to introduce\n          additional protection for the Teredo node against IPv6-based scanning\n          attacks.\n        - Bits 80 to 95 contains the obfuscated UDP port number. This is the\n          port number that is mapped by the NAT to the Teredo client with all\n          bits inverted.\n        - Bits 96 to 127 contains the obfuscated IPv4 address. This is the\n          public IPv4 address of the NAT with all bits inverted.\n        */\n        const prefix = this.getBitsBase16(0, 32);\n        const bitsForUdpPort = this.getBits(80, 96);\n        // eslint-disable-next-line no-bitwise\n        const udpPort = (bitsForUdpPort ^ BigInt('0xffff')).toString();\n        const server4 = ipv4_1.Address4.fromHex(this.getBitsBase16(32, 64));\n        const bitsForClient4 = this.getBits(96, 128);\n        // eslint-disable-next-line no-bitwise\n        const client4 = ipv4_1.Address4.fromHex((bitsForClient4 ^ BigInt('0xffffffff')).toString(16));\n        const flagsBase2 = this.getBitsBase2(64, 80);\n        const coneNat = (0, common_1.testBit)(flagsBase2, 15);\n        const reserved = (0, common_1.testBit)(flagsBase2, 14);\n        const groupIndividual = (0, common_1.testBit)(flagsBase2, 8);\n        const universalLocal = (0, common_1.testBit)(flagsBase2, 9);\n        const nonce = BigInt(`0b${flagsBase2.slice(2, 6) + flagsBase2.slice(8, 16)}`).toString(10);\n        return {\n            prefix: `${prefix.slice(0, 4)}:${prefix.slice(4, 8)}`,\n            server4: server4.address,\n            client4: client4.address,\n            flags: flagsBase2,\n            coneNat,\n            microsoft: {\n                reserved,\n                universalLocal,\n                groupIndividual,\n                nonce,\n            },\n            udpPort,\n        };\n    }\n    /**\n     * Return an object containing the 6to4 properties of the address\n     * @memberof Address6\n     * @instance\n     * @returns {Object}\n     */\n    inspect6to4() {\n        /*\n        - Bits 0 to 15 are set to the 6to4 prefix (2002::/16).\n        - Bits 16 to 48 embed the IPv4 address of the 6to4 gateway that is used.\n        */\n        const prefix = this.getBitsBase16(0, 16);\n        const gateway = ipv4_1.Address4.fromHex(this.getBitsBase16(16, 48));\n        return {\n            prefix: prefix.slice(0, 4),\n            gateway: gateway.address,\n        };\n    }\n    /**\n     * Return a v6 6to4 address from a v6 v4inv6 address\n     * @memberof Address6\n     * @instance\n     * @returns {Address6}\n     */\n    to6to4() {\n        if (!this.is4()) {\n            return null;\n        }\n        const addr6to4 = [\n            '2002',\n            this.getBitsBase16(96, 112),\n            this.getBitsBase16(112, 128),\n            '',\n            '/16',\n        ].join(':');\n        return new Address6(addr6to4);\n    }\n    /**\n     * Return a byte array\n     * @memberof Address6\n     * @instance\n     * @returns {Array}\n     */\n    toByteArray() {\n        const valueWithoutPadding = this.bigInt().toString(16);\n        const leadingPad = '0'.repeat(valueWithoutPadding.length % 2);\n        const value = `${leadingPad}${valueWithoutPadding}`;\n        const bytes = [];\n        for (let i = 0, length = value.length; i < length; i += 2) {\n            bytes.push(parseInt(value.substring(i, i + 2), 16));\n        }\n        return bytes;\n    }\n    /**\n     * Return an unsigned byte array\n     * @memberof Address6\n     * @instance\n     * @returns {Array}\n     */\n    toUnsignedByteArray() {\n        return this.toByteArray().map(unsignByte);\n    }\n    /**\n     * Convert a byte array to an Address6 object\n     * @memberof Address6\n     * @static\n     * @returns {Address6}\n     */\n    static fromByteArray(bytes) {\n        return this.fromUnsignedByteArray(bytes.map(unsignByte));\n    }\n    /**\n     * Convert an unsigned byte array to an Address6 object\n     * @memberof Address6\n     * @static\n     * @returns {Address6}\n     */\n    static fromUnsignedByteArray(bytes) {\n        const BYTE_MAX = BigInt('256');\n        let result = BigInt('0');\n        let multiplier = BigInt('1');\n        for (let i = bytes.length - 1; i >= 0; i--) {\n            result += multiplier * BigInt(bytes[i].toString(10));\n            multiplier *= BYTE_MAX;\n        }\n        return Address6.fromBigInt(result);\n    }\n    /**\n     * Returns true if the address is in the canonical form, false otherwise\n     * @memberof Address6\n     * @instance\n     * @returns {boolean}\n     */\n    isCanonical() {\n        return this.addressMinusSuffix === this.canonicalForm();\n    }\n    /**\n     * Returns true if the address is a link local address, false otherwise\n     * @memberof Address6\n     * @instance\n     * @returns {boolean}\n     */\n    isLinkLocal() {\n        // Zeroes are required, i.e. we can't check isInSubnet with 'fe80::/10'\n        if (this.getBitsBase2(0, 64) ===\n            '1111111010000000000000000000000000000000000000000000000000000000') {\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Returns true if the address is a multicast address, false otherwise\n     * @memberof Address6\n     * @instance\n     * @returns {boolean}\n     */\n    isMulticast() {\n        return this.getType() === 'Multicast';\n    }\n    /**\n     * Returns true if the address is a v4-in-v6 address, false otherwise\n     * @memberof Address6\n     * @instance\n     * @returns {boolean}\n     */\n    is4() {\n        return this.v4;\n    }\n    /**\n     * Returns true if the address is a Teredo address, false otherwise\n     * @memberof Address6\n     * @instance\n     * @returns {boolean}\n     */\n    isTeredo() {\n        return this.isInSubnet(new Address6('2001::/32'));\n    }\n    /**\n     * Returns true if the address is a 6to4 address, false otherwise\n     * @memberof Address6\n     * @instance\n     * @returns {boolean}\n     */\n    is6to4() {\n        return this.isInSubnet(new Address6('2002::/16'));\n    }\n    /**\n     * Returns true if the address is a loopback address, false otherwise\n     * @memberof Address6\n     * @instance\n     * @returns {boolean}\n     */\n    isLoopback() {\n        return this.getType() === 'Loopback';\n    }\n    // #endregion\n    // #region HTML\n    /**\n     * @returns {String} the address in link form with a default port of 80\n     */\n    href(optionalPort) {\n        if (optionalPort === undefined) {\n            optionalPort = '';\n        }\n        else {\n            optionalPort = `:${optionalPort}`;\n        }\n        return `http://[${this.correctForm()}]${optionalPort}/`;\n    }\n    /**\n     * @returns {String} a link suitable for conveying the address via a URL hash\n     */\n    link(options) {\n        if (!options) {\n            options = {};\n        }\n        if (options.className === undefined) {\n            options.className = '';\n        }\n        if (options.prefix === undefined) {\n            options.prefix = '/#address=';\n        }\n        if (options.v4 === undefined) {\n            options.v4 = false;\n        }\n        let formFunction = this.correctForm;\n        if (options.v4) {\n            formFunction = this.to4in6;\n        }\n        const form = formFunction.call(this);\n        if (options.className) {\n            return `<a href=\"${options.prefix}${form}\" class=\"${options.className}\">${form}</a>`;\n        }\n        return `<a href=\"${options.prefix}${form}\">${form}</a>`;\n    }\n    /**\n     * Groups an address\n     * @returns {String}\n     */\n    group() {\n        if (this.elidedGroups === 0) {\n            // The simple case\n            return helpers.simpleGroup(this.address).join(':');\n        }\n        assert(typeof this.elidedGroups === 'number');\n        assert(typeof this.elisionBegin === 'number');\n        // The elided case\n        const output = [];\n        const [left, right] = this.address.split('::');\n        if (left.length) {\n            output.push(...helpers.simpleGroup(left));\n        }\n        else {\n            output.push('');\n        }\n        const classes = ['hover-group'];\n        for (let i = this.elisionBegin; i < this.elisionBegin + this.elidedGroups; i++) {\n            classes.push(`group-${i}`);\n        }\n        output.push(`<span class=\"${classes.join(' ')}\"></span>`);\n        if (right.length) {\n            output.push(...helpers.simpleGroup(right, this.elisionEnd));\n        }\n        else {\n            output.push('');\n        }\n        if (this.is4()) {\n            assert(this.address4 instanceof ipv4_1.Address4);\n            output.pop();\n            output.push(this.address4.groupForV6());\n        }\n        return output.join(':');\n    }\n    // #endregion\n    // #region Regular expressions\n    /**\n     * Generate a regular expression string that can be used to find or validate\n     * all variations of this address\n     * @memberof Address6\n     * @instance\n     * @param {boolean} substringSearch\n     * @returns {string}\n     */\n    regularExpressionString(substringSearch = false) {\n        let output = [];\n        // TODO: revisit why this is necessary\n        const address6 = new Address6(this.correctForm());\n        if (address6.elidedGroups === 0) {\n            // The simple case\n            output.push((0, regular_expressions_1.simpleRegularExpression)(address6.parsedAddress));\n        }\n        else if (address6.elidedGroups === constants6.GROUPS) {\n            // A completely elided address\n            output.push((0, regular_expressions_1.possibleElisions)(constants6.GROUPS));\n        }\n        else {\n            // A partially elided address\n            const halves = address6.address.split('::');\n            if (halves[0].length) {\n                output.push((0, regular_expressions_1.simpleRegularExpression)(halves[0].split(':')));\n            }\n            assert(typeof address6.elidedGroups === 'number');\n            output.push((0, regular_expressions_1.possibleElisions)(address6.elidedGroups, halves[0].length !== 0, halves[1].length !== 0));\n            if (halves[1].length) {\n                output.push((0, regular_expressions_1.simpleRegularExpression)(halves[1].split(':')));\n            }\n            output = [output.join(':')];\n        }\n        if (!substringSearch) {\n            output = [\n                '(?=^|',\n                regular_expressions_1.ADDRESS_BOUNDARY,\n                '|[^\\\\w\\\\:])(',\n                ...output,\n                ')(?=[^\\\\w\\\\:]|',\n                regular_expressions_1.ADDRESS_BOUNDARY,\n                '|$)',\n            ];\n        }\n        return output.join('');\n    }\n    /**\n     * Generate a regular expression that can be used to find or validate all\n     * variations of this address.\n     * @memberof Address6\n     * @instance\n     * @param {boolean} substringSearch\n     * @returns {RegExp}\n     */\n    regularExpression(substringSearch = false) {\n        return new RegExp(this.regularExpressionString(substringSearch), 'i');\n    }\n}\nexports.Address6 = Address6;\n//# sourceMappingURL=ipv6.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.v6 = exports.AddressError = exports.Address6 = exports.Address4 = void 0;\nvar ipv4_1 = require(\"./ipv4\");\nObject.defineProperty(exports, \"Address4\", { enumerable: true, get: function () { return ipv4_1.Address4; } });\nvar ipv6_1 = require(\"./ipv6\");\nObject.defineProperty(exports, \"Address6\", { enumerable: true, get: function () { return ipv6_1.Address6; } });\nvar address_error_1 = require(\"./address-error\");\nObject.defineProperty(exports, \"AddressError\", { enumerable: true, get: function () { return address_error_1.AddressError; } });\nconst helpers = __importStar(require(\"./v6/helpers\"));\nexports.v6 = { helpers };\n//# sourceMappingURL=ip-address.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ipToBuffer = exports.int32ToIpv4 = exports.ipv4ToInt32 = exports.validateSocksClientChainOptions = exports.validateSocksClientOptions = void 0;\nconst util_1 = require(\"./util\");\nconst constants_1 = require(\"./constants\");\nconst stream = require(\"stream\");\nconst ip_address_1 = require(\"ip-address\");\nconst net = require(\"net\");\n/**\n * Validates the provided SocksClientOptions\n * @param options { SocksClientOptions }\n * @param acceptedCommands { string[] } A list of accepted SocksProxy commands.\n */\nfunction validateSocksClientOptions(options, acceptedCommands = ['connect', 'bind', 'associate']) {\n    // Check SOCKs command option.\n    if (!constants_1.SocksCommand[options.command]) {\n        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommand, options);\n    }\n    // Check SocksCommand for acceptable command.\n    if (acceptedCommands.indexOf(options.command) === -1) {\n        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommandForOperation, options);\n    }\n    // Check destination\n    if (!isValidSocksRemoteHost(options.destination)) {\n        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsDestination, options);\n    }\n    // Check SOCKS proxy to use\n    if (!isValidSocksProxy(options.proxy)) {\n        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxy, options);\n    }\n    // Validate custom auth (if set)\n    validateCustomProxyAuth(options.proxy, options);\n    // Check timeout\n    if (options.timeout && !isValidTimeoutValue(options.timeout)) {\n        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsTimeout, options);\n    }\n    // Check existing_socket (if provided)\n    if (options.existing_socket &&\n        !(options.existing_socket instanceof stream.Duplex)) {\n        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsExistingSocket, options);\n    }\n}\nexports.validateSocksClientOptions = validateSocksClientOptions;\n/**\n * Validates the SocksClientChainOptions\n * @param options { SocksClientChainOptions }\n */\nfunction validateSocksClientChainOptions(options) {\n    // Only connect is supported when chaining.\n    if (options.command !== 'connect') {\n        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommandChain, options);\n    }\n    // Check destination\n    if (!isValidSocksRemoteHost(options.destination)) {\n        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsDestination, options);\n    }\n    // Validate proxies (length)\n    if (!(options.proxies &&\n        Array.isArray(options.proxies) &&\n        options.proxies.length >= 2)) {\n        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxiesLength, options);\n    }\n    // Validate proxies\n    options.proxies.forEach((proxy) => {\n        if (!isValidSocksProxy(proxy)) {\n            throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxy, options);\n        }\n        // Validate custom auth (if set)\n        validateCustomProxyAuth(proxy, options);\n    });\n    // Check timeout\n    if (options.timeout && !isValidTimeoutValue(options.timeout)) {\n        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsTimeout, options);\n    }\n}\nexports.validateSocksClientChainOptions = validateSocksClientChainOptions;\nfunction validateCustomProxyAuth(proxy, options) {\n    if (proxy.custom_auth_method !== undefined) {\n        // Invalid auth method range\n        if (proxy.custom_auth_method < constants_1.SOCKS5_CUSTOM_AUTH_START ||\n            proxy.custom_auth_method > constants_1.SOCKS5_CUSTOM_AUTH_END) {\n            throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthRange, options);\n        }\n        // Missing custom_auth_request_handler\n        if (proxy.custom_auth_request_handler === undefined ||\n            typeof proxy.custom_auth_request_handler !== 'function') {\n            throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);\n        }\n        // Missing custom_auth_response_size\n        if (proxy.custom_auth_response_size === undefined) {\n            throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);\n        }\n        // Missing/invalid custom_auth_response_handler\n        if (proxy.custom_auth_response_handler === undefined ||\n            typeof proxy.custom_auth_response_handler !== 'function') {\n            throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);\n        }\n    }\n}\n/**\n * Validates a SocksRemoteHost\n * @param remoteHost { SocksRemoteHost }\n */\nfunction isValidSocksRemoteHost(remoteHost) {\n    return (remoteHost &&\n        typeof remoteHost.host === 'string' &&\n        Buffer.byteLength(remoteHost.host) < 256 &&\n        typeof remoteHost.port === 'number' &&\n        remoteHost.port >= 0 &&\n        remoteHost.port <= 65535);\n}\n/**\n * Validates a SocksProxy\n * @param proxy { SocksProxy }\n */\nfunction isValidSocksProxy(proxy) {\n    return (proxy &&\n        (typeof proxy.host === 'string' || typeof proxy.ipaddress === 'string') &&\n        typeof proxy.port === 'number' &&\n        proxy.port >= 0 &&\n        proxy.port <= 65535 &&\n        (proxy.type === 4 || proxy.type === 5));\n}\n/**\n * Validates a timeout value.\n * @param value { Number }\n */\nfunction isValidTimeoutValue(value) {\n    return typeof value === 'number' && value > 0;\n}\nfunction ipv4ToInt32(ip) {\n    const address = new ip_address_1.Address4(ip);\n    // Convert the IPv4 address parts to an integer\n    return address.toArray().reduce((acc, part) => (acc << 8) + part, 0) >>> 0;\n}\nexports.ipv4ToInt32 = ipv4ToInt32;\nfunction int32ToIpv4(int32) {\n    // Extract each byte (octet) from the 32-bit integer\n    const octet1 = (int32 >>> 24) & 0xff;\n    const octet2 = (int32 >>> 16) & 0xff;\n    const octet3 = (int32 >>> 8) & 0xff;\n    const octet4 = int32 & 0xff;\n    // Combine the octets into a string in IPv4 format\n    return [octet1, octet2, octet3, octet4].join('.');\n}\nexports.int32ToIpv4 = int32ToIpv4;\nfunction ipToBuffer(ip) {\n    if (net.isIPv4(ip)) {\n        // Handle IPv4 addresses\n        const address = new ip_address_1.Address4(ip);\n        return Buffer.from(address.toArray());\n    }\n    else if (net.isIPv6(ip)) {\n        // Handle IPv6 addresses\n        const address = new ip_address_1.Address6(ip);\n        return Buffer.from(address\n            .canonicalForm()\n            .split(':')\n            .map((segment) => segment.padStart(4, '0'))\n            .join(''), 'hex');\n    }\n    else {\n        throw new Error('Invalid IP address format');\n    }\n}\nexports.ipToBuffer = ipToBuffer;\n//# sourceMappingURL=helpers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReceiveBuffer = void 0;\nclass ReceiveBuffer {\n    constructor(size = 4096) {\n        this.buffer = Buffer.allocUnsafe(size);\n        this.offset = 0;\n        this.originalSize = size;\n    }\n    get length() {\n        return this.offset;\n    }\n    append(data) {\n        if (!Buffer.isBuffer(data)) {\n            throw new Error('Attempted to append a non-buffer instance to ReceiveBuffer.');\n        }\n        if (this.offset + data.length >= this.buffer.length) {\n            const tmp = this.buffer;\n            this.buffer = Buffer.allocUnsafe(Math.max(this.buffer.length + this.originalSize, this.buffer.length + data.length));\n            tmp.copy(this.buffer);\n        }\n        data.copy(this.buffer, this.offset);\n        return (this.offset += data.length);\n    }\n    peek(length) {\n        if (length > this.offset) {\n            throw new Error('Attempted to read beyond the bounds of the managed internal data.');\n        }\n        return this.buffer.slice(0, length);\n    }\n    get(length) {\n        if (length > this.offset) {\n            throw new Error('Attempted to read beyond the bounds of the managed internal data.');\n        }\n        const value = Buffer.allocUnsafe(length);\n        this.buffer.slice(0, length).copy(value);\n        this.buffer.copyWithin(0, length, length + this.offset - length);\n        this.offset -= length;\n        return value;\n    }\n}\nexports.ReceiveBuffer = ReceiveBuffer;\n//# sourceMappingURL=receivebuffer.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SocksClientError = exports.SocksClient = void 0;\nconst events_1 = require(\"events\");\nconst net = require(\"net\");\nconst smart_buffer_1 = require(\"smart-buffer\");\nconst constants_1 = require(\"../common/constants\");\nconst helpers_1 = require(\"../common/helpers\");\nconst receivebuffer_1 = require(\"../common/receivebuffer\");\nconst util_1 = require(\"../common/util\");\nObject.defineProperty(exports, \"SocksClientError\", { enumerable: true, get: function () { return util_1.SocksClientError; } });\nconst ip_address_1 = require(\"ip-address\");\nclass SocksClient extends events_1.EventEmitter {\n    constructor(options) {\n        super();\n        this.options = Object.assign({}, options);\n        // Validate SocksClientOptions\n        (0, helpers_1.validateSocksClientOptions)(options);\n        // Default state\n        this.setState(constants_1.SocksClientState.Created);\n    }\n    /**\n     * Creates a new SOCKS connection.\n     *\n     * Note: Supports callbacks and promises. Only supports the connect command.\n     * @param options { SocksClientOptions } Options.\n     * @param callback { Function } An optional callback function.\n     * @returns { Promise }\n     */\n    static createConnection(options, callback) {\n        return new Promise((resolve, reject) => {\n            // Validate SocksClientOptions\n            try {\n                (0, helpers_1.validateSocksClientOptions)(options, ['connect']);\n            }\n            catch (err) {\n                if (typeof callback === 'function') {\n                    callback(err);\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    return resolve(err); // Resolves pending promise (prevents memory leaks).\n                }\n                else {\n                    return reject(err);\n                }\n            }\n            const client = new SocksClient(options);\n            client.connect(options.existing_socket);\n            client.once('established', (info) => {\n                client.removeAllListeners();\n                if (typeof callback === 'function') {\n                    callback(null, info);\n                    resolve(info); // Resolves pending promise (prevents memory leaks).\n                }\n                else {\n                    resolve(info);\n                }\n            });\n            // Error occurred, failed to establish connection.\n            client.once('error', (err) => {\n                client.removeAllListeners();\n                if (typeof callback === 'function') {\n                    callback(err);\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    resolve(err); // Resolves pending promise (prevents memory leaks).\n                }\n                else {\n                    reject(err);\n                }\n            });\n        });\n    }\n    /**\n     * Creates a new SOCKS connection chain to a destination host through 2 or more SOCKS proxies.\n     *\n     * Note: Supports callbacks and promises. Only supports the connect method.\n     * Note: Implemented via createConnection() factory function.\n     * @param options { SocksClientChainOptions } Options\n     * @param callback { Function } An optional callback function.\n     * @returns { Promise }\n     */\n    static createConnectionChain(options, callback) {\n        // eslint-disable-next-line no-async-promise-executor\n        return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n            // Validate SocksClientChainOptions\n            try {\n                (0, helpers_1.validateSocksClientChainOptions)(options);\n            }\n            catch (err) {\n                if (typeof callback === 'function') {\n                    callback(err);\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    return resolve(err); // Resolves pending promise (prevents memory leaks).\n                }\n                else {\n                    return reject(err);\n                }\n            }\n            // Shuffle proxies\n            if (options.randomizeChain) {\n                (0, util_1.shuffleArray)(options.proxies);\n            }\n            try {\n                let sock;\n                for (let i = 0; i < options.proxies.length; i++) {\n                    const nextProxy = options.proxies[i];\n                    // If we've reached the last proxy in the chain, the destination is the actual destination, otherwise it's the next proxy.\n                    const nextDestination = i === options.proxies.length - 1\n                        ? options.destination\n                        : {\n                            host: options.proxies[i + 1].host ||\n                                options.proxies[i + 1].ipaddress,\n                            port: options.proxies[i + 1].port,\n                        };\n                    // Creates the next connection in the chain.\n                    const result = yield SocksClient.createConnection({\n                        command: 'connect',\n                        proxy: nextProxy,\n                        destination: nextDestination,\n                        existing_socket: sock,\n                    });\n                    // If sock is undefined, assign it here.\n                    sock = sock || result.socket;\n                }\n                if (typeof callback === 'function') {\n                    callback(null, { socket: sock });\n                    resolve({ socket: sock }); // Resolves pending promise (prevents memory leaks).\n                }\n                else {\n                    resolve({ socket: sock });\n                }\n            }\n            catch (err) {\n                if (typeof callback === 'function') {\n                    callback(err);\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    resolve(err); // Resolves pending promise (prevents memory leaks).\n                }\n                else {\n                    reject(err);\n                }\n            }\n        }));\n    }\n    /**\n     * Creates a SOCKS UDP Frame.\n     * @param options\n     */\n    static createUDPFrame(options) {\n        const buff = new smart_buffer_1.SmartBuffer();\n        buff.writeUInt16BE(0);\n        buff.writeUInt8(options.frameNumber || 0);\n        // IPv4/IPv6/Hostname\n        if (net.isIPv4(options.remoteHost.host)) {\n            buff.writeUInt8(constants_1.Socks5HostType.IPv4);\n            buff.writeUInt32BE((0, helpers_1.ipv4ToInt32)(options.remoteHost.host));\n        }\n        else if (net.isIPv6(options.remoteHost.host)) {\n            buff.writeUInt8(constants_1.Socks5HostType.IPv6);\n            buff.writeBuffer((0, helpers_1.ipToBuffer)(options.remoteHost.host));\n        }\n        else {\n            buff.writeUInt8(constants_1.Socks5HostType.Hostname);\n            buff.writeUInt8(Buffer.byteLength(options.remoteHost.host));\n            buff.writeString(options.remoteHost.host);\n        }\n        // Port\n        buff.writeUInt16BE(options.remoteHost.port);\n        // Data\n        buff.writeBuffer(options.data);\n        return buff.toBuffer();\n    }\n    /**\n     * Parses a SOCKS UDP frame.\n     * @param data\n     */\n    static parseUDPFrame(data) {\n        const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);\n        buff.readOffset = 2;\n        const frameNumber = buff.readUInt8();\n        const hostType = buff.readUInt8();\n        let remoteHost;\n        if (hostType === constants_1.Socks5HostType.IPv4) {\n            remoteHost = (0, helpers_1.int32ToIpv4)(buff.readUInt32BE());\n        }\n        else if (hostType === constants_1.Socks5HostType.IPv6) {\n            remoteHost = ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm();\n        }\n        else {\n            remoteHost = buff.readString(buff.readUInt8());\n        }\n        const remotePort = buff.readUInt16BE();\n        return {\n            frameNumber,\n            remoteHost: {\n                host: remoteHost,\n                port: remotePort,\n            },\n            data: buff.readBuffer(),\n        };\n    }\n    /**\n     * Internal state setter. If the SocksClient is in an error state, it cannot be changed to a non error state.\n     */\n    setState(newState) {\n        if (this.state !== constants_1.SocksClientState.Error) {\n            this.state = newState;\n        }\n    }\n    /**\n     * Starts the connection establishment to the proxy and destination.\n     * @param existingSocket Connected socket to use instead of creating a new one (internal use).\n     */\n    connect(existingSocket) {\n        this.onDataReceived = (data) => this.onDataReceivedHandler(data);\n        this.onClose = () => this.onCloseHandler();\n        this.onError = (err) => this.onErrorHandler(err);\n        this.onConnect = () => this.onConnectHandler();\n        // Start timeout timer (defaults to 30 seconds)\n        const timer = setTimeout(() => this.onEstablishedTimeout(), this.options.timeout || constants_1.DEFAULT_TIMEOUT);\n        // check whether unref is available as it differs from browser to NodeJS (#33)\n        if (timer.unref && typeof timer.unref === 'function') {\n            timer.unref();\n        }\n        // If an existing socket is provided, use it to negotiate SOCKS handshake. Otherwise create a new Socket.\n        if (existingSocket) {\n            this.socket = existingSocket;\n        }\n        else {\n            this.socket = new net.Socket();\n        }\n        // Attach Socket error handlers.\n        this.socket.once('close', this.onClose);\n        this.socket.once('error', this.onError);\n        this.socket.once('connect', this.onConnect);\n        this.socket.on('data', this.onDataReceived);\n        this.setState(constants_1.SocksClientState.Connecting);\n        this.receiveBuffer = new receivebuffer_1.ReceiveBuffer();\n        if (existingSocket) {\n            this.socket.emit('connect');\n        }\n        else {\n            this.socket.connect(this.getSocketOptions());\n            if (this.options.set_tcp_nodelay !== undefined &&\n                this.options.set_tcp_nodelay !== null) {\n                this.socket.setNoDelay(!!this.options.set_tcp_nodelay);\n            }\n        }\n        // Listen for established event so we can re-emit any excess data received during handshakes.\n        this.prependOnceListener('established', (info) => {\n            setImmediate(() => {\n                if (this.receiveBuffer.length > 0) {\n                    const excessData = this.receiveBuffer.get(this.receiveBuffer.length);\n                    info.socket.emit('data', excessData);\n                }\n                info.socket.resume();\n            });\n        });\n    }\n    // Socket options (defaults host/port to options.proxy.host/options.proxy.port)\n    getSocketOptions() {\n        return Object.assign(Object.assign({}, this.options.socket_options), { host: this.options.proxy.host || this.options.proxy.ipaddress, port: this.options.proxy.port });\n    }\n    /**\n     * Handles internal Socks timeout callback.\n     * Note: If the Socks client is not BoundWaitingForConnection or Established, the connection will be closed.\n     */\n    onEstablishedTimeout() {\n        if (this.state !== constants_1.SocksClientState.Established &&\n            this.state !== constants_1.SocksClientState.BoundWaitingForConnection) {\n            this.closeSocket(constants_1.ERRORS.ProxyConnectionTimedOut);\n        }\n    }\n    /**\n     * Handles Socket connect event.\n     */\n    onConnectHandler() {\n        this.setState(constants_1.SocksClientState.Connected);\n        // Send initial handshake.\n        if (this.options.proxy.type === 4) {\n            this.sendSocks4InitialHandshake();\n        }\n        else {\n            this.sendSocks5InitialHandshake();\n        }\n        this.setState(constants_1.SocksClientState.SentInitialHandshake);\n    }\n    /**\n     * Handles Socket data event.\n     * @param data\n     */\n    onDataReceivedHandler(data) {\n        /*\n          All received data is appended to a ReceiveBuffer.\n          This makes sure that all the data we need is received before we attempt to process it.\n        */\n        this.receiveBuffer.append(data);\n        // Process data that we have.\n        this.processData();\n    }\n    /**\n     * Handles processing of the data we have received.\n     */\n    processData() {\n        // If we have enough data to process the next step in the SOCKS handshake, proceed.\n        while (this.state !== constants_1.SocksClientState.Established &&\n            this.state !== constants_1.SocksClientState.Error &&\n            this.receiveBuffer.length >= this.nextRequiredPacketBufferSize) {\n            // Sent initial handshake, waiting for response.\n            if (this.state === constants_1.SocksClientState.SentInitialHandshake) {\n                if (this.options.proxy.type === 4) {\n                    // Socks v4 only has one handshake response.\n                    this.handleSocks4FinalHandshakeResponse();\n                }\n                else {\n                    // Socks v5 has two handshakes, handle initial one here.\n                    this.handleInitialSocks5HandshakeResponse();\n                }\n                // Sent auth request for Socks v5, waiting for response.\n            }\n            else if (this.state === constants_1.SocksClientState.SentAuthentication) {\n                this.handleInitialSocks5AuthenticationHandshakeResponse();\n                // Sent final Socks v5 handshake, waiting for final response.\n            }\n            else if (this.state === constants_1.SocksClientState.SentFinalHandshake) {\n                this.handleSocks5FinalHandshakeResponse();\n                // Socks BIND established. Waiting for remote connection via proxy.\n            }\n            else if (this.state === constants_1.SocksClientState.BoundWaitingForConnection) {\n                if (this.options.proxy.type === 4) {\n                    this.handleSocks4IncomingConnectionResponse();\n                }\n                else {\n                    this.handleSocks5IncomingConnectionResponse();\n                }\n            }\n            else {\n                this.closeSocket(constants_1.ERRORS.InternalError);\n                break;\n            }\n        }\n    }\n    /**\n     * Handles Socket close event.\n     * @param had_error\n     */\n    onCloseHandler() {\n        this.closeSocket(constants_1.ERRORS.SocketClosed);\n    }\n    /**\n     * Handles Socket error event.\n     * @param err\n     */\n    onErrorHandler(err) {\n        this.closeSocket(err.message);\n    }\n    /**\n     * Removes internal event listeners on the underlying Socket.\n     */\n    removeInternalSocketHandlers() {\n        // Pauses data flow of the socket (this is internally resumed after 'established' is emitted)\n        this.socket.pause();\n        this.socket.removeListener('data', this.onDataReceived);\n        this.socket.removeListener('close', this.onClose);\n        this.socket.removeListener('error', this.onError);\n        this.socket.removeListener('connect', this.onConnect);\n    }\n    /**\n     * Closes and destroys the underlying Socket. Emits an error event.\n     * @param err { String } An error string to include in error event.\n     */\n    closeSocket(err) {\n        // Make sure only one 'error' event is fired for the lifetime of this SocksClient instance.\n        if (this.state !== constants_1.SocksClientState.Error) {\n            // Set internal state to Error.\n            this.setState(constants_1.SocksClientState.Error);\n            // Destroy Socket\n            this.socket.destroy();\n            // Remove internal listeners\n            this.removeInternalSocketHandlers();\n            // Fire 'error' event.\n            this.emit('error', new util_1.SocksClientError(err, this.options));\n        }\n    }\n    /**\n     * Sends initial Socks v4 handshake request.\n     */\n    sendSocks4InitialHandshake() {\n        const userId = this.options.proxy.userId || '';\n        const buff = new smart_buffer_1.SmartBuffer();\n        buff.writeUInt8(0x04);\n        buff.writeUInt8(constants_1.SocksCommand[this.options.command]);\n        buff.writeUInt16BE(this.options.destination.port);\n        // Socks 4 (IPv4)\n        if (net.isIPv4(this.options.destination.host)) {\n            buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));\n            buff.writeStringNT(userId);\n            // Socks 4a (hostname)\n        }\n        else {\n            buff.writeUInt8(0x00);\n            buff.writeUInt8(0x00);\n            buff.writeUInt8(0x00);\n            buff.writeUInt8(0x01);\n            buff.writeStringNT(userId);\n            buff.writeStringNT(this.options.destination.host);\n        }\n        this.nextRequiredPacketBufferSize =\n            constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks4Response;\n        this.socket.write(buff.toBuffer());\n    }\n    /**\n     * Handles Socks v4 handshake response.\n     * @param data\n     */\n    handleSocks4FinalHandshakeResponse() {\n        const data = this.receiveBuffer.get(8);\n        if (data[1] !== constants_1.Socks4Response.Granted) {\n            this.closeSocket(`${constants_1.ERRORS.Socks4ProxyRejectedConnection} - (${constants_1.Socks4Response[data[1]]})`);\n        }\n        else {\n            // Bind response\n            if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.bind) {\n                const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);\n                buff.readOffset = 2;\n                const remoteHost = {\n                    port: buff.readUInt16BE(),\n                    host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),\n                };\n                // If host is 0.0.0.0, set to proxy host.\n                if (remoteHost.host === '0.0.0.0') {\n                    remoteHost.host = this.options.proxy.ipaddress;\n                }\n                this.setState(constants_1.SocksClientState.BoundWaitingForConnection);\n                this.emit('bound', { remoteHost, socket: this.socket });\n                // Connect response\n            }\n            else {\n                this.setState(constants_1.SocksClientState.Established);\n                this.removeInternalSocketHandlers();\n                this.emit('established', { socket: this.socket });\n            }\n        }\n    }\n    /**\n     * Handles Socks v4 incoming connection request (BIND)\n     * @param data\n     */\n    handleSocks4IncomingConnectionResponse() {\n        const data = this.receiveBuffer.get(8);\n        if (data[1] !== constants_1.Socks4Response.Granted) {\n            this.closeSocket(`${constants_1.ERRORS.Socks4ProxyRejectedIncomingBoundConnection} - (${constants_1.Socks4Response[data[1]]})`);\n        }\n        else {\n            const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);\n            buff.readOffset = 2;\n            const remoteHost = {\n                port: buff.readUInt16BE(),\n                host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),\n            };\n            this.setState(constants_1.SocksClientState.Established);\n            this.removeInternalSocketHandlers();\n            this.emit('established', { remoteHost, socket: this.socket });\n        }\n    }\n    /**\n     * Sends initial Socks v5 handshake request.\n     */\n    sendSocks5InitialHandshake() {\n        const buff = new smart_buffer_1.SmartBuffer();\n        // By default we always support no auth.\n        const supportedAuthMethods = [constants_1.Socks5Auth.NoAuth];\n        // We should only tell the proxy we support user/pass auth if auth info is actually provided.\n        // Note: As of Tor v0.3.5.7+, if user/pass auth is an option from the client, by default it will always take priority.\n        if (this.options.proxy.userId || this.options.proxy.password) {\n            supportedAuthMethods.push(constants_1.Socks5Auth.UserPass);\n        }\n        // Custom auth method?\n        if (this.options.proxy.custom_auth_method !== undefined) {\n            supportedAuthMethods.push(this.options.proxy.custom_auth_method);\n        }\n        // Build handshake packet\n        buff.writeUInt8(0x05);\n        buff.writeUInt8(supportedAuthMethods.length);\n        for (const authMethod of supportedAuthMethods) {\n            buff.writeUInt8(authMethod);\n        }\n        this.nextRequiredPacketBufferSize =\n            constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5InitialHandshakeResponse;\n        this.socket.write(buff.toBuffer());\n        this.setState(constants_1.SocksClientState.SentInitialHandshake);\n    }\n    /**\n     * Handles initial Socks v5 handshake response.\n     * @param data\n     */\n    handleInitialSocks5HandshakeResponse() {\n        const data = this.receiveBuffer.get(2);\n        if (data[0] !== 0x05) {\n            this.closeSocket(constants_1.ERRORS.InvalidSocks5IntiailHandshakeSocksVersion);\n        }\n        else if (data[1] === constants_1.SOCKS5_NO_ACCEPTABLE_AUTH) {\n            this.closeSocket(constants_1.ERRORS.InvalidSocks5InitialHandshakeNoAcceptedAuthType);\n        }\n        else {\n            // If selected Socks v5 auth method is no auth, send final handshake request.\n            if (data[1] === constants_1.Socks5Auth.NoAuth) {\n                this.socks5ChosenAuthType = constants_1.Socks5Auth.NoAuth;\n                this.sendSocks5CommandRequest();\n                // If selected Socks v5 auth method is user/password, send auth handshake.\n            }\n            else if (data[1] === constants_1.Socks5Auth.UserPass) {\n                this.socks5ChosenAuthType = constants_1.Socks5Auth.UserPass;\n                this.sendSocks5UserPassAuthentication();\n                // If selected Socks v5 auth method is the custom_auth_method, send custom handshake.\n            }\n            else if (data[1] === this.options.proxy.custom_auth_method) {\n                this.socks5ChosenAuthType = this.options.proxy.custom_auth_method;\n                this.sendSocks5CustomAuthentication();\n            }\n            else {\n                this.closeSocket(constants_1.ERRORS.InvalidSocks5InitialHandshakeUnknownAuthType);\n            }\n        }\n    }\n    /**\n     * Sends Socks v5 user & password auth handshake.\n     *\n     * Note: No auth and user/pass are currently supported.\n     */\n    sendSocks5UserPassAuthentication() {\n        const userId = this.options.proxy.userId || '';\n        const password = this.options.proxy.password || '';\n        const buff = new smart_buffer_1.SmartBuffer();\n        buff.writeUInt8(0x01);\n        buff.writeUInt8(Buffer.byteLength(userId));\n        buff.writeString(userId);\n        buff.writeUInt8(Buffer.byteLength(password));\n        buff.writeString(password);\n        this.nextRequiredPacketBufferSize =\n            constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5UserPassAuthenticationResponse;\n        this.socket.write(buff.toBuffer());\n        this.setState(constants_1.SocksClientState.SentAuthentication);\n    }\n    sendSocks5CustomAuthentication() {\n        return __awaiter(this, void 0, void 0, function* () {\n            this.nextRequiredPacketBufferSize =\n                this.options.proxy.custom_auth_response_size;\n            this.socket.write(yield this.options.proxy.custom_auth_request_handler());\n            this.setState(constants_1.SocksClientState.SentAuthentication);\n        });\n    }\n    handleSocks5CustomAuthHandshakeResponse(data) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return yield this.options.proxy.custom_auth_response_handler(data);\n        });\n    }\n    handleSocks5AuthenticationNoAuthHandshakeResponse(data) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return data[1] === 0x00;\n        });\n    }\n    handleSocks5AuthenticationUserPassHandshakeResponse(data) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return data[1] === 0x00;\n        });\n    }\n    /**\n     * Handles Socks v5 auth handshake response.\n     * @param data\n     */\n    handleInitialSocks5AuthenticationHandshakeResponse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            this.setState(constants_1.SocksClientState.ReceivedAuthenticationResponse);\n            let authResult = false;\n            if (this.socks5ChosenAuthType === constants_1.Socks5Auth.NoAuth) {\n                authResult = yield this.handleSocks5AuthenticationNoAuthHandshakeResponse(this.receiveBuffer.get(2));\n            }\n            else if (this.socks5ChosenAuthType === constants_1.Socks5Auth.UserPass) {\n                authResult =\n                    yield this.handleSocks5AuthenticationUserPassHandshakeResponse(this.receiveBuffer.get(2));\n            }\n            else if (this.socks5ChosenAuthType === this.options.proxy.custom_auth_method) {\n                authResult = yield this.handleSocks5CustomAuthHandshakeResponse(this.receiveBuffer.get(this.options.proxy.custom_auth_response_size));\n            }\n            if (!authResult) {\n                this.closeSocket(constants_1.ERRORS.Socks5AuthenticationFailed);\n            }\n            else {\n                this.sendSocks5CommandRequest();\n            }\n        });\n    }\n    /**\n     * Sends Socks v5 final handshake request.\n     */\n    sendSocks5CommandRequest() {\n        const buff = new smart_buffer_1.SmartBuffer();\n        buff.writeUInt8(0x05);\n        buff.writeUInt8(constants_1.SocksCommand[this.options.command]);\n        buff.writeUInt8(0x00);\n        // ipv4, ipv6, domain?\n        if (net.isIPv4(this.options.destination.host)) {\n            buff.writeUInt8(constants_1.Socks5HostType.IPv4);\n            buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));\n        }\n        else if (net.isIPv6(this.options.destination.host)) {\n            buff.writeUInt8(constants_1.Socks5HostType.IPv6);\n            buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));\n        }\n        else {\n            buff.writeUInt8(constants_1.Socks5HostType.Hostname);\n            buff.writeUInt8(this.options.destination.host.length);\n            buff.writeString(this.options.destination.host);\n        }\n        buff.writeUInt16BE(this.options.destination.port);\n        this.nextRequiredPacketBufferSize =\n            constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHeader;\n        this.socket.write(buff.toBuffer());\n        this.setState(constants_1.SocksClientState.SentFinalHandshake);\n    }\n    /**\n     * Handles Socks v5 final handshake response.\n     * @param data\n     */\n    handleSocks5FinalHandshakeResponse() {\n        // Peek at available data (we need at least 5 bytes to get the hostname length)\n        const header = this.receiveBuffer.peek(5);\n        if (header[0] !== 0x05 || header[1] !== constants_1.Socks5Response.Granted) {\n            this.closeSocket(`${constants_1.ERRORS.InvalidSocks5FinalHandshakeRejected} - ${constants_1.Socks5Response[header[1]]}`);\n        }\n        else {\n            // Read address type\n            const addressType = header[3];\n            let remoteHost;\n            let buff;\n            // IPv4\n            if (addressType === constants_1.Socks5HostType.IPv4) {\n                // Check if data is available.\n                const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv4;\n                if (this.receiveBuffer.length < dataNeeded) {\n                    this.nextRequiredPacketBufferSize = dataNeeded;\n                    return;\n                }\n                buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));\n                remoteHost = {\n                    host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),\n                    port: buff.readUInt16BE(),\n                };\n                // If given host is 0.0.0.0, assume remote proxy ip instead.\n                if (remoteHost.host === '0.0.0.0') {\n                    remoteHost.host = this.options.proxy.ipaddress;\n                }\n                // Hostname\n            }\n            else if (addressType === constants_1.Socks5HostType.Hostname) {\n                const hostLength = header[4];\n                const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHostname(hostLength); // header + host length + host + port\n                // Check if data is available.\n                if (this.receiveBuffer.length < dataNeeded) {\n                    this.nextRequiredPacketBufferSize = dataNeeded;\n                    return;\n                }\n                buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(5));\n                remoteHost = {\n                    host: buff.readString(hostLength),\n                    port: buff.readUInt16BE(),\n                };\n                // IPv6\n            }\n            else if (addressType === constants_1.Socks5HostType.IPv6) {\n                // Check if data is available.\n                const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv6;\n                if (this.receiveBuffer.length < dataNeeded) {\n                    this.nextRequiredPacketBufferSize = dataNeeded;\n                    return;\n                }\n                buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));\n                remoteHost = {\n                    host: ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm(),\n                    port: buff.readUInt16BE(),\n                };\n            }\n            // We have everything we need\n            this.setState(constants_1.SocksClientState.ReceivedFinalResponse);\n            // If using CONNECT, the client is now in the established state.\n            if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.connect) {\n                this.setState(constants_1.SocksClientState.Established);\n                this.removeInternalSocketHandlers();\n                this.emit('established', { remoteHost, socket: this.socket });\n            }\n            else if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.bind) {\n                /* If using BIND, the Socks client is now in BoundWaitingForConnection state.\n                   This means that the remote proxy server is waiting for a remote connection to the bound port. */\n                this.setState(constants_1.SocksClientState.BoundWaitingForConnection);\n                this.nextRequiredPacketBufferSize =\n                    constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHeader;\n                this.emit('bound', { remoteHost, socket: this.socket });\n                /*\n                  If using Associate, the Socks client is now Established. And the proxy server is now accepting UDP packets at the\n                  given bound port. This initial Socks TCP connection must remain open for the UDP relay to continue to work.\n                */\n            }\n            else if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.associate) {\n                this.setState(constants_1.SocksClientState.Established);\n                this.removeInternalSocketHandlers();\n                this.emit('established', {\n                    remoteHost,\n                    socket: this.socket,\n                });\n            }\n        }\n    }\n    /**\n     * Handles Socks v5 incoming connection request (BIND).\n     */\n    handleSocks5IncomingConnectionResponse() {\n        // Peek at available data (we need at least 5 bytes to get the hostname length)\n        const header = this.receiveBuffer.peek(5);\n        if (header[0] !== 0x05 || header[1] !== constants_1.Socks5Response.Granted) {\n            this.closeSocket(`${constants_1.ERRORS.Socks5ProxyRejectedIncomingBoundConnection} - ${constants_1.Socks5Response[header[1]]}`);\n        }\n        else {\n            // Read address type\n            const addressType = header[3];\n            let remoteHost;\n            let buff;\n            // IPv4\n            if (addressType === constants_1.Socks5HostType.IPv4) {\n                // Check if data is available.\n                const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv4;\n                if (this.receiveBuffer.length < dataNeeded) {\n                    this.nextRequiredPacketBufferSize = dataNeeded;\n                    return;\n                }\n                buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));\n                remoteHost = {\n                    host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),\n                    port: buff.readUInt16BE(),\n                };\n                // If given host is 0.0.0.0, assume remote proxy ip instead.\n                if (remoteHost.host === '0.0.0.0') {\n                    remoteHost.host = this.options.proxy.ipaddress;\n                }\n                // Hostname\n            }\n            else if (addressType === constants_1.Socks5HostType.Hostname) {\n                const hostLength = header[4];\n                const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHostname(hostLength); // header + host length + port\n                // Check if data is available.\n                if (this.receiveBuffer.length < dataNeeded) {\n                    this.nextRequiredPacketBufferSize = dataNeeded;\n                    return;\n                }\n                buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(5));\n                remoteHost = {\n                    host: buff.readString(hostLength),\n                    port: buff.readUInt16BE(),\n                };\n                // IPv6\n            }\n            else if (addressType === constants_1.Socks5HostType.IPv6) {\n                // Check if data is available.\n                const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv6;\n                if (this.receiveBuffer.length < dataNeeded) {\n                    this.nextRequiredPacketBufferSize = dataNeeded;\n                    return;\n                }\n                buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));\n                remoteHost = {\n                    host: ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm(),\n                    port: buff.readUInt16BE(),\n                };\n            }\n            this.setState(constants_1.SocksClientState.Established);\n            this.removeInternalSocketHandlers();\n            this.emit('established', { remoteHost, socket: this.socket });\n        }\n    }\n    get socksClientOptions() {\n        return Object.assign({}, this.options);\n    }\n}\nexports.SocksClient = SocksClient;\n//# sourceMappingURL=socksclient.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client/socksclient\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.req = exports.json = exports.toBuffer = void 0;\nconst http = __importStar(require(\"http\"));\nconst https = __importStar(require(\"https\"));\nasync function toBuffer(stream) {\n    let length = 0;\n    const chunks = [];\n    for await (const chunk of stream) {\n        length += chunk.length;\n        chunks.push(chunk);\n    }\n    return Buffer.concat(chunks, length);\n}\nexports.toBuffer = toBuffer;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function json(stream) {\n    const buf = await toBuffer(stream);\n    const str = buf.toString('utf8');\n    try {\n        return JSON.parse(str);\n    }\n    catch (_err) {\n        const err = _err;\n        err.message += ` (input: ${str})`;\n        throw err;\n    }\n}\nexports.json = json;\nfunction req(url, opts = {}) {\n    const href = typeof url === 'string' ? url : url.href;\n    const req = (href.startsWith('https:') ? https : http).request(url, opts);\n    const promise = new Promise((resolve, reject) => {\n        req\n            .once('response', resolve)\n            .once('error', reject)\n            .end();\n    });\n    req.then = promise.then.bind(promise);\n    return req;\n}\nexports.req = req;\n//# sourceMappingURL=helpers.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Agent = void 0;\nconst net = __importStar(require(\"net\"));\nconst http = __importStar(require(\"http\"));\nconst https_1 = require(\"https\");\n__exportStar(require(\"./helpers\"), exports);\nconst INTERNAL = Symbol('AgentBaseInternalState');\nclass Agent extends http.Agent {\n    constructor(opts) {\n        super(opts);\n        this[INTERNAL] = {};\n    }\n    /**\n     * Determine whether this is an `http` or `https` request.\n     */\n    isSecureEndpoint(options) {\n        if (options) {\n            // First check the `secureEndpoint` property explicitly, since this\n            // means that a parent `Agent` is \"passing through\" to this instance.\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            if (typeof options.secureEndpoint === 'boolean') {\n                return options.secureEndpoint;\n            }\n            // If no explicit `secure` endpoint, check if `protocol` property is\n            // set. This will usually be the case since using a full string URL\n            // or `URL` instance should be the most common usage.\n            if (typeof options.protocol === 'string') {\n                return options.protocol === 'https:';\n            }\n        }\n        // Finally, if no `protocol` property was set, then fall back to\n        // checking the stack trace of the current call stack, and try to\n        // detect the \"https\" module.\n        const { stack } = new Error();\n        if (typeof stack !== 'string')\n            return false;\n        return stack\n            .split('\\n')\n            .some((l) => l.indexOf('(https.js:') !== -1 ||\n            l.indexOf('node:https:') !== -1);\n    }\n    // In order to support async signatures in `connect()` and Node's native\n    // connection pooling in `http.Agent`, the array of sockets for each origin\n    // has to be updated synchronously. This is so the length of the array is\n    // accurate when `addRequest()` is next called. We achieve this by creating a\n    // fake socket and adding it to `sockets[origin]` and incrementing\n    // `totalSocketCount`.\n    incrementSockets(name) {\n        // If `maxSockets` and `maxTotalSockets` are both Infinity then there is no\n        // need to create a fake socket because Node.js native connection pooling\n        // will never be invoked.\n        if (this.maxSockets === Infinity && this.maxTotalSockets === Infinity) {\n            return null;\n        }\n        // All instances of `sockets` are expected TypeScript errors. The\n        // alternative is to add it as a private property of this class but that\n        // will break TypeScript subclassing.\n        if (!this.sockets[name]) {\n            // @ts-expect-error `sockets` is readonly in `@types/node`\n            this.sockets[name] = [];\n        }\n        const fakeSocket = new net.Socket({ writable: false });\n        this.sockets[name].push(fakeSocket);\n        // @ts-expect-error `totalSocketCount` isn't defined in `@types/node`\n        this.totalSocketCount++;\n        return fakeSocket;\n    }\n    decrementSockets(name, socket) {\n        if (!this.sockets[name] || socket === null) {\n            return;\n        }\n        const sockets = this.sockets[name];\n        const index = sockets.indexOf(socket);\n        if (index !== -1) {\n            sockets.splice(index, 1);\n            // @ts-expect-error  `totalSocketCount` isn't defined in `@types/node`\n            this.totalSocketCount--;\n            if (sockets.length === 0) {\n                // @ts-expect-error `sockets` is readonly in `@types/node`\n                delete this.sockets[name];\n            }\n        }\n    }\n    // In order to properly update the socket pool, we need to call `getName()` on\n    // the core `https.Agent` if it is a secureEndpoint.\n    getName(options) {\n        const secureEndpoint = this.isSecureEndpoint(options);\n        if (secureEndpoint) {\n            // @ts-expect-error `getName()` isn't defined in `@types/node`\n            return https_1.Agent.prototype.getName.call(this, options);\n        }\n        // @ts-expect-error `getName()` isn't defined in `@types/node`\n        return super.getName(options);\n    }\n    createSocket(req, options, cb) {\n        const connectOpts = {\n            ...options,\n            secureEndpoint: this.isSecureEndpoint(options),\n        };\n        const name = this.getName(connectOpts);\n        const fakeSocket = this.incrementSockets(name);\n        Promise.resolve()\n            .then(() => this.connect(req, connectOpts))\n            .then((socket) => {\n            this.decrementSockets(name, fakeSocket);\n            if (socket instanceof http.Agent) {\n                try {\n                    // @ts-expect-error `addRequest()` isn't defined in `@types/node`\n                    return socket.addRequest(req, connectOpts);\n                }\n                catch (err) {\n                    return cb(err);\n                }\n            }\n            this[INTERNAL].currentSocket = socket;\n            // @ts-expect-error `createSocket()` isn't defined in `@types/node`\n            super.createSocket(req, options, cb);\n        }, (err) => {\n            this.decrementSockets(name, fakeSocket);\n            cb(err);\n        });\n    }\n    createConnection() {\n        const socket = this[INTERNAL].currentSocket;\n        this[INTERNAL].currentSocket = undefined;\n        if (!socket) {\n            throw new Error('No socket was returned in the `connect()` function');\n        }\n        return socket;\n    }\n    get defaultPort() {\n        return (this[INTERNAL].defaultPort ??\n            (this.protocol === 'https:' ? 443 : 80));\n    }\n    set defaultPort(v) {\n        if (this[INTERNAL]) {\n            this[INTERNAL].defaultPort = v;\n        }\n    }\n    get protocol() {\n        return (this[INTERNAL].protocol ??\n            (this.isSecureEndpoint() ? 'https:' : 'http:'));\n    }\n    set protocol(v) {\n        if (this[INTERNAL]) {\n            this[INTERNAL].protocol = v;\n        }\n    }\n}\nexports.Agent = Agent;\n//# sourceMappingURL=index.js.map","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SocksProxyAgent = void 0;\nconst socks_1 = require(\"socks\");\nconst agent_base_1 = require(\"agent-base\");\nconst debug_1 = __importDefault(require(\"debug\"));\nconst dns = __importStar(require(\"dns\"));\nconst net = __importStar(require(\"net\"));\nconst tls = __importStar(require(\"tls\"));\nconst url_1 = require(\"url\");\nconst debug = (0, debug_1.default)('socks-proxy-agent');\nconst setServernameFromNonIpHost = (options) => {\n    if (options.servername === undefined &&\n        options.host &&\n        !net.isIP(options.host)) {\n        return {\n            ...options,\n            servername: options.host,\n        };\n    }\n    return options;\n};\nfunction parseSocksURL(url) {\n    let lookup = false;\n    let type = 5;\n    const host = url.hostname;\n    // From RFC 1928, Section 3: https://tools.ietf.org/html/rfc1928#section-3\n    // \"The SOCKS service is conventionally located on TCP port 1080\"\n    const port = parseInt(url.port, 10) || 1080;\n    // figure out if we want socks v4 or v5, based on the \"protocol\" used.\n    // Defaults to 5.\n    switch (url.protocol.replace(':', '')) {\n        case 'socks4':\n            lookup = true;\n            type = 4;\n            break;\n        // pass through\n        case 'socks4a':\n            type = 4;\n            break;\n        case 'socks5':\n            lookup = true;\n            type = 5;\n            break;\n        // pass through\n        case 'socks': // no version specified, default to 5h\n            type = 5;\n            break;\n        case 'socks5h':\n            type = 5;\n            break;\n        default:\n            throw new TypeError(`A \"socks\" protocol must be specified! Got: ${String(url.protocol)}`);\n    }\n    const proxy = {\n        host,\n        port,\n        type,\n    };\n    if (url.username) {\n        Object.defineProperty(proxy, 'userId', {\n            value: decodeURIComponent(url.username),\n            enumerable: false,\n        });\n    }\n    if (url.password != null) {\n        Object.defineProperty(proxy, 'password', {\n            value: decodeURIComponent(url.password),\n            enumerable: false,\n        });\n    }\n    return { lookup, proxy };\n}\nclass SocksProxyAgent extends agent_base_1.Agent {\n    constructor(uri, opts) {\n        super(opts);\n        const url = typeof uri === 'string' ? new url_1.URL(uri) : uri;\n        const { proxy, lookup } = parseSocksURL(url);\n        this.shouldLookup = lookup;\n        this.proxy = proxy;\n        this.timeout = opts?.timeout ?? null;\n        this.socketOptions = opts?.socketOptions ?? null;\n    }\n    /**\n     * Initiates a SOCKS connection to the specified SOCKS proxy server,\n     * which in turn connects to the specified remote host and port.\n     */\n    async connect(req, opts) {\n        const { shouldLookup, proxy, timeout } = this;\n        if (!opts.host) {\n            throw new Error('No `host` defined!');\n        }\n        let { host } = opts;\n        const { port, lookup: lookupFn = dns.lookup } = opts;\n        if (shouldLookup) {\n            // Client-side DNS resolution for \"4\" and \"5\" socks proxy versions.\n            host = await new Promise((resolve, reject) => {\n                // Use the request's custom lookup, if one was configured:\n                lookupFn(host, {}, (err, res) => {\n                    if (err) {\n                        reject(err);\n                    }\n                    else {\n                        resolve(res);\n                    }\n                });\n            });\n        }\n        const socksOpts = {\n            proxy,\n            destination: {\n                host,\n                port: typeof port === 'number' ? port : parseInt(port, 10),\n            },\n            command: 'connect',\n            timeout: timeout ?? undefined,\n            // @ts-expect-error the type supplied by socks for socket_options is wider\n            // than necessary since socks will always override the host and port\n            socket_options: this.socketOptions ?? undefined,\n        };\n        const cleanup = (tlsSocket) => {\n            req.destroy();\n            socket.destroy();\n            if (tlsSocket)\n                tlsSocket.destroy();\n        };\n        debug('Creating socks proxy connection: %o', socksOpts);\n        const { socket } = await socks_1.SocksClient.createConnection(socksOpts);\n        debug('Successfully created socks proxy connection');\n        if (timeout !== null) {\n            socket.setTimeout(timeout);\n            socket.on('timeout', () => cleanup());\n        }\n        if (opts.secureEndpoint) {\n            // The proxy is connecting to a TLS server, so upgrade\n            // this socket connection to a TLS connection.\n            debug('Upgrading socket connection to TLS');\n            const tlsSocket = tls.connect({\n                ...omit(setServernameFromNonIpHost(opts), 'host', 'path', 'port'),\n                socket,\n            });\n            tlsSocket.once('error', (error) => {\n                debug('Socket TLS error', error.message);\n                cleanup(tlsSocket);\n            });\n            return tlsSocket;\n        }\n        return socket;\n    }\n}\nSocksProxyAgent.protocols = [\n    'socks',\n    'socks4',\n    'socks4a',\n    'socks5',\n    'socks5h',\n];\nexports.SocksProxyAgent = SocksProxyAgent;\nfunction omit(obj, ...keys) {\n    const ret = {};\n    let key;\n    for (key in obj) {\n        if (!keys.includes(key)) {\n            ret[key] = obj[key];\n        }\n    }\n    return ret;\n}\n//# sourceMappingURL=index.js.map","'use strict'\n\nvar { SocksProxyAgent } = require('socks-proxy-agent')\nvar ALLOWED_PROTOCOLS = ['socks4:', 'socks4a:', 'socks5:', 'socks5h:', 'socks:']\n\nfunction SocksProxy (request) {\n  this.request = request\n}\n\nSocksProxy.prototype.isEnabled = function () {\n  var self = this\n  var request = self.request\n\n  if (typeof request.proxy === 'string') {\n    request.proxy = request.urlParser.parse(request.proxy)\n  }\n\n  if (!request.proxy) {\n    return false\n  }\n\n  return request.proxy.href && ALLOWED_PROTOCOLS.includes(request.proxy.protocol)\n}\n\nSocksProxy.prototype.setup = function () {\n  var self = this\n  var request = self.request\n\n  if (!self.isEnabled()) {\n    return false\n  }\n\n  var proxyUrl = request.proxy.href\n\n  // Handle authentication from proxy.auth if not already in URL\n  if (request.proxy.auth && proxyUrl.indexOf('@') === -1) {\n    proxyUrl = request.proxy.protocol + '//' + request.proxy.auth + '@' + request.proxy.host\n  }\n\n  request.agent = new SocksProxyAgent(proxyUrl)\n\n  return true\n}\n\nexports.SocksProxy = SocksProxy\n","'use strict'\n\nvar zlib = require('zlib')\nvar stream = require('stream')\nvar inherit = require('util').inherits\nvar Buffer = require('safe-buffer').Buffer\nvar Inflate\n\nInflate = function (options) {\n  this.options = options\n  this._stream = null\n  stream.Transform.call(this)\n}\n\ninherit(Inflate, stream.Transform)\n\nInflate.prototype._transform = function (chunk, encoding, callback) {\n  var self = this\n  if (!self._stream) {\n    // If the response stream does not have a valid deflate header, use `InflateRaw`\n    if ((Buffer.from(chunk, encoding)[0] & 0x0F) === 0x08) {\n      self._stream = zlib.createInflate(self.options)\n    } else {\n      self._stream = zlib.createInflateRaw(self.options)\n    }\n\n    self._stream.on('error', function (error) {\n      self.emit('error', error)\n    })\n\n    self._stream.on('data', function (chunk) {\n      self.push(chunk)\n    })\n\n    self._stream.once('end', function () {\n      self._ended = true\n      self.push(null)\n    })\n  }\n\n  self._stream.write(chunk, encoding, callback)\n}\n\nInflate.prototype._flush = function (callback) {\n  if (this._stream && !this._ended) {\n    this._stream.once('end', callback)\n    this._stream.end()\n  } else {\n    callback()\n  }\n}\n\n/**\n * Creates an intelligent inflate stream, that can handle deflate responses from older servers,\n * which do not send the correct GZip headers in the response. See http://stackoverflow.com/a/37528114\n * for details on why this is needed.\n *\n * @param {Object=} options - Are passed to the underlying `Inflate` or `InflateRaw` constructor.\n *\n * @returns {*}\n */\nmodule.exports.createInflate = function (options) {\n  return new Inflate(options)\n}\n","var url = require('url')\nvar EMPTY = ''\nvar ZERO = '0'\nvar PERCENT = '%'\nvar STRING = 'string'\nvar AMPERSAND = '&'\nvar EQUALS = '='\nvar QUESTION_MARK = '?'\nvar stringify\nvar parse\n\n/**\n * Percent encode a character with given code.\n *\n * @param {Number} c - character code of the character to encode\n * @returns {String} - percent encoding of given character\n */\nvar percentEncode = function (c) {\n  var hex = c.toString(16).toUpperCase()\n  hex.length === 1 && (hex = ZERO + hex)\n  return PERCENT + hex\n}\n\n/**\n * Checks if character with given code is valid hexadecimal digit or not.\n *\n * @param {Number} byte\n * @returns {Boolean}\n */\nvar isPreEncodedCharacter = function (byte) {\n  return (byte >= 0x30 && byte <= 0x39) || // 0-9\n    (byte >= 0x41 && byte <= 0x46) || // A-F\n    (byte >= 0x61 && byte <= 0x66) // a-f\n}\n\n/**\n * Checks if character at given index in the buffer is already percent encoded or not.\n *\n * @param {Buffer} buffer\n * @param {Number} i\n * @returns {Boolean}\n */\nvar isPreEncoded = function (buffer, i) {\n  // If it is % check next two bytes for percent encode characters\n  // looking for pattern %00 - %FF\n  return (buffer[i] === 0x25 &&\n    (isPreEncodedCharacter(buffer[i + 1]) &&\n    isPreEncodedCharacter(buffer[i + 2]))\n  )\n}\n\n/**\n * Checks whether given character should be percent encoded or not for fixture.\n *\n * @param {Number} byte\n * @returns {Boolean}\n */\nvar charactersToPercentEncode = function (byte) {\n  return (byte < 0x23 || byte > 0x7E || // Below # and after ~\n    byte === 0x3C || byte === 0x3E || // > and <\n    byte === 0x28 || byte === 0x29 || // ( and )\n    byte === 0x25 || // %\n    byte === 0x27 || // '\n    byte === 0x2A // *\n  )\n}\n\n/**\n * Percent encode a query string according to RFC 3986.\n * Note: This function is supposed to be used on top of node's inbuilt url encoding\n *       to solve issue https://github.com/nodejs/node/issues/8321\n *\n * @param {String} value\n * @returns {String}\n */\nvar encode = function (value) {\n  if (!value) { return EMPTY }\n\n  var buffer = Buffer.from(value)\n  var ret = EMPTY\n  var i\n  var ii\n\n  for (i = 0, ii = buffer.length; i < ii; ++i) {\n    if (charactersToPercentEncode(buffer[i]) && !isPreEncoded(buffer, i)) {\n      ret += percentEncode(buffer[i])\n    } else {\n      ret += String.fromCodePoint(buffer[i]) // Only works in ES6 (available in Node v4+)\n    }\n  }\n\n  return ret\n}\n\n/**\n * Parses a query string into an array, preserving parameter values\n *\n * @param string\n * @returns {*}\n */\nparse = function (string) {\n  var parts\n  if (typeof string === STRING) { // eslint-disable-line valid-typeof\n    parts = string.split(AMPERSAND)\n    return parts.map(function (param, idx) {\n      if (param === EMPTY && idx !== (parts.length - 1)) {\n        return { key: null, value: null }\n      }\n\n      var index = (typeof param === STRING) ? param.indexOf(EQUALS) : -1 // eslint-disable-line valid-typeof\n      var paramObj = {}\n\n      // this means that there was no value for this key (not even blank, so we store this info) and the value is set\n      // to null\n      if (index < 0) {\n        paramObj.key = param.substr(0, param.length)\n        paramObj.value = null\n      } else {\n        paramObj.key = param.substr(0, index)\n        paramObj.value = param.substr(index + 1)\n      }\n\n      return paramObj\n    })\n  }\n  return []\n}\n\n/**\n * Stringifies a query string, from an array of parameters\n *\n * @param parameters\n * @returns {string}\n */\nstringify = function (parameters) {\n  return parameters ? parameters.map(function (param) {\n    var key = param.key\n    var value = param.value\n\n    if (value === undefined) {\n      return EMPTY\n    }\n\n    if (key === null) {\n      key = EMPTY\n    }\n\n    if (value === null) {\n      return encode(key)\n    }\n\n    return encode(key) + EQUALS + encode(value)\n  }).join(AMPERSAND) : EMPTY\n}\n\n/**\n * Correctly URL encodes query parameters in a URL and returns the final parsed URL.\n *\n * @param str\n */\nmodule.exports = function (str) {\n  var parsed = url.parse(str)\n  var rawQs\n  var search\n  var path\n  var qs\n\n  rawQs = parsed.query\n\n  if (rawQs && rawQs.length) {\n    qs = stringify(parse(parsed.query))\n    search = QUESTION_MARK + qs\n    path = parsed.pathname + search\n\n    parsed.query = qs\n    parsed.search = search\n    parsed.path = path\n\n    str = url.format(parsed)\n  }\n\n  // Parse again, because Node does not guarantee consistency of properties\n  return url.parse(str)\n}\n\nmodule.exports.parse = parse\nmodule.exports.stringify = stringify\n","'use strict'\n\nvar tls = require('tls')\nvar http = require('http')\nvar https = require('https')\nvar http2 = require('./lib/http2')\nvar autohttp2 = require('./lib/autohttp')\nvar url = require('url')\nvar util = require('util')\nvar stream = require('stream')\nvar zlib = require('zlib')\nvar aws2 = require('aws-sign2')\nvar aws4 = require('aws4')\nvar uuid = require('uuid').v4\nvar httpSignature = require('http-signature')\nvar mime = require('mime-types')\nvar caseless = require('caseless')\nvar ForeverAgent = require('forever-agent')\nvar FormData = require('@postman/form-data')\nvar extend = require('extend')\nvar isstream = require('isstream')\nvar streamLength = require('stream-length')\nvar isTypedArray = require('is-typedarray').strict\nvar helpers = require('./lib/helpers')\nvar cookies = require('./lib/cookies')\nvar getProxyFromURI = require('./lib/getProxyFromURI')\nvar Querystring = require('./lib/querystring').Querystring\nvar Har = require('./lib/har').Har\nvar Auth = require('./lib/auth').Auth\nvar OAuth = require('./lib/oauth').OAuth\nvar hawk = require('./lib/hawk')\nvar Multipart = require('./lib/multipart').Multipart\nvar Redirect = require('./lib/redirect').Redirect\nvar Tunnel = require('./lib/tunnel').Tunnel\nvar SocksProxy = require('./lib/socks').SocksProxy\nvar Buffer = require('safe-buffer').Buffer\nvar inflate = require('./lib/inflate')\nvar urlParse = require('./lib/url-parse')\nvar safeStringify = helpers.safeStringify\nvar isReadStream = helpers.isReadStream\nvar toBase64 = helpers.toBase64\nvar defer = helpers.defer\nvar copy = helpers.copy\nvar version = helpers.version\nvar now = helpers.now\nvar SizeTrackerStream = helpers.SizeTrackerStream\nvar globalCookieJar = cookies.jar()\n\nvar globalPool = {}\n\nfunction filterForNonReserved (reserved, options) {\n  // Filter out properties that are not reserved.\n  // Reserved values are passed in at call site.\n\n  var object = {}\n  for (var i in options) {\n    var notReserved = (reserved.indexOf(i) === -1)\n    if (notReserved) {\n      object[i] = options[i]\n    }\n  }\n  return object\n}\n\nfunction filterOutReservedFunctions (reserved, options) {\n  // Filter out properties that are functions and are reserved.\n  // Reserved values are passed in at call site.\n\n  var object = {}\n  for (var i in options) {\n    var isReserved = !(reserved.indexOf(i) === -1)\n    var isFunction = (typeof options[i] === 'function')\n    if (!(isReserved && isFunction)) {\n      object[i] = options[i]\n    }\n  }\n  return object\n}\n\nfunction transformFormData (formData) {\n  // Transform the object representation of form-data fields to array representation.\n  // This might not preserve the order of form fields defined in object representation.\n  // But, this transformation is required to support backward compatibility.\n  //\n  // Form-Data should be stored as an array to respect the fields order.\n  // RFC 7578#section-5.2  Ordered Fields and Duplicated Field Names\n  // https://tools.ietf.org/html/rfc7578#section-5.2\n\n  var transformedFormData = []\n  var appendFormParam = function (key, param) {\n    transformedFormData.push({\n      key: key,\n      value: param && param.hasOwnProperty('value') ? param.value : param,\n      options: param && param.hasOwnProperty('options') ? param.options : undefined\n    })\n  }\n  for (var formKey in formData) {\n    if (formData.hasOwnProperty(formKey)) {\n      var formValue = formData[formKey]\n      if (Array.isArray(formValue)) {\n        for (var j = 0; j < formValue.length; j++) {\n          appendFormParam(formKey, formValue[j])\n        }\n      } else {\n        appendFormParam(formKey, formValue)\n      }\n    }\n  }\n  return transformedFormData\n}\n\n// Return a simpler request object to allow serialization\nfunction requestToJSON () {\n  var self = this\n  return {\n    uri: self.uri,\n    method: self.method,\n    headers: self.headers\n  }\n}\n\n// Return a simpler response object to allow serialization\nfunction responseToJSON () {\n  var self = this\n  return {\n    statusCode: self.statusCode,\n    body: self.body,\n    headers: self.headers,\n    request: requestToJSON.call(self.request)\n  }\n}\n\n/**\n * Return request headers in [{key: headerName, value: headerValue}] form\n * @param {String} [headerString] - headers string created by Node stored in ClientRequest._header\n *\n * */\nfunction parseRequestHeaders (headerString) {\n  var arr = headerString.split('\\r\\n')\n  var acc = []\n\n  // first element of accumulator is not a header\n  // last two elements are empty strings\n  for (var i = 1; i < arr.length - 2; i++) {\n    // HTTP/2 specific headers beging with :, so we find the index of the first colon skipping the first character\n    var splitIndex = arr[i].indexOf(':', 1)\n\n    acc.push({\n      key: arr[i].slice(0, splitIndex),\n      value: arr[i].slice(splitIndex + 2)\n    })\n  }\n\n  return acc\n}\n\n/**\n * Return response headers in [{key: headerName, value: headerValue}] form\n * @param {Array} [rawHeaders] - https://nodejs.org/api/http.html#http_message_rawheaders\n *\n * */\nfunction parseResponseHeaders (rawHeaders) {\n  var acc = []\n\n  for (var i = 0; i < rawHeaders.length; i = i + 2) {\n    acc.push({\n      key: rawHeaders[i],\n      value: rawHeaders[i + 1]\n    })\n  }\n\n  return acc\n}\n\nfunction Request (options) {\n  // if given the method property in options, set property explicitMethod to true\n\n  // extend the Request instance with any non-reserved properties\n  // remove any reserved functions from the options object\n  // set Request instance to be readable and writable\n  // call init\n\n  var self = this\n\n  // start with HAR, then override with additional options\n  if (options.har) {\n    self._har = new Har(self)\n    options = self._har.options(options)\n  }\n\n  // transform `formData` for backward compatibility\n  // don't check for explicit object type to support legacy shenanigans\n  if (options.formData && !Array.isArray(options.formData)) {\n    options.formData = transformFormData(options.formData)\n  }\n\n  // use custom URL parser if provided, fallback to url.parse and url.resolve\n  if (!(\n    options.urlParser &&\n    typeof options.urlParser.parse === 'function' &&\n    typeof options.urlParser.resolve === 'function'\n  )) {\n    options.urlParser = {\n      parse: url.parse,\n      resolve: url.resolve\n    }\n  }\n\n  stream.Stream.call(self)\n  var reserved = Object.keys(Request.prototype)\n  var nonReserved = filterForNonReserved(reserved, options)\n\n  extend(self, nonReserved)\n  options = filterOutReservedFunctions(reserved, options)\n\n  self.readable = true\n  self.writable = true\n  self._debug = []\n  if (options.method) {\n    self.explicitMethod = true\n  }\n  self._qs = new Querystring(self)\n  self._auth = new Auth(self)\n  self._oauth = new OAuth(self)\n  self._multipart = new Multipart(self)\n  self._redirect = new Redirect(self)\n  self._tunnel = new Tunnel(self)\n  self._socks = new SocksProxy(self)\n  self.init(options)\n}\n\nutil.inherits(Request, stream.Stream)\n\n// Debugging\nRequest.debug = process.env.NODE_DEBUG && /\\brequest\\b/.test(process.env.NODE_DEBUG)\n\nfunction debug () {\n  if (Request.debug) {\n    console.error('REQUEST %s', util.format.apply(util, arguments))\n  }\n}\n\nRequest.prototype.debug = debug\n\nRequest.prototype.init = function (options) {\n  // init() contains all the code to setup the request object.\n  // the actual outgoing request is not started until start() is called\n  // this function is called from both the constructor and on redirect.\n  var self = this\n  if (!options) {\n    options = {}\n  }\n  self.headers = self.headers ? copy(self.headers) : {}\n\n  // for this request (or redirect) store its debug logs in `_reqResInfo` and\n  // store its reference in `_debug` which holds debug logs of every request\n  self._reqResInfo = {}\n  self._debug.push(self._reqResInfo)\n\n  // additional postman feature starts\n  // bind default events sent via options\n  if (options.bindOn) {\n    Object.keys(options.bindOn).forEach(function (eventName) {\n      !Array.isArray(options.bindOn[eventName]) && (options.bindOn[eventName] = [options.bindOn[eventName]])\n      options.bindOn[eventName].forEach(function (listener) {\n        self.on(eventName, listener)\n      })\n    })\n  }\n  if (options.once) {\n    Object.keys(options.once).forEach(function (eventName) {\n      !Array.isArray(options.bindOnce[eventName]) && (options.bindOnce[eventName] = [options.bindOnce[eventName]])\n      options.bindOnce[eventName].forEach(function (listener) {\n        self.once(eventName, listener)\n      })\n    })\n  }\n  // additional postman feature ends\n\n  // Delete headers with value undefined or HTTP/2 specific pseudoheaders since they break\n  // ClientRequest.OutgoingMessage.setHeader in node 0.12\n  for (var headerName in self.headers) {\n    if (typeof self.headers[headerName] === 'undefined' || headerName.startsWith(':')) {\n      delete self.headers[headerName]\n    }\n  }\n\n  caseless.httpify(self, self.headers)\n\n  if (!self.method) {\n    self.method = options.method || 'GET'\n  }\n  if (!self.localAddress) {\n    self.localAddress = options.localAddress\n  }\n\n  self._qs.init(options)\n\n  debug(options)\n  if (!self.pool && self.pool !== false) {\n    self.pool = globalPool\n  }\n  self.dests = self.dests || []\n  self.__isRequestRequest = true\n\n  // Protect against double callback\n  if (!self._callback && self.callback) {\n    self._callback = self.callback\n    self.callback = function (error, response, body) {\n      if (self._callbackCalled) {\n        return // Print a warning maybe?\n      }\n      self._callbackCalled = true\n      self._callback(error, response, body, self._debug)\n    }\n    self.on('error', self.callback.bind())\n    self.on('complete', self.callback.bind(self, null))\n  }\n\n  // People use this property instead all the time, so support it\n  if (!self.uri && self.url) {\n    self.uri = self.url\n    delete self.url\n  }\n\n  // If there's a baseUrl, then use it as the base URL (i.e. uri must be\n  // specified as a relative path and is appended to baseUrl).\n  if (self.baseUrl) {\n    if (typeof self.baseUrl !== 'string') {\n      return self.emit('error', new Error('options.baseUrl must be a string'))\n    }\n\n    if (typeof self.uri !== 'string') {\n      return self.emit('error', new Error('options.uri must be a string when using options.baseUrl'))\n    }\n\n    if (self.uri.indexOf('//') === 0 || self.uri.indexOf('://') !== -1) {\n      return self.emit('error', new Error('options.uri must be a path when using options.baseUrl'))\n    }\n\n    // Handle all cases to make sure that there's only one slash between\n    // baseUrl and uri.\n    var baseUrlEndsWithSlash = self.baseUrl.lastIndexOf('/') === self.baseUrl.length - 1\n    var uriStartsWithSlash = self.uri.indexOf('/') === 0\n\n    if (baseUrlEndsWithSlash && uriStartsWithSlash) {\n      self.uri = self.baseUrl + self.uri.slice(1)\n    } else if (baseUrlEndsWithSlash || uriStartsWithSlash) {\n      self.uri = self.baseUrl + self.uri\n    } else if (self.uri === '') {\n      self.uri = self.baseUrl\n    } else {\n      self.uri = self.baseUrl + '/' + self.uri\n    }\n    delete self.baseUrl\n  }\n\n  // A URI is needed by this point, emit error if we haven't been able to get one\n  if (!self.uri) {\n    return self.emit('error', new Error('options.uri is a required argument'))\n  }\n\n  // If a string URI/URL was given, parse it into a URL object\n  if (typeof self.uri === 'string') {\n    self.uri = self.urlParser.parse(self.uri)\n  }\n\n  // Some URL objects are not from a URL parsed string and need href added\n  if (!self.uri.href) {\n    self.uri.href = url.format(self.uri)\n  }\n\n  // DEPRECATED: Warning for users of the old Unix Sockets URL Scheme\n  if (self.uri.protocol === 'unix:') {\n    return self.emit('error', new Error('`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`'))\n  }\n\n  // Support Unix Sockets\n  if (self.uri.host === 'unix') {\n    self.enableUnixSocket()\n  }\n\n  if (self.strictSSL === false) {\n    self.rejectUnauthorized = false\n  }\n\n  if (!self.uri.pathname) { self.uri.pathname = '/' }\n\n  if (!(self.uri.host || (self.uri.hostname && self.uri.port)) && !self.uri.isUnix) {\n    // Invalid URI: it may generate lot of bad errors, like 'TypeError: Cannot call method `indexOf` of undefined' in CookieJar\n    // Detect and reject it as soon as possible\n    var faultyUri = url.format(self.uri)\n    var message = 'Invalid URI \"' + faultyUri + '\"'\n    if (Object.keys(options).length === 0) {\n      // No option ? This can be the sign of a redirect\n      // As this is a case where the user cannot do anything (they didn't call request directly with this URL)\n      // they should be warned that it can be caused by a redirection (can save some hair)\n      message += '. This can be caused by a crappy redirection.'\n    }\n    // This error was fatal\n    self.abort()\n    return self.emit('error', new Error(message))\n  }\n\n  if (!self.hasOwnProperty('proxy')) {\n    self.proxy = getProxyFromURI(self.uri)\n  }\n\n  if (typeof self.proxy === 'string') {\n    self.proxy = self.urlParser.parse(self.proxy)\n\n    if (self.proxy.auth) {\n      self.proxy.auth = self._qs.unescape(self.proxy.auth)\n    }\n  }\n\n  self.tunnel = self._tunnel.isEnabled()\n  self.socks = self._socks.isEnabled()\n\n  if (self.proxy) {\n    if (self.socks) {\n      self._socks.setup()\n    } else {\n      self._tunnel.setup(options)\n    }\n  }\n\n  self._redirect.onRequest(options)\n\n  // Add `Host` header if not defined already\n  self.setHost = (self.setHost === undefined || Boolean(self.setHost))\n  if (!self.hasHeader('host') && self.setHost) {\n    var hostHeaderName = self.originalHostHeaderName || 'Host'\n    self.setHeader(hostHeaderName, self.uri.host)\n    // Drop :port suffix from Host header if known protocol.\n    if (self.uri.port) {\n      if ((self.uri.port === '80' && self.uri.protocol === 'http:') ||\n          (self.uri.port === '443' && self.uri.protocol === 'https:')) {\n        self.setHeader(hostHeaderName, self.uri.hostname)\n      }\n    }\n  }\n\n  if (!self.uri.port) {\n    if (self.uri.protocol === 'http:') { self.uri.port = 80 } else if (self.uri.protocol === 'https:') { self.uri.port = 443 }\n  }\n\n  if (self.proxy && !self.tunnel && !self.socks) {\n    self.port = self.proxy.port\n    self.host = self.proxy.hostname\n  } else {\n    self.port = self.uri.port\n    self.host = self.uri.hostname\n  }\n\n  if (options.form) {\n    self.form(options.form)\n  }\n\n  if (options.formData) {\n    var formData = options.formData\n    var requestForm = self.form()\n    for (var i = 0, ii = formData.length; i < ii; i++) {\n      var formParam = formData[i]\n      if (!formParam) { continue }\n      if (formParam.options) {\n        requestForm.append(formParam.key, formParam.value, formParam.options)\n      } else {\n        requestForm.append(formParam.key, formParam.value)\n      }\n    }\n  }\n\n  if (options.qs) {\n    self.qs(options.qs)\n  }\n\n  if (self.uri.path) {\n    self.path = self.uri.path\n  } else {\n    self.path = self.uri.pathname + (self.uri.search || '')\n  }\n\n  if (self.path.length === 0) {\n    self.path = '/'\n  }\n\n  // Auth must happen last in case signing is dependent on other headers\n  if (options.aws) {\n    self.aws(options.aws)\n  }\n\n  if (options.hawk) {\n    self.hawk(options.hawk)\n  }\n\n  if (options.httpSignature) {\n    self.httpSignature(options.httpSignature)\n  }\n\n  if (options.auth) {\n    if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) {\n      options.auth.user = options.auth.username\n    }\n    if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) {\n      options.auth.pass = options.auth.password\n    }\n\n    self.auth(\n      options.auth.user,\n      options.auth.pass,\n      options.auth.sendImmediately,\n      options.auth.bearer\n    )\n  }\n\n  if (!self.hasHeader('accept-encoding')) {\n    var acceptEncoding = ''\n\n    self.gzip && (acceptEncoding += 'gzip, deflate')\n\n    if (self.brotli) {\n      acceptEncoding && (acceptEncoding += ', ')\n      acceptEncoding += 'br'\n    }\n\n    acceptEncoding && self.setHeader('Accept-Encoding', acceptEncoding)\n  }\n\n  if (self.uri.auth && !self.hasHeader('authorization')) {\n    var uriAuthPieces = self.uri.auth.split(':').map(function (item) { return self._qs.unescape(item) })\n    self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true)\n  }\n\n  if (!self.tunnel && !self.socks && self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization')) {\n    self.setHeader('Proxy-Authorization', 'Basic ' + toBase64(self.proxy.auth))\n  }\n\n  if (self.proxy && !self.tunnel && !self.socks) {\n    self.path = (self.uri.protocol + '//' + self.uri.host + self.path)\n  }\n\n  if (options.json) {\n    self.json(options.json)\n  }\n  if (options.multipart) {\n    self.multipart(options.multipart)\n  }\n\n  // enable timings if verbose is true\n  if (options.time || options.verbose) {\n    self.timing = true\n\n    // NOTE: elapsedTime is deprecated in favor of .timings\n    self.elapsedTime = self.elapsedTime || 0\n  }\n\n  if (options.verbose) {\n    self.verbose = true\n  }\n\n  if (typeof options.maxResponseSize === 'number') {\n    self.maxResponseSize = options.maxResponseSize\n  }\n\n  function setContentLength () {\n    if (isTypedArray(self.body)) {\n      self.body = Buffer.from(self.body)\n    }\n\n    if (!self.hasHeader('content-length')) {\n      var length\n      if (typeof self.body === 'string') {\n        length = Buffer.byteLength(self.body)\n      } else if (Array.isArray(self.body)) {\n        length = self.body.reduce(function (a, b) { return a + b.length }, 0)\n      } else {\n        length = self.body.length\n      }\n\n      if (length) {\n        self.setHeader('Content-Length', length)\n      } else {\n        self.emit('error', new Error('Argument error, options.body.'))\n      }\n    }\n  }\n\n  if (self.body && !isstream(self.body)) {\n    setContentLength()\n  }\n\n  if (options.oauth) {\n    self.oauth(options.oauth)\n  } else if (self._oauth.params && self.hasHeader('authorization')) {\n    self.oauth(self._oauth.params)\n  }\n\n  var protocol = (self.proxy && !self.tunnel && !self.socks) ? self.proxy.protocol : self.uri.protocol\n  var defaultModules = {'http:': { http2: http, http1: http, auto: http }, 'https:': { http1: https, http2: http2, auto: autohttp2 }}\n  var httpModules = self.httpModules || {}\n\n  // If user defines httpModules, respect if they have different httpModules for different http versions, else use the tls specific http module\n  // If the user defines nothing, revert to default modules\n  self.httpModule = (httpModules[protocol] && httpModules[protocol][self.protocolVersion]) || httpModules[protocol] || (defaultModules[protocol] && defaultModules[protocol][self.protocolVersion])\n\n  if (httpModules[protocol] && !(httpModules[protocol][options.protocolVersion])) {\n    // If the user is only specifying https/http modules, revert to http1\n    self.protocolVersion = 'http1'\n  }\n\n  if (!self.httpModule) {\n    return self.emit('error', new Error('Invalid protocol: ' + protocol))\n  }\n\n  if (options.ca) {\n    self.ca = options.ca\n  }\n\n  // prefer common self.agent if exists\n  if (self.agents && !self.agent) {\n    var agent = protocol === 'http:' ? self.agents.http : self.agents.https\n    if (agent) {\n      if (agent.agentClass || agent.agentOptions) {\n        options.agentClass = agent.agentClass || options.agentClass\n        options.agentOptions = agent.agentOptions || options.agentOptions\n      } else {\n        self.agent = agent\n      }\n    }\n  }\n\n  if (!self.agent) {\n    if (options.agentOptions) {\n      self.agentOptions = options.agentOptions\n    }\n\n    if (options.agentClass) {\n      self.agentClass = options.agentClass\n    } else if (options.forever) {\n      var v = version()\n      // use ForeverAgent in node 0.10- only\n      if (v.major === 0 && v.minor <= 10) {\n        self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL\n      } else {\n        self.agentClass = self.httpModule.Agent\n        self.agentOptions = self.agentOptions || {}\n        self.agentOptions.keepAlive = true\n      }\n    } else {\n      self.agentClass = self.httpModule.Agent\n    }\n  }\n\n  if (self.pool === false) {\n    self.agent = false\n  } else {\n    try {\n      self.agent = self.agent || self.getNewAgent({agentIdleTimeout: options.agentIdleTimeout})\n    } catch (error) {\n      // tls.createSecureContext() throws on bad options\n      return self.emit('error', error)\n    }\n  }\n\n  self.on('pipe', function (src) {\n    if (self.ntick && self._started) {\n      self.emit('error', new Error('You cannot pipe to this stream after the outbound request has started.'))\n    }\n    self.src = src\n    if (isReadStream(src)) {\n      if (!self.hasHeader('content-type')) {\n        // @note fallback to 'application/octet-stream' if mime.lookup returns `false`\n        self.setHeader('Content-Type', mime.lookup(src.path) || 'application/octet-stream')\n      }\n    } else {\n      if (src.headers) {\n        for (var i in src.headers) {\n          if (!self.hasHeader(i)) {\n            self.setHeader(i, src.headers[i])\n          }\n        }\n      }\n      if (self._json && !self.hasHeader('content-type')) {\n        self.setHeader('Content-Type', 'application/json')\n      }\n      if (src.method && !self.explicitMethod) {\n        self.method = src.method\n      }\n    }\n\n    // self.on('pipe', function () {\n    //   console.error('You have already piped to this stream. Pipeing twice is likely to break the request.')\n    // })\n  })\n\n  defer(function () {\n    if (self._aborted) {\n      return\n    }\n\n    var end = function () {\n      if (self._form) {\n        if (!self._auth.hasAuth || (self._auth.hasAuth && self._auth.sentAuth)) {\n          try {\n            self._form.pipe(self)\n          } catch (err) {\n            self.abort()\n            options.callback && options.callback(err)\n            return\n          }\n        }\n      }\n      if (self._multipart && self._multipart.chunked) {\n        self._multipart.body.pipe(self)\n      }\n      if (self.body) {\n        if (isstream(self.body)) {\n          if (self.hasHeader('content-length')) {\n            self.body.pipe(self)\n          } else { // certain servers require content-length to function. we try to pre-detect if possible\n            streamLength(self.body, {}, function (err, len) {\n              if (!(err || self._started || self.hasHeader('content-length') || len === null || len < 0)) {\n                self.setHeader('Content-Length', len)\n              }\n              self.body.pipe(self)\n            })\n          }\n        } else {\n          setContentLength()\n          if (Array.isArray(self.body)) {\n            self.body.forEach(function (part) {\n              self.write(part)\n            })\n          } else {\n            self.write(self.body)\n          }\n          self.end()\n        }\n      } else if (self.requestBodyStream) {\n        console.warn('options.requestBodyStream is deprecated, please pass the request object to stream.pipe.')\n        self.requestBodyStream.pipe(self)\n      } else if (!self.src) {\n        if ((self._auth.hasAuth && !self._auth.sentAuth) || self.hasHeader('content-length')) {\n          self.end()\n          return\n        }\n        switch (self.method) {\n          case 'GET':\n          case 'HEAD':\n          case 'TRACE':\n          case 'DELETE':\n          case 'CONNECT':\n          case 'OPTIONS':\n          case undefined:\n            // @note this behavior is same as Node.js\n            break\n          default:\n            self.setHeader('Content-Length', 0)\n            break\n        }\n        self.end()\n      }\n    }\n\n    self.jar(self._jar || options.jar, function () {\n      if (self._form && !self.hasHeader('content-length')) {\n        // Before ending the request, we had to compute the length of the whole form, asyncly\n        self._form.getLength(function (err, length) {\n          if (!err && !isNaN(length)) {\n            self.setHeader('Content-Length', length)\n          }\n          end()\n        })\n      } else {\n        end()\n      }\n    })\n\n    self.ntick = true\n  })\n}\n\nRequest.prototype.getNewAgent = function ({agentIdleTimeout}) {\n  var self = this\n  var Agent = self.agentClass\n  var options = {}\n  if (self.agentOptions) {\n    for (var i in self.agentOptions) {\n      options[i] = self.agentOptions[i]\n    }\n  }\n  if (self.ca) {\n    options.ca = self.ca\n  }\n  if (self.extraCA) {\n    options.extraCA = self.extraCA\n  }\n  if (self.ciphers) {\n    options.ciphers = self.ciphers\n  }\n  if (self.secureProtocol) {\n    options.secureProtocol = self.secureProtocol\n  }\n  if (self.secureOptions) {\n    options.secureOptions = self.secureOptions\n  }\n  if (typeof self.rejectUnauthorized !== 'undefined') {\n    options.rejectUnauthorized = self.rejectUnauthorized\n  }\n\n  if (self.cert && self.key) {\n    options.key = self.key\n    options.cert = self.cert\n  }\n\n  if (self.pfx) {\n    options.pfx = self.pfx\n  }\n\n  if (self.passphrase) {\n    options.passphrase = self.passphrase\n  }\n\n  var poolKey = ''\n\n  // different types of agents are in different pools\n  if (Agent !== self.httpModule.Agent) {\n    poolKey += Agent.name\n  }\n\n  // ca option is only relevant if proxy or destination are https\n  var proxy = self.proxy\n  if (typeof proxy === 'string') {\n    proxy = self.urlParser.parse(proxy)\n  }\n  var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:'\n\n  if (isHttps) {\n    if (options.ca) {\n      if (poolKey) {\n        poolKey += ':'\n      }\n      poolKey += options.ca\n    }\n\n    // only add when NodeExtraCACerts is enabled\n    if (options.extraCA) {\n      if (poolKey) {\n        poolKey += ':'\n      }\n      poolKey += options.extraCA\n\n      // Create a new secure context to add the extra CA\n      var secureContext = tls.createSecureContext(options)\n      secureContext.context.addCACert(options.extraCA)\n      options.secureContext = secureContext\n    }\n\n    if (typeof options.rejectUnauthorized !== 'undefined') {\n      if (poolKey) {\n        poolKey += ':'\n      }\n      poolKey += options.rejectUnauthorized\n    }\n\n    if (options.cert) {\n      if (poolKey) {\n        poolKey += ':'\n      }\n      poolKey += options.cert.toString('ascii') + options.key.toString('ascii')\n    }\n\n    if (options.pfx) {\n      if (poolKey) {\n        poolKey += ':'\n      }\n      poolKey += options.pfx.toString('ascii')\n    }\n\n    if (options.passphrase) {\n      if (poolKey) {\n        poolKey += ':'\n      }\n      poolKey += options.passphrase\n    }\n\n    if (options.ciphers) {\n      if (poolKey) {\n        poolKey += ':'\n      }\n      poolKey += options.ciphers\n    }\n\n    if (options.secureProtocol) {\n      if (poolKey) {\n        poolKey += ':'\n      }\n      poolKey += options.secureProtocol\n    }\n\n    if (options.secureOptions) {\n      if (poolKey) {\n        poolKey += ':'\n      }\n      poolKey += options.secureOptions\n    }\n  }\n\n  if (self.pool === globalPool && !poolKey && Object.keys(options).length === 0 && self.httpModule.globalAgent && typeof agentIdleTimeout !== 'number') {\n    // not doing anything special.  Use the globalAgent\n    return self.httpModule.globalAgent\n  }\n\n  // we're using a stored agent.  Make sure it's protocol-specific\n  poolKey = self.protocolVersion + ':' + self.uri.protocol + poolKey\n\n  let agent = self.pool[poolKey]\n\n  // generate a new agent for this setting if none yet exists\n  if (!agent || (typeof agentIdleTimeout === 'number' && (agent.lastUsedAt || 0) + agentIdleTimeout < Date.now())) {\n    agent = self.pool[poolKey] = new Agent(options)\n    // properly set maxSockets on new agents\n    if (self.pool.maxSockets) {\n      self.pool[poolKey].maxSockets = self.pool.maxSockets\n    }\n  }\n\n  agent.lastUsedAt = Date.now()\n  return agent\n}\n\nRequest.prototype.start = function () {\n  // start() is called once we are ready to send the outgoing HTTP request.\n  // this is usually called on the first write(), end() or on nextTick()\n  var self = this\n\n  if (self.timing) {\n    // All timings will be relative to this request's startTime.  In order to do this,\n    // we need to capture the wall-clock start time (via Date), immediately followed\n    // by the high-resolution timer (via now()).  While these two won't be set\n    // at the _exact_ same time, they should be close enough to be able to calculate\n    // high-resolution, monotonically non-decreasing timestamps relative to startTime.\n    var startTime = new Date().getTime()\n    var startTimeNow = now()\n  }\n\n  if (self._aborted) {\n    return\n  }\n\n  // postman: emit start event\n  self.emit('start')\n\n  self._started = true\n  self.method = self.method || 'GET'\n  self.href = self.uri.href\n\n  if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) {\n    self.setHeader('Content-Length', self.src.stat.size)\n  }\n  if (self._aws) {\n    self.aws(self._aws, true)\n  }\n\n  self._reqResInfo.request = {\n    method: self.method,\n    href: self.uri.href,\n    headers: [],\n    proxy: (self.proxy && { href: self.proxy.href }) || undefined,\n    httpVersion: '1.1'\n  }\n\n  // We have a method named auth, which is completely different from the http.request\n  // auth option.  If we don't remove it, we're gonna have a bad time.\n  var reqOptions = copy(self)\n  delete reqOptions.auth\n\n  // Workaround for a bug in Node: https://github.com/nodejs/node/issues/8321\n  if (!(self.disableUrlEncoding || self.proxy || self.uri.isUnix)) {\n    try {\n      extend(reqOptions, urlParse(self.uri.href))\n    } catch (e) { } // nothing to do if urlParse fails, \"extend\" never throws an error.\n  }\n\n  debug('make request', self.uri.href)\n\n  // node v6.8.0 now supports a `timeout` value in `http.request()`, but we\n  // should delete it for now since we handle timeouts manually for better\n  // consistency with node versions before v6.8.0\n  delete reqOptions.timeout\n\n  try {\n    self.req = self.httpModule.request(reqOptions)\n\n    // Remove blacklisted headers from the request instance.\n    // @note don't check for `hasHeader` because headers like `connection`,\n    // 'content-length', 'transfer-encoding' etc. are added at the very end\n    // and `removeHeader` updates the Node.js internal state which makes sure\n    // these headers are not added.\n    if (Array.isArray(self.blacklistHeaders) && self.blacklistHeaders.length) {\n      self.blacklistHeaders.forEach(function (header) {\n        self.req.removeHeader(header)\n        // also remove from the `self` for the consistency\n        self.removeHeader(header)\n      })\n    }\n  } catch (err) {\n    self.emit('error', err)\n    return\n  }\n\n  if (self.timing) {\n    self.startTime = startTime\n    self.startTimeNow = startTimeNow\n\n    // Timing values will all be relative to startTime (by comparing to startTimeNow\n    // so we have an accurate clock)\n    self.timings = {}\n  }\n\n  var timeout\n  if (self.timeout && !self.timeoutTimer) {\n    if (self.timeout < 0) {\n      timeout = 0\n    } else if (typeof self.timeout === 'number' && isFinite(self.timeout)) {\n      timeout = self.timeout\n    }\n  }\n\n  self.req.on('response', self.onRequestResponse.bind(self))\n  self.req.on('error', self.onRequestError.bind(self))\n  self.req.on('drain', function () {\n    self.emit('drain')\n  })\n\n  self.req.on('socket', function (socket) {\n    if (self.verbose) {\n      // The reused socket holds all the session data which was injected in\n      // during the first connection. This is done because events like\n      // `lookup`, `connect` & `secureConnect` will not be triggered for a\n      // reused socket and debug information will be lost for that request.\n      var reusedSocket = Boolean(socket.__SESSION_ID && socket.__SESSION_DATA)\n\n      if (!reusedSocket) {\n        socket.__SESSION_ID = uuid()\n        socket.__SESSION_DATA = {}\n      }\n\n      // @note make sure you don't serialize this object to avoid memory leak\n      self._reqResInfo.session = {\n        id: socket.__SESSION_ID,\n        reused: reusedSocket,\n        data: socket.__SESSION_DATA\n      }\n    }\n\n    // `._connecting` was the old property which was made public in node v6.1.0\n    var isConnecting = socket._connecting || socket.connecting\n    if (self.timing) {\n      self.timings.socket = now() - self.startTimeNow\n\n      if (isConnecting) {\n        var onLookupTiming = function () {\n          self.timings.lookup = now() - self.startTimeNow\n        }\n\n        var onConnectTiming = function () {\n          self.timings.connect = now() - self.startTimeNow\n\n          if (self.verbose) {\n            socket.__SESSION_DATA.addresses = {\n              // local address\n              // @note there's no `socket.localFamily` but `.address` method\n              // returns same output as of remote.\n              local: (typeof socket.address === 'function') && socket.address(),\n\n              // remote address\n              remote: {\n                address: socket.remoteAddress,\n                family: socket.remoteFamily,\n                port: socket.remotePort\n              }\n            }\n          }\n        }\n\n        var onSecureConnectTiming = function () {\n          self.timings.secureConnect = now() - self.startTimeNow\n\n          if (self.verbose) {\n            socket.__SESSION_DATA.tls = {\n              // true if the session was reused\n              reused: (typeof socket.isSessionReused === 'function') && socket.isSessionReused(),\n\n              // true if the peer certificate was signed by one of the CAs specified\n              authorized: socket.authorized,\n\n              // reason why the peer's certificate was not been verified\n              authorizationError: socket.authorizationError,\n\n              // negotiated cipher name\n              cipher: (typeof socket.getCipher === 'function') && socket.getCipher(),\n\n              // negotiated SSL/TLS protocol version\n              // @note Node >= v5.7.0\n              protocol: (typeof socket.getProtocol === 'function') && socket.getProtocol(),\n\n              // type, name, and size of parameter of an ephemeral key exchange\n              // @note Node >= v5.0.0\n              ephemeralKeyInfo: (typeof socket.getEphemeralKeyInfo === 'function') && socket.getEphemeralKeyInfo()\n            }\n\n            // peer certificate information\n            // @note if session is reused, all certificate information is\n            // stripped from the socket (returns {}).\n            // Refer: https://github.com/nodejs/node/issues/3940\n            var peerCert = (typeof socket.getPeerCertificate === 'function') && (socket.getPeerCertificate() || {})\n\n            socket.__SESSION_DATA.tls.peerCertificate = {\n              subject: peerCert.subject && {\n                country: peerCert.subject.C,\n                stateOrProvince: peerCert.subject.ST,\n                locality: peerCert.subject.L,\n                organization: peerCert.subject.O,\n                organizationalUnit: peerCert.subject.OU,\n                commonName: peerCert.subject.CN,\n                alternativeNames: peerCert.subjectaltname\n              },\n              issuer: peerCert.issuer && {\n                country: peerCert.issuer.C,\n                stateOrProvince: peerCert.issuer.ST,\n                locality: peerCert.issuer.L,\n                organization: peerCert.issuer.O,\n                organizationalUnit: peerCert.issuer.OU,\n                commonName: peerCert.issuer.CN\n              },\n              validFrom: peerCert.valid_from,\n              validTo: peerCert.valid_to,\n              fingerprint: peerCert.fingerprint,\n              serialNumber: peerCert.serialNumber\n            }\n          }\n        }\n\n        socket.once('lookup', onLookupTiming)\n        socket.once('connect', onConnectTiming)\n        socket.once('secureConnect', onSecureConnectTiming)\n\n        // clean up timing event listeners if needed on error\n        self.req.once('error', function () {\n          // Swallow ERR_HTTP2_SOCKET_UNBOUND error when removing listeners in case of error.\n          // This needs to be done since http2 ClientSession disassociates the underlying socket from the session before emitting the error event\n          try {\n            socket.removeListener('lookup', onLookupTiming)\n            socket.removeListener('connect', onConnectTiming)\n          } catch (err) {\n            if (err.code !== 'ERR_HTTP2_SOCKET_UNBOUND') {\n              throw err\n            }\n          }\n        })\n      }\n    }\n\n    var setReqTimeout = function () {\n      // This timeout sets the amount of time to wait *between* bytes sent\n      // from the server once connected.\n      //\n      // In particular, it's useful for erroring if the server fails to send\n      // data halfway through streaming a response.\n      self.req.setTimeout(timeout, function () {\n        if (self.req) {\n          self.abort()\n          var e = new Error('ESOCKETTIMEDOUT')\n          e.code = 'ESOCKETTIMEDOUT'\n          e.connect = false\n          self.emit('error', e)\n        }\n      })\n    }\n    if (timeout !== undefined) {\n      // Only start the connection timer if we're actually connecting a new\n      // socket, otherwise if we're already connected (because this is a\n      // keep-alive connection) do not bother. This is important since we won't\n      // get a 'connect' event for an already connected socket.\n      if (isConnecting) {\n        var onReqSockConnect = function () {\n          socket.removeListener('connect', onReqSockConnect)\n          self.clearTimeout()\n          setReqTimeout()\n        }\n\n        socket.on('connect', onReqSockConnect)\n\n        self.req.on('error', function (err) { // eslint-disable-line handle-callback-err\n          // Swallow ERR_HTTP2_SOCKET_UNBOUND error when removing listeners in case of error.\n          // This needs to be done since http2 ClientSession disassociates the underlying socket from the session before emitting the error event\n          try {\n            socket.removeListener('connect', onReqSockConnect)\n          } catch (err) {\n            if (err.code !== 'ERR_HTTP2_SOCKET_UNBOUND') {\n              throw err\n            }\n          }\n        })\n\n        // Set a timeout in memory - this block will throw if the server takes more\n        // than `timeout` to write the HTTP status and headers (corresponding to\n        // the on('response') event on the client). NB: this measures wall-clock\n        // time, not the time between bytes sent by the server.\n        self.timeoutTimer = setTimeout(function () {\n          socket.removeListener('connect', onReqSockConnect)\n          self.abort()\n          var e = new Error('ETIMEDOUT')\n          e.code = 'ETIMEDOUT'\n          e.connect = true\n          self.emit('error', e)\n        }, timeout)\n      } else {\n        // We're already connected\n        setReqTimeout()\n      }\n    }\n    self.emit('socket', socket)\n  })\n\n  self.emit('request', self.req)\n}\n\nRequest.prototype.onRequestError = function (error) {\n  var self = this\n  if (self._aborted) {\n    return\n  }\n  if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' &&\n    self.agent.addRequestNoreuse) {\n    self.agent = {addRequest: self.agent.addRequestNoreuse.bind(self.agent)}\n    self.start()\n    self.req.end()\n    return\n  }\n  self.clearTimeout()\n  self.emit('error', error)\n}\n\nRequest.prototype.onRequestResponse = function (response) {\n  var self = this\n  // De-referencing self.startTimeNow to prevent race condition during redirects\n  // Race-condition:\n  // 30x-url: Request start (self.startTimeNow initialized (self.start()))\n  // Redirect header to 200 request received\n  // 200-url: Request start (self.startTimeNow re-initialized, old value overwritten (redirect.js -> request.init() -> self.start()))\n  // 30x-url: end event received, timing calculated using new self.startTimeNow (incorrect)\n  //\n  // This must've been happening with http/1.1 as well when using keep-alive, but there were no tests to catch this.\n  // Was highlighted with http/2 where connections are reused by default\n  // Does not show up in http/1.x tests due to delays involving socket establishment\n  //\n  // New flow\n  // 30x-url: Request start (self.startTimeNow initialized)\n  // Redirect header to 200 request received\n  // 200-url: Request start (self.startTimeNow re-initialized, old value overwritten)\n  // 30x-url: end event received, timing calculated using requestSegmentStartTime (correct)\n  const requestSegmentStartTime = self.startTimeNow\n\n  if (self.timing) {\n    self.timings.response = now() - requestSegmentStartTime\n  }\n\n  debug('onRequestResponse', self.uri.href, response.statusCode, response.headers)\n  response.on('end', function () {\n    if (self.timing) {\n      self.timings.end = now() - requestSegmentStartTime\n      response.timingStart = self.startTime\n      response.timingStartTimer = requestSegmentStartTime\n\n      // fill in the blanks for any periods that didn't trigger, such as\n      // no lookup or connect due to keep alive\n      if (!self.timings.socket) {\n        self.timings.socket = 0\n      }\n      if (!self.timings.lookup) {\n        self.timings.lookup = self.timings.socket\n      }\n      if (!self.timings.connect) {\n        self.timings.connect = self.timings.lookup\n      }\n      if (!self.timings.secureConnect && self.uri.protocol === 'https:') {\n        self.timings.secureConnect = self.timings.connect\n      }\n      if (!self.timings.response) {\n        self.timings.response = self.timings.connect\n      }\n\n      debug('elapsed time', self.timings.end)\n\n      // elapsedTime includes all redirects\n      self.elapsedTime += Math.round(self.timings.end)\n\n      // NOTE: elapsedTime is deprecated in favor of .timings\n      response.elapsedTime = self.elapsedTime\n\n      // timings is just for the final fetch\n      response.timings = self.timings\n\n      // pre-calculate phase timings as well\n      response.timingPhases = {\n        wait: self.timings.socket,\n        dns: self.timings.lookup - self.timings.socket,\n        tcp: self.timings.connect - self.timings.lookup,\n        firstByte: self.timings.response - self.timings.connect,\n        download: self.timings.end - self.timings.response,\n        total: self.timings.end\n      }\n\n      // if secureConnect is present, add secureHandshake and update firstByte\n      if (self.timings.secureConnect) {\n        response.timingPhases.secureHandshake = self.timings.secureConnect - self.timings.connect\n        response.timingPhases.firstByte = self.timings.response - self.timings.secureConnect\n      }\n    }\n\n    debug('response end', self.uri.href, response.statusCode, response.headers)\n  })\n\n  if (self._aborted) {\n    debug('aborted', self.uri.href)\n    response.resume()\n    return\n  }\n\n  self._reqResInfo.response = {\n    statusCode: response.statusCode,\n    headers: parseResponseHeaders(response.rawHeaders),\n    httpVersion: response.httpVersion\n  }\n\n  // Setting this again since the actual request version that was used is found only after ALPN negotiation in case of protocolVersion: auto\n  self._reqResInfo.request.httpVersion = response.httpVersion\n\n  if (self.timing) {\n    self._reqResInfo.timingStart = self.startTime\n    self._reqResInfo.timingStartTimer = self.startTimeNow\n    self._reqResInfo.timings = self.timings\n  }\n\n  self.response = response\n  response.request = self\n  response.toJSON = responseToJSON\n\n  // XXX This is different on 0.10, because SSL is strict by default\n  if (self.uri.protocol === 'https:' &&\n    self.strictSSL && (!response.hasOwnProperty('socket') ||\n      !response.socket.authorized)) {\n    debug('strict ssl error', self.uri.href)\n    var sslErr = response.hasOwnProperty('socket') ? response.socket.authorizationError : self.uri.href + ' does not support SSL'\n    self.emit('error', new Error('SSL Error: ' + sslErr))\n    return\n  }\n\n  // Save the original host before any redirect (if it changes, we need to\n  // remove any authorization headers).  Also remember the case of the header\n  // name because lots of broken servers expect Host instead of host and we\n  // want the caller to be able to specify this.\n  self.originalHost = self.getHeader('host')\n  if (!self.originalHostHeaderName) {\n    self.originalHostHeaderName = self.hasHeader('host')\n  }\n  if (self.setHost) {\n    self.removeHeader('host')\n  }\n  self.clearTimeout()\n\n  function responseHandler () {\n    if (self._redirect.onResponse(response)) {\n      return // Ignore the rest of the response\n    }\n\n    // Be a good stream and emit end when the response is finished.\n    // Hack to emit end on close because of a core bug that never fires end\n    response.once('close', function () {\n      if (!self._ended) {\n        self.response.emit('end')\n      }\n    })\n\n    response.once('end', function () {\n      self._ended = true\n    })\n\n    var noBody = function (code) {\n      return (\n        self.method === 'HEAD' ||\n        // Informational\n        (code >= 100 && code < 200) ||\n        // No Content\n        code === 204 ||\n        // Not Modified\n        code === 304\n      )\n    }\n\n    var responseContent\n    var downloadSizeTracker = new SizeTrackerStream()\n\n    if ((self.gzip || self.brotli) && !noBody(response.statusCode)) {\n      var contentEncoding = response.headers['content-encoding'] || 'identity'\n      contentEncoding = contentEncoding.trim().toLowerCase()\n\n      // Be more lenient with decoding compressed responses, since (very rarely)\n      // servers send slightly invalid gzip responses that are still accepted\n      // by common browsers.\n      // Always using Z_SYNC_FLUSH is what cURL does.\n      var zlibOptions = {\n        flush: zlib.Z_SYNC_FLUSH,\n        finishFlush: zlib.Z_SYNC_FLUSH\n      }\n\n      if (self.gzip && contentEncoding === 'gzip') {\n        responseContent = zlib.createGunzip(zlibOptions)\n        response.pipe(downloadSizeTracker).pipe(responseContent)\n      } else if (self.gzip && contentEncoding === 'deflate') {\n        responseContent = inflate.createInflate(zlibOptions)\n        response.pipe(downloadSizeTracker).pipe(responseContent)\n      } else if (self.brotli && contentEncoding === 'br') {\n        responseContent = zlib.createBrotliDecompress()\n        response.pipe(downloadSizeTracker).pipe(responseContent)\n      } else {\n        // Since previous versions didn't check for Content-Encoding header,\n        // ignore any invalid values to preserve backwards-compatibility\n        if (contentEncoding !== 'identity') {\n          debug('ignoring unrecognized Content-Encoding ' + contentEncoding)\n        }\n        responseContent = response.pipe(downloadSizeTracker)\n      }\n    } else {\n      responseContent = response.pipe(downloadSizeTracker)\n    }\n\n    if (self.encoding) {\n      if (self.dests.length !== 0) {\n        console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.')\n      } else {\n        responseContent.setEncoding(self.encoding)\n      }\n    }\n\n    // Node by default returns the status message with `latin1` character encoding,\n    // which results in characters lying outside the range of `U+0000 to U+00FF` getting truncated\n    // so that they can be mapped in the given range.\n    // Refer: https://nodejs.org/docs/latest-v12.x/api/buffer.html#buffer_buffers_and_character_encodings\n    //\n    // Exposing `statusMessageEncoding` option to make encoding type configurable.\n    // This would help in correctly representing status messages belonging to range outside of `latin1`\n    //\n    // @note: The Regex `[^\\w\\s-']` is tested to prevent unnecessary computation of creating a Buffer and\n    // then decoding it when the status message consists of common characters,\n    // specifically belonging to the following set: [a-z, A-Z, 0-9, -, _ ', whitespace]\n    // As in that case, no matter what the encoding type is used for decoding the buffer, the result would remain the same.\n    //\n    // @note: Providing a value in this option will result in force re-encoding of the status message\n    // which may not always be intended by the server - specifically in cases where\n    // server returns a status message which when encoded again with a different character encoding\n    // results in some other characters.\n    // For example: If the server intentionally responds with `ð\\x9F\\x98\\x8A` as status message\n    // but if the statusMessageEncoding option is set to `utf8`, then it would get converted to '😊'.\n    var statusMessage = String(response.statusMessage)\n    if (self.statusMessageEncoding && /[^\\w\\s-']/.test(statusMessage)) {\n      response.statusMessage = Buffer.from(statusMessage, 'latin1').toString(self.statusMessageEncoding)\n    }\n\n    if (self._paused) {\n      responseContent.pause()\n    }\n\n    self.responseContent = responseContent\n\n    self.emit('response', response)\n\n    self.dests.forEach(function (dest) {\n      self.pipeDest(dest)\n    })\n\n    var responseThresholdEnabled = false\n    var responseBytesLeft\n\n    if (typeof self.maxResponseSize === 'number') {\n      responseThresholdEnabled = true\n      responseBytesLeft = self.maxResponseSize\n    }\n\n    responseContent.on('data', function (chunk) {\n      if (self.timing && !self.responseStarted) {\n        self.responseStartTime = (new Date()).getTime()\n\n        // NOTE: responseStartTime is deprecated in favor of .timings\n        response.responseStartTime = self.responseStartTime\n      }\n      // if response threshold is set, update the response bytes left to hit\n      // threshold. If exceeds, abort the request.\n      if (responseThresholdEnabled) {\n        responseBytesLeft -= chunk.length\n        if (responseBytesLeft < 0) {\n          self.emit('error', new Error('Maximum response size reached'))\n          self.destroy()\n          self.abort()\n          return\n        }\n      }\n      self._destdata = true\n      self.emit('data', chunk)\n    })\n    responseContent.once('end', function (chunk) {\n      self._reqResInfo.response.downloadedBytes = downloadSizeTracker.size\n      self.emit('end', chunk)\n    })\n    responseContent.on('error', function (error) {\n      self.emit('error', error)\n    })\n    responseContent.on('close', function () { self.emit('close') })\n\n    if (self.callback) {\n      self.readResponseBody(response)\n    } else { // if no callback\n      self.on('end', function () {\n        if (self._aborted) {\n          debug('aborted', self.uri.href)\n          return\n        }\n        self.emit('complete', response)\n      })\n    }\n  }\n\n  function forEachAsync (items, fn, cb) {\n    !cb && (cb = function () { /* (ಠ_ಠ) */ })\n\n    if (!(Array.isArray(items) && fn)) { return cb() }\n\n    var index = 0\n    var totalItems = items.length\n    function next (err) {\n      if (err || index >= totalItems) {\n        return cb(err)\n      }\n\n      try {\n        fn.call(items, items[index++], next)\n      } catch (error) {\n        return cb(error)\n      }\n    }\n\n    if (!totalItems) { return cb() }\n\n    next()\n  }\n\n  var targetCookieJar = (self._jar && self._jar.setCookie) ? self._jar : globalCookieJar\n  var addCookie = function (cookie, cb) {\n    // set the cookie if it's domain in the URI's domain.\n    targetCookieJar.setCookie(cookie, self.uri, {ignoreError: true}, function () {\n      // swallow the error, don't fail the request because of cookie jar failure\n      cb()\n    })\n  }\n\n  response.caseless = caseless(response.headers)\n\n  if (response.caseless.has('set-cookie') && (!self._disableCookies)) {\n    var headerName = response.caseless.has('set-cookie')\n    if (Array.isArray(response.headers[headerName])) {\n      forEachAsync(response.headers[headerName], addCookie, function (err) {\n        if (err) { return self.emit('error', err) }\n\n        responseHandler()\n      })\n    } else {\n      addCookie(response.headers[headerName], responseHandler)\n    }\n  } else {\n    responseHandler()\n  }\n\n  debug('finish init function', self.uri.href)\n}\n\nRequest.prototype.readResponseBody = function (response) {\n  var self = this\n  debug('reading response\\'s body')\n  var buffers = []\n  var bufferLength = 0\n  var strings = []\n\n  self.on('data', function (chunk) {\n    if (!Buffer.isBuffer(chunk)) {\n      strings.push(chunk)\n    } else if (chunk.length) {\n      bufferLength += chunk.length\n      buffers.push(chunk)\n    }\n  })\n  self.on('end', function () {\n    debug('end event', self.uri.href)\n    if (self._aborted) {\n      debug('aborted', self.uri.href)\n      // `buffer` is defined in the parent scope and used in a closure it exists for the life of the request.\n      // This can lead to leaky behavior if the user retains a reference to the request object.\n      buffers = []\n      bufferLength = 0\n      return\n    }\n\n    if (bufferLength) {\n      debug('has body', self.uri.href, bufferLength)\n      response.body = Buffer.concat(buffers, bufferLength)\n      if (self.encoding !== null) {\n        response.body = response.body.toString(self.encoding)\n      }\n      // `buffer` is defined in the parent scope and used in a closure it exists for the life of the Request.\n      // This can lead to leaky behavior if the user retains a reference to the request object.\n      buffers = []\n      bufferLength = 0\n    } else if (strings.length) {\n      // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation.\n      // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse().\n      if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\\uFEFF') {\n        strings[0] = strings[0].substring(1)\n      }\n      response.body = strings.join('')\n    }\n\n    if (self._json) {\n      try {\n        response.body = JSON.parse(response.body, self._jsonReviver)\n      } catch (e) {\n        debug('invalid JSON received', self.uri.href)\n      }\n    }\n    debug('emitting complete', self.uri.href)\n    if (typeof response.body === 'undefined' && !self._json) {\n      response.body = self.encoding === null ? Buffer.alloc(0) : ''\n    }\n    self.emit('complete', response, response.body)\n  })\n}\n\nRequest.prototype.abort = function () {\n  var self = this\n  self._aborted = true\n\n  if (self.req) {\n    self.req.abort()\n  } else if (self.response) {\n    self.response.destroy()\n  }\n\n  self.clearTimeout()\n  self.emit('abort')\n}\n\nRequest.prototype.pipeDest = function (dest) {\n  var self = this\n  var response = self.response\n  // Called after the response is received\n  if (dest.headers && !dest.headersSent) {\n    if (response.caseless.has('content-type')) {\n      var ctname = response.caseless.has('content-type')\n      if (dest.setHeader) {\n        dest.setHeader(ctname, response.headers[ctname])\n      } else {\n        dest.headers[ctname] = response.headers[ctname]\n      }\n    }\n\n    if (response.caseless.has('content-length')) {\n      var clname = response.caseless.has('content-length')\n      if (dest.setHeader) {\n        dest.setHeader(clname, response.headers[clname])\n      } else {\n        dest.headers[clname] = response.headers[clname]\n      }\n    }\n  }\n  if (dest.setHeader && !dest.headersSent) {\n    for (var i in response.headers) {\n      if (i.startsWith(':')) {\n        // Don't set HTTP/2 pseudoheaders\n        continue\n      }\n      // If the response content is being decoded, the Content-Encoding header\n      // of the response doesn't represent the piped content, so don't pass it.\n      if (!self.gzip || i !== 'content-encoding') {\n        dest.setHeader(i, response.headers[i])\n      }\n    }\n    dest.statusCode = response.statusCode\n  }\n  if (self.pipefilter) {\n    self.pipefilter(response, dest)\n  }\n}\n\nRequest.prototype.qs = function (q, clobber) {\n  var self = this\n  var base\n  if (!clobber && self.uri.query) {\n    base = self._qs.parse(self.uri.query)\n  } else {\n    base = {}\n  }\n\n  for (var i in q) {\n    base[i] = q[i]\n  }\n\n  var qs = self._qs.stringify(base)\n\n  if (qs === '') {\n    return self\n  }\n\n  self.uri = self.urlParser.parse(self.uri.href.split('?')[0] + '?' + qs)\n  self.url = self.uri\n  self.path = self.uri.path\n\n  if (self.uri.host === 'unix') {\n    self.enableUnixSocket()\n  }\n\n  return self\n}\nRequest.prototype.form = function (form) {\n  var self = this\n  var contentType = self.getHeader('content-type')\n  var overrideInvalidContentType = contentType ? !self.allowContentTypeOverride : true\n  if (form) {\n    if (overrideInvalidContentType && !/^application\\/x-www-form-urlencoded\\b/.test(contentType)) {\n      self.setHeader('Content-Type', 'application/x-www-form-urlencoded')\n    }\n    self.body = (typeof form === 'string')\n      ? self._qs.rfc3986(form.toString('utf8'))\n      : self._qs.stringify(form).toString('utf8')\n    return self\n  }\n  // form-data\n  var contentTypeMatch = contentType && contentType.match &&\n    contentType.match(/^multipart\\/form-data;.*boundary=(?:\"([^\"]+)\"|([^;]+))/)\n  var boundary = contentTypeMatch && (contentTypeMatch[1] || contentTypeMatch[2])\n  // create form-data object\n  // set custom boundary if present in content-type else auto-generate\n  self._form = new FormData({ _boundary: boundary })\n  self._form.on('error', function (err) {\n    err.message = 'form-data: ' + err.message\n    self.emit('error', err)\n    self.abort()\n  })\n  if (overrideInvalidContentType && !contentTypeMatch) {\n    // overrides invalid or missing content-type\n    self.setHeader('Content-Type', 'multipart/form-data; boundary=' + self._form.getBoundary())\n  }\n  return self._form\n}\nRequest.prototype.multipart = function (multipart) {\n  var self = this\n\n  self._multipart.onRequest(multipart)\n\n  if (!self._multipart.chunked) {\n    self.body = self._multipart.body\n  }\n\n  return self\n}\nRequest.prototype.json = function (val) {\n  var self = this\n\n  if (!self.hasHeader('accept')) {\n    self.setHeader('Accept', 'application/json')\n  }\n\n  if (typeof self.jsonReplacer === 'function') {\n    self._jsonReplacer = self.jsonReplacer\n  }\n\n  self._json = true\n  if (typeof val === 'boolean') {\n    if (self.body !== undefined) {\n      if (!/^application\\/x-www-form-urlencoded\\b/.test(self.getHeader('content-type'))) {\n        self.body = safeStringify(self.body, self._jsonReplacer)\n      } else {\n        self.body = self._qs.rfc3986(self.body)\n      }\n      if (!self.hasHeader('content-type')) {\n        self.setHeader('Content-Type', 'application/json')\n      }\n    }\n  } else {\n    self.body = safeStringify(val, self._jsonReplacer)\n    if (!self.hasHeader('content-type')) {\n      self.setHeader('Content-Type', 'application/json')\n    }\n  }\n\n  if (typeof self.jsonReviver === 'function') {\n    self._jsonReviver = self.jsonReviver\n  }\n\n  return self\n}\nRequest.prototype.getHeader = function (name, headers) {\n  var self = this\n  var result, re, match\n  if (!headers) {\n    headers = self.headers\n  }\n  Object.keys(headers).forEach(function (key) {\n    if (key.length !== name.length) {\n      return\n    }\n    re = new RegExp(name, 'i')\n    match = key.match(re)\n    if (match) {\n      result = headers[key]\n    }\n  })\n  return result\n}\nRequest.prototype.enableUnixSocket = function () {\n  // Get the socket & request paths from the URL\n  var unixParts = this.uri.path.split(':')\n  var host = unixParts[0]\n  var path = unixParts[1]\n  // Apply unix properties to request\n  this.socketPath = host\n  this.uri.pathname = path\n  this.uri.path = path\n  this.uri.host = host\n  this.uri.hostname = host\n  this.uri.isUnix = true\n}\n\nRequest.prototype.auth = function (user, pass, sendImmediately, bearer) {\n  var self = this\n\n  self._auth.onRequest(user, pass, sendImmediately, bearer)\n\n  return self\n}\nRequest.prototype.aws = function (opts, now) {\n  var self = this\n\n  if (!now) {\n    self._aws = opts\n    return self\n  }\n\n  if (opts.sign_version === 4 || opts.sign_version === '4') {\n    // use aws4\n    var options = {\n      host: self.uri.host,\n      path: self.uri.path,\n      method: self.method,\n      headers: self.headers,\n      body: self.body\n    }\n    if (opts.service) {\n      options.service = opts.service\n    }\n    var signRes = aws4.sign(options, {\n      accessKeyId: opts.key,\n      secretAccessKey: opts.secret,\n      sessionToken: opts.session\n    })\n    self.setHeader('Authorization', signRes.headers.Authorization)\n    self.setHeader('X-Amz-Date', signRes.headers['X-Amz-Date'])\n    if (signRes.headers['X-Amz-Security-Token']) {\n      self.setHeader('X-Amz-Security-Token', signRes.headers['X-Amz-Security-Token'])\n    }\n  } else {\n    // default: use aws-sign2\n    var date = new Date()\n    self.setHeader('Date', date.toUTCString())\n    var auth = {\n      key: opts.key,\n      secret: opts.secret,\n      verb: self.method.toUpperCase(),\n      date: date,\n      contentType: self.getHeader('content-type') || '',\n      md5: self.getHeader('content-md5') || '',\n      amazonHeaders: aws2.canonicalizeHeaders(self.headers)\n    }\n    var path = self.uri.path\n    if (opts.bucket && path) {\n      auth.resource = '/' + opts.bucket + path\n    } else if (opts.bucket && !path) {\n      auth.resource = '/' + opts.bucket\n    } else if (!opts.bucket && path) {\n      auth.resource = path\n    } else if (!opts.bucket && !path) {\n      auth.resource = '/'\n    }\n    auth.resource = aws2.canonicalizeResource(auth.resource)\n    self.setHeader('Authorization', aws2.authorization(auth))\n  }\n\n  return self\n}\nRequest.prototype.httpSignature = function (opts) {\n  var self = this\n  httpSignature.signRequest({\n    getHeader: function (header) {\n      return self.getHeader(header, self.headers)\n    },\n    setHeader: function (header, value) {\n      self.setHeader(header, value)\n    },\n    method: self.method,\n    path: self.path\n  }, opts)\n  debug('httpSignature authorization', self.getHeader('authorization'))\n\n  return self\n}\nRequest.prototype.hawk = function (opts) {\n  var self = this\n  self.setHeader('Authorization', hawk.header(self.uri, self.method, opts))\n}\nRequest.prototype.oauth = function (_oauth) {\n  var self = this\n\n  self._oauth.onRequest(_oauth)\n\n  return self\n}\n\nRequest.prototype.jar = function (jar, cb) {\n  var self = this\n  self._jar = jar\n\n  if (!jar) {\n    // disable cookies\n    self._disableCookies = true\n    return cb()\n  }\n\n  if (self._redirect.redirectsFollowed === 0) {\n    self.originalCookieHeader = self.getHeader('cookie')\n  }\n\n  var targetCookieJar = jar.getCookieString ? jar : globalCookieJar\n  // fetch cookie in the Specified host\n  targetCookieJar.getCookieString(self.uri, function (err, cookies) {\n    if (err) { return cb() }\n\n    // if need cookie and cookie is not empty\n    if (cookies && cookies.length) {\n      if (self.originalCookieHeader) {\n        if (Array.isArray(self.originalCookieHeader)) {\n          self.originalCookieHeader = self.originalCookieHeader.join('; ')\n        }\n        // Don't overwrite existing Cookie header\n        self.setHeader('Cookie', self.originalCookieHeader + '; ' + cookies)\n      } else {\n        self.setHeader('Cookie', cookies)\n      }\n    }\n\n    cb()\n  })\n}\n\n// Stream API\nRequest.prototype.pipe = function (dest, opts) {\n  var self = this\n\n  if (self.response) {\n    if (self._destdata) {\n      self.emit('error', new Error('You cannot pipe after data has been emitted from the response.'))\n    } else if (self._ended) {\n      self.emit('error', new Error('You cannot pipe after the response has been ended.'))\n    } else {\n      stream.Stream.prototype.pipe.call(self, dest, opts)\n      self.pipeDest(dest)\n      return dest\n    }\n  } else {\n    self.dests.push(dest)\n    stream.Stream.prototype.pipe.call(self, dest, opts)\n    return dest\n  }\n}\nRequest.prototype.write = function () {\n  var self = this\n  if (self._aborted) { return }\n\n  if (!self._started) {\n    self.start()\n  }\n  if (self.req) {\n    return self.req.write.apply(self.req, arguments)\n  }\n}\nRequest.prototype.end = function (chunk) {\n  var self = this\n  if (self._aborted) { return }\n\n  if (chunk) {\n    self.write(chunk)\n  }\n  if (!self._started) {\n    self.start()\n  }\n  if (self.req) {\n    self.req.end()\n\n    // Reference to request, so if _reqResInfo is updated (in case of redirects), we still can update the headers\n    const request = self._reqResInfo.request\n    Promise.resolve(self.req._header).then(function (header) {\n      if (!header) {\n        request.headers = []\n        return\n      }\n      request.headers = parseRequestHeaders(header)\n    })\n  }\n}\nRequest.prototype.pause = function () {\n  var self = this\n  if (!self.responseContent) {\n    self._paused = true\n  } else {\n    self.responseContent.pause.apply(self.responseContent, arguments)\n  }\n}\nRequest.prototype.resume = function () {\n  var self = this\n  if (!self.responseContent) {\n    self._paused = false\n  } else {\n    self.responseContent.resume.apply(self.responseContent, arguments)\n  }\n}\nRequest.prototype.destroy = function () {\n  var self = this\n  this.clearTimeout()\n  if (!self._ended) {\n    self.end()\n  } else if (self.response) {\n    self.response.destroy()\n  }\n}\n\nRequest.prototype.clearTimeout = function () {\n  if (this.timeoutTimer) {\n    clearTimeout(this.timeoutTimer)\n    this.timeoutTimer = null\n  }\n}\n\nRequest.defaultProxyHeaderWhiteList =\n  Tunnel.defaultProxyHeaderWhiteList.slice()\n\nRequest.defaultProxyHeaderExclusiveList =\n  Tunnel.defaultProxyHeaderExclusiveList.slice()\n\n// Exports\n\nRequest.prototype.toJSON = requestToJSON\nmodule.exports = Request\n","// Copyright 2010-2012 Mikeal Rogers\n//\n//    Licensed under the Apache License, Version 2.0 (the \"License\");\n//    you may not use this file except in compliance with the License.\n//    You may obtain a copy of the License at\n//\n//        http://www.apache.org/licenses/LICENSE-2.0\n//\n//    Unless required by applicable law or agreed to in writing, software\n//    distributed under the License is distributed on an \"AS IS\" BASIS,\n//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//    See the License for the specific language governing permissions and\n//    limitations under the License.\n\n'use strict'\n\nvar extend = require('extend')\nvar cookies = require('./lib/cookies')\n\n// organize params for patch, post, put, head, del\nfunction initParams (uri, options, callback) {\n  if (typeof options === 'function') {\n    callback = options\n  }\n\n  var params = {protocolVersion: 'http1'}\n\n  if (options !== null && typeof options === 'object') {\n    extend(params, options, {uri: uri})\n  } else if (typeof uri === 'string') {\n    extend(params, {uri: uri})\n  } else {\n    extend(params, uri)\n  }\n\n  params.callback = callback || params.callback\n\n  // Disable http/2 when using custom agents that don't handle different versions separately\n  if (params.agents && !(params.agents.http1 || params.agents.auto || params.agents.http2)) {\n    params.protocolVersion = 'http1'\n  }\n\n  // Disable http/2 when using proxy or tunnels\n  // TODO: Remove this when http2 supports proxy and tunneling\n  if (params.tunnel || params.proxy) {\n    params.protocolVersion = 'http1'\n  }\n\n  // Disable flow when running in browser\n  if (typeof window !== 'undefined' && window.XMLHttpRequest) {\n    params.protocolVersion = 'http1'\n  }\n\n  return params\n}\n\nfunction request (uri, options, callback) {\n  if (typeof uri === 'undefined') {\n    throw new Error('undefined is not a valid uri or options object.')\n  }\n\n  var params = initParams(uri, options, callback)\n\n  return new request.Request(params)\n}\n\nfunction verbFunc (verb) {\n  var method = verb.toUpperCase()\n  return function (uri, options, callback) {\n    var params = initParams(uri, options, callback)\n    params.method = method\n    return request(params, params.callback)\n  }\n}\n\n// define like this to please codeintel/intellisense IDEs\nrequest.get = verbFunc('get')\nrequest.head = verbFunc('head')\nrequest.options = verbFunc('options')\nrequest.post = verbFunc('post')\nrequest.put = verbFunc('put')\nrequest.patch = verbFunc('patch')\nrequest.del = verbFunc('delete')\nrequest['delete'] = verbFunc('delete')\n\nrequest.jar = function (store) {\n  return cookies.jar(store)\n}\n\nrequest.cookie = function (str) {\n  return cookies.parse(str)\n}\n\nfunction wrapRequestMethod (method, options, requester, verb) {\n  return function (uri, opts, callback) {\n    var params = initParams(uri, opts, callback)\n\n    var target = {}\n    extend(true, target, options, params)\n\n    target.pool = params.pool || options.pool\n\n    if (verb) {\n      target.method = verb.toUpperCase()\n    }\n\n    if (typeof requester === 'function') {\n      method = requester\n    }\n\n    return method(target, target.callback)\n  }\n}\n\nrequest.defaults = function (options, requester) {\n  var self = this\n\n  options = options || {}\n\n  if (typeof options === 'function') {\n    requester = options\n    options = {}\n  }\n\n  var defaults = wrapRequestMethod(self, options, requester)\n\n  var verbs = ['get', 'head', 'post', 'put', 'patch', 'del', 'delete']\n  verbs.forEach(function (verb) {\n    defaults[verb] = wrapRequestMethod(self[verb], options, requester, verb)\n  })\n\n  defaults.cookie = wrapRequestMethod(self.cookie, options, requester)\n  defaults.jar = self.jar\n  defaults.defaults = self.defaults\n  return defaults\n}\n\nrequest.forever = function (agentOptions, optionsArg) {\n  var options = {}\n  if (optionsArg) {\n    extend(options, optionsArg)\n  }\n  if (agentOptions) {\n    options.agentOptions = agentOptions\n  }\n\n  options.forever = true\n  return request.defaults(options)\n}\n\n// Exports\n\nmodule.exports = request\nrequest.Request = require('./request')\nrequest.initParams = initParams\n\n// Backwards compatibility for request.debug\nObject.defineProperty(request, 'debug', {\n  enumerable: true,\n  get: function () {\n    return request.Request.debug\n  },\n  set: function (debug) {\n    request.Request.debug = debug\n  }\n})\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _url = _interopRequireDefault(require(\"url\"));\n\n// Need to use require here for testing\n// eslint-disable-next-line no-underscore-dangle\nconst _request = require('postman-request');\n\nfunction request(uri, options) {\n  return new Promise((resolve, reject) => {\n    _request(uri, options, (err, httpResponse) => {\n      if (err) {\n        reject(err);\n      } else {\n        if (httpResponse.statusCode >= 400) {\n          reject(httpResponse.body);\n        } // for compatibility with request-promise\n\n\n        resolve(httpResponse.body);\n      }\n    });\n  });\n}\n/**\n * @name JiraApi\n * @class\n * Wrapper for the JIRA Rest Api\n * https://docs.atlassian.com/jira/REST/6.4.8/\n */\n\n\nclass JiraApi {\n  /**\n   * @constructor\n   * @function\n   * @param {JiraApiOptions} options\n   */\n  constructor(options) {\n    this.protocol = options.protocol || 'http';\n    this.host = options.host;\n    this.port = options.port || null;\n    this.apiVersion = options.apiVersion || '2';\n    this.base = options.base || '';\n    this.intermediatePath = options.intermediatePath;\n    this.strictSSL = options.hasOwnProperty('strictSSL') ? options.strictSSL : true; // This is so we can fake during unit tests\n\n    this.request = options.request || request;\n    this.webhookVersion = options.webHookVersion || '1.0';\n    this.greenhopperVersion = options.greenhopperVersion || '1.0';\n    this.baseOptions = {};\n\n    if (options.ca) {\n      this.baseOptions.ca = options.ca;\n    }\n\n    if (options.oauth && options.oauth.consumer_key && options.oauth.access_token) {\n      this.baseOptions.oauth = {\n        consumer_key: options.oauth.consumer_key,\n        consumer_secret: options.oauth.consumer_secret,\n        token: options.oauth.access_token,\n        token_secret: options.oauth.access_token_secret,\n        signature_method: options.oauth.signature_method || 'RSA-SHA1'\n      };\n    } else if (options.bearer) {\n      this.baseOptions.auth = {\n        user: '',\n        pass: '',\n        sendImmediately: true,\n        bearer: options.bearer\n      };\n    } else if (options.username && options.password) {\n      this.baseOptions.auth = {\n        user: options.username,\n        pass: options.password\n      };\n    }\n\n    if (options.timeout) {\n      this.baseOptions.timeout = options.timeout;\n    }\n  }\n  /**\n   * @typedef JiraApiOptions\n   * @type {object}\n   * @property {string} [protocol=http] - What protocol to use to connect to\n   * jira? Ex: http|https\n   * @property {string} host - What host is this tool connecting to for the jira\n   * instance? Ex: jira.somehost.com\n   * @property {string} [port] - What port is this tool connecting to jira with? Only needed for\n   * none standard ports. Ex: 8080, 3000, etc\n   * @property {string} [username] - Specify a username for this tool to authenticate all\n   * requests with.\n   * @property {string} [password] - Specify a password for this tool to authenticate all\n   * requests with. Cloud users need to generate an [API token](https://confluence.atlassian.com/cloud/api-tokens-938839638.html) for this value.\n   * @property {string} [apiVersion=2] - What version of the jira rest api is the instance the\n   * tool is connecting to?\n   * @property {string} [base] - What other url parts exist, if any, before the rest/api/\n   * section?\n   * @property {string} [intermediatePath] - If specified, overwrites the default rest/api/version\n   * section of the uri\n   * @property {boolean} [strictSSL=true] - Does this tool require each request to be\n   * authenticated?  Defaults to true.\n   * @property {function} [request] - What method does this tool use to make its requests?\n   * Defaults to request from request-promise\n   * @property {number} [timeout] - Integer containing the number of milliseconds to wait for a\n   * server to send response headers (and start the response body) before aborting the request. Note\n   * that if the underlying TCP connection cannot be established, the OS-wide TCP connection timeout\n   * will overrule the timeout option ([the default in Linux can be anywhere from 20-120 *\n   * seconds](http://www.sekuda.com/overriding_the_default_linux_kernel_20_second_tcp_socket_connect_timeout)).\n   * @property {string} [webhookVersion=1.0] - What webhook version does this api wrapper need to\n   * hit?\n   * @property {string} [greenhopperVersion=1.0] - What webhook version does this api wrapper need\n   * to hit?\n   * @property {string} [ca] - Specify a CA certificate\n   * @property {OAuth} [oauth] - Specify an OAuth object for this tool to authenticate all requests\n   * using OAuth.\n   * @property {string} [bearer] - Specify an OAuth bearer token to authenticate all requests with.\n   */\n\n  /**\n   * @typedef OAuth\n   * @type {object}\n   * @property {string} consumer_key - The consumer entered in Jira Preferences.\n   * @property {string} consumer_secret - The private RSA file.\n   * @property {string} access_token - The generated access token.\n   * @property {string} access_token_secret - The generated access toke secret.\n   * @property {string} signature_method [signature_method=RSA-SHA1] - OAuth signurate methode\n   * Possible values RSA-SHA1, HMAC-SHA1, PLAINTEXT. Jira Cloud supports only RSA-SHA1.\n   */\n\n  /**\n   *  @typedef {object} UriOptions\n   *  @property {string} pathname - The url after the specific functions path\n   *  @property {object} [query] - An object of all query parameters\n   *  @property {string} [intermediatePath] - Overwrites with specified path\n   */\n\n  /**\n   * @name makeRequestHeader\n   * @function\n   * Creates a requestOptions object based on the default template for one\n   * @param {string} uri\n   * @param {object} [options] - an object containing fields and formatting how the\n   */\n\n\n  makeRequestHeader(uri, options = {}) {\n    return {\n      rejectUnauthorized: this.strictSSL,\n      method: options.method || 'GET',\n      uri,\n      json: true,\n      ...options\n    };\n  }\n  /**\n   * @typedef makeRequestHeaderOptions\n   * @type {object}\n   * @property {string} [method] - HTTP Request Method. ie GET, POST, PUT, DELETE\n   */\n\n  /**\n   * @name makeUri\n   * @function\n   * Creates a URI object for a given pathname\n   * @param {object} [options] - an object containing path information\n   */\n\n\n  makeUri({\n    pathname,\n    query,\n    intermediatePath,\n    encode = false\n  }) {\n    const intermediateToUse = this.intermediatePath || intermediatePath;\n    const tempPath = intermediateToUse || `/rest/api/${this.apiVersion}`;\n\n    const uri = _url.default.format({\n      protocol: this.protocol,\n      hostname: this.host,\n      port: this.port,\n      pathname: `${this.base}${tempPath}${pathname}`,\n      query\n    });\n\n    return encode ? encodeURI(uri) : decodeURIComponent(uri);\n  }\n  /**\n   * @typedef makeUriOptions\n   * @type {object}\n   * @property {string} pathname - The url after the /rest/api/version\n   * @property {object} query - a query object\n   * @property {string} intermediatePath - If specified will overwrite the /rest/api/version section\n   */\n\n  /**\n   * @name makeWebhookUri\n   * @function\n   * Creates a URI object for a given pathName\n   * @param {object} [options] - An options object specifying uri information\n   */\n\n\n  makeWebhookUri({\n    pathname,\n    intermediatePath\n  }) {\n    const intermediateToUse = this.intermediatePath || intermediatePath;\n    const tempPath = intermediateToUse || `/rest/webhooks/${this.webhookVersion}`;\n\n    const uri = _url.default.format({\n      protocol: this.protocol,\n      hostname: this.host,\n      port: this.port,\n      pathname: `${this.base}${tempPath}${pathname}`\n    });\n\n    return decodeURIComponent(uri);\n  }\n  /**\n   * @typedef makeWebhookUriOptions\n   * @type {object}\n   * @property {string} pathname - The url after the /rest/webhooks\n   * @property {string} intermediatePath - If specified will overwrite the /rest/webhooks section\n   */\n\n  /**\n   * @name makeSprintQueryUri\n   * @function\n   * Creates a URI object for a given pathName\n   * @param {object} [options] - The url after the /rest/\n   */\n\n\n  makeSprintQueryUri({\n    pathname,\n    query,\n    intermediatePath\n  }) {\n    const intermediateToUse = this.intermediatePath || intermediatePath;\n    const tempPath = intermediateToUse || `/rest/greenhopper/${this.greenhopperVersion}`;\n\n    const uri = _url.default.format({\n      protocol: this.protocol,\n      hostname: this.host,\n      port: this.port,\n      pathname: `${this.base}${tempPath}${pathname}`,\n      query\n    });\n\n    return decodeURIComponent(uri);\n  }\n  /**\n   * @typedef makeSprintQueryUriOptions\n   * @type {object}\n   * @property {string} pathname - The url after the /rest/api/version\n   * @property {object} query - a query object\n   * @property {string} intermediatePath - will overwrite the /rest/greenhopper/version section\n   */\n\n  /**\n   * @typedef makeDevStatusUri\n   * @function\n   * Creates a URI object for a given pathname\n   * @arg {pathname, query, intermediatePath} obj1\n   * @param {string} pathname obj1.pathname - The url after the /rest/api/version\n   * @param {object} query obj1.query - a query object\n   * @param {string} intermediatePath obj1.intermediatePath - If specified will overwrite the\n   * /rest/dev-status/latest/issue/detail section\n   */\n\n\n  makeDevStatusUri({\n    pathname,\n    query,\n    intermediatePath\n  }) {\n    const intermediateToUse = this.intermediatePath || intermediatePath;\n    const tempPath = intermediateToUse || '/rest/dev-status/latest/issue';\n\n    const uri = _url.default.format({\n      protocol: this.protocol,\n      hostname: this.host,\n      port: this.port,\n      pathname: `${this.base}${tempPath}${pathname}`,\n      query\n    });\n\n    return decodeURIComponent(uri);\n  }\n  /**\n   * @name makeAgile1Uri\n   * @function\n   * Creates a URI object for a given pathname\n   * @param {UriOptions} object\n   */\n\n\n  makeAgileUri(object) {\n    const intermediateToUse = this.intermediatePath || object.intermediatePath;\n    const tempPath = intermediateToUse || '/rest/agile/1.0';\n\n    const uri = _url.default.format({\n      protocol: this.protocol,\n      hostname: this.host,\n      port: this.port,\n      pathname: `${this.base}${tempPath}${object.pathname}`,\n      query: object.query\n    });\n\n    return decodeURIComponent(uri);\n  }\n  /**\n   * @name doRequest\n   * @function\n   * Does a request based on the requestOptions object\n   * @param {object} requestOptions - fields on this object get posted as a request header for\n   * requests to jira\n   */\n\n\n  async doRequest(requestOptions) {\n    const options = { ...this.baseOptions,\n      ...requestOptions\n    };\n\n    try {\n      const response = await this.request(options);\n\n      if (response) {\n        if (Array.isArray(response.errorMessages) && response.errorMessages.length > 0) {\n          throw new Error(response.errorMessages.join(', '));\n        }\n      }\n\n      return response;\n    } catch (e) {\n      throw new Error(JSON.stringify(e));\n    }\n  }\n  /**\n   * @name findIssue\n   * @function\n   * Find an issue in jira\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id290709)\n   * @param {string} issueNumber - The issue number to search for including the project key\n   * @param {string} expand - The resource expansion to return additional fields in the response\n   * @param {string} fields - Comma separated list of field ids or keys to retrieve\n   * @param {string} properties - Comma separated list of properties to retrieve\n   * @param {boolean} fieldsByKeys - False by default, used to retrieve fields by key instead of id\n   */\n\n\n  findIssue(issueNumber, expand, fields, properties, fieldsByKeys) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueNumber}`,\n      query: {\n        expand: expand || '',\n        fields: fields || '*all',\n        properties: properties || '*all',\n        fieldsByKeys: fieldsByKeys || false\n      }\n    })));\n  }\n  /**\n   * @name downloadAttachment\n   * @function\n   * Download an attachment\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id288524)\n   * @param {object} attachment - the attachment\n   */\n\n\n  downloadAttachment(attachment) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/attachment/${attachment.id}/${attachment.filename}`,\n      intermediatePath: '/secure',\n      encode: true\n    }), {\n      json: false,\n      encoding: null\n    }));\n  }\n  /**\n   * @name deleteAttachment\n   * @function\n   * Remove the attachment\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-attachments/#api-rest-api-3-attachment-id-delete)\n   * @param {string} attachmentId - the attachment id\n   */\n\n\n  deleteAttachment(attachmentId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/attachment/${attachmentId}`\n    }), {\n      method: 'DELETE',\n      json: false,\n      encoding: null\n    }));\n  }\n  /**\n   * @name getUnresolvedIssueCount\n   * @function\n   * Get the unresolved issue count\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id288524)\n   * @param {string} version - the version of your product you want to find the unresolved\n   * issues of.\n   */\n\n\n  async getUnresolvedIssueCount(version) {\n    const requestHeaders = this.makeRequestHeader(this.makeUri({\n      pathname: `/version/${version}/unresolvedIssueCount`\n    }));\n    const response = await this.doRequest(requestHeaders);\n    return response.issuesUnresolvedCount;\n  }\n  /**\n   * @name getProject\n   * @function\n   * Get the Project by project key\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id289232)\n   * @param {string} project - key for the project\n   */\n\n\n  getProject(project) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/project/${project}`\n    })));\n  }\n  /**\n   * @name createProject\n   * @function\n   * Create a new Project\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#api/2/project-createProject)\n   * @param {object} project - with specs\n   */\n\n\n  createProject(project) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/project/'\n    }), {\n      method: 'POST',\n      body: project\n    }));\n  }\n  /** Find the Rapid View for a specified project\n   * @name findRapidView\n   * @function\n   * @param {string} projectName - name for the project\n   */\n\n\n  async findRapidView(projectName) {\n    const response = await this.doRequest(this.makeRequestHeader(this.makeSprintQueryUri({\n      pathname: '/rapidviews/list'\n    })));\n    if (typeof projectName === 'undefined' || projectName === null) return response.views;\n    const rapidViewResult = response.views.find(x => x.name.toLowerCase() === projectName.toLowerCase());\n    return rapidViewResult;\n  }\n  /** Get the most recent sprint for a given rapidViewId\n   * @name getLastSprintForRapidView\n   * @function\n   * @param {string} rapidViewId - the id for the rapid view\n   */\n\n\n  async getLastSprintForRapidView(rapidViewId) {\n    const response = await this.doRequest(this.makeRequestHeader(this.makeSprintQueryUri({\n      pathname: `/sprintquery/${rapidViewId}`\n    })));\n    return response.sprints.pop();\n  }\n  /** Get the issues for a rapidView / sprint\n   * @name getSprintIssues\n   * @function\n   * @param {string} rapidViewId - the id for the rapid view\n   * @param {string} sprintId - the id for the sprint\n   */\n\n\n  getSprintIssues(rapidViewId, sprintId) {\n    return this.doRequest(this.makeRequestHeader(this.makeSprintQueryUri({\n      pathname: '/rapid/charts/sprintreport',\n      query: {\n        rapidViewId,\n        sprintId\n      }\n    })));\n  }\n  /** Get a list of Sprints belonging to a Rapid View\n   * @name listSprints\n   * @function\n   * @param {string} rapidViewId - the id for the rapid view\n   */\n\n\n  listSprints(rapidViewId) {\n    return this.doRequest(this.makeRequestHeader(this.makeSprintQueryUri({\n      pathname: `/sprintquery/${rapidViewId}`\n    })));\n  }\n  /** Get details about a Sprint\n   * @name getSprint\n   * @function\n   * @param {string} sprintId - the id for the sprint view\n   */\n\n\n  getSprint(sprintId) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/sprint/${sprintId}`\n    })));\n  }\n  /** Add an issue to the project's current sprint\n   * @name addIssueToSprint\n   * @function\n   * @param {string} issueId - the id of the existing issue\n   * @param {string} sprintId - the id of the sprint to add it to\n   */\n\n\n  addIssueToSprint(issueId, sprintId) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/sprint/${sprintId}/issue`\n    }), {\n      method: 'POST',\n      body: {\n        issues: [issueId]\n      }\n    }));\n  }\n  /** Create an issue link between two issues\n   * @name issueLink\n   * @function\n   * @param {object} link - a link object formatted how the Jira API specifies\n   */\n\n\n  issueLink(link) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/issueLink'\n    }), {\n      method: 'POST',\n      followAllRedirects: true,\n      body: link\n    }));\n  }\n  /** List all issue link types jira knows about\n   * [Jira Doc](https://docs.atlassian.com/software/jira/docs/api/REST/8.5.0/#api/2/issueLinkType-getIssueLinkTypes)\n   * @name listIssueLinkTypes\n   * @function\n   */\n\n\n  listIssueLinkTypes() {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/issueLinkType'\n    })));\n  }\n  /** Retrieves the remote links associated with the given issue.\n   * @name getRemoteLinks\n   * @function\n   * @param {string} issueNumber - the issue number to find remote links for.\n   */\n\n\n  getRemoteLinks(issueNumber) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueNumber}/remotelink`\n    })));\n  }\n  /**\n   * @name createRemoteLink\n   * @function\n   * Creates a remote link associated with the given issue.\n   * @param {string} issueNumber - The issue number to create the remotelink under\n   * @param {object} remoteLink - the remotelink object as specified by the Jira API\n   */\n\n\n  createRemoteLink(issueNumber, remoteLink) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueNumber}/remotelink`\n    }), {\n      method: 'POST',\n      body: remoteLink\n    }));\n  }\n  /**\n   * @name deleteRemoteLink\n   * @function\n   * Delete a remote link with given issueNumber and id\n   * @param {string} issueNumber - The issue number to delete the remotelink under\n   * @param {string} id the remotelink id\n   */\n\n\n  deleteRemoteLink(issueNumber, id) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueNumber}/remotelink/${id}`\n    }), {\n      method: 'DELETE',\n      followAllRedirects: true\n    }));\n  }\n  /** Get Versions for a project\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id289653)\n   * @name getVersions\n   * @function\n   * @param {string} project - A project key to get versions for\n   * @param {object} query - An object containing the query params\n   */\n\n\n  getVersions(project, query = {}) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/project/${project}/versions`,\n      query\n    })));\n  }\n  /** Get details of single Version in project\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/cloud/#api/2/version-getVersion)\n   * @name getVersion\n   * @function\n   * @param {string} version - The id of this version\n   */\n\n\n  getVersion(version) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/version/${version}`\n    })));\n  }\n  /** Create a version\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id288232)\n   * @name createVersion\n   * @function\n   * @param {object} version - an object of the new version\n   */\n\n\n  createVersion(version) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/version'\n    }), {\n      method: 'POST',\n      followAllRedirects: true,\n      body: version\n    }));\n  }\n  /** Update a version\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#d2e510)\n   * @name updateVersion\n   * @function\n   * @param {object} version - an new object of the version to update\n   */\n\n\n  updateVersion(version) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/version/${version.id}`\n    }), {\n      method: 'PUT',\n      followAllRedirects: true,\n      body: version\n    }));\n  }\n  /** Delete a version\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#api/2/version-delete)\n   * @name deleteVersion\n   * @function\n   * @param {string} versionId - the ID of the version to delete\n   * @param {string} moveFixIssuesToId - when provided, existing fixVersions will be moved\n   *                 to this ID. Otherwise, the deleted version will be removed from all\n   *                 issue fixVersions.\n   * @param {string} moveAffectedIssuesToId - when provided, existing affectedVersions will\n   *                 be moved to this ID. Otherwise, the deleted version will be removed\n   *                 from all issue affectedVersions.\n   */\n\n\n  deleteVersion(versionId, moveFixIssuesToId, moveAffectedIssuesToId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/version/${versionId}`\n    }), {\n      method: 'DELETE',\n      followAllRedirects: true,\n      qs: {\n        moveFixIssuesTo: moveFixIssuesToId,\n        moveAffectedIssuesTo: moveAffectedIssuesToId\n      }\n    }));\n  }\n  /** Move version\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/cloud/#api/2/version-moveVersion)\n   * @name moveVersion\n   * @function\n   * @param {string} versionId - the ID of the version to delete\n   * @param {string} position - an object of the new position\n   */\n\n\n  moveVersion(versionId, position) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/version/${versionId}/move`\n    }), {\n      method: 'POST',\n      followAllRedirects: true,\n      body: position\n    }));\n  }\n  /** Pass a search query to Jira\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#d2e4424)\n   * @name searchJira\n   * @function\n   * @param {string} searchString - jira query string in JQL\n   * @param {object} optional - object containing any of the following properties\n   * @param {integer} [optional.startAt=0]: optional starting index number\n   * @param {integer} [optional.maxResults=50]: optional The maximum number of items to\n   *                  return per page. To manage page size, Jira may return fewer items per\n   *                  page where a large number of fields are requested.\n   * @param {array} [optional.fields]: optional array of string names of desired fields\n   * @param {array} [optional.expand]: optional array of string names of desired expand nodes\n   */\n\n\n  searchJira(searchString, optional = {}) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/search'\n    }), {\n      method: 'POST',\n      followAllRedirects: true,\n      body: {\n        jql: searchString,\n        ...optional\n      }\n    }));\n  }\n  /** Create a Jira user\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/cloud/#api/2/user-createUser)\n   * @name createUser\n   * @function\n   * @param {object} user - Properly Formatted User object\n   */\n\n\n  createUser(user) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/user'\n    }), {\n      method: 'POST',\n      followAllRedirects: true,\n      body: user\n    }));\n  }\n  /** Search user on Jira\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#d2e3756)\n   * @name searchUsers\n   * @function\n   * @param {SearchUserOptions} options\n   */\n\n\n  searchUsers({\n    username,\n    query,\n    startAt,\n    maxResults,\n    includeActive,\n    includeInactive\n  }) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/user/search',\n      query: {\n        username,\n        query,\n        startAt: startAt || 0,\n        maxResults: maxResults || 50,\n        includeActive: includeActive || true,\n        includeInactive: includeInactive || false\n      }\n    }), {\n      followAllRedirects: true\n    }));\n  }\n  /**\n   * @typedef SearchUserOptions\n   * @type {object}\n   * @property {string} username - (DEPRECATED) A query string used to search username, name or\n   * e-mail address\n   * @property {string} query - A query string that is matched against user attributes\n   * (displayName, and emailAddress) to find relevant users. The string can match the prefix of\n   * the attribute's value. For example, query=john matches a user with a displayName of John\n   * Smith and a user with an emailAddress of johnson@example.com. Required, unless accountId\n   * or property is specified.\n   * @property {integer} [startAt=0] - The index of the first user to return (0-based)\n   * @property {integer} [maxResults=50] - The maximum number of users to return\n   * @property {boolean} [includeActive=true] - If true, then active users are included\n   * in the results\n   * @property {boolean} [includeInactive=false] - If true, then inactive users\n   * are included in the results\n   */\n\n  /** Get all users in group on Jira\n   * @name getUsersInGroup\n   * @function\n   * @param {string} groupname - A query string used to search users in group\n   * @param {integer} [startAt=0] - The index of the first user to return (0-based)\n   * @param {integer} [maxResults=50] - The maximum number of users to return (defaults to 50).\n   * @deprecated\n   */\n\n\n  getUsersInGroup(groupname, startAt = 0, maxResults = 50) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/group',\n      query: {\n        groupname,\n        expand: `users[${startAt}:${maxResults}]`\n      }\n    }), {\n      followAllRedirects: true\n    }));\n  }\n  /** Get all members of group on Jira\n   * @name getMembersOfGroup\n   * @function\n   * @param {string} groupname - A query string used to search users in group\n   * @param {integer} [startAt=0] - The index of the first user to return (0-based)\n   * @param {integer} [maxResults=50] - The maximum number of users to return (defaults to 50).\n   * @param {boolean} [includeInactiveUsers=false] - Fetch inactive users too (defaults to false).\n   */\n\n\n  getMembersOfGroup(groupname, startAt = 0, maxResults = 50, includeInactiveUsers = false) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/group/member',\n      query: {\n        groupname,\n        expand: `users[${startAt}:${maxResults}]`,\n        includeInactiveUsers\n      }\n    }), {\n      followAllRedirects: true\n    }));\n  }\n  /** Get issues related to a user\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id296043)\n   * @name getUsersIssues\n   * @function\n   * @param {string} username - username of user to search for\n   * @param {boolean} open - determines if only open issues should be returned\n   */\n\n\n  getUsersIssues(username, open) {\n    const openJql = open ? ' AND status in (Open, \\'In Progress\\', Reopened)' : '';\n    return this.searchJira(`assignee = ${username.replace('@', '\\\\u0040')}${openJql}`, {});\n  }\n  /** Returns a user.\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-user-get)\n   * @name getUser\n   * @function\n   * @param {string} accountId - The accountId of user to search for\n   * @param {string} expand - The expand for additional info (groups,applicationRoles)\n   */\n\n\n  getUser(accountId, expand) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/user',\n      query: {\n        accountId,\n        expand\n      }\n    })));\n  }\n  /** Returns a list of all (active and inactive) users.\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-users-search-get)\n   * @name getUsers\n   * @function\n   * @param {integer} [startAt=0] - The index of the first user to return (0-based)\n   * @param {integer} [maxResults=50] - The maximum number of users to return (defaults to 50).\n   */\n\n\n  getUsers(startAt = 0, maxResults = 100) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/users',\n      query: {\n        startAt,\n        maxResults\n      }\n    })));\n  }\n  /** Add issue to Jira\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id290028)\n   * @name addNewIssue\n   * @function\n   * @param {object} issue - Properly Formatted Issue object\n   */\n\n\n  addNewIssue(issue) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/issue'\n    }), {\n      method: 'POST',\n      followAllRedirects: true,\n      body: issue\n    }));\n  }\n  /** Add a user as a watcher on an issue\n   * @name addWatcher\n   * @function\n   * @param {string} issueKey - the key of the existing issue\n   * @param {string} username - the jira username to add as a watcher to the issue\n   */\n\n\n  addWatcher(issueKey, username) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueKey}/watchers`\n    }), {\n      method: 'POST',\n      followAllRedirects: true,\n      body: username\n    }));\n  }\n  /** Change an assignee on an issue\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/cloud/#api/2/issue-assign)\n   * @name assignee\n   * @function\n   * @param {string} issueKey - the key of the existing issue\n   * @param {string} assigneeName - the jira username to add as a new assignee to the issue\n   */\n\n\n  updateAssignee(issueKey, assigneeName) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueKey}/assignee`\n    }), {\n      method: 'PUT',\n      followAllRedirects: true,\n      body: {\n        name: assigneeName\n      }\n    }));\n  }\n  /** Change an assignee on an issue\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-issue-issueIdOrKey-assignee-put)\n   * @name updateAssigneeWithId\n   * @function\n   * @param {string} issueKey - the key of the existing issue\n   * @param {string} userId - the jira username to add as a new assignee to the issue\n   */\n\n\n  updateAssigneeWithId(issueKey, userId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueKey}/assignee`\n    }), {\n      method: 'PUT',\n      followAllRedirects: true,\n      body: {\n        accountId: userId\n      }\n    }));\n  }\n  /** Delete issue from Jira\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id290791)\n   * @name deleteIssue\n   * @function\n   * @param {string} issueId - the Id of the issue to delete\n   */\n\n\n  deleteIssue(issueId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}`\n    }), {\n      method: 'DELETE',\n      followAllRedirects: true\n    }));\n  }\n  /** Update issue in Jira\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id290878)\n   * @name updateIssue\n   * @function\n   * @param {string} issueId - the Id of the issue to update\n   * @param {object} issueUpdate - update Object as specified by the rest api\n   * @param {object} query - adds parameters to the query string\n   */\n\n\n  updateIssue(issueId, issueUpdate, query = {}) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}`,\n      query\n    }), {\n      body: issueUpdate,\n      method: 'PUT',\n      followAllRedirects: true\n    }));\n  }\n  /** List Components\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id290489)\n   * @name listComponents\n   * @function\n   * @param {string} project - key for the project\n   */\n\n\n  listComponents(project) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/project/${project}/components`\n    })));\n  }\n  /** Add component to Jira\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id290028)\n   * @name addNewComponent\n   * @function\n   * @param {object} component - Properly Formatted Component\n   */\n\n\n  addNewComponent(component) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/component'\n    }), {\n      method: 'POST',\n      followAllRedirects: true,\n      body: component\n    }));\n  }\n  /** Update Jira component\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#api/2/component-updateComponent)\n   * @name updateComponent\n   * @function\n   * @param {string} componentId - the Id of the component to update\n   * @param {object} component - Properly Formatted Component\n   */\n\n\n  updateComponent(componentId, component) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/component/${componentId}`\n    }), {\n      method: 'PUT',\n      followAllRedirects: true,\n      body: component\n    }));\n  }\n  /** Delete component from Jira\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-api-2-component-id-delete)\n   * @name deleteComponent\n   * @function\n   * @param {string} id - The ID of the component.\n   * @param {string} moveIssuesTo - The ID of the component to replace the deleted component.\n   *                                If this value is null no replacement is made.\n   */\n\n\n  deleteComponent(id, moveIssuesTo) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/component/${id}`\n    }), {\n      method: 'DELETE',\n      followAllRedirects: true,\n      qs: moveIssuesTo ? {\n        moveIssuesTo\n      } : null\n    }));\n  }\n  /** Get count of issues assigned to the component.\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-component-id-relatedIssueCounts-get)\n   * @name relatedIssueCounts\n   * @function\n   * @param {string} id - Component Id.\n   */\n\n\n  relatedIssueCounts(id) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/component/${id}/relatedIssueCounts`\n    })));\n  }\n  /** Create custom Jira field\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#api/2/field-createCustomField)\n   * @name createCustomField\n   * @function\n   * @param {object} field - Properly formatted Field object\n   */\n\n\n  createCustomField(field) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/field'\n    }), {\n      method: 'POST',\n      followAllRedirects: true,\n      body: field\n    }));\n  }\n  /** List all fields custom and not that jira knows about.\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id290489)\n   * @name listFields\n   * @function\n   */\n\n\n  listFields() {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/field'\n    })));\n  }\n  /** Add an option for a select list issue field.\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#api/2/field/{fieldKey}/option-createOption)\n   * @name createFieldOption\n   * @function\n   * @param {string} fieldKey - the key of the select list field\n   * @param {object} option - properly formatted Option object\n   */\n\n\n  createFieldOption(fieldKey, option) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/field/${fieldKey}/option`\n    }), {\n      method: 'POST',\n      followAllRedirects: true,\n      body: option\n    }));\n  }\n  /** Returns all options defined for a select list issue field.\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#api/2/field/{fieldKey}/option-getAllOptions)\n   * @name listFieldOptions\n   * @function\n   * @param {string} fieldKey - the key of the select list field\n   */\n\n\n  listFieldOptions(fieldKey) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/field/${fieldKey}/option`\n    })));\n  }\n  /** Creates or updates an option for a select list issue field.\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#api/2/field/{fieldKey}/option-putOption)\n   * @name upsertFieldOption\n   * @function\n   * @param {string} fieldKey - the key of the select list field\n   * @param {string} optionId - the id of the modified option\n   * @param {object} option - properly formatted Option object\n   */\n\n\n  upsertFieldOption(fieldKey, optionId, option) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/field/${fieldKey}/option/${optionId}`\n    }), {\n      method: 'PUT',\n      followAllRedirects: true,\n      body: option\n    }));\n  }\n  /** Returns an option for a select list issue field.\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#api/2/field/{fieldKey}/option-getOption)\n   * @name getFieldOption\n   * @function\n   * @param {string} fieldKey - the key of the select list field\n   * @param {string} optionId - the id of the option\n   */\n\n\n  getFieldOption(fieldKey, optionId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/field/${fieldKey}/option/${optionId}`\n    })));\n  }\n  /** Deletes an option from a select list issue field.\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#api/2/field/{fieldKey}/option-delete)\n   * @name deleteFieldOption\n   * @function\n   * @param {string} fieldKey - the key of the select list field\n   * @param {string} optionId - the id of the deleted option\n   */\n\n\n  deleteFieldOption(fieldKey, optionId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/field/${fieldKey}/option/${optionId}`\n    }), {\n      method: 'DELETE',\n      followAllRedirects: true\n    }));\n  }\n  /**\n   * @name getIssueProperty\n   * @function\n   * Get Property of Issue by Issue and Property Id\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/cloud/#api/2/issue/{issueIdOrKey}/properties-getProperty)\n   * @param {string} issueNumber - The issue number to search for including the project key\n   * @param {string} property - The property key to search for\n   */\n\n\n  getIssueProperty(issueNumber, property) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueNumber}/properties/${property}`\n    })));\n  }\n  /**\n   * @name getIssueChangelog\n   * @function\n   * List all changes for an issue, sorted by date, starting from the latest\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/cloud/#api/2/issue/{issueIdOrKey}/changelog)\n   * @param {string} issueNumber - The issue number to search for including the project key\n   * @param {integer} [startAt=0] - optional starting index number\n   * @param {integer} [maxResults=50] - optional ending index number\n   */\n\n\n  getIssueChangelog(issueNumber, startAt = 0, maxResults = 50) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueNumber}/changelog`,\n      query: {\n        startAt,\n        maxResults\n      }\n    })));\n  }\n  /**\n   * @name getIssueWatchers\n   * @function\n   * List all watchers for an issue\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/cloud/#api/2/issue-getIssueWatchers)\n   * @param {string} issueNumber - The issue number to search for including the project key\n   */\n\n\n  getIssueWatchers(issueNumber) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueNumber}/watchers`\n    })));\n  }\n  /** List all priorities jira knows about\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id290489)\n   * @name listPriorities\n   * @function\n   */\n\n\n  listPriorities() {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/priority'\n    })));\n  }\n  /** List Transitions for a specific issue that are available to the current user\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id290489)\n   * @name listTransitions\n   * @function\n   * @param {string} issueId - get transitions available for the issue\n   */\n\n\n  listTransitions(issueId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/transitions`,\n      query: {\n        expand: 'transitions.fields'\n      }\n    })));\n  }\n  /** Transition issue in Jira\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id290489)\n   * @name transitionsIssue\n   * @function\n   * @param {string} issueId - the Id of the issue to delete\n   * @param {object} issueTransition - transition object from the jira rest API\n   */\n\n\n  transitionIssue(issueId, issueTransition) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/transitions`\n    }), {\n      body: issueTransition,\n      method: 'POST',\n      followAllRedirects: true\n    }));\n  }\n  /** List all Viewable Projects\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id289193)\n   * @name listProjects\n   * @function\n   */\n\n\n  listProjects() {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/project'\n    })));\n  }\n  /** Add a comment to an issue\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#id108798)\n   * @name addComment\n   * @function\n   * @param {string} issueId - Issue to add a comment to\n   * @param {string} comment - string containing comment\n   */\n\n\n  addComment(issueId, comment) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/comment`\n    }), {\n      body: {\n        body: comment\n      },\n      method: 'POST',\n      followAllRedirects: true\n    }));\n  }\n  /** Add a comment to an issue, supports full comment object\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#id108798)\n   * @name addCommentAdvanced\n   * @function\n   * @param {string} issueId - Issue to add a comment to\n   * @param {object} comment - The object containing your comment data\n   */\n\n\n  addCommentAdvanced(issueId, comment) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/comment`\n    }), {\n      body: comment,\n      method: 'POST',\n      followAllRedirects: true\n    }));\n  }\n  /** Update comment for an issue\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/cloud/#api/2/issue-updateComment)\n   * @name updateComment\n   * @function\n   * @param {string} issueId - Issue with the comment\n   * @param {string} commentId - Comment that is updated\n   * @param {string} comment - string containing new comment\n   * @param {object} [options={}] - extra options\n   */\n\n\n  updateComment(issueId, commentId, comment, options = {}) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/comment/${commentId}`\n    }), {\n      body: {\n        body: comment,\n        ...options\n      },\n      method: 'PUT',\n      followAllRedirects: true\n    }));\n  }\n  /**\n   * @name getComments\n   * @function\n   * Get Comments by IssueId.\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-comment-list-post)\n   * @param {string} issueId - this issue this comment is on\n   */\n\n\n  getComments(issueId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/comment`\n    })));\n  }\n  /**\n   * @name getComment\n   * @function\n   * Get Comment by Id.\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-comment-list-post)\n   * @param {string} issueId - this issue this comment is on\n   * @param {number} commentId - the id of the comment\n   */\n\n\n  getComment(issueId, commentId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/comment/${commentId}`\n    })));\n  }\n  /**\n   * @name deleteComment\n   * @function\n   * Delete Comments by Id.\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-comment-list-post)\n   * @param {string} issueId - this issue this comment is on\n   * @param {number} commentId - the id of the comment\n   */\n\n\n  deleteComment(issueId, commentId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/comment/${commentId}`\n    }), {\n      method: 'DELETE',\n      followAllRedirects: true\n    }));\n  }\n  /** Add a worklog to a project\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id291617)\n   * @name addWorklog\n   * @function\n   * @param {string} issueId - Issue to add a worklog to\n   * @param {object} worklog - worklog object from the rest API\n   * @param {object} newEstimate - the new value for the remaining estimate field\n   * @param {object} [options={}] - extra options\n   */\n\n\n  addWorklog(issueId, worklog, newEstimate = null, options = {}) {\n    const query = {\n      adjustEstimate: newEstimate ? 'new' : 'auto',\n      ...(newEstimate ? {\n        newEstimate\n      } : {}),\n      ...options\n    };\n    const header = {\n      uri: this.makeUri({\n        pathname: `/issue/${issueId}/worklog`,\n        query\n      }),\n      body: worklog,\n      method: 'POST',\n      'Content-Type': 'application/json',\n      json: true\n    };\n    return this.doRequest(header);\n  }\n  /** Get ids of worklogs modified since\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/cloud/#api/2/worklog-getWorklogsForIds)\n   * @name updatedWorklogs\n   * @function\n   * @param {number} since - a date time in unix timestamp format since when updated worklogs\n   * will be returned.\n   * @param {string} expand - ptional comma separated list of parameters to expand: properties\n   * (provides worklog properties).\n   */\n\n\n  updatedWorklogs(since, expand) {\n    const header = {\n      uri: this.makeUri({\n        pathname: '/worklog/updated',\n        query: {\n          since,\n          expand\n        }\n      }),\n      method: 'GET',\n      'Content-Type': 'application/json',\n      json: true\n    };\n    return this.doRequest(header);\n  }\n  /** Delete worklog from issue\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#d2e1673)\n   * @name deleteWorklog\n   * @function\n   * @param {string} issueId - the Id of the issue to delete\n   * @param {string} worklogId - the Id of the worklog in issue to delete\n   */\n\n\n  deleteWorklog(issueId, worklogId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/worklog/${worklogId}`\n    }), {\n      method: 'DELETE',\n      followAllRedirects: true\n    }));\n  }\n  /** Update worklog from issue\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issue-worklogs/#api-rest-api-2-issue-issueidorkey-worklog-id-put)\n   * @name updateWorklog\n   * @function\n   * @param {string} issueId - the Id of the issue to update\n   * @param {string} worklogId - the Id of the worklog in issue to update\n   * @param {string} body - value to set\n   */\n\n\n  updateWorklog(issueId, worklogId, body) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/worklog/${worklogId}`\n    }), {\n      method: 'PUT',\n      body,\n      followAllRedirects: true\n    }));\n  }\n  /** Deletes an issue link.\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-issueLink-linkId-delete)\n   * @name deleteIssueLink\n   * @function\n   * @param {string} linkId - the Id of the issue link to delete\n   */\n\n\n  deleteIssueLink(linkId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issueLink/${linkId}`\n    }), {\n      method: 'DELETE',\n      followAllRedirects: true\n    }));\n  }\n  /** Returns worklog details for a list of worklog IDs.\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-worklog-list-post)\n   * @name getWorklogs\n   * @function\n   * @param {array} worklogsIDs - a list of worklog IDs.\n   * @param {string} expand - expand to include additional information about worklogs\n   *\n   */\n\n\n  getWorklogs(worklogsIDs, expand) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/worklog/list',\n      query: {\n        expand\n      }\n    }), {\n      method: 'POST',\n      body: {\n        ids: worklogsIDs\n      }\n    }));\n  }\n  /** Get worklogs list from a given issue\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-api-3-issue-issueIdOrKey-worklog-get)\n   * @name getIssueWorklogs\n   * @function\n   * @param {string} issueId - the Id of the issue to find worklogs for\n   * @param {integer} [startAt=0] - optional starting index number\n   * @param {integer} [maxResults=1000] - optional ending index number\n   */\n\n\n  getIssueWorklogs(issueId, startAt = 0, maxResults = 1000) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/worklog`,\n      query: {\n        startAt,\n        maxResults\n      }\n    })));\n  }\n  /** List all Issue Types jira knows about\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id295946)\n   * @name listIssueTypes\n   * @function\n   */\n\n\n  listIssueTypes() {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/issuetype'\n    })));\n  }\n  /** Register a webhook\n   * [Jira Doc](https://developer.atlassian.com/display/JIRADEV/JIRA+Webhooks+Overview)\n   * @name registerWebhook\n   * @function\n   * @param {object} webhook - properly formatted webhook\n   */\n\n\n  registerWebhook(webhook) {\n    return this.doRequest(this.makeRequestHeader(this.makeWebhookUri({\n      pathname: '/webhook'\n    }), {\n      method: 'POST',\n      body: webhook\n    }));\n  }\n  /** List all registered webhooks\n   * [Jira Doc](https://developer.atlassian.com/display/JIRADEV/JIRA+Webhooks+Overview)\n   * @name listWebhooks\n   * @function\n   */\n\n\n  listWebhooks() {\n    return this.doRequest(this.makeRequestHeader(this.makeWebhookUri({\n      pathname: '/webhook'\n    })));\n  }\n  /** Get a webhook by its ID\n   * [Jira Doc](https://developer.atlassian.com/display/JIRADEV/JIRA+Webhooks+Overview)\n   * @name getWebhook\n   * @function\n   * @param {string} webhookID - id of webhook to get\n   */\n\n\n  getWebhook(webhookID) {\n    return this.doRequest(this.makeRequestHeader(this.makeWebhookUri({\n      pathname: `/webhook/${webhookID}`\n    })));\n  }\n  /** Delete a registered webhook\n   * [Jira Doc](https://developer.atlassian.com/display/JIRADEV/JIRA+Webhooks+Overview)\n   * @name issueLink\n   * @function\n   * @param {string} webhookID - id of the webhook to delete\n   */\n\n\n  deleteWebhook(webhookID) {\n    return this.doRequest(this.makeRequestHeader(this.makeWebhookUri({\n      pathname: `/webhook/${webhookID}`\n    }), {\n      method: 'DELETE'\n    }));\n  }\n  /** Describe the currently authenticated user\n   * [Jira Doc](http://docs.atlassian.com/jira/REST/latest/#id2e865)\n   * @name getCurrentUser\n   * @function\n   */\n\n\n  getCurrentUser() {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/myself'\n    })));\n  }\n  /** Retrieve the backlog of a certain Rapid View\n   * @name getBacklogForRapidView\n   * @function\n   * @param {string} rapidViewId - rapid view id\n   */\n\n\n  getBacklogForRapidView(rapidViewId) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/xboard/plan/backlog/data',\n      query: {\n        rapidViewId\n      }\n    })));\n  }\n  /** Add attachment to a Issue\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#api/2/issue/{issueIdOrKey}/attachments-addAttachment)\n   * @name addAttachmentOnIssue\n   * @function\n   * @param {string} issueId - issue id\n   * @param {object} readStream - readStream object from fs\n   */\n\n\n  addAttachmentOnIssue(issueId, readStream) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/attachments`\n    }), {\n      method: 'POST',\n      headers: {\n        'X-Atlassian-Token': 'nocheck'\n      },\n      formData: {\n        file: readStream\n      }\n    }));\n  }\n  /** Notify people related to issue\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/cloud/#api/2/issue-notify)\n   * @name issueNotify\n   * @function\n   * @param {string} issueId - issue id\n   * @param {object} notificationBody - properly formatted body\n   */\n\n\n  issueNotify(issueId, notificationBody) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/issue/${issueId}/notify`\n    }), {\n      method: 'POST',\n      body: notificationBody\n    }));\n  }\n  /** Get list of possible statuses\n   * [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#api/2/status-getStatuses)\n   * @name listStatus\n   * @function\n   */\n\n\n  listStatus() {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/status'\n    })));\n  }\n  /** Get a Dev-Status summary by issue ID\n   * @name getDevStatusSummary\n   * @function\n   * @param {string} issueId - id of issue to get\n   */\n\n\n  getDevStatusSummary(issueId) {\n    return this.doRequest(this.makeRequestHeader(this.makeDevStatusUri({\n      pathname: '/summary',\n      query: {\n        issueId\n      }\n    })));\n  }\n  /** Get a Dev-Status detail by issue ID\n   * @name getDevStatusDetail\n   * @function\n   * @param {string} issueId - id of issue to get\n   * @param {string} applicationType - type of application (stash, bitbucket)\n   * @param {string} dataType - info to return (repository, pullrequest)\n   */\n\n\n  getDevStatusDetail(issueId, applicationType, dataType) {\n    return this.doRequest(this.makeRequestHeader(this.makeDevStatusUri({\n      pathname: '/detail',\n      query: {\n        issueId,\n        applicationType,\n        dataType\n      }\n    })));\n  }\n  /** Get issue\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/issue-getIssue)\n   * @name getIssue\n   * @function\n   * @param {string} issueIdOrKey - Id of issue\n   * @param {string} [fields] - The list of fields to return for each issue.\n   * @param {string} [expand] - A comma-separated list of the parameters to expand.\n   */\n\n\n  getIssue(issueIdOrKey, fields, expand) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/issue/${issueIdOrKey}`,\n      query: {\n        fields,\n        expand\n      }\n    })));\n  }\n  /** Move issues to backlog\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/backlog-moveIssuesToBacklog)\n   * @name moveToBacklog\n   * @function\n   * @param {array} issues - id or key of issues to get\n   */\n\n\n  moveToBacklog(issues) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: '/backlog/issue'\n    }), {\n      method: 'POST',\n      body: {\n        issues\n      }\n    }));\n  }\n  /** Get all boards\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board-getAllBoards)\n   * @name getAllBoards\n   * @function\n   * @param {number} [startAt=0] - The starting index of the returned boards.\n   * @param {number} [maxResults=50] - The maximum number of boards to return per page.\n   * @param {string} [type] - Filters results to boards of the specified type.\n   * @param {string} [name] - Filters results to boards that match the specified name.\n   * @param {string} [projectKeyOrId] - Filters results to boards that are relevant to a project.\n   */\n\n\n  getAllBoards(startAt = 0, maxResults = 50, type, name, projectKeyOrId) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: '/board',\n      query: {\n        startAt,\n        maxResults,\n        type,\n        name,\n        ...(projectKeyOrId && {\n          projectKeyOrId\n        })\n      }\n    })));\n  }\n  /** Create Board\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board-createBoard)\n   * @name createBoard\n   * @function\n   * @param {object} boardBody - Board name, type and filter Id is required.\n   * @param {string} boardBody.type - Valid values: scrum, kanban\n   * @param {string} boardBody.name - Must be less than 255 characters.\n   * @param {string} boardBody.filterId - Id of a filter that the user has permissions to view.\n   */\n\n\n  createBoard(boardBody) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: '/board'\n    }), {\n      method: 'POST',\n      body: boardBody\n    }));\n  }\n  /** Get Board\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board-getBoard)\n   * @name getBoard\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   */\n\n\n  getBoard(boardId) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}`\n    })));\n  }\n  /** Delete Board\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board-deleteBoard)\n   * @name deleteBoard\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   */\n\n\n  deleteBoard(boardId) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}`\n    }), {\n      method: 'DELETE'\n    }));\n  }\n  /** Get issues for backlog\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board-getIssuesForBacklog)\n   * @name getIssuesForBacklog\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   * @param {number} [startAt=0] - The starting index of the returned issues. Base index: 0.\n   * @param {number} [maxResults=50] - The maximum number of issues to return per page. Default: 50.\n   * @param {string} [jql] - Filters results using a JQL query.\n   * @param {boolean} [validateQuery] - Specifies whether to validate the JQL query or not.\n   * Default: true.\n   * @param {string} [fields] - The list of fields to return for each issue.\n   */\n\n\n  getIssuesForBacklog(boardId, startAt = 0, maxResults = 50, jql, validateQuery = true, fields) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/backlog`,\n      query: {\n        startAt,\n        maxResults,\n        jql,\n        validateQuery,\n        fields\n      }\n    })));\n  }\n  /** Get Configuration\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board-getConfiguration)\n   * @name getConfiguration\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   */\n\n\n  getConfiguration(boardId) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/configuration`\n    })));\n  }\n  /** Get issues for board\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board-getIssuesForBoard)\n   * @name getIssuesForBoard\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   * @param {number} [startAt=0] - The starting index of the returned issues. Base index: 0.\n   * @param {number} [maxResults=50] - The maximum number of issues to return per page. Default: 50.\n   * @param {string} [jql] - Filters results using a JQL query.\n   * @param {boolean} [validateQuery] - Specifies whether to validate the JQL query or not.\n   * Default: true.\n   * @param {string} [fields] - The list of fields to return for each issue.\n   */\n\n\n  getIssuesForBoard(boardId, startAt = 0, maxResults = 50, jql, validateQuery = true, fields) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/issue`,\n      query: {\n        startAt,\n        maxResults,\n        jql,\n        validateQuery,\n        fields\n      }\n    })));\n  }\n  /** Get issue estimation for board\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/issue-getIssueEstimationForBoard)\n   * @name getIssueEstimationForBoard\n   * @function\n   * @param {string} issueIdOrKey - Id of issue\n   * @param {number} boardId - The id of the board required to determine which field\n   * is used for estimation.\n   */\n\n\n  getIssueEstimationForBoard(issueIdOrKey, boardId) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/issue/${issueIdOrKey}/estimation`,\n      query: {\n        boardId\n      }\n    })));\n  }\n  /** Get Epics\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board/{boardId}/epic-getEpics)\n   * @name getEpics\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   * @param {number} [startAt=0] - The starting index of the returned epics. Base index: 0.\n   * @param {number} [maxResults=50] - The maximum number of epics to return per page. Default: 50.\n   * @param {string} [done] - Filters results to epics that are either done or not done.\n   * Valid values: true, false.\n   */\n\n\n  getEpics(boardId, startAt = 0, maxResults = 50, done) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/epic`,\n      query: {\n        startAt,\n        maxResults,\n        done\n      }\n    })));\n  }\n  /** Get board issues for epic\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board/{boardId}/epic-getIssuesForEpic)\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board/{boardId}/epic-getIssuesWithoutEpic)\n   * @name getBoardIssuesForEpic\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   * @param {string} epicId - Id of epic to retrieve, specify 'none' to get issues without an epic.\n   * @param {number} [startAt=0] - The starting index of the returned issues. Base index: 0.\n   * @param {number} [maxResults=50] - The maximum number of issues to return per page. Default: 50.\n   * @param {string} [jql] - Filters results using a JQL query.\n   * @param {boolean} [validateQuery] - Specifies whether to validate the JQL query or not.\n   * Default: true.\n   * @param {string} [fields] - The list of fields to return for each issue.\n   */\n\n\n  getBoardIssuesForEpic(boardId, epicId, startAt = 0, maxResults = 50, jql, validateQuery = true, fields) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/epic/${epicId}/issue`,\n      query: {\n        startAt,\n        maxResults,\n        jql,\n        validateQuery,\n        fields\n      }\n    })));\n  }\n  /** Estimate issue for board\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/issue-estimateIssueForBoard)\n   * @name estimateIssueForBoard\n   * @function\n   * @param {string} issueIdOrKey - Id of issue\n   * @param {number} boardId - The id of the board required to determine which field\n   * is used for estimation.\n   * @param {string} body - value to set\n   */\n\n\n  estimateIssueForBoard(issueIdOrKey, boardId, body) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/issue/${issueIdOrKey}/estimation`,\n      query: {\n        boardId\n      }\n    }), {\n      method: 'PUT',\n      body\n    }));\n  }\n  /** Rank Issues\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/issue-rankIssues)\n   * @name rankIssues\n   * @function\n   * @param {string} body - value to set\n   */\n\n\n  rankIssues(body) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: '/issue/rank'\n    }), {\n      method: 'PUT',\n      body\n    }));\n  }\n  /** Get Projects\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board/{boardId}/project-getProjects)\n   * @name getProjects\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   * @param {number} [startAt=0] - The starting index of the returned projects. Base index: 0.\n   * @param {number} [maxResults=50] - The maximum number of projects to return per page.\n   * Default: 50.\n   */\n\n\n  getProjects(boardId, startAt = 0, maxResults = 50) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/project`,\n      query: {\n        startAt,\n        maxResults\n      }\n    })));\n  }\n  /** Get Projects Full\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board/{boardId}/project-getProjectsFull)\n   * @name getProjectsFull\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   */\n\n\n  getProjectsFull(boardId) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/project/full`\n    })));\n  }\n  /** Get Board Properties Keys\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board/{boardId}/properties-getPropertiesKeys)\n   * @name getBoardPropertiesKeys\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   */\n\n\n  getBoardPropertiesKeys(boardId) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/properties`\n    })));\n  }\n  /** Delete Board Property\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board/{boardId}/properties-deleteProperty)\n   * @name deleteBoardProperty\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   * @param {string} propertyKey - Id of property to delete\n   */\n\n\n  deleteBoardProperty(boardId, propertyKey) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/properties/${propertyKey}`\n    }), {\n      method: 'DELETE'\n    }));\n  }\n  /** Set Board Property\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board/{boardId}/properties-setProperty)\n   * @name setBoardProperty\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   * @param {string} propertyKey - Id of property to delete\n   * @param {string} body - value to set, for objects make sure to stringify first\n   */\n\n\n  setBoardProperty(boardId, propertyKey, body) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/properties/${propertyKey}`\n    }), {\n      method: 'PUT',\n      body\n    }));\n  }\n  /** Get Board Property\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board/{boardId}/properties-getProperty)\n   * @name getBoardProperty\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   * @param {string} propertyKey - Id of property to retrieve\n   */\n\n\n  getBoardProperty(boardId, propertyKey) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/properties/${propertyKey}`\n    })));\n  }\n  /** Get All Sprints\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board/{boardId}/sprint-getAllSprints)\n   * @name getAllSprints\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   * @param {number} [startAt=0] - The starting index of the returned sprints. Base index: 0.\n   * @param {number} [maxResults=50] - The maximum number of sprints to return per page.\n   * Default: 50.\n   * @param {string} [state] - Filters results to sprints in specified states.\n   * Valid values: future, active, closed.\n   */\n\n\n  getAllSprints(boardId, startAt = 0, maxResults = 50, state) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/sprint`,\n      query: {\n        startAt,\n        maxResults,\n        state\n      }\n    })));\n  }\n  /** Get Board issues for sprint\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-agile-1-0-board-boardid-sprint-sprintid-issue-get)\n   * @name getBoardIssuesForSprint\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   * @param {string} sprintId - Id of sprint to retrieve\n   * @param {number} [startAt=0] - The starting index of the returned issues. Base index: 0.\n   * @param {number} [maxResults=50] - The maximum number of issues to return per page. Default: 50.\n   * @param {string} [jql] - Filters results using a JQL query.\n   * @param {boolean} [validateQuery] - Specifies whether to validate the JQL query or not.\n   * Default: true.\n   * @param {string} [fields] - The list of fields to return for each issue.\n   * @param {string} [expand] - A comma-separated list of the parameters to expand.\n   */\n\n\n  getBoardIssuesForSprint(boardId, sprintId, startAt = 0, maxResults = 50, jql, validateQuery = true, fields, expand) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/sprint/${sprintId}/issue`,\n      query: {\n        startAt,\n        maxResults,\n        jql,\n        validateQuery,\n        fields,\n        expand\n      }\n    })));\n  }\n  /** Get All Versions\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board/{boardId}/version-getAllVersions)\n   * @name getAllVersions\n   * @function\n   * @param {string} boardId - Id of board to retrieve\n   * @param {number} [startAt=0] - The starting index of the returned versions. Base index: 0.\n   * @param {number} [maxResults=50] - The maximum number of versions to return per page.\n   * Default: 50.\n   * @param {string} [released] - Filters results to versions that are either released or\n   * unreleased.Valid values: true, false.\n   */\n\n\n  getAllVersions(boardId, startAt = 0, maxResults = 50, released) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/board/${boardId}/version`,\n      query: {\n        startAt,\n        maxResults,\n        released\n      }\n    })));\n  }\n  /** Get Filter\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/filter)\n   * @name getFilter\n   * @function\n   * @param {string} filterId - Id of filter to retrieve\n   */\n\n\n  getFilter(filterId) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/filter/${filterId}`\n    })));\n  }\n  /** Get Epic\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/epic-getEpic)\n   * @name getEpic\n   * @function\n   * @param {string} epicIdOrKey - Id of epic to retrieve\n   */\n\n\n  getEpic(epicIdOrKey) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/epic/${epicIdOrKey}`\n    })));\n  }\n  /** Partially update epic\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/epic-partiallyUpdateEpic)\n   * @name partiallyUpdateEpic\n   * @function\n   * @param {string} epicIdOrKey - Id of epic to retrieve\n   * @param {string} body - value to set, for objects make sure to stringify first\n   */\n\n\n  partiallyUpdateEpic(epicIdOrKey, body) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/epic/${epicIdOrKey}`\n    }), {\n      method: 'POST',\n      body\n    }));\n  }\n  /** Get issues for epic\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/epic-getIssuesForEpic)\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/epic-getIssuesWithoutEpic)\n   * @name getIssuesForEpic\n   * @function\n   * @param {string} epicId - Id of epic to retrieve, specify 'none' to get issues without an epic.\n   * @param {number} [startAt=0] - The starting index of the returned issues. Base index: 0.\n   * @param {number} [maxResults=50] - The maximum number of issues to return per page. Default: 50.\n   * @param {string} [jql] - Filters results using a JQL query.\n   * @param {boolean} [validateQuery] - Specifies whether to validate the JQL query or not.\n   * Default: true.\n   * @param {string} [fields] - The list of fields to return for each issue.\n   */\n\n\n  getIssuesForEpic(epicId, startAt = 0, maxResults = 50, jql, validateQuery = true, fields) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/epic/${epicId}/issue`,\n      query: {\n        startAt,\n        maxResults,\n        jql,\n        validateQuery,\n        fields\n      }\n    })));\n  }\n  /** Move Issues to Epic\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/epic-moveIssuesToEpic)\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/epic-removeIssuesFromEpic)\n   * @name moveIssuesToEpic\n   * @function\n   * @param {string} epicIdOrKey - Id of epic to move issue to, or 'none' to remove from epic\n   * @param {array} issues - array of issues to move\n   */\n\n\n  moveIssuesToEpic(epicIdOrKey, issues) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/epic/${epicIdOrKey}/issue`\n    }), {\n      method: 'POST',\n      body: {\n        issues\n      }\n    }));\n  }\n  /** Rank Epics\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/epic-rankEpics)\n   * @name rankEpics\n   * @function\n   * @param {string} epicIdOrKey - Id of epic\n   * @param {string} body - value to set\n   */\n\n\n  rankEpics(epicIdOrKey, body) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/epic/${epicIdOrKey}/rank`\n    }), {\n      method: 'PUT',\n      body\n    }));\n  }\n  /**\n   * @name getServerInfo\n   * @function\n   * Get server info\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-api-2-serverInfo-get)\n   */\n\n\n  getServerInfo() {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/serverInfo'\n    })));\n  }\n  /**\n   * @name getIssueCreateMetadata\n   * @param {object} optional - object containing any of the following properties\n   * @param {array} [optional.projectIds]: optional Array of project ids to return metadata for\n   * @param {array} [optional.projectKeys]: optional Array of project keys to return metadata for\n   * @param {array} [optional.issuetypeIds]: optional Array of issuetype ids to return metadata for\n   * @param {array} [optional.issuetypeNames]: optional Array of issuetype names to return metadata\n   * for\n   * @param {string} [optional.expand]: optional Include additional information about issue\n   * metadata. Valid value is 'projects.issuetypes.fields'\n   * Get metadata for creating an issue.\n   * [Jira Doc](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-createmeta-get)\n   */\n\n\n  getIssueCreateMetadata(optional = {}) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: '/issue/createmeta',\n      query: optional\n    })));\n  }\n  /** Generic Get Request\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/2/)\n   * @name genericGet\n   * @function\n   * @param {string} endpoint - Rest API endpoint\n   */\n\n\n  genericGet(endpoint) {\n    return this.doRequest(this.makeRequestHeader(this.makeUri({\n      pathname: `/${endpoint}`\n    })));\n  }\n  /** Generic Get Request to the Agile API\n   * [Jira Doc](https://docs.atlassian.com/jira-software/REST/cloud/2/)\n   * @name genericGet\n   * @function\n   * @param {string} endpoint - Rest API endpoint\n   */\n\n\n  genericAgileGet(endpoint) {\n    return this.doRequest(this.makeRequestHeader(this.makeAgileUri({\n      pathname: `/${endpoint}`\n    })));\n  }\n\n}\n\nexports.default = JiraApi;\nmodule.exports = exports.default;","import { createInterface } from 'node:readline';\nimport JiraApi from 'jira-client';\nimport OpenAI from 'openai';\nimport pc from 'picocolors';\nimport { $$ } from '../utils/zx-factory';\n\ninterface BranchGenerationOptions {\n    pullFromMain?: boolean;\n}\n\ninterface JiraIssue {\n    key: string;\n    fields: {\n        summary: string;\n        description?: string;\n        issuetype: {\n            name: string;\n        };\n    };\n}\n\nasync function requestUserInput(prompt: string): Promise<string> {\n    const rl = createInterface({\n        input: process.stdin,\n        output: process.stdout,\n    });\n\n    return new Promise((resolve) => {\n        rl.question(pc.cyan(prompt), (answer: string) => {\n            rl.close();\n            const trimmedAnswer = answer.trim();\n            if (trimmedAnswer) {\n                console.log(pc.green(`→ ${trimmedAnswer}`));\n            }\n            resolve(trimmedAnswer);\n        });\n    });\n}\n\nfunction extractIssueKey(input: string): string | null {\n    // Handle Jira URLs with /browse/ path: https://company.atlassian.net/browse/PROJ-123\n    const browseMatch = input.match(/\\/browse\\/([A-Z]+-\\d+)/);\n    if (browseMatch) {\n        return browseMatch[1];\n    }\n\n    // Handle Jira URLs with query parameters: ?selectedIssue=PROJ-123\n    const queryMatch = input.match(/[?&](?:selectedIssue|issueKey)=([A-Z]+-\\d+)/);\n    if (queryMatch) {\n        return queryMatch[1];\n    }\n\n    // Handle any Jira URL that contains an issue key pattern\n    const urlMatch = input.match(/([A-Z]+-\\d+)/);\n    if (urlMatch) {\n        return urlMatch[1];\n    }\n\n    // Handle direct issue keys: PROJ-123\n    const keyMatch = input.match(/^([A-Z]+-\\d+)$/);\n    if (keyMatch) {\n        return keyMatch[1];\n    }\n\n    return null;\n}\n\nfunction initializeJiraClient(): JiraApi {\n    const jiraHost = process.env.JIRA_HOST;\n    const jiraEmail = process.env.JIRA_EMAIL;\n    const jiraApiToken = process.env.JIRA_API_TOKEN;\n\n    if (!jiraHost || typeof jiraHost !== 'string') {\n        throw new Error('JIRA_HOST is not configured. Please set JIRA_HOST environment variable.');\n    }\n\n    if (!jiraEmail || typeof jiraEmail !== 'string') {\n        throw new Error('JIRA_EMAIL is not configured. Please set JIRA_EMAIL environment variable.');\n    }\n\n    if (!jiraApiToken || typeof jiraApiToken !== 'string') {\n        throw new Error('JIRA_API_TOKEN is not configured. Please set JIRA_API_TOKEN environment variable.');\n    }\n\n    return new JiraApi({\n        protocol: 'https',\n        host: jiraHost,\n        username: jiraEmail,\n        password: jiraApiToken,\n        apiVersion: '2',\n        strictSSL: true,\n    });\n}\n\nasync function fetchJiraIssue(issueKey: string): Promise<JiraIssue> {\n    const jira = initializeJiraClient();\n\n    try {\n        console.log(`${pc.blue('🔍')} Fetching Jira issue: ${pc.bold(issueKey)}`);\n        const issue = (await jira.findIssue(issueKey)) as JiraIssue;\n        console.log(`${pc.green('✅')} Found issue: ${pc.bold(issue.fields.summary)}`);\n        return issue;\n    } catch (error) {\n        console.error(pc.red('❌ Error fetching Jira issue:'), error);\n        throw new Error(`Failed to fetch Jira issue ${issueKey}. Please check your credentials and issue key.`);\n    }\n}\n\nasync function generateBranchNameFromSummary(issueKey: string, summary: string): Promise<string> {\n    const openaiApiKey = process.env.OPENAI_API_KEY;\n\n    if (!openaiApiKey || typeof openaiApiKey !== 'string') {\n        throw new Error('OPENAI_API_KEY is not configured');\n    }\n\n    const openai = new OpenAI({\n        apiKey: openaiApiKey,\n    });\n\n    const prompt = `Generate a short, descriptive git branch name based on this Jira issue summary.\nThe branch name should be:\n- Start with the issue key (${issueKey})\n- Followed by a dash\n- Then a short, descriptive summary (max 30 characters to leave room for date)\n- Use kebab-case (lowercase with hyphens)\n- Avoid special characters except hyphens\n- Be meaningful and related to the work\n- DO NOT include any dates, timestamps, or time-related information\n- Focus on the feature/change being implemented\n\nJira issue summary: ${summary}\n\nReturn only the branch name, nothing else.`;\n\n    try {\n        const completion = await openai.chat.completions.create({\n            model: 'gpt-4o-mini',\n            messages: [\n                {\n                    role: 'user',\n                    content: prompt,\n                },\n            ],\n            max_tokens: 50,\n            temperature: 0.3,\n        });\n\n        const branchName = completion.choices[0]?.message?.content?.trim();\n\n        if (!branchName) {\n            throw new Error('Failed to generate branch name from OpenAI');\n        }\n\n        // Clean up the branch name to ensure it's valid\n        const cleanedBranchName = branchName\n            .replace(/[^a-zA-Z0-9\\-_/]/g, '-') // Replace invalid characters with hyphens\n            .replace(/-+/g, '-') // Replace multiple hyphens with single hyphen\n            .replace(/^-|-$/g, '') // Remove leading/trailing hyphens\n            .replace(/\\d{4}-\\d{2}-\\d{2}/g, '') // Remove date patterns (YYYY-MM-DD)\n            .replace(/\\d{2}-\\d{2}-\\d{4}/g, '') // Remove date patterns (MM-DD-YYYY)\n            .replace(/-+/g, '-') // Replace multiple hyphens again after date removal\n            .replace(/^-|-$/g, '') // Remove leading/trailing hyphens again\n            .toLowerCase();\n\n        // Add today's date in YYYY-MM-DD format\n        const today = new Date();\n        const dateString = today.toISOString().split('T')[0]; // YYYY-MM-DD format\n\n        // Extract the issue key and keep it in original case, lowercase the rest\n        const issueKeyPattern = new RegExp(`^(${issueKey})`, 'i'); // Case-insensitive match\n        const match = cleanedBranchName.match(issueKeyPattern);\n\n        if (match) {\n            // Replace the issue key with the original case version\n            const restOfBranchName = cleanedBranchName.replace(issueKeyPattern, '').replace(/^-/, '');\n            return `${issueKey}-${restOfBranchName}-${dateString}`;\n        }\n\n        return `${cleanedBranchName}-${dateString}`;\n    } catch (_error) {\n        console.error('Error generating branch name:', _error);\n        throw _error;\n    }\n}\n\nasync function createAndSwitchToBranch(branchName: string, options: BranchGenerationOptions = {}): Promise<void> {\n    const { pullFromMain = true } = options;\n    let hasStashed = false;\n\n    try {\n        if (pullFromMain) {\n            console.log(pc.yellow('📥 Updating main branch with latest changes...'));\n            try {\n                // Check for uncommitted changes\n                const statusResult = await $$`git status --porcelain`;\n                const hasUncommittedChanges = statusResult.stdout.trim().length > 0;\n\n                if (hasUncommittedChanges) {\n                    console.log(pc.yellow('\\n⚠️  You have uncommitted changes.'));\n                    const stashResponse = await requestUserInput('Would you like to stash them and continue? (y/n, default: y): ');\n\n                    if (stashResponse.toLowerCase() !== 'n' && stashResponse.toLowerCase() !== 'no') {\n                        console.log(pc.blue('📦 Stashing uncommitted changes...'));\n                        await $$`git stash push -m \"Auto-stash before branch creation\"`;\n                        hasStashed = true;\n                        console.log(pc.green('✅ Changes stashed successfully'));\n                    } else {\n                        console.log(pc.red('❌ Branch creation cancelled. Please commit or stash your changes manually.'));\n                        process.exit(0);\n                    }\n                }\n\n                // Switch to main branch\n                await $$`git checkout main`;\n\n                // Pull latest changes from origin/main\n                await $$`git pull origin main`;\n\n                console.log(pc.green('✅ Successfully updated main branch'));\n            } catch (_error) {\n                console.warn(pc.yellow('⚠️  Warning: Could not update main branch. Continuing with current state.'));\n            }\n        }\n\n        console.log(`\\n${pc.blue('🔄')} Creating branch: ${pc.bold(branchName)}`);\n\n        // Create and switch to the new branch from main (or current branch if pullFromMain is false)\n        await $$`git checkout -b ${branchName}`;\n\n        console.log(`\\n${pc.green('🎉')} Successfully created and switched to branch: ${pc.bold(pc.green(branchName))}`);\n\n        // Pop stashed changes if we stashed earlier\n        if (hasStashed) {\n            console.log(pc.blue('\\n📦 Restoring stashed changes...'));\n            try {\n                await $$`git stash pop`;\n                console.log(pc.green('✅ Stashed changes restored successfully'));\n            } catch (_error) {\n                console.warn(pc.yellow('⚠️  Warning: Could not automatically restore stashed changes. Use \"git stash pop\" manually.'));\n            }\n        }\n\n        console.log(`${pc.cyan('📝')} Ready to start working on: ${pc.bold(branchName)}`);\n    } catch (_error) {\n        console.error(pc.red(`Git command failed`));\n        process.exit(1);\n    }\n}\n\nasync function main(): Promise<void> {\n    try {\n        console.log(pc.bold(pc.blue('🚀 Jira Git Branch Generator')));\n        console.log(pc.blue('=============================\\n'));\n\n        // Request Jira issue from user\n        const jiraInput = await requestUserInput('Enter Jira issue (URL or issue key, e.g., PROJ-123): ');\n\n        if (!jiraInput) {\n            console.error(pc.red('❌ Jira issue input cannot be empty'));\n            process.exit(1);\n        }\n\n        // Extract issue key from input\n        const issueKey = extractIssueKey(jiraInput);\n        if (!issueKey) {\n            console.error(pc.red('❌ Invalid Jira issue format. Please provide a valid issue key (e.g., PROJ-123) or Jira URL.'));\n            process.exit(1);\n        }\n\n        // Fetch Jira issue details\n        const jiraIssue = await fetchJiraIssue(issueKey);\n\n        // Ask user if they want to provide a custom description or use Jira summary\n        const customDescription = await requestUserInput('\\nEnter custom work description (or press Enter to use Jira summary): ');\n\n        let workDescription: string;\n        if (customDescription) {\n            workDescription = customDescription;\n        } else {\n            workDescription = jiraIssue.fields.summary;\n        }\n\n        // Ask about pulling from main\n        const pullFromMainInput = await requestUserInput('\\nPull latest changes from main after creating branch? (y/n, default: y): ');\n        const pullFromMain = pullFromMainInput.toLowerCase() !== 'n' && pullFromMainInput.toLowerCase() !== 'no';\n\n        console.log(`\\n${pc.magenta('🤖')} Generating branch name with AI...`);\n\n        // Generate branch name using OpenAI\n        const branchName = await generateBranchNameFromSummary(issueKey, workDescription);\n\n        console.log(`${pc.green('✨')} Generated branch name: ${pc.bold(pc.green(branchName))}`);\n\n        // Confirm with user\n        const confirm = await requestUserInput(`\\nCreate branch \"${pc.bold(branchName)}\"? (y/n, default: y): `);\n\n        if (confirm.toLowerCase() === 'n' || confirm.toLowerCase() === 'no') {\n            console.log(pc.red('❌ Branch creation cancelled'));\n            process.exit(0);\n        }\n\n        // Create and switch to the branch\n        await createAndSwitchToBranch(branchName, { pullFromMain });\n    } catch (error) {\n        console.error(pc.red('❌ Error:'), error);\n        process.exit(1);\n    }\n}\n\nmain();\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203],"mappings":"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S;EAAS;EAAS;EAAS;EAAS;EAAW;EAAS;EAAQ;EAAK;EAAK;EAAK;EAAK;EAAK;EAAQ;EAAS;EAAS;EAAS;EAAS;EAAS;EAAK;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAK;EAAS;EAAU;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAQ;EAAK;EAAS;EAAS;EAAS;EAAS;EAAS;EAAU;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAM;EAAK;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAU;EAAK;EAAQ;EAAS;EAAS;EAAS;EAAS;EAAU;EAAQ;EAAS;EAAU;EAAS;EAAS;EAAS;EAAW;EAAQ;EAAO;EAAK;EAAS;EAAS;EAAS;EAAS;EAAS;EAAK;EAAS;EAAS;EAAS;EAAS;EAAU;EAAU;EAAS;EAAS;EAAK;EAAK;EAAW;EAAK;EAAQ;EAAS;EAAS;EAAS;EAAU;EAAS;EAAU;EAAS;EAAS;EAAS;EAAO;EAAK;EAAS;EAAS;EAAS;EAAS;EAAK;EAAK;EAAU;EAAS;EAAU;EAAS;EAAS;EAAQ;EAAY;EAAS;EAAW;EAAsB;EAAK;EAAK;EAAK;EAAS;EAAS;EAAK;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAY;EAAK;EAAK;EAAQ;EAAS;EAAS;EAAK;EAAS;EAAS;EAAS;EAAS;EAAS;EAAK;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAK;EAAQ;EAAS;EAAS;EAAS;EAAS;EAAK;EAAK;EAAQ;EAAS;EAAS;EAAS;EAAS;EAAS;EAAM;EAAK;EAAU;EAAS;EAAS;EAAU;EAAS;EAAS;EAAK;EAAK;EAAS;EAAS;EAAS;EAAS;EAAS;EAAK;EAAK;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAK;EAAS;EAAS;EAAS;EAAU;EAAU;EAAS;EAAS;EAAS;EAAK;EAAK;EAAQ;EAAS;EAAS;EAAS;EAAS;EAAS;EAAK;EAAS;EAAS;EAAS;EAAS;EAAS;EAAS;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAK;EAAK;EAAS;EA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GACV,MAAM,IAAI;GACV,MAAM,IAAI;GACV,MAAM,IAAI;GACV,MAAM,IAAI;GACV,MAAM,IAAI;GACV,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,IAAI,EAAE;GACN,MAAM,IAAI;GACV,MAAM,IAAI;GACV,MAAM,IAAI;GACV,MAAM,IAAI;GACV,MAAM,IAAI;GACV,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,IAAI,EAAE;GACN,MAAM,IAAI;GACV,MAAM,IAAI;GACV,MAAM,IAAI;GACV,MAAM,IAAI;GACV,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,IAAI,EAAE;GACN,MAAM,IAAI;GACV,MAAM,IAAI;GACV,MAAM,IAAI;GACV,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,IAAI,EAAE;GACN,MAAM,IAAI;GACV,MAAM,IAAI;GACV,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,IAAI,EAAE;GACN,MAAM,IAAI;GACV,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,IAAI,EAAE;GACN,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,IAAI,EAAE;GACN,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,IAAI,EAAE;GACN,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,IAAI,EAAE;GACN,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;GACX,OAAO,IAAI;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AAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;GAAU,CAAC;GACjD,IAAI,YAAY;IACd;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;GAAU,CAAC;GACjD,IAAI,YAAY;IACd;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;GAAU,CAAC;GACjD,IAAI,YAAY;IACd;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;IAAY;IACpC;IAAY;IAAY;I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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CEjBA,OAAO,UAAA,WAAA;;;;;;;;;;;;;;;CCGP,IA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"}