@prmichaelsen/acp-mcp 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/README.md +2 -0
- package/agent/milestones/milestone-2-bug-fixes-production-readiness.md +159 -0
- package/agent/progress.yaml +92 -13
- package/agent/tasks/task-4-fix-read-file-not-found-bug.md +390 -0
- package/dist/server-factory.js +214 -20289
- package/dist/server-factory.js.map +4 -4
- package/dist/server.js +208 -20259
- package/dist/server.js.map +4 -4
- package/dist/utils/logger.d.ts +43 -0
- package/esbuild.build.js +1 -1
- package/esbuild.watch.js +1 -1
- package/package.json +1 -1
- package/src/server-factory.ts +45 -16
- package/src/server.ts +36 -18
- package/src/tools/acp-remote-execute-command.ts +11 -0
- package/src/tools/acp-remote-list-files.ts +7 -4
- package/src/tools/acp-remote-read-file.ts +6 -0
- package/src/tools/acp-remote-write-file.ts +6 -0
- package/src/utils/logger.ts +131 -0
- package/src/utils/ssh-connection.ts +59 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../
|
|
4
|
-
"sourcesContent": ["// 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", "/* 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 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(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", "'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", "'use strict';\n\nconst crypto = require('crypto');\n\nlet cpuInfo;\ntry {\n cpuInfo = require('cpu-features')();\n} catch {}\n\nconst { bindingAvailable, CIPHER_INFO, MAC_INFO } = require('./crypto.js');\n\nconst eddsaSupported = (() => {\n if (typeof crypto.sign === 'function'\n && typeof crypto.verify === 'function') {\n const key =\n '-----BEGIN PRIVATE KEY-----\\r\\nMC4CAQAwBQYDK2VwBCIEIHKj+sVa9WcD'\n + '/q2DJUJaf43Kptc8xYuUQA4bOFj9vC8T\\r\\n-----END PRIVATE KEY-----';\n const data = Buffer.from('a');\n let sig;\n let verified;\n try {\n sig = crypto.sign(null, data, key);\n verified = crypto.verify(null, data, key, sig);\n } catch {}\n return (Buffer.isBuffer(sig) && sig.length === 64 && verified === true);\n }\n\n return false;\n})();\n\nconst curve25519Supported = (typeof crypto.diffieHellman === 'function'\n && typeof crypto.generateKeyPairSync === 'function'\n && typeof crypto.createPublicKey === 'function');\n\nconst DEFAULT_KEX = [\n // https://tools.ietf.org/html/rfc5656#section-10.1\n 'ecdh-sha2-nistp256',\n 'ecdh-sha2-nistp384',\n 'ecdh-sha2-nistp521',\n\n // https://tools.ietf.org/html/rfc4419#section-4\n 'diffie-hellman-group-exchange-sha256',\n\n // https://tools.ietf.org/html/rfc8268\n 'diffie-hellman-group14-sha256',\n 'diffie-hellman-group15-sha512',\n 'diffie-hellman-group16-sha512',\n 'diffie-hellman-group17-sha512',\n 'diffie-hellman-group18-sha512',\n];\nif (curve25519Supported) {\n DEFAULT_KEX.unshift('curve25519-sha256');\n DEFAULT_KEX.unshift('curve25519-sha256@libssh.org');\n}\nconst SUPPORTED_KEX = DEFAULT_KEX.concat([\n // https://tools.ietf.org/html/rfc4419#section-4\n 'diffie-hellman-group-exchange-sha1',\n\n 'diffie-hellman-group14-sha1', // REQUIRED\n 'diffie-hellman-group1-sha1', // REQUIRED\n]);\n\n\nconst DEFAULT_SERVER_HOST_KEY = [\n 'ecdsa-sha2-nistp256',\n 'ecdsa-sha2-nistp384',\n 'ecdsa-sha2-nistp521',\n 'rsa-sha2-512', // RFC 8332\n 'rsa-sha2-256', // RFC 8332\n 'ssh-rsa',\n];\nif (eddsaSupported)\n DEFAULT_SERVER_HOST_KEY.unshift('ssh-ed25519');\nconst SUPPORTED_SERVER_HOST_KEY = DEFAULT_SERVER_HOST_KEY.concat([\n 'ssh-dss',\n]);\n\n\nconst canUseCipher = (() => {\n const ciphers = crypto.getCiphers();\n return (name) => ciphers.includes(CIPHER_INFO[name].sslName);\n})();\nlet DEFAULT_CIPHER = [\n // http://tools.ietf.org/html/rfc5647\n 'aes128-gcm@openssh.com',\n 'aes256-gcm@openssh.com',\n\n // http://tools.ietf.org/html/rfc4344#section-4\n 'aes128-ctr',\n 'aes192-ctr',\n 'aes256-ctr',\n];\nif (cpuInfo && cpuInfo.flags && !cpuInfo.flags.aes) {\n // We know for sure the CPU does not support AES acceleration\n if (bindingAvailable)\n DEFAULT_CIPHER.unshift('chacha20-poly1305@openssh.com');\n else\n DEFAULT_CIPHER.push('chacha20-poly1305@openssh.com');\n} else if (bindingAvailable && cpuInfo && cpuInfo.arch === 'x86') {\n // Places chacha20-poly1305 immediately after GCM ciphers since GCM ciphers\n // seem to outperform it on x86, but it seems to be faster than CTR ciphers\n DEFAULT_CIPHER.splice(4, 0, 'chacha20-poly1305@openssh.com');\n} else {\n DEFAULT_CIPHER.push('chacha20-poly1305@openssh.com');\n}\nDEFAULT_CIPHER = DEFAULT_CIPHER.filter(canUseCipher);\nconst SUPPORTED_CIPHER = DEFAULT_CIPHER.concat([\n 'aes256-cbc',\n 'aes192-cbc',\n 'aes128-cbc',\n 'blowfish-cbc',\n '3des-cbc',\n 'aes128-gcm',\n 'aes256-gcm',\n\n // http://tools.ietf.org/html/rfc4345#section-4:\n 'arcfour256',\n 'arcfour128',\n\n 'cast128-cbc',\n 'arcfour',\n].filter(canUseCipher));\n\n\nconst canUseMAC = (() => {\n const hashes = crypto.getHashes();\n return (name) => hashes.includes(MAC_INFO[name].sslName);\n})();\nconst DEFAULT_MAC = [\n 'hmac-sha2-256-etm@openssh.com',\n 'hmac-sha2-512-etm@openssh.com',\n 'hmac-sha1-etm@openssh.com',\n 'hmac-sha2-256',\n 'hmac-sha2-512',\n 'hmac-sha1',\n].filter(canUseMAC);\nconst SUPPORTED_MAC = DEFAULT_MAC.concat([\n 'hmac-md5',\n 'hmac-sha2-256-96', // first 96 bits of HMAC-SHA256\n 'hmac-sha2-512-96', // first 96 bits of HMAC-SHA512\n 'hmac-ripemd160',\n 'hmac-sha1-96', // first 96 bits of HMAC-SHA1\n 'hmac-md5-96', // first 96 bits of HMAC-MD5\n].filter(canUseMAC));\n\nconst DEFAULT_COMPRESSION = [\n 'none',\n 'zlib@openssh.com', // ZLIB (LZ77) compression, except\n // compression/decompression does not start until after\n // successful user authentication\n 'zlib', // ZLIB (LZ77) compression\n];\nconst SUPPORTED_COMPRESSION = DEFAULT_COMPRESSION.concat([\n]);\n\n\nconst COMPAT = {\n BAD_DHGEX: 1 << 0,\n OLD_EXIT: 1 << 1,\n DYN_RPORT_BUG: 1 << 2,\n BUG_DHGEX_LARGE: 1 << 3,\n IMPLY_RSA_SHA2_SIGALGS: 1 << 4,\n};\n\nmodule.exports = {\n MESSAGE: {\n // Transport layer protocol -- generic (1-19)\n DISCONNECT: 1,\n IGNORE: 2,\n UNIMPLEMENTED: 3,\n DEBUG: 4,\n SERVICE_REQUEST: 5,\n SERVICE_ACCEPT: 6,\n EXT_INFO: 7, // RFC 8308\n\n // Transport layer protocol -- algorithm negotiation (20-29)\n KEXINIT: 20,\n NEWKEYS: 21,\n\n // Transport layer protocol -- key exchange method-specific (30-49)\n KEXDH_INIT: 30,\n KEXDH_REPLY: 31,\n\n KEXDH_GEX_GROUP: 31,\n KEXDH_GEX_INIT: 32,\n KEXDH_GEX_REPLY: 33,\n KEXDH_GEX_REQUEST: 34,\n\n KEXECDH_INIT: 30,\n KEXECDH_REPLY: 31,\n\n // User auth protocol -- generic (50-59)\n USERAUTH_REQUEST: 50,\n USERAUTH_FAILURE: 51,\n USERAUTH_SUCCESS: 52,\n USERAUTH_BANNER: 53,\n\n // User auth protocol -- user auth method-specific (60-79)\n USERAUTH_PASSWD_CHANGEREQ: 60,\n\n USERAUTH_PK_OK: 60,\n\n USERAUTH_INFO_REQUEST: 60,\n USERAUTH_INFO_RESPONSE: 61,\n\n // Connection protocol -- generic (80-89)\n GLOBAL_REQUEST: 80,\n REQUEST_SUCCESS: 81,\n REQUEST_FAILURE: 82,\n\n // Connection protocol -- channel-related (90-127)\n CHANNEL_OPEN: 90,\n CHANNEL_OPEN_CONFIRMATION: 91,\n CHANNEL_OPEN_FAILURE: 92,\n CHANNEL_WINDOW_ADJUST: 93,\n CHANNEL_DATA: 94,\n CHANNEL_EXTENDED_DATA: 95,\n CHANNEL_EOF: 96,\n CHANNEL_CLOSE: 97,\n CHANNEL_REQUEST: 98,\n CHANNEL_SUCCESS: 99,\n CHANNEL_FAILURE: 100\n\n // Reserved for client protocols (128-191)\n\n // Local extensions (192-155)\n },\n DISCONNECT_REASON: {\n HOST_NOT_ALLOWED_TO_CONNECT: 1,\n PROTOCOL_ERROR: 2,\n KEY_EXCHANGE_FAILED: 3,\n RESERVED: 4,\n MAC_ERROR: 5,\n COMPRESSION_ERROR: 6,\n SERVICE_NOT_AVAILABLE: 7,\n PROTOCOL_VERSION_NOT_SUPPORTED: 8,\n HOST_KEY_NOT_VERIFIABLE: 9,\n CONNECTION_LOST: 10,\n BY_APPLICATION: 11,\n TOO_MANY_CONNECTIONS: 12,\n AUTH_CANCELED_BY_USER: 13,\n NO_MORE_AUTH_METHODS_AVAILABLE: 14,\n ILLEGAL_USER_NAME: 15,\n },\n DISCONNECT_REASON_STR: undefined,\n CHANNEL_OPEN_FAILURE: {\n ADMINISTRATIVELY_PROHIBITED: 1,\n CONNECT_FAILED: 2,\n UNKNOWN_CHANNEL_TYPE: 3,\n RESOURCE_SHORTAGE: 4\n },\n TERMINAL_MODE: {\n TTY_OP_END: 0, // Indicates end of options.\n VINTR: 1, // Interrupt character; 255 if none. Similarly for the\n // other characters. Not all of these characters are\n // supported on all systems.\n VQUIT: 2, // The quit character (sends SIGQUIT signal on POSIX\n // systems).\n VERASE: 3, // Erase the character to left of the cursor.\n VKILL: 4, // Kill the current input line.\n VEOF: 5, // End-of-file character (sends EOF from the\n // terminal).\n VEOL: 6, // End-of-line character in addition to carriage\n // return and/or linefeed.\n VEOL2: 7, // Additional end-of-line character.\n VSTART: 8, // Continues paused output (normally control-Q).\n VSTOP: 9, // Pauses output (normally control-S).\n VSUSP: 10, // Suspends the current program.\n VDSUSP: 11, // Another suspend character.\n VREPRINT: 12, // Reprints the current input line.\n VWERASE: 13, // Erases a word left of cursor.\n VLNEXT: 14, // Enter the next character typed literally, even if\n // it is a special character\n VFLUSH: 15, // Character to flush output.\n VSWTCH: 16, // Switch to a different shell layer.\n VSTATUS: 17, // Prints system status line (load, command, pid,\n // etc).\n VDISCARD: 18, // Toggles the flushing of terminal output.\n IGNPAR: 30, // The ignore parity flag. The parameter SHOULD be 0\n // if this flag is FALSE, and 1 if it is TRUE.\n PARMRK: 31, // Mark parity and framing errors.\n INPCK: 32, // Enable checking of parity errors.\n ISTRIP: 33, // Strip 8th bit off characters.\n INLCR: 34, // Map NL into CR on input.\n IGNCR: 35, // Ignore CR on input.\n ICRNL: 36, // Map CR to NL on input.\n IUCLC: 37, // Translate uppercase characters to lowercase.\n IXON: 38, // Enable output flow control.\n IXANY: 39, // Any char will restart after stop.\n IXOFF: 40, // Enable input flow control.\n IMAXBEL: 41, // Ring bell on input queue full.\n ISIG: 50, // Enable signals INTR, QUIT, [D]SUSP.\n ICANON: 51, // Canonicalize input lines.\n XCASE: 52, // Enable input and output of uppercase characters by\n // preceding their lowercase equivalents with \"\\\".\n ECHO: 53, // Enable echoing.\n ECHOE: 54, // Visually erase chars.\n ECHOK: 55, // Kill character discards current line.\n ECHONL: 56, // Echo NL even if ECHO is off.\n NOFLSH: 57, // Don't flush after interrupt.\n TOSTOP: 58, // Stop background jobs from output.\n IEXTEN: 59, // Enable extensions.\n ECHOCTL: 60, // Echo control characters as ^(Char).\n ECHOKE: 61, // Visual erase for line kill.\n PENDIN: 62, // Retype pending input.\n OPOST: 70, // Enable output processing.\n OLCUC: 71, // Convert lowercase to uppercase.\n ONLCR: 72, // Map NL to CR-NL.\n OCRNL: 73, // Translate carriage return to newline (output).\n ONOCR: 74, // Translate newline to carriage return-newline\n // (output).\n ONLRET: 75, // Newline performs a carriage return (output).\n CS7: 90, // 7 bit mode.\n CS8: 91, // 8 bit mode.\n PARENB: 92, // Parity enable.\n PARODD: 93, // Odd parity, else even.\n TTY_OP_ISPEED: 128, // Specifies the input baud rate in bits per second.\n TTY_OP_OSPEED: 129, // Specifies the output baud rate in bits per second.\n },\n CHANNEL_EXTENDED_DATATYPE: {\n STDERR: 1,\n },\n\n SIGNALS: [\n 'ABRT', 'ALRM', 'FPE', 'HUP', 'ILL', 'INT', 'QUIT', 'SEGV', 'TERM', 'USR1',\n 'USR2', 'KILL', 'PIPE'\n ].reduce((cur, val) => ({ ...cur, [val]: 1 }), {}),\n\n COMPAT,\n COMPAT_CHECKS: [\n [ 'Cisco-1.25', COMPAT.BAD_DHGEX ],\n [ /^Cisco-1[.]/, COMPAT.BUG_DHGEX_LARGE ],\n [ /^[0-9.]+$/, COMPAT.OLD_EXIT ], // old SSH.com implementations\n [ /^OpenSSH_5[.][0-9]+/, COMPAT.DYN_RPORT_BUG ],\n [ /^OpenSSH_7[.]4/, COMPAT.IMPLY_RSA_SHA2_SIGALGS ],\n ],\n\n // KEX proposal-related\n DEFAULT_KEX,\n SUPPORTED_KEX,\n DEFAULT_SERVER_HOST_KEY,\n SUPPORTED_SERVER_HOST_KEY,\n DEFAULT_CIPHER,\n SUPPORTED_CIPHER,\n DEFAULT_MAC,\n SUPPORTED_MAC,\n DEFAULT_COMPRESSION,\n SUPPORTED_COMPRESSION,\n\n curve25519Supported,\n eddsaSupported,\n};\n\nmodule.exports.DISCONNECT_REASON_BY_VALUE =\n Array.from(Object.entries(module.exports.DISCONNECT_REASON))\n .reduce((obj, [key, value]) => ({ ...obj, [value]: key }), {});\n", "'use strict';\n\nconst Ber = require('asn1').Ber;\n\nlet DISCONNECT_REASON;\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TypedArrayFill = Object.getPrototypeOf(Uint8Array.prototype).fill;\n\nfunction readUInt32BE(buf, offset) {\n return (buf[offset++] * 16777216)\n + (buf[offset++] * 65536)\n + (buf[offset++] * 256)\n + buf[offset];\n}\n\nfunction bufferCopy(src, dest, srcStart, srcEnd, destStart) {\n if (!destStart)\n destStart = 0;\n if (srcEnd > src.length)\n srcEnd = src.length;\n let nb = srcEnd - srcStart;\n const destLeft = (dest.length - destStart);\n if (nb > destLeft)\n nb = destLeft;\n dest.set(new Uint8Array(src.buffer, src.byteOffset + srcStart, nb),\n destStart);\n return nb;\n}\n\nfunction bufferSlice(buf, start, end) {\n if (end === undefined)\n end = buf.length;\n return new FastBuffer(buf.buffer, buf.byteOffset + start, end - start);\n}\n\nfunction makeBufferParser() {\n let pos = 0;\n let buffer;\n\n const self = {\n init: (buf, start) => {\n buffer = buf;\n pos = (typeof start === 'number' ? start : 0);\n },\n pos: () => pos,\n length: () => (buffer ? buffer.length : 0),\n avail: () => (buffer && pos < buffer.length ? buffer.length - pos : 0),\n clear: () => {\n buffer = undefined;\n },\n readUInt32BE: () => {\n if (!buffer || pos + 3 >= buffer.length)\n return;\n return (buffer[pos++] * 16777216)\n + (buffer[pos++] * 65536)\n + (buffer[pos++] * 256)\n + buffer[pos++];\n },\n readUInt64BE: (behavior) => {\n if (!buffer || pos + 7 >= buffer.length)\n return;\n switch (behavior) {\n case 'always':\n return BigInt(`0x${buffer.hexSlice(pos, pos += 8)}`);\n case 'maybe':\n if (buffer[pos] > 0x1F)\n return BigInt(`0x${buffer.hexSlice(pos, pos += 8)}`);\n // FALLTHROUGH\n default:\n return (buffer[pos++] * 72057594037927940)\n + (buffer[pos++] * 281474976710656)\n + (buffer[pos++] * 1099511627776)\n + (buffer[pos++] * 4294967296)\n + (buffer[pos++] * 16777216)\n + (buffer[pos++] * 65536)\n + (buffer[pos++] * 256)\n + buffer[pos++];\n }\n },\n skip: (n) => {\n if (buffer && n > 0)\n pos += n;\n },\n skipString: () => {\n const len = self.readUInt32BE();\n if (len === undefined)\n return;\n pos += len;\n return (pos <= buffer.length ? len : undefined);\n },\n readByte: () => {\n if (buffer && pos < buffer.length)\n return buffer[pos++];\n },\n readBool: () => {\n if (buffer && pos < buffer.length)\n return !!buffer[pos++];\n },\n readList: () => {\n const list = self.readString(true);\n if (list === undefined)\n return;\n return (list ? list.split(',') : []);\n },\n readString: (dest, maxLen) => {\n if (typeof dest === 'number') {\n maxLen = dest;\n dest = undefined;\n }\n\n const len = self.readUInt32BE();\n if (len === undefined)\n return;\n\n if ((buffer.length - pos) < len\n || (typeof maxLen === 'number' && len > maxLen)) {\n return;\n }\n\n if (dest) {\n if (Buffer.isBuffer(dest))\n return bufferCopy(buffer, dest, pos, pos += len);\n return buffer.utf8Slice(pos, pos += len);\n }\n return bufferSlice(buffer, pos, pos += len);\n },\n readRaw: (len) => {\n if (!buffer)\n return;\n if (typeof len !== 'number')\n return bufferSlice(buffer, pos, pos += (buffer.length - pos));\n if ((buffer.length - pos) >= len)\n return bufferSlice(buffer, pos, pos += len);\n },\n };\n\n return self;\n}\n\nfunction makeError(msg, level, fatal) {\n const err = new Error(msg);\n if (typeof level === 'boolean') {\n fatal = level;\n err.level = 'protocol';\n } else {\n err.level = level || 'protocol';\n }\n err.fatal = !!fatal;\n return err;\n}\n\nfunction writeUInt32BE(buf, value, offset) {\n buf[offset++] = (value >>> 24);\n buf[offset++] = (value >>> 16);\n buf[offset++] = (value >>> 8);\n buf[offset++] = value;\n return offset;\n}\n\nconst utilBufferParser = makeBufferParser();\n\nmodule.exports = {\n bufferCopy,\n bufferSlice,\n FastBuffer,\n bufferFill: (buf, value, start, end) => {\n return TypedArrayFill.call(buf, value, start, end);\n },\n makeError,\n doFatalError: (protocol, msg, level, reason) => {\n let err;\n if (DISCONNECT_REASON === undefined)\n ({ DISCONNECT_REASON } = require('./constants.js'));\n if (msg instanceof Error) {\n // doFatalError(protocol, err[, reason])\n err = msg;\n if (typeof level !== 'number')\n reason = DISCONNECT_REASON.PROTOCOL_ERROR;\n else\n reason = level;\n } else {\n // doFatalError(protocol, msg[, level[, reason]])\n err = makeError(msg, level, true);\n }\n if (typeof reason !== 'number')\n reason = DISCONNECT_REASON.PROTOCOL_ERROR;\n protocol.disconnect(reason);\n protocol._destruct();\n protocol._onError(err);\n return Infinity;\n },\n readUInt32BE,\n writeUInt32BE,\n writeUInt32LE: (buf, value, offset) => {\n buf[offset++] = value;\n buf[offset++] = (value >>> 8);\n buf[offset++] = (value >>> 16);\n buf[offset++] = (value >>> 24);\n return offset;\n },\n makeBufferParser,\n bufferParser: makeBufferParser(),\n readString: (buffer, start, dest, maxLen) => {\n if (typeof dest === 'number') {\n maxLen = dest;\n dest = undefined;\n }\n\n if (start === undefined)\n start = 0;\n\n const left = (buffer.length - start);\n if (start < 0 || start >= buffer.length || left < 4)\n return;\n\n const len = readUInt32BE(buffer, start);\n if (left < (4 + len) || (typeof maxLen === 'number' && len > maxLen))\n return;\n\n start += 4;\n const end = start + len;\n buffer._pos = end;\n\n if (dest) {\n if (Buffer.isBuffer(dest))\n return bufferCopy(buffer, dest, start, end);\n return buffer.utf8Slice(start, end);\n }\n return bufferSlice(buffer, start, end);\n },\n sigSSHToASN1: (sig, type) => {\n switch (type) {\n case 'ssh-dss': {\n if (sig.length > 40)\n return sig;\n // Change bare signature r and s values to ASN.1 BER values for OpenSSL\n const asnWriter = new Ber.Writer();\n asnWriter.startSequence();\n let r = sig.slice(0, 20);\n let s = sig.slice(20);\n if (r[0] & 0x80) {\n const rNew = Buffer.allocUnsafe(21);\n rNew[0] = 0x00;\n r.copy(rNew, 1);\n r = rNew;\n } else if (r[0] === 0x00 && !(r[1] & 0x80)) {\n r = r.slice(1);\n }\n if (s[0] & 0x80) {\n const sNew = Buffer.allocUnsafe(21);\n sNew[0] = 0x00;\n s.copy(sNew, 1);\n s = sNew;\n } else if (s[0] === 0x00 && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n asnWriter.writeBuffer(r, Ber.Integer);\n asnWriter.writeBuffer(s, Ber.Integer);\n asnWriter.endSequence();\n return asnWriter.buffer;\n }\n case 'ecdsa-sha2-nistp256':\n case 'ecdsa-sha2-nistp384':\n case 'ecdsa-sha2-nistp521': {\n utilBufferParser.init(sig, 0);\n const r = utilBufferParser.readString();\n const s = utilBufferParser.readString();\n utilBufferParser.clear();\n if (r === undefined || s === undefined)\n return;\n\n const asnWriter = new Ber.Writer();\n asnWriter.startSequence();\n asnWriter.writeBuffer(r, Ber.Integer);\n asnWriter.writeBuffer(s, Ber.Integer);\n asnWriter.endSequence();\n return asnWriter.buffer;\n }\n default:\n return sig;\n }\n },\n convertSignature: (signature, keyType) => {\n switch (keyType) {\n case 'ssh-dss': {\n if (signature.length <= 40)\n return signature;\n // This is a quick and dirty way to get from BER encoded r and s that\n // OpenSSL gives us, to just the bare values back to back (40 bytes\n // total) like OpenSSH (and possibly others) are expecting\n const asnReader = new Ber.Reader(signature);\n asnReader.readSequence();\n let r = asnReader.readString(Ber.Integer, true);\n let s = asnReader.readString(Ber.Integer, true);\n let rOffset = 0;\n let sOffset = 0;\n if (r.length < 20) {\n const rNew = Buffer.allocUnsafe(20);\n rNew.set(r, 1);\n r = rNew;\n r[0] = 0;\n }\n if (s.length < 20) {\n const sNew = Buffer.allocUnsafe(20);\n sNew.set(s, 1);\n s = sNew;\n s[0] = 0;\n }\n if (r.length > 20 && r[0] === 0)\n rOffset = 1;\n if (s.length > 20 && s[0] === 0)\n sOffset = 1;\n const newSig =\n Buffer.allocUnsafe((r.length - rOffset) + (s.length - sOffset));\n bufferCopy(r, newSig, rOffset, r.length, 0);\n bufferCopy(s, newSig, sOffset, s.length, r.length - rOffset);\n return newSig;\n }\n case 'ecdsa-sha2-nistp256':\n case 'ecdsa-sha2-nistp384':\n case 'ecdsa-sha2-nistp521': {\n if (signature[0] === 0)\n return signature;\n // Convert SSH signature parameters to ASN.1 BER values for OpenSSL\n const asnReader = new Ber.Reader(signature);\n asnReader.readSequence();\n const r = asnReader.readString(Ber.Integer, true);\n const s = asnReader.readString(Ber.Integer, true);\n if (r === null || s === null)\n return;\n const newSig = Buffer.allocUnsafe(4 + r.length + 4 + s.length);\n writeUInt32BE(newSig, r.length, 0);\n newSig.set(r, 4);\n writeUInt32BE(newSig, s.length, 4 + r.length);\n newSig.set(s, 4 + 4 + r.length);\n return newSig;\n }\n }\n\n return signature;\n },\n sendPacket: (proto, packet, bypass) => {\n if (!bypass && proto._kexinit !== undefined) {\n // We're currently in the middle of a handshake\n\n if (proto._queue === undefined)\n proto._queue = [];\n proto._queue.push(packet);\n proto._debug && proto._debug('Outbound: ... packet queued');\n return false;\n }\n proto._cipher.encrypt(packet);\n return true;\n },\n};\n", "\nvar createPoly1305 = (function() {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n return (\nfunction(createPoly1305) {\n createPoly1305 = createPoly1305 || {};\n\n\nvar b;b||(b=typeof createPoly1305 !== 'undefined' ? createPoly1305 : {});var q,r;b.ready=new Promise(function(a,c){q=a;r=c});var u={},w;for(w in b)b.hasOwnProperty(w)&&(u[w]=b[w]);var x=\"object\"===typeof window,y=\"function\"===typeof importScripts,z=\"object\"===typeof process&&\"object\"===typeof process.versions&&\"string\"===typeof process.versions.node,B=\"\",C,D,E,F,G;\nif(z)B=y?require(\"path\").dirname(B)+\"/\":__dirname+\"/\",C=function(a,c){var d=H(a);if(d)return c?d:d.toString();F||(F=require(\"fs\"));G||(G=require(\"path\"));a=G.normalize(a);return F.readFileSync(a,c?null:\"utf8\")},E=function(a){a=C(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a},D=function(a,c,d){var e=H(a);e&&c(e);F||(F=require(\"fs\"));G||(G=require(\"path\"));a=G.normalize(a);F.readFile(a,function(f,l){f?d(f):c(l.buffer)})},1<process.argv.length&&process.argv[1].replace(/\\\\/g,\"/\"),process.argv.slice(2),\nb.inspect=function(){return\"[Emscripten Module object]\"};else if(x||y)y?B=self.location.href:\"undefined\"!==typeof document&&document.currentScript&&(B=document.currentScript.src),_scriptDir&&(B=_scriptDir),0!==B.indexOf(\"blob:\")?B=B.substr(0,B.lastIndexOf(\"/\")+1):B=\"\",C=function(a){try{var c=new XMLHttpRequest;c.open(\"GET\",a,!1);c.send(null);return c.responseText}catch(f){if(a=H(a)){c=[];for(var d=0;d<a.length;d++){var e=a[d];255<e&&(ba&&assert(!1,\"Character code \"+e+\" (\"+String.fromCharCode(e)+\") at offset \"+\nd+\" not in 0x00-0xFF.\"),e&=255);c.push(String.fromCharCode(e))}return c.join(\"\")}throw f;}},y&&(E=function(a){try{var c=new XMLHttpRequest;c.open(\"GET\",a,!1);c.responseType=\"arraybuffer\";c.send(null);return new Uint8Array(c.response)}catch(d){if(a=H(a))return a;throw d;}}),D=function(a,c,d){var e=new XMLHttpRequest;e.open(\"GET\",a,!0);e.responseType=\"arraybuffer\";e.onload=function(){if(200==e.status||0==e.status&&e.response)c(e.response);else{var f=H(a);f?c(f.buffer):d()}};e.onerror=d;e.send(null)};\nb.print||console.log.bind(console);var I=b.printErr||console.warn.bind(console);for(w in u)u.hasOwnProperty(w)&&(b[w]=u[w]);u=null;var J;b.wasmBinary&&(J=b.wasmBinary);var noExitRuntime=b.noExitRuntime||!0;\"object\"!==typeof WebAssembly&&K(\"no native wasm support detected\");var L,M=!1;function assert(a,c){a||K(\"Assertion failed: \"+c)}function N(a){var c=b[\"_\"+a];assert(c,\"Cannot call unknown function \"+a+\", make sure it is exported\");return c}\nfunction ca(a,c,d,e){var f={string:function(g){var p=0;if(null!==g&&void 0!==g&&0!==g){var n=(g.length<<2)+1;p=O(n);var k=p,h=P;if(0<n){n=k+n-1;for(var v=0;v<g.length;++v){var m=g.charCodeAt(v);if(55296<=m&&57343>=m){var oa=g.charCodeAt(++v);m=65536+((m&1023)<<10)|oa&1023}if(127>=m){if(k>=n)break;h[k++]=m}else{if(2047>=m){if(k+1>=n)break;h[k++]=192|m>>6}else{if(65535>=m){if(k+2>=n)break;h[k++]=224|m>>12}else{if(k+3>=n)break;h[k++]=240|m>>18;h[k++]=128|m>>12&63}h[k++]=128|m>>6&63}h[k++]=128|m&63}}h[k]=\n0}}return p},array:function(g){var p=O(g.length);Q.set(g,p);return p}},l=N(a),A=[];a=0;if(e)for(var t=0;t<e.length;t++){var aa=f[d[t]];aa?(0===a&&(a=da()),A[t]=aa(e[t])):A[t]=e[t]}d=l.apply(null,A);d=function(g){if(\"string\"===c)if(g){for(var p=P,n=g+NaN,k=g;p[k]&&!(k>=n);)++k;if(16<k-g&&p.subarray&&ea)g=ea.decode(p.subarray(g,k));else{for(n=\"\";g<k;){var h=p[g++];if(h&128){var v=p[g++]&63;if(192==(h&224))n+=String.fromCharCode((h&31)<<6|v);else{var m=p[g++]&63;h=224==(h&240)?(h&15)<<12|v<<6|m:(h&7)<<\n18|v<<12|m<<6|p[g++]&63;65536>h?n+=String.fromCharCode(h):(h-=65536,n+=String.fromCharCode(55296|h>>10,56320|h&1023))}}else n+=String.fromCharCode(h)}g=n}}else g=\"\";else g=\"boolean\"===c?!!g:g;return g}(d);0!==a&&fa(a);return d}var ea=\"undefined\"!==typeof TextDecoder?new TextDecoder(\"utf8\"):void 0,ha,Q,P;\nfunction ia(){var a=L.buffer;ha=a;b.HEAP8=Q=new Int8Array(a);b.HEAP16=new Int16Array(a);b.HEAP32=new Int32Array(a);b.HEAPU8=P=new Uint8Array(a);b.HEAPU16=new Uint16Array(a);b.HEAPU32=new Uint32Array(a);b.HEAPF32=new Float32Array(a);b.HEAPF64=new Float64Array(a)}var R,ja=[],ka=[],la=[];function ma(){var a=b.preRun.shift();ja.unshift(a)}var S=0,T=null,U=null;b.preloadedImages={};b.preloadedAudios={};\nfunction K(a){if(b.onAbort)b.onAbort(a);I(a);M=!0;a=new WebAssembly.RuntimeError(\"abort(\"+a+\"). Build with -s ASSERTIONS=1 for more info.\");r(a);throw a;}var V=\"data:application/octet-stream;base64,\",W;W=\"data:application/octet-stream;base64,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\";if(!W.startsWith(V)){var na=W;W=b.locateFile?b.locateFile(na,B):B+na}function pa(){var a=W;try{if(a==W&&J)return new Uint8Array(J);var c=H(a);if(c)return c;if(E)return E(a);throw\"both async and sync fetching of the wasm failed\";}catch(d){K(d)}}\nfunction qa(){if(!J&&(x||y)){if(\"function\"===typeof fetch&&!W.startsWith(\"file://\"))return fetch(W,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+W+\"'\";return a.arrayBuffer()}).catch(function(){return pa()});if(D)return new Promise(function(a,c){D(W,function(d){a(new Uint8Array(d))},c)})}return Promise.resolve().then(function(){return pa()})}\nfunction X(a){for(;0<a.length;){var c=a.shift();if(\"function\"==typeof c)c(b);else{var d=c.m;\"number\"===typeof d?void 0===c.l?R.get(d)():R.get(d)(c.l):d(void 0===c.l?null:c.l)}}}\nvar ba=!1,ra=\"function\"===typeof atob?atob:function(a){var c=\"\",d=0;a=a.replace(/[^A-Za-z0-9\\+\\/=]/g,\"\");do{var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(d++));var f=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(d++));var l=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(d++));var A=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(d++));e=e<<\n2|f>>4;f=(f&15)<<4|l>>2;var t=(l&3)<<6|A;c+=String.fromCharCode(e);64!==l&&(c+=String.fromCharCode(f));64!==A&&(c+=String.fromCharCode(t))}while(d<a.length);return c};\nfunction H(a){if(a.startsWith(V)){a=a.slice(V.length);if(\"boolean\"===typeof z&&z){var c=Buffer.from(a,\"base64\");c=new Uint8Array(c.buffer,c.byteOffset,c.byteLength)}else try{var d=ra(a),e=new Uint8Array(d.length);for(a=0;a<d.length;++a)e[a]=d.charCodeAt(a);c=e}catch(f){throw Error(\"Converting base64 string to bytes failed.\");}return c}}\nvar sa={a:function(a){var c=P.length;a>>>=0;if(2147483648<a)return!1;for(var d=1;4>=d;d*=2){var e=c*(1+.2/d);e=Math.min(e,a+100663296);e=Math.max(a,e);0<e%65536&&(e+=65536-e%65536);a:{try{L.grow(Math.min(2147483648,e)-ha.byteLength+65535>>>16);ia();var f=1;break a}catch(l){}f=void 0}if(f)return!0}return!1}};\n(function(){function a(f){b.asm=f.exports;L=b.asm.b;ia();R=b.asm.j;ka.unshift(b.asm.c);S--;b.monitorRunDependencies&&b.monitorRunDependencies(S);0==S&&(null!==T&&(clearInterval(T),T=null),U&&(f=U,U=null,f()))}function c(f){a(f.instance)}function d(f){return qa().then(function(l){return WebAssembly.instantiate(l,e)}).then(f,function(l){I(\"failed to asynchronously prepare wasm: \"+l);K(l)})}var e={a:sa};S++;b.monitorRunDependencies&&b.monitorRunDependencies(S);if(b.instantiateWasm)try{return b.instantiateWasm(e,\na)}catch(f){return I(\"Module.instantiateWasm callback failed with error: \"+f),!1}(function(){return J||\"function\"!==typeof WebAssembly.instantiateStreaming||W.startsWith(V)||W.startsWith(\"file://\")||\"function\"!==typeof fetch?d(c):fetch(W,{credentials:\"same-origin\"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(c,function(l){I(\"wasm streaming compile failed: \"+l);I(\"falling back to ArrayBuffer instantiation\");return d(c)})})})().catch(r);return{}})();\nb.___wasm_call_ctors=function(){return(b.___wasm_call_ctors=b.asm.c).apply(null,arguments)};b._poly1305_auth=function(){return(b._poly1305_auth=b.asm.d).apply(null,arguments)};var da=b.stackSave=function(){return(da=b.stackSave=b.asm.e).apply(null,arguments)},fa=b.stackRestore=function(){return(fa=b.stackRestore=b.asm.f).apply(null,arguments)},O=b.stackAlloc=function(){return(O=b.stackAlloc=b.asm.g).apply(null,arguments)};b._malloc=function(){return(b._malloc=b.asm.h).apply(null,arguments)};\nb._free=function(){return(b._free=b.asm.i).apply(null,arguments)};b.cwrap=function(a,c,d,e){d=d||[];var f=d.every(function(l){return\"number\"===l});return\"string\"!==c&&f&&!e?N(a):function(){return ca(a,c,d,arguments)}};var Y;U=function ta(){Y||Z();Y||(U=ta)};\nfunction Z(){function a(){if(!Y&&(Y=!0,b.calledRun=!0,!M)){X(ka);q(b);if(b.onRuntimeInitialized)b.onRuntimeInitialized();if(b.postRun)for(\"function\"==typeof b.postRun&&(b.postRun=[b.postRun]);b.postRun.length;){var c=b.postRun.shift();la.unshift(c)}X(la)}}if(!(0<S)){if(b.preRun)for(\"function\"==typeof b.preRun&&(b.preRun=[b.preRun]);b.preRun.length;)ma();X(ja);0<S||(b.setStatus?(b.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){b.setStatus(\"\")},1);a()},1)):a())}}b.run=Z;\nif(b.preInit)for(\"function\"==typeof b.preInit&&(b.preInit=[b.preInit]);0<b.preInit.length;)b.preInit.pop()();Z();\n\n\n return createPoly1305.ready\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = createPoly1305;\nelse if (typeof define === 'function' && define['amd'])\n define([], function() { return createPoly1305; });\nelse if (typeof exports === 'object')\n exports[\"createPoly1305\"] = createPoly1305;\n", "// TODO:\n// * make max packet size configurable\n// * if decompression is enabled, use `._packet` in decipher instances as\n// input to (sync) zlib inflater with appropriate offset and length to\n// avoid an additional copy of payload data before inflation\n// * factor decompression status into packet length checks\n'use strict';\n\nconst {\n createCipheriv, createDecipheriv, createHmac, randomFillSync, timingSafeEqual\n} = require('crypto');\n\nconst { readUInt32BE, writeUInt32BE } = require('./utils.js');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst MAX_SEQNO = 2 ** 32 - 1;\nconst EMPTY_BUFFER = Buffer.alloc(0);\nconst BUF_INT = Buffer.alloc(4);\nconst DISCARD_CACHE = new Map();\nconst MAX_PACKET_SIZE = 35000;\n\nlet binding;\nlet AESGCMCipher;\nlet ChaChaPolyCipher;\nlet GenericCipher;\nlet AESGCMDecipher;\nlet ChaChaPolyDecipher;\nlet GenericDecipher;\ntry {\n binding = require('./crypto/build/Release/sshcrypto.node');\n ({ AESGCMCipher, ChaChaPolyCipher, GenericCipher,\n AESGCMDecipher, ChaChaPolyDecipher, GenericDecipher } = binding);\n} catch {}\n\nconst CIPHER_STREAM = 1 << 0;\nconst CIPHER_INFO = (() => {\n function info(sslName, blockLen, keyLen, ivLen, authLen, discardLen, flags) {\n return {\n sslName,\n blockLen,\n keyLen,\n ivLen: (ivLen !== 0 || (flags & CIPHER_STREAM)\n ? ivLen\n : blockLen),\n authLen,\n discardLen,\n stream: !!(flags & CIPHER_STREAM),\n };\n }\n\n return {\n 'chacha20-poly1305@openssh.com':\n info('chacha20', 8, 64, 0, 16, 0, CIPHER_STREAM),\n\n 'aes128-gcm': info('aes-128-gcm', 16, 16, 12, 16, 0, CIPHER_STREAM),\n 'aes256-gcm': info('aes-256-gcm', 16, 32, 12, 16, 0, CIPHER_STREAM),\n 'aes128-gcm@openssh.com':\n info('aes-128-gcm', 16, 16, 12, 16, 0, CIPHER_STREAM),\n 'aes256-gcm@openssh.com':\n info('aes-256-gcm', 16, 32, 12, 16, 0, CIPHER_STREAM),\n\n 'aes128-cbc': info('aes-128-cbc', 16, 16, 0, 0, 0, 0),\n 'aes192-cbc': info('aes-192-cbc', 16, 24, 0, 0, 0, 0),\n 'aes256-cbc': info('aes-256-cbc', 16, 32, 0, 0, 0, 0),\n 'rijndael-cbc@lysator.liu.se': info('aes-256-cbc', 16, 32, 0, 0, 0, 0),\n '3des-cbc': info('des-ede3-cbc', 8, 24, 0, 0, 0, 0),\n 'blowfish-cbc': info('bf-cbc', 8, 16, 0, 0, 0, 0),\n 'idea-cbc': info('idea-cbc', 8, 16, 0, 0, 0, 0),\n 'cast128-cbc': info('cast-cbc', 8, 16, 0, 0, 0, 0),\n\n 'aes128-ctr': info('aes-128-ctr', 16, 16, 16, 0, 0, CIPHER_STREAM),\n 'aes192-ctr': info('aes-192-ctr', 16, 24, 16, 0, 0, CIPHER_STREAM),\n 'aes256-ctr': info('aes-256-ctr', 16, 32, 16, 0, 0, CIPHER_STREAM),\n '3des-ctr': info('des-ede3', 8, 24, 8, 0, 0, CIPHER_STREAM),\n 'blowfish-ctr': info('bf-ecb', 8, 16, 8, 0, 0, CIPHER_STREAM),\n 'cast128-ctr': info('cast5-ecb', 8, 16, 8, 0, 0, CIPHER_STREAM),\n\n /* The \"arcfour128\" algorithm is the RC4 cipher, as described in\n [SCHNEIER], using a 128-bit key. The first 1536 bytes of keystream\n generated by the cipher MUST be discarded, and the first byte of the\n first encrypted packet MUST be encrypted using the 1537th byte of\n keystream.\n\n -- http://tools.ietf.org/html/rfc4345#section-4 */\n 'arcfour': info('rc4', 8, 16, 0, 0, 1536, CIPHER_STREAM),\n 'arcfour128': info('rc4', 8, 16, 0, 0, 1536, CIPHER_STREAM),\n 'arcfour256': info('rc4', 8, 32, 0, 0, 1536, CIPHER_STREAM),\n 'arcfour512': info('rc4', 8, 64, 0, 0, 1536, CIPHER_STREAM),\n };\n})();\n\nconst MAC_INFO = (() => {\n function info(sslName, len, actualLen, isETM) {\n return {\n sslName,\n len,\n actualLen,\n isETM,\n };\n }\n\n return {\n 'hmac-md5': info('md5', 16, 16, false),\n 'hmac-md5-96': info('md5', 16, 12, false),\n 'hmac-ripemd160': info('ripemd160', 20, 20, false),\n 'hmac-sha1': info('sha1', 20, 20, false),\n 'hmac-sha1-etm@openssh.com': info('sha1', 20, 20, true),\n 'hmac-sha1-96': info('sha1', 20, 12, false),\n 'hmac-sha2-256': info('sha256', 32, 32, false),\n 'hmac-sha2-256-etm@openssh.com': info('sha256', 32, 32, true),\n 'hmac-sha2-256-96': info('sha256', 32, 12, false),\n 'hmac-sha2-512': info('sha512', 64, 64, false),\n 'hmac-sha2-512-etm@openssh.com': info('sha512', 64, 64, true),\n 'hmac-sha2-512-96': info('sha512', 64, 12, false),\n };\n})();\n\n\n// Should only_be used during the initial handshake\nclass NullCipher {\n constructor(seqno, onWrite) {\n this.outSeqno = seqno;\n this._onWrite = onWrite;\n this._dead = false;\n }\n free() {\n this._dead = true;\n }\n allocPacket(payloadLen) {\n let pktLen = 4 + 1 + payloadLen;\n let padLen = 8 - (pktLen & (8 - 1));\n if (padLen < 4)\n padLen += 8;\n pktLen += padLen;\n\n const packet = Buffer.allocUnsafe(pktLen);\n\n writeUInt32BE(packet, pktLen - 4, 0);\n packet[4] = padLen;\n\n randomFillSync(packet, 5 + payloadLen, padLen);\n\n return packet;\n }\n encrypt(packet) {\n // `packet` === unencrypted packet\n\n if (this._dead)\n return;\n\n this._onWrite(packet);\n\n this.outSeqno = (this.outSeqno + 1) >>> 0;\n }\n}\n\n\nconst POLY1305_ZEROS = Buffer.alloc(32);\nconst POLY1305_OUT_COMPUTE = Buffer.alloc(16);\nlet POLY1305_WASM_MODULE;\nlet POLY1305_RESULT_MALLOC;\nlet poly1305_auth;\nclass ChaChaPolyCipherNative {\n constructor(config) {\n const enc = config.outbound;\n this.outSeqno = enc.seqno;\n this._onWrite = enc.onWrite;\n this._encKeyMain = enc.cipherKey.slice(0, 32);\n this._encKeyPktLen = enc.cipherKey.slice(32);\n this._dead = false;\n }\n free() {\n this._dead = true;\n }\n allocPacket(payloadLen) {\n let pktLen = 4 + 1 + payloadLen;\n let padLen = 8 - ((pktLen - 4) & (8 - 1));\n if (padLen < 4)\n padLen += 8;\n pktLen += padLen;\n\n const packet = Buffer.allocUnsafe(pktLen);\n\n writeUInt32BE(packet, pktLen - 4, 0);\n packet[4] = padLen;\n\n randomFillSync(packet, 5 + payloadLen, padLen);\n\n return packet;\n }\n encrypt(packet) {\n // `packet` === unencrypted packet\n\n if (this._dead)\n return;\n\n // Generate Poly1305 key\n POLY1305_OUT_COMPUTE[0] = 0; // Set counter to 0 (little endian)\n writeUInt32BE(POLY1305_OUT_COMPUTE, this.outSeqno, 12);\n const polyKey =\n createCipheriv('chacha20', this._encKeyMain, POLY1305_OUT_COMPUTE)\n .update(POLY1305_ZEROS);\n\n // Encrypt packet length\n const pktLenEnc =\n createCipheriv('chacha20', this._encKeyPktLen, POLY1305_OUT_COMPUTE)\n .update(packet.slice(0, 4));\n this._onWrite(pktLenEnc);\n\n // Encrypt rest of packet\n POLY1305_OUT_COMPUTE[0] = 1; // Set counter to 1 (little endian)\n const payloadEnc =\n createCipheriv('chacha20', this._encKeyMain, POLY1305_OUT_COMPUTE)\n .update(packet.slice(4));\n this._onWrite(payloadEnc);\n\n // Calculate Poly1305 MAC\n poly1305_auth(POLY1305_RESULT_MALLOC,\n pktLenEnc,\n pktLenEnc.length,\n payloadEnc,\n payloadEnc.length,\n polyKey);\n const mac = Buffer.allocUnsafe(16);\n mac.set(\n new Uint8Array(POLY1305_WASM_MODULE.HEAPU8.buffer,\n POLY1305_RESULT_MALLOC,\n 16),\n 0\n );\n this._onWrite(mac);\n\n this.outSeqno = (this.outSeqno + 1) >>> 0;\n }\n}\n\nclass ChaChaPolyCipherBinding {\n constructor(config) {\n const enc = config.outbound;\n this.outSeqno = enc.seqno;\n this._onWrite = enc.onWrite;\n this._instance = new ChaChaPolyCipher(enc.cipherKey);\n this._dead = false;\n }\n free() {\n this._dead = true;\n this._instance.free();\n }\n allocPacket(payloadLen) {\n let pktLen = 4 + 1 + payloadLen;\n let padLen = 8 - ((pktLen - 4) & (8 - 1));\n if (padLen < 4)\n padLen += 8;\n pktLen += padLen;\n\n const packet = Buffer.allocUnsafe(pktLen + 16/* MAC */);\n\n writeUInt32BE(packet, pktLen - 4, 0);\n packet[4] = padLen;\n\n randomFillSync(packet, 5 + payloadLen, padLen);\n\n return packet;\n }\n encrypt(packet) {\n // `packet` === unencrypted packet\n\n if (this._dead)\n return;\n\n // Encrypts in-place\n this._instance.encrypt(packet, this.outSeqno);\n\n this._onWrite(packet);\n\n this.outSeqno = (this.outSeqno + 1) >>> 0;\n }\n}\n\n\nclass AESGCMCipherNative {\n constructor(config) {\n const enc = config.outbound;\n this.outSeqno = enc.seqno;\n this._onWrite = enc.onWrite;\n this._encSSLName = enc.cipherInfo.sslName;\n this._encKey = enc.cipherKey;\n this._encIV = enc.cipherIV;\n this._dead = false;\n }\n free() {\n this._dead = true;\n }\n allocPacket(payloadLen) {\n let pktLen = 4 + 1 + payloadLen;\n let padLen = 16 - ((pktLen - 4) & (16 - 1));\n if (padLen < 4)\n padLen += 16;\n pktLen += padLen;\n\n const packet = Buffer.allocUnsafe(pktLen);\n\n writeUInt32BE(packet, pktLen - 4, 0);\n packet[4] = padLen;\n\n randomFillSync(packet, 5 + payloadLen, padLen);\n\n return packet;\n }\n encrypt(packet) {\n // `packet` === unencrypted packet\n\n if (this._dead)\n return;\n\n const cipher = createCipheriv(this._encSSLName, this._encKey, this._encIV);\n cipher.setAutoPadding(false);\n\n const lenData = packet.slice(0, 4);\n cipher.setAAD(lenData);\n this._onWrite(lenData);\n\n // Encrypt pad length, payload, and padding\n const encrypted = cipher.update(packet.slice(4));\n this._onWrite(encrypted);\n const final = cipher.final();\n // XXX: final.length === 0 always?\n if (final.length)\n this._onWrite(final);\n\n // Generate MAC\n const tag = cipher.getAuthTag();\n this._onWrite(tag);\n\n // Increment counter in IV by 1 for next packet\n ivIncrement(this._encIV);\n\n this.outSeqno = (this.outSeqno + 1) >>> 0;\n }\n}\n\nclass AESGCMCipherBinding {\n constructor(config) {\n const enc = config.outbound;\n this.outSeqno = enc.seqno;\n this._onWrite = enc.onWrite;\n this._instance = new AESGCMCipher(enc.cipherInfo.sslName,\n enc.cipherKey,\n enc.cipherIV);\n this._dead = false;\n }\n free() {\n this._dead = true;\n this._instance.free();\n }\n allocPacket(payloadLen) {\n let pktLen = 4 + 1 + payloadLen;\n let padLen = 16 - ((pktLen - 4) & (16 - 1));\n if (padLen < 4)\n padLen += 16;\n pktLen += padLen;\n\n const packet = Buffer.allocUnsafe(pktLen + 16/* authTag */);\n\n writeUInt32BE(packet, pktLen - 4, 0);\n packet[4] = padLen;\n\n randomFillSync(packet, 5 + payloadLen, padLen);\n\n return packet;\n }\n encrypt(packet) {\n // `packet` === unencrypted packet\n\n if (this._dead)\n return;\n\n // Encrypts in-place\n this._instance.encrypt(packet);\n\n this._onWrite(packet);\n\n this.outSeqno = (this.outSeqno + 1) >>> 0;\n }\n}\n\n\nclass GenericCipherNative {\n constructor(config) {\n const enc = config.outbound;\n this.outSeqno = enc.seqno;\n this._onWrite = enc.onWrite;\n this._encBlockLen = enc.cipherInfo.blockLen;\n this._cipherInstance = createCipheriv(enc.cipherInfo.sslName,\n enc.cipherKey,\n enc.cipherIV);\n this._macSSLName = enc.macInfo.sslName;\n this._macKey = enc.macKey;\n this._macActualLen = enc.macInfo.actualLen;\n this._macETM = enc.macInfo.isETM;\n this._aadLen = (this._macETM ? 4 : 0);\n this._dead = false;\n\n const discardLen = enc.cipherInfo.discardLen;\n if (discardLen) {\n let discard = DISCARD_CACHE.get(discardLen);\n if (discard === undefined) {\n discard = Buffer.alloc(discardLen);\n DISCARD_CACHE.set(discardLen, discard);\n }\n this._cipherInstance.update(discard);\n }\n }\n free() {\n this._dead = true;\n }\n allocPacket(payloadLen) {\n const blockLen = this._encBlockLen;\n\n let pktLen = 4 + 1 + payloadLen;\n let padLen = blockLen - ((pktLen - this._aadLen) & (blockLen - 1));\n if (padLen < 4)\n padLen += blockLen;\n pktLen += padLen;\n\n const packet = Buffer.allocUnsafe(pktLen);\n\n writeUInt32BE(packet, pktLen - 4, 0);\n packet[4] = padLen;\n\n randomFillSync(packet, 5 + payloadLen, padLen);\n\n return packet;\n }\n encrypt(packet) {\n // `packet` === unencrypted packet\n\n if (this._dead)\n return;\n\n let mac;\n if (this._macETM) {\n // Encrypt pad length, payload, and padding\n const lenBytes = new Uint8Array(packet.buffer, packet.byteOffset, 4);\n const encrypted = this._cipherInstance.update(\n new Uint8Array(packet.buffer,\n packet.byteOffset + 4,\n packet.length - 4)\n );\n\n this._onWrite(lenBytes);\n this._onWrite(encrypted);\n\n // TODO: look into storing seqno as 4-byte buffer and incrementing like we\n // do for AES-GCM IVs to avoid having to (re)write all 4 bytes every time\n mac = createHmac(this._macSSLName, this._macKey);\n writeUInt32BE(BUF_INT, this.outSeqno, 0);\n mac.update(BUF_INT);\n mac.update(lenBytes);\n mac.update(encrypted);\n } else {\n // Encrypt length field, pad length, payload, and padding\n const encrypted = this._cipherInstance.update(packet);\n this._onWrite(encrypted);\n\n // TODO: look into storing seqno as 4-byte buffer and incrementing like we\n // do for AES-GCM IVs to avoid having to (re)write all 4 bytes every time\n mac = createHmac(this._macSSLName, this._macKey);\n writeUInt32BE(BUF_INT, this.outSeqno, 0);\n mac.update(BUF_INT);\n mac.update(packet);\n }\n\n let digest = mac.digest();\n if (digest.length > this._macActualLen)\n digest = digest.slice(0, this._macActualLen);\n this._onWrite(digest);\n\n this.outSeqno = (this.outSeqno + 1) >>> 0;\n }\n}\n\nclass GenericCipherBinding {\n constructor(config) {\n const enc = config.outbound;\n this.outSeqno = enc.seqno;\n this._onWrite = enc.onWrite;\n this._encBlockLen = enc.cipherInfo.blockLen;\n this._macLen = enc.macInfo.len;\n this._macActualLen = enc.macInfo.actualLen;\n this._aadLen = (enc.macInfo.isETM ? 4 : 0);\n this._instance = new GenericCipher(enc.cipherInfo.sslName,\n enc.cipherKey,\n enc.cipherIV,\n enc.macInfo.sslName,\n enc.macKey,\n enc.macInfo.isETM);\n this._dead = false;\n }\n free() {\n this._dead = true;\n this._instance.free();\n }\n allocPacket(payloadLen) {\n const blockLen = this._encBlockLen;\n\n let pktLen = 4 + 1 + payloadLen;\n let padLen = blockLen - ((pktLen - this._aadLen) & (blockLen - 1));\n if (padLen < 4)\n padLen += blockLen;\n pktLen += padLen;\n\n const packet = Buffer.allocUnsafe(pktLen + this._macLen);\n\n writeUInt32BE(packet, pktLen - 4, 0);\n packet[4] = padLen;\n\n randomFillSync(packet, 5 + payloadLen, padLen);\n\n return packet;\n }\n encrypt(packet) {\n // `packet` === unencrypted packet\n\n if (this._dead)\n return;\n\n // Encrypts in-place\n this._instance.encrypt(packet, this.outSeqno);\n\n if (this._macActualLen < this._macLen) {\n packet = new FastBuffer(packet.buffer,\n packet.byteOffset,\n (packet.length\n - (this._macLen - this._macActualLen)));\n }\n this._onWrite(packet);\n\n this.outSeqno = (this.outSeqno + 1) >>> 0;\n }\n}\n\n\nclass NullDecipher {\n constructor(seqno, onPayload) {\n this.inSeqno = seqno;\n this._onPayload = onPayload;\n this._len = 0;\n this._lenBytes = 0;\n this._packet = null;\n this._packetPos = 0;\n }\n free() {}\n decrypt(data, p, dataLen) {\n while (p < dataLen) {\n // Read packet length\n if (this._lenBytes < 4) {\n let nb = Math.min(4 - this._lenBytes, dataLen - p);\n\n this._lenBytes += nb;\n while (nb--)\n this._len = (this._len << 8) + data[p++];\n\n if (this._lenBytes < 4)\n return;\n\n if (this._len > MAX_PACKET_SIZE\n || this._len < 8\n || (4 + this._len & 7) !== 0) {\n throw new Error('Bad packet length');\n }\n if (p >= dataLen)\n return;\n }\n\n // Read padding length, payload, and padding\n if (this._packetPos < this._len) {\n const nb = Math.min(this._len - this._packetPos, dataLen - p);\n let chunk;\n if (p !== 0 || nb !== dataLen)\n chunk = new Uint8Array(data.buffer, data.byteOffset + p, nb);\n else\n chunk = data;\n if (nb === this._len) {\n this._packet = chunk;\n } else {\n if (!this._packet)\n this._packet = Buffer.allocUnsafe(this._len);\n this._packet.set(chunk, this._packetPos);\n }\n p += nb;\n this._packetPos += nb;\n if (this._packetPos < this._len)\n return;\n }\n\n const payload = (!this._packet\n ? EMPTY_BUFFER\n : new FastBuffer(this._packet.buffer,\n this._packet.byteOffset + 1,\n this._packet.length\n - this._packet[0] - 1));\n\n // Prepare for next packet\n this.inSeqno = (this.inSeqno + 1) >>> 0;\n this._len = 0;\n this._lenBytes = 0;\n this._packet = null;\n this._packetPos = 0;\n\n {\n const ret = this._onPayload(payload);\n if (ret !== undefined)\n return (ret === false ? p : ret);\n }\n }\n }\n}\n\nclass ChaChaPolyDecipherNative {\n constructor(config) {\n const dec = config.inbound;\n this.inSeqno = dec.seqno;\n this._onPayload = dec.onPayload;\n this._decKeyMain = dec.decipherKey.slice(0, 32);\n this._decKeyPktLen = dec.decipherKey.slice(32);\n this._len = 0;\n this._lenBuf = Buffer.alloc(4);\n this._lenPos = 0;\n this._packet = null;\n this._pktLen = 0;\n this._mac = Buffer.allocUnsafe(16);\n this._calcMac = Buffer.allocUnsafe(16);\n this._macPos = 0;\n }\n free() {}\n decrypt(data, p, dataLen) {\n // `data` === encrypted data\n\n while (p < dataLen) {\n // Read packet length\n if (this._lenPos < 4) {\n let nb = Math.min(4 - this._lenPos, dataLen - p);\n while (nb--)\n this._lenBuf[this._lenPos++] = data[p++];\n if (this._lenPos < 4)\n return;\n\n POLY1305_OUT_COMPUTE[0] = 0; // Set counter to 0 (little endian)\n writeUInt32BE(POLY1305_OUT_COMPUTE, this.inSeqno, 12);\n\n const decLenBytes =\n createDecipheriv('chacha20', this._decKeyPktLen, POLY1305_OUT_COMPUTE)\n .update(this._lenBuf);\n this._len = readUInt32BE(decLenBytes, 0);\n\n if (this._len > MAX_PACKET_SIZE\n || this._len < 8\n || (this._len & 7) !== 0) {\n throw new Error('Bad packet length');\n }\n }\n\n // Read padding length, payload, and padding\n if (this._pktLen < this._len) {\n if (p >= dataLen)\n return;\n const nb = Math.min(this._len - this._pktLen, dataLen - p);\n let encrypted;\n if (p !== 0 || nb !== dataLen)\n encrypted = new Uint8Array(data.buffer, data.byteOffset + p, nb);\n else\n encrypted = data;\n if (nb === this._len) {\n this._packet = encrypted;\n } else {\n if (!this._packet)\n this._packet = Buffer.allocUnsafe(this._len);\n this._packet.set(encrypted, this._pktLen);\n }\n p += nb;\n this._pktLen += nb;\n if (this._pktLen < this._len || p >= dataLen)\n return;\n }\n\n // Read Poly1305 MAC\n {\n const nb = Math.min(16 - this._macPos, dataLen - p);\n // TODO: avoid copying if entire MAC is in current chunk\n if (p !== 0 || nb !== dataLen) {\n this._mac.set(\n new Uint8Array(data.buffer, data.byteOffset + p, nb),\n this._macPos\n );\n } else {\n this._mac.set(data, this._macPos);\n }\n p += nb;\n this._macPos += nb;\n if (this._macPos < 16)\n return;\n }\n\n // Generate Poly1305 key\n POLY1305_OUT_COMPUTE[0] = 0; // Set counter to 0 (little endian)\n writeUInt32BE(POLY1305_OUT_COMPUTE, this.inSeqno, 12);\n const polyKey =\n createCipheriv('chacha20', this._decKeyMain, POLY1305_OUT_COMPUTE)\n .update(POLY1305_ZEROS);\n\n // Calculate and compare Poly1305 MACs\n poly1305_auth(POLY1305_RESULT_MALLOC,\n this._lenBuf,\n 4,\n this._packet,\n this._packet.length,\n polyKey);\n\n this._calcMac.set(\n new Uint8Array(POLY1305_WASM_MODULE.HEAPU8.buffer,\n POLY1305_RESULT_MALLOC,\n 16),\n 0\n );\n if (!timingSafeEqual(this._calcMac, this._mac))\n throw new Error('Invalid MAC');\n\n // Decrypt packet\n POLY1305_OUT_COMPUTE[0] = 1; // Set counter to 1 (little endian)\n const packet =\n createDecipheriv('chacha20', this._decKeyMain, POLY1305_OUT_COMPUTE)\n .update(this._packet);\n\n const payload = new FastBuffer(packet.buffer,\n packet.byteOffset + 1,\n packet.length - packet[0] - 1);\n\n // Prepare for next packet\n this.inSeqno = (this.inSeqno + 1) >>> 0;\n this._len = 0;\n this._lenPos = 0;\n this._packet = null;\n this._pktLen = 0;\n this._macPos = 0;\n\n {\n const ret = this._onPayload(payload);\n if (ret !== undefined)\n return (ret === false ? p : ret);\n }\n }\n }\n}\n\nclass ChaChaPolyDecipherBinding {\n constructor(config) {\n const dec = config.inbound;\n this.inSeqno = dec.seqno;\n this._onPayload = dec.onPayload;\n this._instance = new ChaChaPolyDecipher(dec.decipherKey);\n this._len = 0;\n this._lenBuf = Buffer.alloc(4);\n this._lenPos = 0;\n this._packet = null;\n this._pktLen = 0;\n this._mac = Buffer.allocUnsafe(16);\n this._macPos = 0;\n }\n free() {\n this._instance.free();\n }\n decrypt(data, p, dataLen) {\n // `data` === encrypted data\n\n while (p < dataLen) {\n // Read packet length\n if (this._lenPos < 4) {\n let nb = Math.min(4 - this._lenPos, dataLen - p);\n while (nb--)\n this._lenBuf[this._lenPos++] = data[p++];\n if (this._lenPos < 4)\n return;\n\n this._len = this._instance.decryptLen(this._lenBuf, this.inSeqno);\n\n if (this._len > MAX_PACKET_SIZE\n || this._len < 8\n || (this._len & 7) !== 0) {\n throw new Error('Bad packet length');\n }\n\n if (p >= dataLen)\n return;\n }\n\n // Read padding length, payload, and padding\n if (this._pktLen < this._len) {\n const nb = Math.min(this._len - this._pktLen, dataLen - p);\n let encrypted;\n if (p !== 0 || nb !== dataLen)\n encrypted = new Uint8Array(data.buffer, data.byteOffset + p, nb);\n else\n encrypted = data;\n if (nb === this._len) {\n this._packet = encrypted;\n } else {\n if (!this._packet)\n this._packet = Buffer.allocUnsafe(this._len);\n this._packet.set(encrypted, this._pktLen);\n }\n p += nb;\n this._pktLen += nb;\n if (this._pktLen < this._len || p >= dataLen)\n return;\n }\n\n // Read Poly1305 MAC\n {\n const nb = Math.min(16 - this._macPos, dataLen - p);\n // TODO: avoid copying if entire MAC is in current chunk\n if (p !== 0 || nb !== dataLen) {\n this._mac.set(\n new Uint8Array(data.buffer, data.byteOffset + p, nb),\n this._macPos\n );\n } else {\n this._mac.set(data, this._macPos);\n }\n p += nb;\n this._macPos += nb;\n if (this._macPos < 16)\n return;\n }\n\n this._instance.decrypt(this._packet, this._mac, this.inSeqno);\n\n const payload = new FastBuffer(this._packet.buffer,\n this._packet.byteOffset + 1,\n this._packet.length - this._packet[0] - 1);\n\n // Prepare for next packet\n this.inSeqno = (this.inSeqno + 1) >>> 0;\n this._len = 0;\n this._lenPos = 0;\n this._packet = null;\n this._pktLen = 0;\n this._macPos = 0;\n\n {\n const ret = this._onPayload(payload);\n if (ret !== undefined)\n return (ret === false ? p : ret);\n }\n }\n }\n}\n\nclass AESGCMDecipherNative {\n constructor(config) {\n const dec = config.inbound;\n this.inSeqno = dec.seqno;\n this._onPayload = dec.onPayload;\n this._decipherInstance = null;\n this._decipherSSLName = dec.decipherInfo.sslName;\n this._decipherKey = dec.decipherKey;\n this._decipherIV = dec.decipherIV;\n this._len = 0;\n this._lenBytes = 0;\n this._packet = null;\n this._packetPos = 0;\n this._pktLen = 0;\n this._tag = Buffer.allocUnsafe(16);\n this._tagPos = 0;\n }\n free() {}\n decrypt(data, p, dataLen) {\n // `data` === encrypted data\n\n while (p < dataLen) {\n // Read packet length (unencrypted, but AAD)\n if (this._lenBytes < 4) {\n let nb = Math.min(4 - this._lenBytes, dataLen - p);\n this._lenBytes += nb;\n while (nb--)\n this._len = (this._len << 8) + data[p++];\n if (this._lenBytes < 4)\n return;\n\n if ((this._len + 20) > MAX_PACKET_SIZE\n || this._len < 16\n || (this._len & 15) !== 0) {\n throw new Error('Bad packet length');\n }\n\n this._decipherInstance = createDecipheriv(\n this._decipherSSLName,\n this._decipherKey,\n this._decipherIV\n );\n this._decipherInstance.setAutoPadding(false);\n this._decipherInstance.setAAD(intToBytes(this._len));\n }\n\n // Read padding length, payload, and padding\n if (this._pktLen < this._len) {\n if (p >= dataLen)\n return;\n const nb = Math.min(this._len - this._pktLen, dataLen - p);\n let decrypted;\n if (p !== 0 || nb !== dataLen) {\n decrypted = this._decipherInstance.update(\n new Uint8Array(data.buffer, data.byteOffset + p, nb)\n );\n } else {\n decrypted = this._decipherInstance.update(data);\n }\n if (decrypted.length) {\n if (nb === this._len) {\n this._packet = decrypted;\n } else {\n if (!this._packet)\n this._packet = Buffer.allocUnsafe(this._len);\n this._packet.set(decrypted, this._packetPos);\n }\n this._packetPos += decrypted.length;\n }\n p += nb;\n this._pktLen += nb;\n if (this._pktLen < this._len || p >= dataLen)\n return;\n }\n\n // Read authentication tag\n {\n const nb = Math.min(16 - this._tagPos, dataLen - p);\n if (p !== 0 || nb !== dataLen) {\n this._tag.set(\n new Uint8Array(data.buffer, data.byteOffset + p, nb),\n this._tagPos\n );\n } else {\n this._tag.set(data, this._tagPos);\n }\n p += nb;\n this._tagPos += nb;\n if (this._tagPos < 16)\n return;\n }\n\n {\n // Verify authentication tag\n this._decipherInstance.setAuthTag(this._tag);\n\n const decrypted = this._decipherInstance.final();\n\n // XXX: this should never output any data since stream ciphers always\n // return data from .update() and block ciphers must end on a multiple\n // of the block length, which would have caused an exception to be\n // thrown if the total input was not...\n if (decrypted.length) {\n if (this._packet)\n this._packet.set(decrypted, this._packetPos);\n else\n this._packet = decrypted;\n }\n }\n\n const payload = (!this._packet\n ? EMPTY_BUFFER\n : new FastBuffer(this._packet.buffer,\n this._packet.byteOffset + 1,\n this._packet.length\n - this._packet[0] - 1));\n\n // Prepare for next packet\n this.inSeqno = (this.inSeqno + 1) >>> 0;\n ivIncrement(this._decipherIV);\n this._len = 0;\n this._lenBytes = 0;\n this._packet = null;\n this._packetPos = 0;\n this._pktLen = 0;\n this._tagPos = 0;\n\n {\n const ret = this._onPayload(payload);\n if (ret !== undefined)\n return (ret === false ? p : ret);\n }\n }\n }\n}\n\nclass AESGCMDecipherBinding {\n constructor(config) {\n const dec = config.inbound;\n this.inSeqno = dec.seqno;\n this._onPayload = dec.onPayload;\n this._instance = new AESGCMDecipher(dec.decipherInfo.sslName,\n dec.decipherKey,\n dec.decipherIV);\n this._len = 0;\n this._lenBytes = 0;\n this._packet = null;\n this._pktLen = 0;\n this._tag = Buffer.allocUnsafe(16);\n this._tagPos = 0;\n }\n free() {}\n decrypt(data, p, dataLen) {\n // `data` === encrypted data\n\n while (p < dataLen) {\n // Read packet length (unencrypted, but AAD)\n if (this._lenBytes < 4) {\n let nb = Math.min(4 - this._lenBytes, dataLen - p);\n this._lenBytes += nb;\n while (nb--)\n this._len = (this._len << 8) + data[p++];\n if (this._lenBytes < 4)\n return;\n\n if ((this._len + 20) > MAX_PACKET_SIZE\n || this._len < 16\n || (this._len & 15) !== 0) {\n throw new Error(`Bad packet length: ${this._len}`);\n }\n }\n\n // Read padding length, payload, and padding\n if (this._pktLen < this._len) {\n if (p >= dataLen)\n return;\n const nb = Math.min(this._len - this._pktLen, dataLen - p);\n let encrypted;\n if (p !== 0 || nb !== dataLen)\n encrypted = new Uint8Array(data.buffer, data.byteOffset + p, nb);\n else\n encrypted = data;\n if (nb === this._len) {\n this._packet = encrypted;\n } else {\n if (!this._packet)\n this._packet = Buffer.allocUnsafe(this._len);\n this._packet.set(encrypted, this._pktLen);\n }\n p += nb;\n this._pktLen += nb;\n if (this._pktLen < this._len || p >= dataLen)\n return;\n }\n\n // Read authentication tag\n {\n const nb = Math.min(16 - this._tagPos, dataLen - p);\n if (p !== 0 || nb !== dataLen) {\n this._tag.set(\n new Uint8Array(data.buffer, data.byteOffset + p, nb),\n this._tagPos\n );\n } else {\n this._tag.set(data, this._tagPos);\n }\n p += nb;\n this._tagPos += nb;\n if (this._tagPos < 16)\n return;\n }\n\n this._instance.decrypt(this._packet, this._len, this._tag);\n\n const payload = new FastBuffer(this._packet.buffer,\n this._packet.byteOffset + 1,\n this._packet.length - this._packet[0] - 1);\n\n // Prepare for next packet\n this.inSeqno = (this.inSeqno + 1) >>> 0;\n this._len = 0;\n this._lenBytes = 0;\n this._packet = null;\n this._pktLen = 0;\n this._tagPos = 0;\n\n {\n const ret = this._onPayload(payload);\n if (ret !== undefined)\n return (ret === false ? p : ret);\n }\n }\n }\n}\n\n// TODO: test incremental .update()s vs. copying to _packet and doing a single\n// .update() after entire packet read -- a single .update() would allow\n// verifying MAC before decrypting for ETM MACs\nclass GenericDecipherNative {\n constructor(config) {\n const dec = config.inbound;\n this.inSeqno = dec.seqno;\n this._onPayload = dec.onPayload;\n this._decipherInstance = createDecipheriv(dec.decipherInfo.sslName,\n dec.decipherKey,\n dec.decipherIV);\n this._decipherInstance.setAutoPadding(false);\n this._block = Buffer.allocUnsafe(\n dec.macInfo.isETM ? 4 : dec.decipherInfo.blockLen\n );\n this._blockSize = dec.decipherInfo.blockLen;\n this._blockPos = 0;\n this._len = 0;\n this._packet = null;\n this._packetPos = 0;\n this._pktLen = 0;\n this._mac = Buffer.allocUnsafe(dec.macInfo.actualLen);\n this._macPos = 0;\n this._macSSLName = dec.macInfo.sslName;\n this._macKey = dec.macKey;\n this._macActualLen = dec.macInfo.actualLen;\n this._macETM = dec.macInfo.isETM;\n this._macInstance = null;\n\n const discardLen = dec.decipherInfo.discardLen;\n if (discardLen) {\n let discard = DISCARD_CACHE.get(discardLen);\n if (discard === undefined) {\n discard = Buffer.alloc(discardLen);\n DISCARD_CACHE.set(discardLen, discard);\n }\n this._decipherInstance.update(discard);\n }\n }\n free() {}\n decrypt(data, p, dataLen) {\n // `data` === encrypted data\n\n while (p < dataLen) {\n // Read first encrypted block\n if (this._blockPos < this._block.length) {\n const nb = Math.min(this._block.length - this._blockPos, dataLen - p);\n if (p !== 0 || nb !== dataLen || nb < data.length) {\n this._block.set(\n new Uint8Array(data.buffer, data.byteOffset + p, nb),\n this._blockPos\n );\n } else {\n this._block.set(data, this._blockPos);\n }\n\n p += nb;\n this._blockPos += nb;\n if (this._blockPos < this._block.length)\n return;\n\n let decrypted;\n let need;\n if (this._macETM) {\n this._len = need = readUInt32BE(this._block, 0);\n } else {\n // Decrypt first block to get packet length\n decrypted = this._decipherInstance.update(this._block);\n this._len = readUInt32BE(decrypted, 0);\n need = 4 + this._len - this._blockSize;\n }\n\n if (this._len > MAX_PACKET_SIZE\n || this._len < 5\n || (need & (this._blockSize - 1)) !== 0) {\n throw new Error('Bad packet length');\n }\n\n // Create MAC up front to calculate in parallel with decryption\n this._macInstance = createHmac(this._macSSLName, this._macKey);\n\n writeUInt32BE(BUF_INT, this.inSeqno, 0);\n this._macInstance.update(BUF_INT);\n if (this._macETM) {\n this._macInstance.update(this._block);\n } else {\n this._macInstance.update(new Uint8Array(decrypted.buffer,\n decrypted.byteOffset,\n 4));\n this._pktLen = decrypted.length - 4;\n this._packetPos = this._pktLen;\n this._packet = Buffer.allocUnsafe(this._len);\n this._packet.set(\n new Uint8Array(decrypted.buffer,\n decrypted.byteOffset + 4,\n this._packetPos),\n 0\n );\n }\n\n if (p >= dataLen)\n return;\n }\n\n // Read padding length, payload, and padding\n if (this._pktLen < this._len) {\n const nb = Math.min(this._len - this._pktLen, dataLen - p);\n let encrypted;\n if (p !== 0 || nb !== dataLen)\n encrypted = new Uint8Array(data.buffer, data.byteOffset + p, nb);\n else\n encrypted = data;\n if (this._macETM)\n this._macInstance.update(encrypted);\n const decrypted = this._decipherInstance.update(encrypted);\n if (decrypted.length) {\n if (nb === this._len) {\n this._packet = decrypted;\n } else {\n if (!this._packet)\n this._packet = Buffer.allocUnsafe(this._len);\n this._packet.set(decrypted, this._packetPos);\n }\n this._packetPos += decrypted.length;\n }\n p += nb;\n this._pktLen += nb;\n if (this._pktLen < this._len || p >= dataLen)\n return;\n }\n\n // Read MAC\n {\n const nb = Math.min(this._macActualLen - this._macPos, dataLen - p);\n if (p !== 0 || nb !== dataLen) {\n this._mac.set(\n new Uint8Array(data.buffer, data.byteOffset + p, nb),\n this._macPos\n );\n } else {\n this._mac.set(data, this._macPos);\n }\n p += nb;\n this._macPos += nb;\n if (this._macPos < this._macActualLen)\n return;\n }\n\n // Verify MAC\n if (!this._macETM)\n this._macInstance.update(this._packet);\n let calculated = this._macInstance.digest();\n if (this._macActualLen < calculated.length) {\n calculated = new Uint8Array(calculated.buffer,\n calculated.byteOffset,\n this._macActualLen);\n }\n if (!timingSafeEquals(calculated, this._mac))\n throw new Error('Invalid MAC');\n\n const payload = new FastBuffer(this._packet.buffer,\n this._packet.byteOffset + 1,\n this._packet.length - this._packet[0] - 1);\n\n // Prepare for next packet\n this.inSeqno = (this.inSeqno + 1) >>> 0;\n this._blockPos = 0;\n this._len = 0;\n this._packet = null;\n this._packetPos = 0;\n this._pktLen = 0;\n this._macPos = 0;\n this._macInstance = null;\n\n {\n const ret = this._onPayload(payload);\n if (ret !== undefined)\n return (ret === false ? p : ret);\n }\n }\n }\n}\n\nclass GenericDecipherBinding {\n constructor(config) {\n const dec = config.inbound;\n this.inSeqno = dec.seqno;\n this._onPayload = dec.onPayload;\n this._instance = new GenericDecipher(dec.decipherInfo.sslName,\n dec.decipherKey,\n dec.decipherIV,\n dec.macInfo.sslName,\n dec.macKey,\n dec.macInfo.isETM,\n dec.macInfo.actualLen);\n this._block = Buffer.allocUnsafe(\n dec.macInfo.isETM || dec.decipherInfo.stream\n ? 4\n : dec.decipherInfo.blockLen\n );\n this._blockPos = 0;\n this._len = 0;\n this._packet = null;\n this._pktLen = 0;\n this._mac = Buffer.allocUnsafe(dec.macInfo.actualLen);\n this._macPos = 0;\n this._macActualLen = dec.macInfo.actualLen;\n this._macETM = dec.macInfo.isETM;\n }\n free() {\n this._instance.free();\n }\n decrypt(data, p, dataLen) {\n // `data` === encrypted data\n\n while (p < dataLen) {\n // Read first encrypted block\n if (this._blockPos < this._block.length) {\n const nb = Math.min(this._block.length - this._blockPos, dataLen - p);\n if (p !== 0 || nb !== dataLen || nb < data.length) {\n this._block.set(\n new Uint8Array(data.buffer, data.byteOffset + p, nb),\n this._blockPos\n );\n } else {\n this._block.set(data, this._blockPos);\n }\n\n p += nb;\n this._blockPos += nb;\n if (this._blockPos < this._block.length)\n return;\n\n let need;\n if (this._macETM) {\n this._len = need = readUInt32BE(this._block, 0);\n } else {\n // Decrypt first block to get packet length\n this._instance.decryptBlock(this._block);\n this._len = readUInt32BE(this._block, 0);\n need = 4 + this._len - this._block.length;\n }\n\n if (this._len > MAX_PACKET_SIZE\n || this._len < 5\n || (need & (this._block.length - 1)) !== 0) {\n throw new Error('Bad packet length');\n }\n\n if (!this._macETM) {\n this._pktLen = (this._block.length - 4);\n if (this._pktLen) {\n this._packet = Buffer.allocUnsafe(this._len);\n this._packet.set(\n new Uint8Array(this._block.buffer,\n this._block.byteOffset + 4,\n this._pktLen),\n 0\n );\n }\n }\n\n if (p >= dataLen)\n return;\n }\n\n // Read padding length, payload, and padding\n if (this._pktLen < this._len) {\n const nb = Math.min(this._len - this._pktLen, dataLen - p);\n let encrypted;\n if (p !== 0 || nb !== dataLen)\n encrypted = new Uint8Array(data.buffer, data.byteOffset + p, nb);\n else\n encrypted = data;\n if (nb === this._len) {\n this._packet = encrypted;\n } else {\n if (!this._packet)\n this._packet = Buffer.allocUnsafe(this._len);\n this._packet.set(encrypted, this._pktLen);\n }\n p += nb;\n this._pktLen += nb;\n if (this._pktLen < this._len || p >= dataLen)\n return;\n }\n\n // Read MAC\n {\n const nb = Math.min(this._macActualLen - this._macPos, dataLen - p);\n if (p !== 0 || nb !== dataLen) {\n this._mac.set(\n new Uint8Array(data.buffer, data.byteOffset + p, nb),\n this._macPos\n );\n } else {\n this._mac.set(data, this._macPos);\n }\n p += nb;\n this._macPos += nb;\n if (this._macPos < this._macActualLen)\n return;\n }\n\n // Decrypt and verify MAC\n this._instance.decrypt(this._packet,\n this.inSeqno,\n this._block,\n this._mac);\n\n const payload = new FastBuffer(this._packet.buffer,\n this._packet.byteOffset + 1,\n this._packet.length - this._packet[0] - 1);\n\n // Prepare for next packet\n this.inSeqno = (this.inSeqno + 1) >>> 0;\n this._blockPos = 0;\n this._len = 0;\n this._packet = null;\n this._pktLen = 0;\n this._macPos = 0;\n this._macInstance = null;\n\n {\n const ret = this._onPayload(payload);\n if (ret !== undefined)\n return (ret === false ? p : ret);\n }\n }\n }\n}\n\n// Increments unsigned, big endian counter (last 8 bytes) of AES-GCM IV\nfunction ivIncrement(iv) {\n // eslint-disable-next-line no-unused-expressions\n ++iv[11] >>> 8\n && ++iv[10] >>> 8\n && ++iv[9] >>> 8\n && ++iv[8] >>> 8\n && ++iv[7] >>> 8\n && ++iv[6] >>> 8\n && ++iv[5] >>> 8\n && ++iv[4] >>> 8;\n}\n\nconst intToBytes = (() => {\n const ret = Buffer.alloc(4);\n return (n) => {\n ret[0] = (n >>> 24);\n ret[1] = (n >>> 16);\n ret[2] = (n >>> 8);\n ret[3] = n;\n return ret;\n };\n})();\n\nfunction timingSafeEquals(a, b) {\n if (a.length !== b.length) {\n timingSafeEqual(a, a);\n return false;\n }\n return timingSafeEqual(a, b);\n}\n\nfunction createCipher(config) {\n if (typeof config !== 'object' || config === null)\n throw new Error('Invalid config');\n\n if (typeof config.outbound !== 'object' || config.outbound === null)\n throw new Error('Invalid outbound');\n\n const outbound = config.outbound;\n\n if (typeof outbound.onWrite !== 'function')\n throw new Error('Invalid outbound.onWrite');\n\n if (typeof outbound.cipherInfo !== 'object' || outbound.cipherInfo === null)\n throw new Error('Invalid outbound.cipherInfo');\n\n if (!Buffer.isBuffer(outbound.cipherKey)\n || outbound.cipherKey.length !== outbound.cipherInfo.keyLen) {\n throw new Error('Invalid outbound.cipherKey');\n }\n\n if (outbound.cipherInfo.ivLen\n && (!Buffer.isBuffer(outbound.cipherIV)\n || outbound.cipherIV.length !== outbound.cipherInfo.ivLen)) {\n throw new Error('Invalid outbound.cipherIV');\n }\n\n if (typeof outbound.seqno !== 'number'\n || outbound.seqno < 0\n || outbound.seqno > MAX_SEQNO) {\n throw new Error('Invalid outbound.seqno');\n }\n\n const forceNative = !!outbound.forceNative;\n\n switch (outbound.cipherInfo.sslName) {\n case 'aes-128-gcm':\n case 'aes-256-gcm':\n return (AESGCMCipher && !forceNative\n ? new AESGCMCipherBinding(config)\n : new AESGCMCipherNative(config));\n case 'chacha20':\n return (ChaChaPolyCipher && !forceNative\n ? new ChaChaPolyCipherBinding(config)\n : new ChaChaPolyCipherNative(config));\n default: {\n if (typeof outbound.macInfo !== 'object' || outbound.macInfo === null)\n throw new Error('Invalid outbound.macInfo');\n if (!Buffer.isBuffer(outbound.macKey)\n || outbound.macKey.length !== outbound.macInfo.len) {\n throw new Error('Invalid outbound.macKey');\n }\n return (GenericCipher && !forceNative\n ? new GenericCipherBinding(config)\n : new GenericCipherNative(config));\n }\n }\n}\n\nfunction createDecipher(config) {\n if (typeof config !== 'object' || config === null)\n throw new Error('Invalid config');\n\n if (typeof config.inbound !== 'object' || config.inbound === null)\n throw new Error('Invalid inbound');\n\n const inbound = config.inbound;\n\n if (typeof inbound.onPayload !== 'function')\n throw new Error('Invalid inbound.onPayload');\n\n if (typeof inbound.decipherInfo !== 'object'\n || inbound.decipherInfo === null) {\n throw new Error('Invalid inbound.decipherInfo');\n }\n\n if (!Buffer.isBuffer(inbound.decipherKey)\n || inbound.decipherKey.length !== inbound.decipherInfo.keyLen) {\n throw new Error('Invalid inbound.decipherKey');\n }\n\n if (inbound.decipherInfo.ivLen\n && (!Buffer.isBuffer(inbound.decipherIV)\n || inbound.decipherIV.length !== inbound.decipherInfo.ivLen)) {\n throw new Error('Invalid inbound.decipherIV');\n }\n\n if (typeof inbound.seqno !== 'number'\n || inbound.seqno < 0\n || inbound.seqno > MAX_SEQNO) {\n throw new Error('Invalid inbound.seqno');\n }\n\n const forceNative = !!inbound.forceNative;\n\n switch (inbound.decipherInfo.sslName) {\n case 'aes-128-gcm':\n case 'aes-256-gcm':\n return (AESGCMDecipher && !forceNative\n ? new AESGCMDecipherBinding(config)\n : new AESGCMDecipherNative(config));\n case 'chacha20':\n return (ChaChaPolyDecipher && !forceNative\n ? new ChaChaPolyDecipherBinding(config)\n : new ChaChaPolyDecipherNative(config));\n default: {\n if (typeof inbound.macInfo !== 'object' || inbound.macInfo === null)\n throw new Error('Invalid inbound.macInfo');\n if (!Buffer.isBuffer(inbound.macKey)\n || inbound.macKey.length !== inbound.macInfo.len) {\n throw new Error('Invalid inbound.macKey');\n }\n return (GenericDecipher && !forceNative\n ? new GenericDecipherBinding(config)\n : new GenericDecipherNative(config));\n }\n }\n}\n\nmodule.exports = {\n CIPHER_INFO,\n MAC_INFO,\n bindingAvailable: !!binding,\n init: (() => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n POLY1305_WASM_MODULE = await require('./crypto/poly1305.js')();\n POLY1305_RESULT_MALLOC = POLY1305_WASM_MODULE._malloc(16);\n poly1305_auth = POLY1305_WASM_MODULE.cwrap(\n 'poly1305_auth',\n null,\n ['number', 'array', 'number', 'array', 'number', 'array']\n );\n } catch (ex) {\n return reject(ex);\n }\n resolve();\n });\n })(),\n\n NullCipher,\n createCipher,\n NullDecipher,\n createDecipher,\n};\n", "// TODO:\n// * utilize `crypto.create(Private|Public)Key()` and `keyObject.export()`\n// * handle multi-line header values (OpenSSH)?\n// * more thorough validation?\n'use strict';\n\nconst {\n createDecipheriv,\n createECDH,\n createHash,\n createHmac,\n createSign,\n createVerify,\n getCiphers,\n sign: sign_,\n verify: verify_,\n} = require('crypto');\nconst supportedOpenSSLCiphers = getCiphers();\n\nconst { Ber } = require('asn1');\nconst bcrypt_pbkdf = require('bcrypt-pbkdf').pbkdf;\n\nconst { CIPHER_INFO } = require('./crypto.js');\nconst { eddsaSupported, SUPPORTED_CIPHER } = require('./constants.js');\nconst {\n bufferSlice,\n makeBufferParser,\n readString,\n readUInt32BE,\n writeUInt32BE,\n} = require('./utils.js');\n\nconst SYM_HASH_ALGO = Symbol('Hash Algorithm');\nconst SYM_PRIV_PEM = Symbol('Private key PEM');\nconst SYM_PUB_PEM = Symbol('Public key PEM');\nconst SYM_PUB_SSH = Symbol('Public key SSH');\nconst SYM_DECRYPTED = Symbol('Decrypted Key');\n\n// Create OpenSSL cipher name -> SSH cipher name conversion table\nconst CIPHER_INFO_OPENSSL = Object.create(null);\n{\n const keys = Object.keys(CIPHER_INFO);\n for (let i = 0; i < keys.length; ++i) {\n const cipherName = CIPHER_INFO[keys[i]].sslName;\n if (!cipherName || CIPHER_INFO_OPENSSL[cipherName])\n continue;\n CIPHER_INFO_OPENSSL[cipherName] = CIPHER_INFO[keys[i]];\n }\n}\n\nconst binaryKeyParser = makeBufferParser();\n\nfunction makePEM(type, data) {\n data = data.base64Slice(0, data.length);\n let formatted = data.replace(/.{64}/g, '$&\\n');\n if (data.length & 63)\n formatted += '\\n';\n return `-----BEGIN ${type} KEY-----\\n${formatted}-----END ${type} KEY-----`;\n}\n\nfunction combineBuffers(buf1, buf2) {\n const result = Buffer.allocUnsafe(buf1.length + buf2.length);\n result.set(buf1, 0);\n result.set(buf2, buf1.length);\n return result;\n}\n\nfunction skipFields(buf, nfields) {\n const bufLen = buf.length;\n let pos = (buf._pos || 0);\n for (let i = 0; i < nfields; ++i) {\n const left = (bufLen - pos);\n if (pos >= bufLen || left < 4)\n return false;\n const len = readUInt32BE(buf, pos);\n if (left < 4 + len)\n return false;\n pos += 4 + len;\n }\n buf._pos = pos;\n return true;\n}\n\nfunction genOpenSSLRSAPub(n, e) {\n const asnWriter = new Ber.Writer();\n asnWriter.startSequence();\n // algorithm\n asnWriter.startSequence();\n asnWriter.writeOID('1.2.840.113549.1.1.1'); // rsaEncryption\n // algorithm parameters (RSA has none)\n asnWriter.writeNull();\n asnWriter.endSequence();\n\n // subjectPublicKey\n asnWriter.startSequence(Ber.BitString);\n asnWriter.writeByte(0x00);\n asnWriter.startSequence();\n asnWriter.writeBuffer(n, Ber.Integer);\n asnWriter.writeBuffer(e, Ber.Integer);\n asnWriter.endSequence();\n asnWriter.endSequence();\n asnWriter.endSequence();\n return makePEM('PUBLIC', asnWriter.buffer);\n}\n\nfunction genOpenSSHRSAPub(n, e) {\n const publicKey = Buffer.allocUnsafe(4 + 7 + 4 + e.length + 4 + n.length);\n\n writeUInt32BE(publicKey, 7, 0);\n publicKey.utf8Write('ssh-rsa', 4, 7);\n\n let i = 4 + 7;\n writeUInt32BE(publicKey, e.length, i);\n publicKey.set(e, i += 4);\n\n writeUInt32BE(publicKey, n.length, i += e.length);\n publicKey.set(n, i + 4);\n\n return publicKey;\n}\n\nconst genOpenSSLRSAPriv = (() => {\n function genRSAASN1Buf(n, e, d, p, q, dmp1, dmq1, iqmp) {\n const asnWriter = new Ber.Writer();\n asnWriter.startSequence();\n asnWriter.writeInt(0x00, Ber.Integer);\n asnWriter.writeBuffer(n, Ber.Integer);\n asnWriter.writeBuffer(e, Ber.Integer);\n asnWriter.writeBuffer(d, Ber.Integer);\n asnWriter.writeBuffer(p, Ber.Integer);\n asnWriter.writeBuffer(q, Ber.Integer);\n asnWriter.writeBuffer(dmp1, Ber.Integer);\n asnWriter.writeBuffer(dmq1, Ber.Integer);\n asnWriter.writeBuffer(iqmp, Ber.Integer);\n asnWriter.endSequence();\n return asnWriter.buffer;\n }\n\n function bigIntFromBuffer(buf) {\n return BigInt(`0x${buf.hexSlice(0, buf.length)}`);\n }\n\n function bigIntToBuffer(bn) {\n let hex = bn.toString(16);\n if ((hex.length & 1) !== 0) {\n hex = `0${hex}`;\n } else {\n const sigbit = hex.charCodeAt(0);\n // BER/DER integers require leading zero byte to denote a positive value\n // when first byte >= 0x80\n if (sigbit === 56/* '8' */\n || sigbit === 57/* '9' */\n || (sigbit >= 97/* 'a' */ && sigbit <= 102/* 'f' */)) {\n hex = `00${hex}`;\n }\n }\n return Buffer.from(hex, 'hex');\n }\n\n return function genOpenSSLRSAPriv(n, e, d, iqmp, p, q) {\n const bn_d = bigIntFromBuffer(d);\n const dmp1 = bigIntToBuffer(bn_d % (bigIntFromBuffer(p) - 1n));\n const dmq1 = bigIntToBuffer(bn_d % (bigIntFromBuffer(q) - 1n));\n return makePEM('RSA PRIVATE',\n genRSAASN1Buf(n, e, d, p, q, dmp1, dmq1, iqmp));\n };\n})();\n\nfunction genOpenSSLDSAPub(p, q, g, y) {\n const asnWriter = new Ber.Writer();\n asnWriter.startSequence();\n // algorithm\n asnWriter.startSequence();\n asnWriter.writeOID('1.2.840.10040.4.1'); // id-dsa\n // algorithm parameters\n asnWriter.startSequence();\n asnWriter.writeBuffer(p, Ber.Integer);\n asnWriter.writeBuffer(q, Ber.Integer);\n asnWriter.writeBuffer(g, Ber.Integer);\n asnWriter.endSequence();\n asnWriter.endSequence();\n\n // subjectPublicKey\n asnWriter.startSequence(Ber.BitString);\n asnWriter.writeByte(0x00);\n asnWriter.writeBuffer(y, Ber.Integer);\n asnWriter.endSequence();\n asnWriter.endSequence();\n return makePEM('PUBLIC', asnWriter.buffer);\n}\n\nfunction genOpenSSHDSAPub(p, q, g, y) {\n const publicKey = Buffer.allocUnsafe(\n 4 + 7 + 4 + p.length + 4 + q.length + 4 + g.length + 4 + y.length\n );\n\n writeUInt32BE(publicKey, 7, 0);\n publicKey.utf8Write('ssh-dss', 4, 7);\n\n let i = 4 + 7;\n writeUInt32BE(publicKey, p.length, i);\n publicKey.set(p, i += 4);\n\n writeUInt32BE(publicKey, q.length, i += p.length);\n publicKey.set(q, i += 4);\n\n writeUInt32BE(publicKey, g.length, i += q.length);\n publicKey.set(g, i += 4);\n\n writeUInt32BE(publicKey, y.length, i += g.length);\n publicKey.set(y, i + 4);\n\n return publicKey;\n}\n\nfunction genOpenSSLDSAPriv(p, q, g, y, x) {\n const asnWriter = new Ber.Writer();\n asnWriter.startSequence();\n asnWriter.writeInt(0x00, Ber.Integer);\n asnWriter.writeBuffer(p, Ber.Integer);\n asnWriter.writeBuffer(q, Ber.Integer);\n asnWriter.writeBuffer(g, Ber.Integer);\n asnWriter.writeBuffer(y, Ber.Integer);\n asnWriter.writeBuffer(x, Ber.Integer);\n asnWriter.endSequence();\n return makePEM('DSA PRIVATE', asnWriter.buffer);\n}\n\nfunction genOpenSSLEdPub(pub) {\n const asnWriter = new Ber.Writer();\n asnWriter.startSequence();\n // algorithm\n asnWriter.startSequence();\n asnWriter.writeOID('1.3.101.112'); // id-Ed25519\n asnWriter.endSequence();\n\n // PublicKey\n asnWriter.startSequence(Ber.BitString);\n asnWriter.writeByte(0x00);\n // XXX: hack to write a raw buffer without a tag -- yuck\n asnWriter._ensure(pub.length);\n asnWriter._buf.set(pub, asnWriter._offset);\n asnWriter._offset += pub.length;\n asnWriter.endSequence();\n asnWriter.endSequence();\n return makePEM('PUBLIC', asnWriter.buffer);\n}\n\nfunction genOpenSSHEdPub(pub) {\n const publicKey = Buffer.allocUnsafe(4 + 11 + 4 + pub.length);\n\n writeUInt32BE(publicKey, 11, 0);\n publicKey.utf8Write('ssh-ed25519', 4, 11);\n\n writeUInt32BE(publicKey, pub.length, 15);\n publicKey.set(pub, 19);\n\n return publicKey;\n}\n\nfunction genOpenSSLEdPriv(priv) {\n const asnWriter = new Ber.Writer();\n asnWriter.startSequence();\n // version\n asnWriter.writeInt(0x00, Ber.Integer);\n\n // algorithm\n asnWriter.startSequence();\n asnWriter.writeOID('1.3.101.112'); // id-Ed25519\n asnWriter.endSequence();\n\n // PrivateKey\n asnWriter.startSequence(Ber.OctetString);\n asnWriter.writeBuffer(priv, Ber.OctetString);\n asnWriter.endSequence();\n asnWriter.endSequence();\n return makePEM('PRIVATE', asnWriter.buffer);\n}\n\nfunction genOpenSSLECDSAPub(oid, Q) {\n const asnWriter = new Ber.Writer();\n asnWriter.startSequence();\n // algorithm\n asnWriter.startSequence();\n asnWriter.writeOID('1.2.840.10045.2.1'); // id-ecPublicKey\n // algorithm parameters (namedCurve)\n asnWriter.writeOID(oid);\n asnWriter.endSequence();\n\n // subjectPublicKey\n asnWriter.startSequence(Ber.BitString);\n asnWriter.writeByte(0x00);\n // XXX: hack to write a raw buffer without a tag -- yuck\n asnWriter._ensure(Q.length);\n asnWriter._buf.set(Q, asnWriter._offset);\n asnWriter._offset += Q.length;\n // end hack\n asnWriter.endSequence();\n asnWriter.endSequence();\n return makePEM('PUBLIC', asnWriter.buffer);\n}\n\nfunction genOpenSSHECDSAPub(oid, Q) {\n let curveName;\n switch (oid) {\n case '1.2.840.10045.3.1.7':\n // prime256v1/secp256r1\n curveName = 'nistp256';\n break;\n case '1.3.132.0.34':\n // secp384r1\n curveName = 'nistp384';\n break;\n case '1.3.132.0.35':\n // secp521r1\n curveName = 'nistp521';\n break;\n default:\n return;\n }\n\n const publicKey = Buffer.allocUnsafe(4 + 19 + 4 + 8 + 4 + Q.length);\n\n writeUInt32BE(publicKey, 19, 0);\n publicKey.utf8Write(`ecdsa-sha2-${curveName}`, 4, 19);\n\n writeUInt32BE(publicKey, 8, 23);\n publicKey.utf8Write(curveName, 27, 8);\n\n writeUInt32BE(publicKey, Q.length, 35);\n publicKey.set(Q, 39);\n\n return publicKey;\n}\n\nfunction genOpenSSLECDSAPriv(oid, pub, priv) {\n const asnWriter = new Ber.Writer();\n asnWriter.startSequence();\n // version\n asnWriter.writeInt(0x01, Ber.Integer);\n // privateKey\n asnWriter.writeBuffer(priv, Ber.OctetString);\n // parameters (optional)\n asnWriter.startSequence(0xA0);\n asnWriter.writeOID(oid);\n asnWriter.endSequence();\n // publicKey (optional)\n asnWriter.startSequence(0xA1);\n asnWriter.startSequence(Ber.BitString);\n asnWriter.writeByte(0x00);\n // XXX: hack to write a raw buffer without a tag -- yuck\n asnWriter._ensure(pub.length);\n asnWriter._buf.set(pub, asnWriter._offset);\n asnWriter._offset += pub.length;\n // end hack\n asnWriter.endSequence();\n asnWriter.endSequence();\n asnWriter.endSequence();\n return makePEM('EC PRIVATE', asnWriter.buffer);\n}\n\nfunction genOpenSSLECDSAPubFromPriv(curveName, priv) {\n const tempECDH = createECDH(curveName);\n tempECDH.setPrivateKey(priv);\n return tempECDH.getPublicKey();\n}\n\nconst BaseKey = {\n sign: (() => {\n if (typeof sign_ === 'function') {\n return function sign(data, algo) {\n const pem = this[SYM_PRIV_PEM];\n if (pem === null)\n return new Error('No private key available');\n if (!algo || typeof algo !== 'string')\n algo = this[SYM_HASH_ALGO];\n try {\n return sign_(algo, data, pem);\n } catch (ex) {\n return ex;\n }\n };\n }\n return function sign(data, algo) {\n const pem = this[SYM_PRIV_PEM];\n if (pem === null)\n return new Error('No private key available');\n if (!algo || typeof algo !== 'string')\n algo = this[SYM_HASH_ALGO];\n const signature = createSign(algo);\n signature.update(data);\n try {\n return signature.sign(pem);\n } catch (ex) {\n return ex;\n }\n };\n })(),\n verify: (() => {\n if (typeof verify_ === 'function') {\n return function verify(data, signature, algo) {\n const pem = this[SYM_PUB_PEM];\n if (pem === null)\n return new Error('No public key available');\n if (!algo || typeof algo !== 'string')\n algo = this[SYM_HASH_ALGO];\n try {\n return verify_(algo, data, pem, signature);\n } catch (ex) {\n return ex;\n }\n };\n }\n return function verify(data, signature, algo) {\n const pem = this[SYM_PUB_PEM];\n if (pem === null)\n return new Error('No public key available');\n if (!algo || typeof algo !== 'string')\n algo = this[SYM_HASH_ALGO];\n const verifier = createVerify(algo);\n verifier.update(data);\n try {\n return verifier.verify(pem, signature);\n } catch (ex) {\n return ex;\n }\n };\n })(),\n isPrivateKey: function isPrivateKey() {\n return (this[SYM_PRIV_PEM] !== null);\n },\n getPrivatePEM: function getPrivatePEM() {\n return this[SYM_PRIV_PEM];\n },\n getPublicPEM: function getPublicPEM() {\n return this[SYM_PUB_PEM];\n },\n getPublicSSH: function getPublicSSH() {\n return this[SYM_PUB_SSH];\n },\n equals: function equals(key) {\n const parsed = parseKey(key);\n if (parsed instanceof Error)\n return false;\n return (\n this.type === parsed.type\n && this[SYM_PRIV_PEM] === parsed[SYM_PRIV_PEM]\n && this[SYM_PUB_PEM] === parsed[SYM_PUB_PEM]\n && this[SYM_PUB_SSH].equals(parsed[SYM_PUB_SSH])\n );\n },\n};\n\n\nfunction OpenSSH_Private(type, comment, privPEM, pubPEM, pubSSH, algo,\n decrypted) {\n this.type = type;\n this.comment = comment;\n this[SYM_PRIV_PEM] = privPEM;\n this[SYM_PUB_PEM] = pubPEM;\n this[SYM_PUB_SSH] = pubSSH;\n this[SYM_HASH_ALGO] = algo;\n this[SYM_DECRYPTED] = decrypted;\n}\nOpenSSH_Private.prototype = BaseKey;\n{\n const regexp = /^-----BEGIN OPENSSH PRIVATE KEY-----(?:\\r\\n|\\n)([\\s\\S]+)(?:\\r\\n|\\n)-----END OPENSSH PRIVATE KEY-----$/;\n OpenSSH_Private.parse = (str, passphrase) => {\n const m = regexp.exec(str);\n if (m === null)\n return null;\n let ret;\n const data = Buffer.from(m[1], 'base64');\n if (data.length < 31) // magic (+ magic null term.) + minimum field lengths\n return new Error('Malformed OpenSSH private key');\n const magic = data.utf8Slice(0, 15);\n if (magic !== 'openssh-key-v1\\0')\n return new Error(`Unsupported OpenSSH key magic: ${magic}`);\n\n const cipherName = readString(data, 15, true);\n if (cipherName === undefined)\n return new Error('Malformed OpenSSH private key');\n if (cipherName !== 'none' && SUPPORTED_CIPHER.indexOf(cipherName) === -1)\n return new Error(`Unsupported cipher for OpenSSH key: ${cipherName}`);\n\n const kdfName = readString(data, data._pos, true);\n if (kdfName === undefined)\n return new Error('Malformed OpenSSH private key');\n if (kdfName !== 'none') {\n if (cipherName === 'none')\n return new Error('Malformed OpenSSH private key');\n if (kdfName !== 'bcrypt')\n return new Error(`Unsupported kdf name for OpenSSH key: ${kdfName}`);\n if (!passphrase) {\n return new Error(\n 'Encrypted private OpenSSH key detected, but no passphrase given'\n );\n }\n } else if (cipherName !== 'none') {\n return new Error('Malformed OpenSSH private key');\n }\n\n let encInfo;\n let cipherKey;\n let cipherIV;\n if (cipherName !== 'none')\n encInfo = CIPHER_INFO[cipherName];\n const kdfOptions = readString(data, data._pos);\n if (kdfOptions === undefined)\n return new Error('Malformed OpenSSH private key');\n if (kdfOptions.length) {\n switch (kdfName) {\n case 'none':\n return new Error('Malformed OpenSSH private key');\n case 'bcrypt': {\n /*\n string salt\n uint32 rounds\n */\n const salt = readString(kdfOptions, 0);\n if (salt === undefined || kdfOptions._pos + 4 > kdfOptions.length)\n return new Error('Malformed OpenSSH private key');\n const rounds = readUInt32BE(kdfOptions, kdfOptions._pos);\n const gen = Buffer.allocUnsafe(encInfo.keyLen + encInfo.ivLen);\n const r = bcrypt_pbkdf(passphrase,\n passphrase.length,\n salt,\n salt.length,\n gen,\n gen.length,\n rounds);\n if (r !== 0)\n return new Error('Failed to generate information to decrypt key');\n cipherKey = bufferSlice(gen, 0, encInfo.keyLen);\n cipherIV = bufferSlice(gen, encInfo.keyLen, gen.length);\n break;\n }\n }\n } else if (kdfName !== 'none') {\n return new Error('Malformed OpenSSH private key');\n }\n\n if (data._pos + 3 >= data.length)\n return new Error('Malformed OpenSSH private key');\n const keyCount = readUInt32BE(data, data._pos);\n data._pos += 4;\n\n if (keyCount > 0) {\n // TODO: place sensible limit on max `keyCount`\n\n // Read public keys first\n for (let i = 0; i < keyCount; ++i) {\n const pubData = readString(data, data._pos);\n if (pubData === undefined)\n return new Error('Malformed OpenSSH private key');\n const type = readString(pubData, 0, true);\n if (type === undefined)\n return new Error('Malformed OpenSSH private key');\n }\n\n let privBlob = readString(data, data._pos);\n if (privBlob === undefined)\n return new Error('Malformed OpenSSH private key');\n\n if (cipherKey !== undefined) {\n // Encrypted private key(s)\n if (privBlob.length < encInfo.blockLen\n || (privBlob.length % encInfo.blockLen) !== 0) {\n return new Error('Malformed OpenSSH private key');\n }\n try {\n const options = { authTagLength: encInfo.authLen };\n const decipher = createDecipheriv(encInfo.sslName,\n cipherKey,\n cipherIV,\n options);\n decipher.setAutoPadding(false);\n if (encInfo.authLen > 0) {\n if (data.length - data._pos < encInfo.authLen)\n return new Error('Malformed OpenSSH private key');\n decipher.setAuthTag(\n bufferSlice(data, data._pos, data._pos += encInfo.authLen)\n );\n }\n privBlob = combineBuffers(decipher.update(privBlob),\n decipher.final());\n } catch (ex) {\n return ex;\n }\n }\n // Nothing should we follow the private key(s), except a possible\n // authentication tag for relevant ciphers\n if (data._pos !== data.length)\n return new Error('Malformed OpenSSH private key');\n\n ret = parseOpenSSHPrivKeys(privBlob, keyCount, cipherKey !== undefined);\n } else {\n ret = [];\n }\n if (ret instanceof Error)\n return ret;\n // This will need to change if/when OpenSSH ever starts storing multiple\n // keys in their key files\n return ret[0];\n };\n\n function parseOpenSSHPrivKeys(data, nkeys, decrypted) {\n const keys = [];\n /*\n uint32 checkint\n uint32 checkint\n string privatekey1\n string comment1\n string privatekey2\n string comment2\n ...\n string privatekeyN\n string commentN\n char 1\n char 2\n char 3\n ...\n char padlen % 255\n */\n if (data.length < 8)\n return new Error('Malformed OpenSSH private key');\n const check1 = readUInt32BE(data, 0);\n const check2 = readUInt32BE(data, 4);\n if (check1 !== check2) {\n if (decrypted) {\n return new Error(\n 'OpenSSH key integrity check failed -- bad passphrase?'\n );\n }\n return new Error('OpenSSH key integrity check failed');\n }\n data._pos = 8;\n let i;\n let oid;\n for (i = 0; i < nkeys; ++i) {\n let algo;\n let privPEM;\n let pubPEM;\n let pubSSH;\n // The OpenSSH documentation for the key format actually lies, the\n // entirety of the private key content is not contained with a string\n // field, it's actually the literal contents of the private key, so to be\n // able to find the end of the key data you need to know the layout/format\n // of each key type ...\n const type = readString(data, data._pos, true);\n if (type === undefined)\n return new Error('Malformed OpenSSH private key');\n\n switch (type) {\n case 'ssh-rsa': {\n /*\n string n -- public\n string e -- public\n string d -- private\n string iqmp -- private\n string p -- private\n string q -- private\n */\n const n = readString(data, data._pos);\n if (n === undefined)\n return new Error('Malformed OpenSSH private key');\n const e = readString(data, data._pos);\n if (e === undefined)\n return new Error('Malformed OpenSSH private key');\n const d = readString(data, data._pos);\n if (d === undefined)\n return new Error('Malformed OpenSSH private key');\n const iqmp = readString(data, data._pos);\n if (iqmp === undefined)\n return new Error('Malformed OpenSSH private key');\n const p = readString(data, data._pos);\n if (p === undefined)\n return new Error('Malformed OpenSSH private key');\n const q = readString(data, data._pos);\n if (q === undefined)\n return new Error('Malformed OpenSSH private key');\n\n pubPEM = genOpenSSLRSAPub(n, e);\n pubSSH = genOpenSSHRSAPub(n, e);\n privPEM = genOpenSSLRSAPriv(n, e, d, iqmp, p, q);\n algo = 'sha1';\n break;\n }\n case 'ssh-dss': {\n /*\n string p -- public\n string q -- public\n string g -- public\n string y -- public\n string x -- private\n */\n const p = readString(data, data._pos);\n if (p === undefined)\n return new Error('Malformed OpenSSH private key');\n const q = readString(data, data._pos);\n if (q === undefined)\n return new Error('Malformed OpenSSH private key');\n const g = readString(data, data._pos);\n if (g === undefined)\n return new Error('Malformed OpenSSH private key');\n const y = readString(data, data._pos);\n if (y === undefined)\n return new Error('Malformed OpenSSH private key');\n const x = readString(data, data._pos);\n if (x === undefined)\n return new Error('Malformed OpenSSH private key');\n\n pubPEM = genOpenSSLDSAPub(p, q, g, y);\n pubSSH = genOpenSSHDSAPub(p, q, g, y);\n privPEM = genOpenSSLDSAPriv(p, q, g, y, x);\n algo = 'sha1';\n break;\n }\n case 'ssh-ed25519': {\n if (!eddsaSupported)\n return new Error(`Unsupported OpenSSH private key type: ${type}`);\n /*\n * string public key\n * string private key + public key\n */\n const edpub = readString(data, data._pos);\n if (edpub === undefined || edpub.length !== 32)\n return new Error('Malformed OpenSSH private key');\n const edpriv = readString(data, data._pos);\n if (edpriv === undefined || edpriv.length !== 64)\n return new Error('Malformed OpenSSH private key');\n\n pubPEM = genOpenSSLEdPub(edpub);\n pubSSH = genOpenSSHEdPub(edpub);\n privPEM = genOpenSSLEdPriv(bufferSlice(edpriv, 0, 32));\n algo = null;\n break;\n }\n case 'ecdsa-sha2-nistp256':\n algo = 'sha256';\n oid = '1.2.840.10045.3.1.7';\n // FALLTHROUGH\n case 'ecdsa-sha2-nistp384':\n if (algo === undefined) {\n algo = 'sha384';\n oid = '1.3.132.0.34';\n }\n // FALLTHROUGH\n case 'ecdsa-sha2-nistp521': {\n if (algo === undefined) {\n algo = 'sha512';\n oid = '1.3.132.0.35';\n }\n /*\n string curve name\n string Q -- public\n string d -- private\n */\n // TODO: validate curve name against type\n if (!skipFields(data, 1)) // Skip curve name\n return new Error('Malformed OpenSSH private key');\n const ecpub = readString(data, data._pos);\n if (ecpub === undefined)\n return new Error('Malformed OpenSSH private key');\n const ecpriv = readString(data, data._pos);\n if (ecpriv === undefined)\n return new Error('Malformed OpenSSH private key');\n\n pubPEM = genOpenSSLECDSAPub(oid, ecpub);\n pubSSH = genOpenSSHECDSAPub(oid, ecpub);\n privPEM = genOpenSSLECDSAPriv(oid, ecpub, ecpriv);\n break;\n }\n default:\n return new Error(`Unsupported OpenSSH private key type: ${type}`);\n }\n\n const privComment = readString(data, data._pos, true);\n if (privComment === undefined)\n return new Error('Malformed OpenSSH private key');\n\n keys.push(\n new OpenSSH_Private(type, privComment, privPEM, pubPEM, pubSSH, algo,\n decrypted)\n );\n }\n let cnt = 0;\n for (i = data._pos; i < data.length; ++i) {\n if (data[i] !== (++cnt % 255))\n return new Error('Malformed OpenSSH private key');\n }\n\n return keys;\n }\n}\n\n\nfunction OpenSSH_Old_Private(type, comment, privPEM, pubPEM, pubSSH, algo,\n decrypted) {\n this.type = type;\n this.comment = comment;\n this[SYM_PRIV_PEM] = privPEM;\n this[SYM_PUB_PEM] = pubPEM;\n this[SYM_PUB_SSH] = pubSSH;\n this[SYM_HASH_ALGO] = algo;\n this[SYM_DECRYPTED] = decrypted;\n}\nOpenSSH_Old_Private.prototype = BaseKey;\n{\n const regexp = /^-----BEGIN (RSA|DSA|EC) PRIVATE KEY-----(?:\\r\\n|\\n)((?:[^:]+:\\s*[\\S].*(?:\\r\\n|\\n))*)([\\s\\S]+)(?:\\r\\n|\\n)-----END (RSA|DSA|EC) PRIVATE KEY-----$/;\n OpenSSH_Old_Private.parse = (str, passphrase) => {\n const m = regexp.exec(str);\n if (m === null)\n return null;\n let privBlob = Buffer.from(m[3], 'base64');\n let headers = m[2];\n let decrypted = false;\n if (headers !== undefined) {\n // encrypted key\n headers = headers.split(/\\r\\n|\\n/g);\n for (let i = 0; i < headers.length; ++i) {\n const header = headers[i];\n let sepIdx = header.indexOf(':');\n if (header.slice(0, sepIdx) === 'DEK-Info') {\n const val = header.slice(sepIdx + 2);\n sepIdx = val.indexOf(',');\n if (sepIdx === -1)\n continue;\n const cipherName = val.slice(0, sepIdx).toLowerCase();\n if (supportedOpenSSLCiphers.indexOf(cipherName) === -1) {\n return new Error(\n `Cipher (${cipherName}) not supported `\n + 'for encrypted OpenSSH private key'\n );\n }\n const encInfo = CIPHER_INFO_OPENSSL[cipherName];\n if (!encInfo) {\n return new Error(\n `Cipher (${cipherName}) not supported `\n + 'for encrypted OpenSSH private key'\n );\n }\n const cipherIV = Buffer.from(val.slice(sepIdx + 1), 'hex');\n if (cipherIV.length !== encInfo.ivLen)\n return new Error('Malformed encrypted OpenSSH private key');\n if (!passphrase) {\n return new Error(\n 'Encrypted OpenSSH private key detected, but no passphrase given'\n );\n }\n const ivSlice = bufferSlice(cipherIV, 0, 8);\n let cipherKey = createHash('md5')\n .update(passphrase)\n .update(ivSlice)\n .digest();\n while (cipherKey.length < encInfo.keyLen) {\n cipherKey = combineBuffers(\n cipherKey,\n createHash('md5')\n .update(cipherKey)\n .update(passphrase)\n .update(ivSlice)\n .digest()\n );\n }\n if (cipherKey.length > encInfo.keyLen)\n cipherKey = bufferSlice(cipherKey, 0, encInfo.keyLen);\n try {\n const decipher = createDecipheriv(cipherName, cipherKey, cipherIV);\n decipher.setAutoPadding(false);\n privBlob = combineBuffers(decipher.update(privBlob),\n decipher.final());\n decrypted = true;\n } catch (ex) {\n return ex;\n }\n }\n }\n }\n\n let type;\n let privPEM;\n let pubPEM;\n let pubSSH;\n let algo;\n let reader;\n let errMsg = 'Malformed OpenSSH private key';\n if (decrypted)\n errMsg += '. Bad passphrase?';\n switch (m[1]) {\n case 'RSA':\n type = 'ssh-rsa';\n privPEM = makePEM('RSA PRIVATE', privBlob);\n try {\n reader = new Ber.Reader(privBlob);\n reader.readSequence();\n reader.readInt(); // skip version\n const n = reader.readString(Ber.Integer, true);\n if (n === null)\n return new Error(errMsg);\n const e = reader.readString(Ber.Integer, true);\n if (e === null)\n return new Error(errMsg);\n pubPEM = genOpenSSLRSAPub(n, e);\n pubSSH = genOpenSSHRSAPub(n, e);\n } catch {\n return new Error(errMsg);\n }\n algo = 'sha1';\n break;\n case 'DSA':\n type = 'ssh-dss';\n privPEM = makePEM('DSA PRIVATE', privBlob);\n try {\n reader = new Ber.Reader(privBlob);\n reader.readSequence();\n reader.readInt(); // skip version\n const p = reader.readString(Ber.Integer, true);\n if (p === null)\n return new Error(errMsg);\n const q = reader.readString(Ber.Integer, true);\n if (q === null)\n return new Error(errMsg);\n const g = reader.readString(Ber.Integer, true);\n if (g === null)\n return new Error(errMsg);\n const y = reader.readString(Ber.Integer, true);\n if (y === null)\n return new Error(errMsg);\n pubPEM = genOpenSSLDSAPub(p, q, g, y);\n pubSSH = genOpenSSHDSAPub(p, q, g, y);\n } catch {\n return new Error(errMsg);\n }\n algo = 'sha1';\n break;\n case 'EC': {\n let ecSSLName;\n let ecPriv;\n let ecOID;\n try {\n reader = new Ber.Reader(privBlob);\n reader.readSequence();\n reader.readInt(); // skip version\n ecPriv = reader.readString(Ber.OctetString, true);\n reader.readByte(); // Skip \"complex\" context type byte\n const offset = reader.readLength(); // Skip context length\n if (offset !== null) {\n reader._offset = offset;\n ecOID = reader.readOID();\n if (ecOID === null)\n return new Error(errMsg);\n switch (ecOID) {\n case '1.2.840.10045.3.1.7':\n // prime256v1/secp256r1\n ecSSLName = 'prime256v1';\n type = 'ecdsa-sha2-nistp256';\n algo = 'sha256';\n break;\n case '1.3.132.0.34':\n // secp384r1\n ecSSLName = 'secp384r1';\n type = 'ecdsa-sha2-nistp384';\n algo = 'sha384';\n break;\n case '1.3.132.0.35':\n // secp521r1\n ecSSLName = 'secp521r1';\n type = 'ecdsa-sha2-nistp521';\n algo = 'sha512';\n break;\n default:\n return new Error(`Unsupported private key EC OID: ${ecOID}`);\n }\n } else {\n return new Error(errMsg);\n }\n } catch {\n return new Error(errMsg);\n }\n privPEM = makePEM('EC PRIVATE', privBlob);\n const pubBlob = genOpenSSLECDSAPubFromPriv(ecSSLName, ecPriv);\n pubPEM = genOpenSSLECDSAPub(ecOID, pubBlob);\n pubSSH = genOpenSSHECDSAPub(ecOID, pubBlob);\n break;\n }\n }\n\n return new OpenSSH_Old_Private(type, '', privPEM, pubPEM, pubSSH, algo,\n decrypted);\n };\n}\n\n\nfunction PPK_Private(type, comment, privPEM, pubPEM, pubSSH, algo, decrypted) {\n this.type = type;\n this.comment = comment;\n this[SYM_PRIV_PEM] = privPEM;\n this[SYM_PUB_PEM] = pubPEM;\n this[SYM_PUB_SSH] = pubSSH;\n this[SYM_HASH_ALGO] = algo;\n this[SYM_DECRYPTED] = decrypted;\n}\nPPK_Private.prototype = BaseKey;\n{\n const EMPTY_PASSPHRASE = Buffer.alloc(0);\n const PPK_IV = Buffer.from([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\n const PPK_PP1 = Buffer.from([0, 0, 0, 0]);\n const PPK_PP2 = Buffer.from([0, 0, 0, 1]);\n const regexp = /^PuTTY-User-Key-File-2: (ssh-(?:rsa|dss))\\r?\\nEncryption: (aes256-cbc|none)\\r?\\nComment: ([^\\r\\n]*)\\r?\\nPublic-Lines: \\d+\\r?\\n([\\s\\S]+?)\\r?\\nPrivate-Lines: \\d+\\r?\\n([\\s\\S]+?)\\r?\\nPrivate-MAC: ([^\\r\\n]+)/;\n PPK_Private.parse = (str, passphrase) => {\n const m = regexp.exec(str);\n if (m === null)\n return null;\n // m[1] = key type\n // m[2] = encryption type\n // m[3] = comment\n // m[4] = base64-encoded public key data:\n // for \"ssh-rsa\":\n // string \"ssh-rsa\"\n // mpint e (public exponent)\n // mpint n (modulus)\n // for \"ssh-dss\":\n // string \"ssh-dss\"\n // mpint p (modulus)\n // mpint q (prime)\n // mpint g (base number)\n // mpint y (public key parameter: g^x mod p)\n // m[5] = base64-encoded private key data:\n // for \"ssh-rsa\":\n // mpint d (private exponent)\n // mpint p (prime 1)\n // mpint q (prime 2)\n // mpint iqmp ([inverse of q] mod p)\n // for \"ssh-dss\":\n // mpint x (private key parameter)\n // m[6] = SHA1 HMAC over:\n // string name of algorithm (\"ssh-dss\", \"ssh-rsa\")\n // string encryption type\n // string comment\n // string public key data\n // string private-plaintext (including the final padding)\n const cipherName = m[2];\n const encrypted = (cipherName !== 'none');\n if (encrypted && !passphrase) {\n return new Error(\n 'Encrypted PPK private key detected, but no passphrase given'\n );\n }\n\n let privBlob = Buffer.from(m[5], 'base64');\n\n if (encrypted) {\n const encInfo = CIPHER_INFO[cipherName];\n let cipherKey = combineBuffers(\n createHash('sha1').update(PPK_PP1).update(passphrase).digest(),\n createHash('sha1').update(PPK_PP2).update(passphrase).digest()\n );\n if (cipherKey.length > encInfo.keyLen)\n cipherKey = bufferSlice(cipherKey, 0, encInfo.keyLen);\n try {\n const decipher = createDecipheriv(encInfo.sslName, cipherKey, PPK_IV);\n decipher.setAutoPadding(false);\n privBlob = combineBuffers(decipher.update(privBlob),\n decipher.final());\n } catch (ex) {\n return ex;\n }\n }\n\n const type = m[1];\n const comment = m[3];\n const pubBlob = Buffer.from(m[4], 'base64');\n\n const mac = m[6];\n const typeLen = type.length;\n const cipherNameLen = cipherName.length;\n const commentLen = Buffer.byteLength(comment);\n const pubLen = pubBlob.length;\n const privLen = privBlob.length;\n const macData = Buffer.allocUnsafe(4 + typeLen\n + 4 + cipherNameLen\n + 4 + commentLen\n + 4 + pubLen\n + 4 + privLen);\n let p = 0;\n\n writeUInt32BE(macData, typeLen, p);\n macData.utf8Write(type, p += 4, typeLen);\n writeUInt32BE(macData, cipherNameLen, p += typeLen);\n macData.utf8Write(cipherName, p += 4, cipherNameLen);\n writeUInt32BE(macData, commentLen, p += cipherNameLen);\n macData.utf8Write(comment, p += 4, commentLen);\n writeUInt32BE(macData, pubLen, p += commentLen);\n macData.set(pubBlob, p += 4);\n writeUInt32BE(macData, privLen, p += pubLen);\n macData.set(privBlob, p + 4);\n\n if (!passphrase)\n passphrase = EMPTY_PASSPHRASE;\n\n const calcMAC = createHmac(\n 'sha1',\n createHash('sha1')\n .update('putty-private-key-file-mac-key')\n .update(passphrase)\n .digest()\n ).update(macData).digest('hex');\n\n if (calcMAC !== mac) {\n if (encrypted) {\n return new Error(\n 'PPK private key integrity check failed -- bad passphrase?'\n );\n }\n return new Error('PPK private key integrity check failed');\n }\n\n let pubPEM;\n let pubSSH;\n let privPEM;\n pubBlob._pos = 0;\n skipFields(pubBlob, 1); // skip (duplicate) key type\n switch (type) {\n case 'ssh-rsa': {\n const e = readString(pubBlob, pubBlob._pos);\n if (e === undefined)\n return new Error('Malformed PPK public key');\n const n = readString(pubBlob, pubBlob._pos);\n if (n === undefined)\n return new Error('Malformed PPK public key');\n const d = readString(privBlob, 0);\n if (d === undefined)\n return new Error('Malformed PPK private key');\n const p = readString(privBlob, privBlob._pos);\n if (p === undefined)\n return new Error('Malformed PPK private key');\n const q = readString(privBlob, privBlob._pos);\n if (q === undefined)\n return new Error('Malformed PPK private key');\n const iqmp = readString(privBlob, privBlob._pos);\n if (iqmp === undefined)\n return new Error('Malformed PPK private key');\n pubPEM = genOpenSSLRSAPub(n, e);\n pubSSH = genOpenSSHRSAPub(n, e);\n privPEM = genOpenSSLRSAPriv(n, e, d, iqmp, p, q);\n break;\n }\n case 'ssh-dss': {\n const p = readString(pubBlob, pubBlob._pos);\n if (p === undefined)\n return new Error('Malformed PPK public key');\n const q = readString(pubBlob, pubBlob._pos);\n if (q === undefined)\n return new Error('Malformed PPK public key');\n const g = readString(pubBlob, pubBlob._pos);\n if (g === undefined)\n return new Error('Malformed PPK public key');\n const y = readString(pubBlob, pubBlob._pos);\n if (y === undefined)\n return new Error('Malformed PPK public key');\n const x = readString(privBlob, 0);\n if (x === undefined)\n return new Error('Malformed PPK private key');\n\n pubPEM = genOpenSSLDSAPub(p, q, g, y);\n pubSSH = genOpenSSHDSAPub(p, q, g, y);\n privPEM = genOpenSSLDSAPriv(p, q, g, y, x);\n break;\n }\n }\n\n return new PPK_Private(type, comment, privPEM, pubPEM, pubSSH, 'sha1',\n encrypted);\n };\n}\n\n\nfunction OpenSSH_Public(type, comment, pubPEM, pubSSH, algo) {\n this.type = type;\n this.comment = comment;\n this[SYM_PRIV_PEM] = null;\n this[SYM_PUB_PEM] = pubPEM;\n this[SYM_PUB_SSH] = pubSSH;\n this[SYM_HASH_ALGO] = algo;\n this[SYM_DECRYPTED] = false;\n}\nOpenSSH_Public.prototype = BaseKey;\n{\n let regexp;\n if (eddsaSupported)\n regexp = /^(((?:ssh-(?:rsa|dss|ed25519))|ecdsa-sha2-nistp(?:256|384|521))(?:-cert-v0[01]@openssh.com)?) ([A-Z0-9a-z/+=]+)(?:$|\\s+([\\S].*)?)$/;\n else\n regexp = /^(((?:ssh-(?:rsa|dss))|ecdsa-sha2-nistp(?:256|384|521))(?:-cert-v0[01]@openssh.com)?) ([A-Z0-9a-z/+=]+)(?:$|\\s+([\\S].*)?)$/;\n OpenSSH_Public.parse = (str) => {\n const m = regexp.exec(str);\n if (m === null)\n return null;\n // m[1] = full type\n // m[2] = base type\n // m[3] = base64-encoded public key\n // m[4] = comment\n\n const fullType = m[1];\n const baseType = m[2];\n const data = Buffer.from(m[3], 'base64');\n const comment = (m[4] || '');\n\n const type = readString(data, data._pos, true);\n if (type === undefined || type.indexOf(baseType) !== 0)\n return new Error('Malformed OpenSSH public key');\n\n return parseDER(data, baseType, comment, fullType);\n };\n}\n\n\nfunction RFC4716_Public(type, comment, pubPEM, pubSSH, algo) {\n this.type = type;\n this.comment = comment;\n this[SYM_PRIV_PEM] = null;\n this[SYM_PUB_PEM] = pubPEM;\n this[SYM_PUB_SSH] = pubSSH;\n this[SYM_HASH_ALGO] = algo;\n this[SYM_DECRYPTED] = false;\n}\nRFC4716_Public.prototype = BaseKey;\n{\n const regexp = /^---- BEGIN SSH2 PUBLIC KEY ----(?:\\r?\\n)((?:.{0,72}\\r?\\n)+)---- END SSH2 PUBLIC KEY ----$/;\n const RE_DATA = /^[A-Z0-9a-z/+=\\r\\n]+$/;\n const RE_HEADER = /^([\\x21-\\x39\\x3B-\\x7E]{1,64}): ((?:[^\\\\]*\\\\\\r?\\n)*[^\\r\\n]+)\\r?\\n/gm;\n const RE_HEADER_ENDS = /\\\\\\r?\\n/g;\n RFC4716_Public.parse = (str) => {\n let m = regexp.exec(str);\n if (m === null)\n return null;\n\n const body = m[1];\n let dataStart = 0;\n let comment = '';\n\n while (m = RE_HEADER.exec(body)) {\n const headerName = m[1];\n const headerValue = m[2].replace(RE_HEADER_ENDS, '');\n if (headerValue.length > 1024) {\n RE_HEADER.lastIndex = 0;\n return new Error('Malformed RFC4716 public key');\n }\n\n dataStart = RE_HEADER.lastIndex;\n\n if (headerName.toLowerCase() === 'comment') {\n comment = headerValue;\n if (comment.length > 1\n && comment.charCodeAt(0) === 34/* '\"' */\n && comment.charCodeAt(comment.length - 1) === 34/* '\"' */) {\n comment = comment.slice(1, -1);\n }\n }\n }\n\n let data = body.slice(dataStart);\n if (!RE_DATA.test(data))\n return new Error('Malformed RFC4716 public key');\n\n data = Buffer.from(data, 'base64');\n\n const type = readString(data, 0, true);\n if (type === undefined)\n return new Error('Malformed RFC4716 public key');\n\n let pubPEM = null;\n let pubSSH = null;\n switch (type) {\n case 'ssh-rsa': {\n const e = readString(data, data._pos);\n if (e === undefined)\n return new Error('Malformed RFC4716 public key');\n const n = readString(data, data._pos);\n if (n === undefined)\n return new Error('Malformed RFC4716 public key');\n pubPEM = genOpenSSLRSAPub(n, e);\n pubSSH = genOpenSSHRSAPub(n, e);\n break;\n }\n case 'ssh-dss': {\n const p = readString(data, data._pos);\n if (p === undefined)\n return new Error('Malformed RFC4716 public key');\n const q = readString(data, data._pos);\n if (q === undefined)\n return new Error('Malformed RFC4716 public key');\n const g = readString(data, data._pos);\n if (g === undefined)\n return new Error('Malformed RFC4716 public key');\n const y = readString(data, data._pos);\n if (y === undefined)\n return new Error('Malformed RFC4716 public key');\n pubPEM = genOpenSSLDSAPub(p, q, g, y);\n pubSSH = genOpenSSHDSAPub(p, q, g, y);\n break;\n }\n default:\n return new Error('Malformed RFC4716 public key');\n }\n\n return new RFC4716_Public(type, comment, pubPEM, pubSSH, 'sha1');\n };\n}\n\n\nfunction parseDER(data, baseType, comment, fullType) {\n if (!isSupportedKeyType(baseType))\n return new Error(`Unsupported OpenSSH public key type: ${baseType}`);\n\n let algo;\n let oid;\n let pubPEM = null;\n let pubSSH = null;\n\n switch (baseType) {\n case 'ssh-rsa': {\n const e = readString(data, data._pos || 0);\n if (e === undefined)\n return new Error('Malformed OpenSSH public key');\n const n = readString(data, data._pos);\n if (n === undefined)\n return new Error('Malformed OpenSSH public key');\n pubPEM = genOpenSSLRSAPub(n, e);\n pubSSH = genOpenSSHRSAPub(n, e);\n algo = 'sha1';\n break;\n }\n case 'ssh-dss': {\n const p = readString(data, data._pos || 0);\n if (p === undefined)\n return new Error('Malformed OpenSSH public key');\n const q = readString(data, data._pos);\n if (q === undefined)\n return new Error('Malformed OpenSSH public key');\n const g = readString(data, data._pos);\n if (g === undefined)\n return new Error('Malformed OpenSSH public key');\n const y = readString(data, data._pos);\n if (y === undefined)\n return new Error('Malformed OpenSSH public key');\n pubPEM = genOpenSSLDSAPub(p, q, g, y);\n pubSSH = genOpenSSHDSAPub(p, q, g, y);\n algo = 'sha1';\n break;\n }\n case 'ssh-ed25519': {\n const edpub = readString(data, data._pos || 0);\n if (edpub === undefined || edpub.length !== 32)\n return new Error('Malformed OpenSSH public key');\n pubPEM = genOpenSSLEdPub(edpub);\n pubSSH = genOpenSSHEdPub(edpub);\n algo = null;\n break;\n }\n case 'ecdsa-sha2-nistp256':\n algo = 'sha256';\n oid = '1.2.840.10045.3.1.7';\n // FALLTHROUGH\n case 'ecdsa-sha2-nistp384':\n if (algo === undefined) {\n algo = 'sha384';\n oid = '1.3.132.0.34';\n }\n // FALLTHROUGH\n case 'ecdsa-sha2-nistp521': {\n if (algo === undefined) {\n algo = 'sha512';\n oid = '1.3.132.0.35';\n }\n // TODO: validate curve name against type\n if (!skipFields(data, 1)) // Skip curve name\n return new Error('Malformed OpenSSH public key');\n const ecpub = readString(data, data._pos || 0);\n if (ecpub === undefined)\n return new Error('Malformed OpenSSH public key');\n pubPEM = genOpenSSLECDSAPub(oid, ecpub);\n pubSSH = genOpenSSHECDSAPub(oid, ecpub);\n break;\n }\n default:\n return new Error(`Unsupported OpenSSH public key type: ${baseType}`);\n }\n\n return new OpenSSH_Public(fullType, comment, pubPEM, pubSSH, algo);\n}\n\nfunction isSupportedKeyType(type) {\n switch (type) {\n case 'ssh-rsa':\n case 'ssh-dss':\n case 'ecdsa-sha2-nistp256':\n case 'ecdsa-sha2-nistp384':\n case 'ecdsa-sha2-nistp521':\n return true;\n case 'ssh-ed25519':\n if (eddsaSupported)\n return true;\n // FALLTHROUGH\n default:\n return false;\n }\n}\n\nfunction isParsedKey(val) {\n if (!val)\n return false;\n return (typeof val[SYM_DECRYPTED] === 'boolean');\n}\n\nfunction parseKey(data, passphrase) {\n if (isParsedKey(data))\n return data;\n\n let origBuffer;\n if (Buffer.isBuffer(data)) {\n origBuffer = data;\n data = data.utf8Slice(0, data.length).trim();\n } else if (typeof data === 'string') {\n data = data.trim();\n } else {\n return new Error('Key data must be a Buffer or string');\n }\n\n // eslint-disable-next-line eqeqeq\n if (passphrase != undefined) {\n if (typeof passphrase === 'string')\n passphrase = Buffer.from(passphrase);\n else if (!Buffer.isBuffer(passphrase))\n return new Error('Passphrase must be a string or Buffer when supplied');\n }\n\n let ret;\n\n // First try as printable string format (e.g. PEM)\n\n // Private keys\n if ((ret = OpenSSH_Private.parse(data, passphrase)) !== null)\n return ret;\n if ((ret = OpenSSH_Old_Private.parse(data, passphrase)) !== null)\n return ret;\n if ((ret = PPK_Private.parse(data, passphrase)) !== null)\n return ret;\n\n // Public keys\n if ((ret = OpenSSH_Public.parse(data)) !== null)\n return ret;\n if ((ret = RFC4716_Public.parse(data)) !== null)\n return ret;\n\n // Finally try as a binary format if we were originally passed binary data\n if (origBuffer) {\n binaryKeyParser.init(origBuffer, 0);\n const type = binaryKeyParser.readString(true);\n if (type !== undefined) {\n data = binaryKeyParser.readRaw();\n if (data !== undefined) {\n ret = parseDER(data, type, '', type);\n // Ignore potentially useless errors in case the data was not actually\n // in the binary format\n if (ret instanceof Error)\n ret = null;\n }\n }\n binaryKeyParser.clear();\n }\n\n if (ret)\n return ret;\n\n return new Error('Unsupported key format');\n}\n\nmodule.exports = {\n isParsedKey,\n isSupportedKeyType,\n parseDERKey: (data, type) => parseDER(data, type, '', type),\n parseKey,\n};\n", "'use strict';\n\nconst { Socket } = require('net');\nconst { Duplex } = require('stream');\nconst { resolve } = require('path');\nconst { readFile } = require('fs');\nconst { execFile, spawn } = require('child_process');\n\nconst { isParsedKey, parseKey } = require('./protocol/keyParser.js');\n\nconst {\n makeBufferParser,\n readUInt32BE,\n writeUInt32BE,\n writeUInt32LE,\n} = require('./protocol/utils.js');\n\nfunction once(cb) {\n let called = false;\n return (...args) => {\n if (called)\n return;\n called = true;\n cb(...args);\n };\n}\n\nfunction concat(buf1, buf2) {\n const combined = Buffer.allocUnsafe(buf1.length + buf2.length);\n buf1.copy(combined, 0);\n buf2.copy(combined, buf1.length);\n return combined;\n}\n\nfunction noop() {}\n\nconst EMPTY_BUF = Buffer.alloc(0);\n\nconst binaryParser = makeBufferParser();\n\nclass BaseAgent {\n getIdentities(cb) {\n cb(new Error('Missing getIdentities() implementation'));\n }\n sign(pubKey, data, options, cb) {\n if (typeof options === 'function')\n cb = options;\n cb(new Error('Missing sign() implementation'));\n }\n}\n\nclass OpenSSHAgent extends BaseAgent {\n constructor(socketPath) {\n super();\n this.socketPath = socketPath;\n }\n\n getStream(cb) {\n cb = once(cb);\n const sock = new Socket();\n sock.on('connect', () => {\n cb(null, sock);\n });\n sock.on('close', onFail)\n .on('end', onFail)\n .on('error', onFail);\n sock.connect(this.socketPath);\n\n function onFail() {\n try {\n sock.destroy();\n } catch {}\n\n cb(new Error('Failed to connect to agent'));\n }\n }\n\n getIdentities(cb) {\n cb = once(cb);\n this.getStream((err, stream) => {\n function onFail(err) {\n if (stream) {\n try {\n stream.destroy();\n } catch {}\n }\n if (!err)\n err = new Error('Failed to retrieve identities from agent');\n cb(err);\n }\n\n if (err)\n return onFail(err);\n\n const protocol = new AgentProtocol(true);\n protocol.on('error', onFail);\n protocol.pipe(stream).pipe(protocol);\n\n stream.on('close', onFail)\n .on('end', onFail)\n .on('error', onFail);\n\n protocol.getIdentities((err, keys) => {\n if (err)\n return onFail(err);\n try {\n stream.destroy();\n } catch {}\n cb(null, keys);\n });\n });\n }\n\n sign(pubKey, data, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = undefined;\n } else if (typeof options !== 'object' || options === null) {\n options = undefined;\n }\n\n cb = once(cb);\n this.getStream((err, stream) => {\n function onFail(err) {\n if (stream) {\n try {\n stream.destroy();\n } catch {}\n }\n if (!err)\n err = new Error('Failed to sign data with agent');\n cb(err);\n }\n\n if (err)\n return onFail(err);\n\n const protocol = new AgentProtocol(true);\n protocol.on('error', onFail);\n protocol.pipe(stream).pipe(protocol);\n\n stream.on('close', onFail)\n .on('end', onFail)\n .on('error', onFail);\n\n protocol.sign(pubKey, data, options, (err, sig) => {\n if (err)\n return onFail(err);\n\n try {\n stream.destroy();\n } catch {}\n\n cb(null, sig);\n });\n });\n }\n}\n\nconst PageantAgent = (() => {\n const RET_ERR_BADARGS = 10;\n const RET_ERR_UNAVAILABLE = 11;\n const RET_ERR_NOMAP = 12;\n const RET_ERR_BINSTDIN = 13;\n const RET_ERR_BINSTDOUT = 14;\n const RET_ERR_BADLEN = 15;\n\n const EXEPATH = resolve(__dirname, '..', 'util/pagent.exe');\n const ERROR = {\n [RET_ERR_BADARGS]: new Error('Invalid pagent.exe arguments'),\n [RET_ERR_UNAVAILABLE]: new Error('Pageant is not running'),\n [RET_ERR_NOMAP]: new Error('pagent.exe could not create an mmap'),\n [RET_ERR_BINSTDIN]: new Error('pagent.exe could not set mode for stdin'),\n [RET_ERR_BINSTDOUT]: new Error('pagent.exe could not set mode for stdout'),\n [RET_ERR_BADLEN]:\n new Error('pagent.exe did not get expected input payload'),\n };\n\n function destroy(stream) {\n stream.buffer = null;\n if (stream.proc) {\n stream.proc.kill();\n stream.proc = undefined;\n }\n }\n\n class PageantSocket extends Duplex {\n constructor() {\n super();\n this.proc = undefined;\n this.buffer = null;\n }\n _read(n) {}\n _write(data, encoding, cb) {\n if (this.buffer === null) {\n this.buffer = data;\n } else {\n const newBuffer = Buffer.allocUnsafe(this.buffer.length + data.length);\n this.buffer.copy(newBuffer, 0);\n data.copy(newBuffer, this.buffer.length);\n this.buffer = newBuffer;\n }\n // Wait for at least all length bytes\n if (this.buffer.length < 4)\n return cb();\n\n const len = readUInt32BE(this.buffer, 0);\n // Make sure we have a full message before querying pageant\n if ((this.buffer.length - 4) < len)\n return cb();\n\n data = this.buffer.slice(0, 4 + len);\n if (this.buffer.length > (4 + len))\n return cb(new Error('Unexpected multiple agent requests'));\n this.buffer = null;\n\n let error;\n const proc = this.proc = spawn(EXEPATH, [ data.length ]);\n proc.stdout.on('data', (data) => {\n this.push(data);\n });\n proc.on('error', (err) => {\n error = err;\n cb(error);\n });\n proc.on('close', (code) => {\n this.proc = undefined;\n if (!error) {\n if (error = ERROR[code])\n return cb(error);\n cb();\n }\n });\n proc.stdin.end(data);\n }\n _final(cb) {\n destroy(this);\n cb();\n }\n _destroy(err, cb) {\n destroy(this);\n cb();\n }\n }\n\n return class PageantAgent extends OpenSSHAgent {\n getStream(cb) {\n cb(null, new PageantSocket());\n }\n };\n})();\n\nconst CygwinAgent = (() => {\n const RE_CYGWIN_SOCK = /^!<socket >(\\d+) s ([A-Z0-9]{8}-[A-Z0-9]{8}-[A-Z0-9]{8}-[A-Z0-9]{8})/;\n\n return class CygwinAgent extends OpenSSHAgent {\n getStream(cb) {\n cb = once(cb);\n\n // The cygwin ssh-agent connection process looks like this:\n // 1. Read the \"socket\" as a file to get the underlying TCP port and a\n // special \"secret\" that must be sent to the TCP server.\n // 2. Connect to the server listening on localhost at the TCP port.\n // 3. Send the \"secret\" to the server.\n // 4. The server sends back the same \"secret\".\n // 5. Send three 32-bit integer values of zero. This is ordinarily the\n // pid, uid, and gid of this process, but cygwin will actually\n // send us the correct values as a response.\n // 6. The server sends back the pid, uid, gid.\n // 7. Disconnect.\n // 8. Repeat steps 2-6, except send the received pid, uid, and gid in\n // step 5 instead of zeroes.\n // 9. Connection is ready to be used.\n\n let socketPath = this.socketPath;\n let triedCygpath = false;\n readFile(socketPath, function readCygsocket(err, data) {\n if (err) {\n if (triedCygpath)\n return cb(new Error('Invalid cygwin unix socket path'));\n\n // Try using `cygpath` to convert a possible *nix-style path to the\n // real Windows path before giving up ...\n execFile('cygpath', ['-w', socketPath], (err, stdout, stderr) => {\n if (err || stdout.length === 0)\n return cb(new Error('Invalid cygwin unix socket path'));\n\n triedCygpath = true;\n socketPath = stdout.toString().replace(/[\\r\\n]/g, '');\n readFile(socketPath, readCygsocket);\n });\n return;\n }\n\n const m = RE_CYGWIN_SOCK.exec(data.toString('ascii'));\n if (!m)\n return cb(new Error('Malformed cygwin unix socket file'));\n\n let state;\n let bc = 0;\n let isRetrying = false;\n const inBuf = [];\n let sock;\n\n // Use 0 for pid, uid, and gid to ensure we get an error and also\n // a valid uid and gid from cygwin so that we don't have to figure it\n // out ourselves\n let credsBuf = Buffer.alloc(12);\n\n // Parse cygwin unix socket file contents\n const port = parseInt(m[1], 10);\n const secret = m[2].replace(/-/g, '');\n const secretBuf = Buffer.allocUnsafe(16);\n for (let i = 0, j = 0; j < 32; ++i, j += 2)\n secretBuf[i] = parseInt(secret.substring(j, j + 2), 16);\n\n // Convert to host order (always LE for Windows)\n for (let i = 0; i < 16; i += 4)\n writeUInt32LE(secretBuf, readUInt32BE(secretBuf, i), i);\n\n tryConnect();\n\n function _onconnect() {\n bc = 0;\n state = 'secret';\n sock.write(secretBuf);\n }\n\n function _ondata(data) {\n bc += data.length;\n\n if (state === 'secret') {\n // The secret we sent is echoed back to us by cygwin, not sure of\n // the reason for that, but we ignore it nonetheless ...\n if (bc === 16) {\n bc = 0;\n state = 'creds';\n sock.write(credsBuf);\n }\n return;\n }\n\n if (state === 'creds') {\n // If this is the first attempt, make sure to gather the valid\n // uid and gid for our next attempt\n if (!isRetrying)\n inBuf.push(data);\n\n if (bc === 12) {\n sock.removeListener('connect', _onconnect);\n sock.removeListener('data', _ondata);\n sock.removeListener('error', onFail);\n sock.removeListener('end', onFail);\n sock.removeListener('close', onFail);\n\n if (isRetrying)\n return cb(null, sock);\n\n isRetrying = true;\n credsBuf = Buffer.concat(inBuf);\n writeUInt32LE(credsBuf, process.pid, 0);\n sock.on('error', () => {});\n sock.destroy();\n\n tryConnect();\n }\n }\n }\n\n function onFail() {\n cb(new Error('Problem negotiating cygwin unix socket security'));\n }\n\n function tryConnect() {\n sock = new Socket();\n sock.on('connect', _onconnect);\n sock.on('data', _ondata);\n sock.on('error', onFail);\n sock.on('end', onFail);\n sock.on('close', onFail);\n sock.connect(port);\n }\n });\n }\n };\n})();\n\n// Format of `//./pipe/ANYTHING`, with forward slashes and backward slashes\n// being interchangeable\nconst WINDOWS_PIPE_REGEX = /^[/\\\\][/\\\\]\\.[/\\\\]pipe[/\\\\].+/;\nfunction createAgent(path) {\n if (process.platform === 'win32' && !WINDOWS_PIPE_REGEX.test(path)) {\n return (path === 'pageant'\n ? new PageantAgent()\n : new CygwinAgent(path));\n }\n return new OpenSSHAgent(path);\n}\n\nconst AgentProtocol = (() => {\n // Client->Server messages\n const SSH_AGENTC_REQUEST_IDENTITIES = 11;\n const SSH_AGENTC_SIGN_REQUEST = 13;\n // const SSH_AGENTC_ADD_IDENTITY = 17;\n // const SSH_AGENTC_REMOVE_IDENTITY = 18;\n // const SSH_AGENTC_REMOVE_ALL_IDENTITIES = 19;\n // const SSH_AGENTC_ADD_SMARTCARD_KEY = 20;\n // const SSH_AGENTC_REMOVE_SMARTCARD_KEY = 21;\n // const SSH_AGENTC_LOCK = 22;\n // const SSH_AGENTC_UNLOCK = 23;\n // const SSH_AGENTC_ADD_ID_CONSTRAINED = 25;\n // const SSH_AGENTC_ADD_SMARTCARD_KEY_CONSTRAINED = 26;\n // const SSH_AGENTC_EXTENSION = 27;\n // Server->Client messages\n const SSH_AGENT_FAILURE = 5;\n // const SSH_AGENT_SUCCESS = 6;\n const SSH_AGENT_IDENTITIES_ANSWER = 12;\n const SSH_AGENT_SIGN_RESPONSE = 14;\n // const SSH_AGENT_EXTENSION_FAILURE = 28;\n\n // const SSH_AGENT_CONSTRAIN_LIFETIME = 1;\n // const SSH_AGENT_CONSTRAIN_CONFIRM = 2;\n // const SSH_AGENT_CONSTRAIN_EXTENSION = 255;\n\n const SSH_AGENT_RSA_SHA2_256 = (1 << 1);\n const SSH_AGENT_RSA_SHA2_512 = (1 << 2);\n\n const ROLE_CLIENT = 0;\n const ROLE_SERVER = 1;\n\n // Ensures that responses get sent back in the same order the requests were\n // received\n function processResponses(protocol) {\n let ret;\n while (protocol[SYM_REQS].length) {\n const nextResponse = protocol[SYM_REQS][0][SYM_RESP];\n if (nextResponse === undefined)\n break;\n\n protocol[SYM_REQS].shift();\n ret = protocol.push(nextResponse);\n }\n return ret;\n }\n\n const SYM_TYPE = Symbol('Inbound Request Type');\n const SYM_RESP = Symbol('Inbound Request Response');\n const SYM_CTX = Symbol('Inbound Request Context');\n class AgentInboundRequest {\n constructor(type, ctx) {\n this[SYM_TYPE] = type;\n this[SYM_RESP] = undefined;\n this[SYM_CTX] = ctx;\n }\n hasResponded() {\n return (this[SYM_RESP] !== undefined);\n }\n getType() {\n return this[SYM_TYPE];\n }\n getContext() {\n return this[SYM_CTX];\n }\n }\n function respond(protocol, req, data) {\n req[SYM_RESP] = data;\n return processResponses(protocol);\n }\n\n function cleanup(protocol) {\n protocol[SYM_BUFFER] = null;\n if (protocol[SYM_MODE] === ROLE_CLIENT) {\n const reqs = protocol[SYM_REQS];\n if (reqs && reqs.length) {\n protocol[SYM_REQS] = [];\n for (const req of reqs)\n req.cb(new Error('No reply from server'));\n }\n }\n\n // Node streams hackery to make streams do the \"right thing\"\n try {\n protocol.end();\n } catch {}\n setImmediate(() => {\n if (!protocol[SYM_ENDED])\n protocol.emit('end');\n if (!protocol[SYM_CLOSED])\n protocol.emit('close');\n });\n }\n\n function onClose() {\n this[SYM_CLOSED] = true;\n }\n\n function onEnd() {\n this[SYM_ENDED] = true;\n }\n\n const SYM_REQS = Symbol('Requests');\n const SYM_MODE = Symbol('Agent Protocol Role');\n const SYM_BUFFER = Symbol('Agent Protocol Buffer');\n const SYM_MSGLEN = Symbol('Agent Protocol Current Message Length');\n const SYM_CLOSED = Symbol('Agent Protocol Closed');\n const SYM_ENDED = Symbol('Agent Protocol Ended');\n // Implementation based on:\n // https://tools.ietf.org/html/draft-miller-ssh-agent-04\n return class AgentProtocol extends Duplex {\n /*\n Notes:\n - `constraint` type consists of:\n byte constraint_type\n byte[] constraint_data\n where `constraint_type` is one of:\n * SSH_AGENT_CONSTRAIN_LIFETIME\n - `constraint_data` consists of:\n uint32 seconds\n * SSH_AGENT_CONSTRAIN_CONFIRM\n - `constraint_data` N/A\n * SSH_AGENT_CONSTRAIN_EXTENSION\n - `constraint_data` consists of:\n string extension name\n byte[] extension-specific details\n */\n\n constructor(isClient) {\n super({ autoDestroy: true, emitClose: false });\n this[SYM_MODE] = (isClient ? ROLE_CLIENT : ROLE_SERVER);\n this[SYM_REQS] = [];\n this[SYM_BUFFER] = null;\n this[SYM_MSGLEN] = -1;\n this.once('end', onEnd);\n this.once('close', onClose);\n }\n\n _read(n) {}\n\n _write(data, encoding, cb) {\n /*\n Messages are of the format:\n uint32 message length\n byte message type\n byte[message length - 1] message contents\n */\n if (this[SYM_BUFFER] === null)\n this[SYM_BUFFER] = data;\n else\n this[SYM_BUFFER] = concat(this[SYM_BUFFER], data);\n\n let buffer = this[SYM_BUFFER];\n let bufferLen = buffer.length;\n\n let p = 0;\n while (p < bufferLen) {\n // Wait for length + type\n if (bufferLen < 5)\n break;\n\n if (this[SYM_MSGLEN] === -1)\n this[SYM_MSGLEN] = readUInt32BE(buffer, p);\n\n // Check if we have the entire message\n if (bufferLen < (4 + this[SYM_MSGLEN]))\n break;\n\n const msgType = buffer[p += 4];\n ++p;\n\n if (this[SYM_MODE] === ROLE_CLIENT) {\n if (this[SYM_REQS].length === 0)\n return cb(new Error('Received unexpected message from server'));\n\n const req = this[SYM_REQS].shift();\n\n switch (msgType) {\n case SSH_AGENT_FAILURE:\n req.cb(new Error('Agent responded with failure'));\n break;\n case SSH_AGENT_IDENTITIES_ANSWER: {\n if (req.type !== SSH_AGENTC_REQUEST_IDENTITIES)\n return cb(new Error('Agent responded with wrong message type'));\n\n /*\n byte SSH_AGENT_IDENTITIES_ANSWER\n uint32 nkeys\n\n where `nkeys` is 0 or more of:\n string key blob\n string comment\n */\n\n binaryParser.init(buffer, p);\n\n const numKeys = binaryParser.readUInt32BE();\n\n if (numKeys === undefined) {\n binaryParser.clear();\n return cb(new Error('Malformed agent response'));\n }\n\n const keys = [];\n for (let i = 0; i < numKeys; ++i) {\n let pubKey = binaryParser.readString();\n if (pubKey === undefined) {\n binaryParser.clear();\n return cb(new Error('Malformed agent response'));\n }\n\n const comment = binaryParser.readString(true);\n if (comment === undefined) {\n binaryParser.clear();\n return cb(new Error('Malformed agent response'));\n }\n\n pubKey = parseKey(pubKey);\n // We continue parsing the packet if we encounter an error\n // in case the error is due to the key being an unsupported\n // type\n if (pubKey instanceof Error)\n continue;\n\n pubKey.comment = pubKey.comment || comment;\n\n keys.push(pubKey);\n }\n p = binaryParser.pos();\n binaryParser.clear();\n\n req.cb(null, keys);\n break;\n }\n case SSH_AGENT_SIGN_RESPONSE: {\n if (req.type !== SSH_AGENTC_SIGN_REQUEST)\n return cb(new Error('Agent responded with wrong message type'));\n\n /*\n byte SSH_AGENT_SIGN_RESPONSE\n string signature\n */\n\n binaryParser.init(buffer, p);\n let signature = binaryParser.readString();\n p = binaryParser.pos();\n binaryParser.clear();\n\n if (signature === undefined)\n return cb(new Error('Malformed agent response'));\n\n // We strip the algorithm from OpenSSH's output and assume it's\n // using the algorithm we specified. This makes it easier on\n // custom Agent implementations so they don't have to construct\n // the correct binary format for a (OpenSSH-style) signature.\n\n // TODO: verify signature type based on key and options used\n // during initial sign request\n binaryParser.init(signature, 0);\n binaryParser.readString(true);\n signature = binaryParser.readString();\n binaryParser.clear();\n\n if (signature === undefined)\n return cb(new Error('Malformed OpenSSH signature format'));\n\n req.cb(null, signature);\n break;\n }\n default:\n return cb(\n new Error('Agent responded with unsupported message type')\n );\n }\n } else {\n switch (msgType) {\n case SSH_AGENTC_REQUEST_IDENTITIES: {\n const req = new AgentInboundRequest(msgType);\n this[SYM_REQS].push(req);\n /*\n byte SSH_AGENTC_REQUEST_IDENTITIES\n */\n this.emit('identities', req);\n break;\n }\n case SSH_AGENTC_SIGN_REQUEST: {\n /*\n byte SSH_AGENTC_SIGN_REQUEST\n string key_blob\n string data\n uint32 flags\n */\n binaryParser.init(buffer, p);\n let pubKey = binaryParser.readString();\n const data = binaryParser.readString();\n const flagsVal = binaryParser.readUInt32BE();\n p = binaryParser.pos();\n binaryParser.clear();\n if (flagsVal === undefined) {\n const req = new AgentInboundRequest(msgType);\n this[SYM_REQS].push(req);\n return this.failureReply(req);\n }\n\n pubKey = parseKey(pubKey);\n if (pubKey instanceof Error) {\n const req = new AgentInboundRequest(msgType);\n this[SYM_REQS].push(req);\n return this.failureReply(req);\n }\n\n const flags = {\n hash: undefined,\n };\n let ctx;\n if (pubKey.type === 'ssh-rsa') {\n if (flagsVal & SSH_AGENT_RSA_SHA2_256) {\n ctx = 'rsa-sha2-256';\n flags.hash = 'sha256';\n } else if (flagsVal & SSH_AGENT_RSA_SHA2_512) {\n ctx = 'rsa-sha2-512';\n flags.hash = 'sha512';\n }\n }\n if (ctx === undefined)\n ctx = pubKey.type;\n\n const req = new AgentInboundRequest(msgType, ctx);\n this[SYM_REQS].push(req);\n\n this.emit('sign', req, pubKey, data, flags);\n break;\n }\n default: {\n const req = new AgentInboundRequest(msgType);\n this[SYM_REQS].push(req);\n this.failureReply(req);\n }\n }\n }\n\n // Get ready for next message\n this[SYM_MSGLEN] = -1;\n if (p === bufferLen) {\n // Nothing left to process for now\n this[SYM_BUFFER] = null;\n break;\n } else {\n this[SYM_BUFFER] = buffer = buffer.slice(p);\n bufferLen = buffer.length;\n p = 0;\n }\n }\n\n cb();\n }\n\n _destroy(err, cb) {\n cleanup(this);\n cb();\n }\n\n _final(cb) {\n cleanup(this);\n cb();\n }\n\n // Client->Server messages =================================================\n sign(pubKey, data, options, cb) {\n if (this[SYM_MODE] !== ROLE_CLIENT)\n throw new Error('Client-only method called with server role');\n\n if (typeof options === 'function') {\n cb = options;\n options = undefined;\n } else if (typeof options !== 'object' || options === null) {\n options = undefined;\n }\n\n let flags = 0;\n\n pubKey = parseKey(pubKey);\n if (pubKey instanceof Error)\n throw new Error('Invalid public key argument');\n\n if (pubKey.type === 'ssh-rsa' && options) {\n switch (options.hash) {\n case 'sha256':\n flags = SSH_AGENT_RSA_SHA2_256;\n break;\n case 'sha512':\n flags = SSH_AGENT_RSA_SHA2_512;\n break;\n }\n }\n pubKey = pubKey.getPublicSSH();\n\n /*\n byte SSH_AGENTC_SIGN_REQUEST\n string key_blob\n string data\n uint32 flags\n */\n const type = SSH_AGENTC_SIGN_REQUEST;\n const keyLen = pubKey.length;\n const dataLen = data.length;\n let p = 0;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + keyLen + 4 + dataLen + 4);\n\n writeUInt32BE(buf, buf.length - 4, p);\n\n buf[p += 4] = type;\n\n writeUInt32BE(buf, keyLen, ++p);\n pubKey.copy(buf, p += 4);\n\n writeUInt32BE(buf, dataLen, p += keyLen);\n data.copy(buf, p += 4);\n\n writeUInt32BE(buf, flags, p += dataLen);\n\n if (typeof cb !== 'function')\n cb = noop;\n\n this[SYM_REQS].push({ type, cb });\n\n return this.push(buf);\n }\n getIdentities(cb) {\n if (this[SYM_MODE] !== ROLE_CLIENT)\n throw new Error('Client-only method called with server role');\n\n /*\n byte SSH_AGENTC_REQUEST_IDENTITIES\n */\n const type = SSH_AGENTC_REQUEST_IDENTITIES;\n\n let p = 0;\n const buf = Buffer.allocUnsafe(4 + 1);\n\n writeUInt32BE(buf, buf.length - 4, p);\n\n buf[p += 4] = type;\n\n if (typeof cb !== 'function')\n cb = noop;\n\n this[SYM_REQS].push({ type, cb });\n\n return this.push(buf);\n }\n\n // Server->Client messages =================================================\n failureReply(req) {\n if (this[SYM_MODE] !== ROLE_SERVER)\n throw new Error('Server-only method called with client role');\n\n if (!(req instanceof AgentInboundRequest))\n throw new Error('Wrong request argument');\n\n if (req.hasResponded())\n return true;\n\n let p = 0;\n const buf = Buffer.allocUnsafe(4 + 1);\n\n writeUInt32BE(buf, buf.length - 4, p);\n\n buf[p += 4] = SSH_AGENT_FAILURE;\n\n return respond(this, req, buf);\n }\n getIdentitiesReply(req, keys) {\n if (this[SYM_MODE] !== ROLE_SERVER)\n throw new Error('Server-only method called with client role');\n\n if (!(req instanceof AgentInboundRequest))\n throw new Error('Wrong request argument');\n\n if (req.hasResponded())\n return true;\n\n /*\n byte SSH_AGENT_IDENTITIES_ANSWER\n uint32 nkeys\n\n where `nkeys` is 0 or more of:\n string key blob\n string comment\n */\n\n if (req.getType() !== SSH_AGENTC_REQUEST_IDENTITIES)\n throw new Error('Invalid response to request');\n\n if (!Array.isArray(keys))\n throw new Error('Keys argument must be an array');\n\n let totalKeysLen = 4; // Include `nkeys` size\n\n const newKeys = [];\n for (let i = 0; i < keys.length; ++i) {\n const entry = keys[i];\n if (typeof entry !== 'object' || entry === null)\n throw new Error(`Invalid key entry: ${entry}`);\n\n let pubKey;\n let comment;\n if (isParsedKey(entry)) {\n pubKey = entry;\n } else if (isParsedKey(entry.pubKey)) {\n pubKey = entry.pubKey;\n } else {\n if (typeof entry.pubKey !== 'object' || entry.pubKey === null)\n continue;\n ({ pubKey, comment } = entry.pubKey);\n pubKey = parseKey(pubKey);\n if (pubKey instanceof Error)\n continue; // TODO: add debug output\n }\n comment = pubKey.comment || comment;\n pubKey = pubKey.getPublicSSH();\n\n totalKeysLen += 4 + pubKey.length;\n\n if (comment && typeof comment === 'string')\n comment = Buffer.from(comment);\n else if (!Buffer.isBuffer(comment))\n comment = EMPTY_BUF;\n\n totalKeysLen += 4 + comment.length;\n\n newKeys.push({ pubKey, comment });\n }\n\n let p = 0;\n const buf = Buffer.allocUnsafe(4 + 1 + totalKeysLen);\n\n writeUInt32BE(buf, buf.length - 4, p);\n\n buf[p += 4] = SSH_AGENT_IDENTITIES_ANSWER;\n\n writeUInt32BE(buf, newKeys.length, ++p);\n p += 4;\n for (let i = 0; i < newKeys.length; ++i) {\n const { pubKey, comment } = newKeys[i];\n\n writeUInt32BE(buf, pubKey.length, p);\n pubKey.copy(buf, p += 4);\n\n writeUInt32BE(buf, comment.length, p += pubKey.length);\n p += 4;\n if (comment.length) {\n comment.copy(buf, p);\n p += comment.length;\n }\n }\n\n return respond(this, req, buf);\n }\n signReply(req, signature) {\n if (this[SYM_MODE] !== ROLE_SERVER)\n throw new Error('Server-only method called with client role');\n\n if (!(req instanceof AgentInboundRequest))\n throw new Error('Wrong request argument');\n\n if (req.hasResponded())\n return true;\n\n /*\n byte SSH_AGENT_SIGN_RESPONSE\n string signature\n */\n\n if (req.getType() !== SSH_AGENTC_SIGN_REQUEST)\n throw new Error('Invalid response to request');\n\n if (!Buffer.isBuffer(signature))\n throw new Error('Signature argument must be a Buffer');\n\n if (signature.length === 0)\n throw new Error('Signature argument must be non-empty');\n\n /*\n OpenSSH agent signatures are encoded as:\n\n string signature format identifier (as specified by the\n public key/certificate format)\n byte[n] signature blob in format specific encoding.\n - This is actually a `string` for: rsa, dss, ecdsa, and ed25519\n types\n */\n\n let p = 0;\n const sigFormat = req.getContext();\n const sigFormatLen = Buffer.byteLength(sigFormat);\n const buf = Buffer.allocUnsafe(\n 4 + 1 + 4 + 4 + sigFormatLen + 4 + signature.length\n );\n\n writeUInt32BE(buf, buf.length - 4, p);\n\n buf[p += 4] = SSH_AGENT_SIGN_RESPONSE;\n\n writeUInt32BE(buf, 4 + sigFormatLen + 4 + signature.length, ++p);\n writeUInt32BE(buf, sigFormatLen, p += 4);\n buf.utf8Write(sigFormat, p += 4, sigFormatLen);\n writeUInt32BE(buf, signature.length, p += sigFormatLen);\n signature.copy(buf, p += 4);\n\n return respond(this, req, buf);\n }\n };\n})();\n\nconst SYM_AGENT = Symbol('Agent');\nconst SYM_AGENT_KEYS = Symbol('Agent Keys');\nconst SYM_AGENT_KEYS_IDX = Symbol('Agent Keys Index');\nconst SYM_AGENT_CBS = Symbol('Agent Init Callbacks');\nclass AgentContext {\n constructor(agent) {\n if (typeof agent === 'string')\n agent = createAgent(agent);\n else if (!isAgent(agent))\n throw new Error('Invalid agent argument');\n this[SYM_AGENT] = agent;\n this[SYM_AGENT_KEYS] = null;\n this[SYM_AGENT_KEYS_IDX] = -1;\n this[SYM_AGENT_CBS] = null;\n }\n init(cb) {\n if (typeof cb !== 'function')\n cb = noop;\n\n if (this[SYM_AGENT_KEYS] === null) {\n if (this[SYM_AGENT_CBS] === null) {\n this[SYM_AGENT_CBS] = [cb];\n\n const doCbs = (...args) => {\n process.nextTick(() => {\n const cbs = this[SYM_AGENT_CBS];\n this[SYM_AGENT_CBS] = null;\n for (const cb of cbs)\n cb(...args);\n });\n };\n\n this[SYM_AGENT].getIdentities(once((err, keys) => {\n if (err)\n return doCbs(err);\n\n if (!Array.isArray(keys)) {\n return doCbs(new Error(\n 'Agent implementation failed to provide keys'\n ));\n }\n\n const newKeys = [];\n for (let key of keys) {\n key = parseKey(key);\n if (key instanceof Error) {\n // TODO: add debug output\n continue;\n }\n newKeys.push(key);\n }\n\n this[SYM_AGENT_KEYS] = newKeys;\n this[SYM_AGENT_KEYS_IDX] = -1;\n doCbs();\n }));\n } else {\n this[SYM_AGENT_CBS].push(cb);\n }\n } else {\n process.nextTick(cb);\n }\n }\n nextKey() {\n if (this[SYM_AGENT_KEYS] === null\n || ++this[SYM_AGENT_KEYS_IDX] >= this[SYM_AGENT_KEYS].length) {\n return false;\n }\n\n return this[SYM_AGENT_KEYS][this[SYM_AGENT_KEYS_IDX]];\n }\n currentKey() {\n if (this[SYM_AGENT_KEYS] === null\n || this[SYM_AGENT_KEYS_IDX] >= this[SYM_AGENT_KEYS].length) {\n return null;\n }\n\n return this[SYM_AGENT_KEYS][this[SYM_AGENT_KEYS_IDX]];\n }\n pos() {\n if (this[SYM_AGENT_KEYS] === null\n || this[SYM_AGENT_KEYS_IDX] >= this[SYM_AGENT_KEYS].length) {\n return -1;\n }\n\n return this[SYM_AGENT_KEYS_IDX];\n }\n reset() {\n this[SYM_AGENT_KEYS_IDX] = -1;\n }\n\n sign(...args) {\n this[SYM_AGENT].sign(...args);\n }\n}\n\nfunction isAgent(val) {\n return (val instanceof BaseAgent);\n}\n\nmodule.exports = {\n AgentContext,\n AgentProtocol,\n BaseAgent,\n createAgent,\n CygwinAgent,\n isAgent,\n OpenSSHAgent,\n PageantAgent,\n};\n", "'use strict';\n\nconst { kMaxLength } = require('buffer');\nconst {\n createInflate,\n constants: {\n DEFLATE,\n INFLATE,\n Z_DEFAULT_CHUNK,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_MEMLEVEL,\n Z_DEFAULT_STRATEGY,\n Z_DEFAULT_WINDOWBITS,\n Z_PARTIAL_FLUSH,\n }\n} = require('zlib');\nconst ZlibHandle = createInflate()._handle.constructor;\n\nfunction processCallback() {\n throw new Error('Should not get here');\n}\n\nfunction zlibOnError(message, errno, code) {\n const self = this._owner;\n // There is no way to cleanly recover.\n // Continuing only obscures problems.\n\n const error = new Error(message);\n error.errno = errno;\n error.code = code;\n self._err = error;\n}\n\nfunction _close(engine) {\n // Caller may invoke .close after a zlib error (which will null _handle).\n if (!engine._handle)\n return;\n\n engine._handle.close();\n engine._handle = null;\n}\n\nclass Zlib {\n constructor(mode) {\n const windowBits = Z_DEFAULT_WINDOWBITS;\n const level = Z_DEFAULT_COMPRESSION;\n const memLevel = Z_DEFAULT_MEMLEVEL;\n const strategy = Z_DEFAULT_STRATEGY;\n const dictionary = undefined;\n\n this._err = undefined;\n this._writeState = new Uint32Array(2);\n this._chunkSize = Z_DEFAULT_CHUNK;\n this._maxOutputLength = kMaxLength;\n this._outBuffer = Buffer.allocUnsafe(this._chunkSize);\n this._outOffset = 0;\n\n this._handle = new ZlibHandle(mode);\n this._handle._owner = this;\n this._handle.onerror = zlibOnError;\n this._handle.init(windowBits,\n level,\n memLevel,\n strategy,\n this._writeState,\n processCallback,\n dictionary);\n }\n\n writeSync(chunk, retChunks) {\n const handle = this._handle;\n if (!handle)\n throw new Error('Invalid Zlib instance');\n\n let availInBefore = chunk.length;\n let availOutBefore = this._chunkSize - this._outOffset;\n let inOff = 0;\n let availOutAfter;\n let availInAfter;\n\n let buffers;\n let nread = 0;\n const state = this._writeState;\n let buffer = this._outBuffer;\n let offset = this._outOffset;\n const chunkSize = this._chunkSize;\n\n while (true) {\n handle.writeSync(Z_PARTIAL_FLUSH,\n chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n buffer, // out\n offset, // out_off\n availOutBefore); // out_len\n if (this._err)\n throw this._err;\n\n availOutAfter = state[0];\n availInAfter = state[1];\n\n const inDelta = availInBefore - availInAfter;\n const have = availOutBefore - availOutAfter;\n\n if (have > 0) {\n const out = (offset === 0 && have === buffer.length\n ? buffer\n : buffer.slice(offset, offset + have));\n offset += have;\n if (!buffers)\n buffers = out;\n else if (buffers.push === undefined)\n buffers = [buffers, out];\n else\n buffers.push(out);\n nread += out.byteLength;\n\n if (nread > this._maxOutputLength) {\n _close(this);\n throw new Error(\n `Output length exceeded maximum of ${this._maxOutputLength}`\n );\n }\n } else if (have !== 0) {\n throw new Error('have should not go down');\n }\n\n // Exhausted the output buffer, or used all the input create a new one.\n if (availOutAfter === 0 || offset >= chunkSize) {\n availOutBefore = chunkSize;\n offset = 0;\n buffer = Buffer.allocUnsafe(chunkSize);\n }\n\n if (availOutAfter === 0) {\n // Not actually done. Need to reprocess.\n // Also, update the availInBefore to the availInAfter value,\n // so that if we have to hit it a third (fourth, etc.) time,\n // it'll have the correct byte counts.\n inOff += inDelta;\n availInBefore = availInAfter;\n } else {\n break;\n }\n }\n\n this._outBuffer = buffer;\n this._outOffset = offset;\n\n if (nread === 0)\n buffers = Buffer.alloc(0);\n\n if (retChunks) {\n buffers.totalLen = nread;\n return buffers;\n }\n\n if (buffers.push === undefined)\n return buffers;\n\n const output = Buffer.allocUnsafe(nread);\n for (let i = 0, p = 0; i < buffers.length; ++i) {\n const buf = buffers[i];\n output.set(buf, p);\n p += buf.length;\n }\n return output;\n }\n}\n\nclass ZlibPacketWriter {\n constructor(protocol) {\n this.allocStart = 0;\n this.allocStartKEX = 0;\n this._protocol = protocol;\n this._zlib = new Zlib(DEFLATE);\n }\n\n cleanup() {\n if (this._zlib)\n _close(this._zlib);\n }\n\n alloc(payloadSize, force) {\n return Buffer.allocUnsafe(payloadSize);\n }\n\n finalize(payload, force) {\n if (this._protocol._kexinit === undefined || force) {\n const output = this._zlib.writeSync(payload, true);\n const packet = this._protocol._cipher.allocPacket(output.totalLen);\n if (output.push === undefined) {\n packet.set(output, 5);\n } else {\n for (let i = 0, p = 5; i < output.length; ++i) {\n const chunk = output[i];\n packet.set(chunk, p);\n p += chunk.length;\n }\n }\n return packet;\n }\n return payload;\n }\n}\n\nclass PacketWriter {\n constructor(protocol) {\n this.allocStart = 5;\n this.allocStartKEX = 5;\n this._protocol = protocol;\n }\n\n cleanup() {}\n\n alloc(payloadSize, force) {\n if (this._protocol._kexinit === undefined || force)\n return this._protocol._cipher.allocPacket(payloadSize);\n return Buffer.allocUnsafe(payloadSize);\n }\n\n finalize(packet, force) {\n return packet;\n }\n}\n\nclass ZlibPacketReader {\n constructor() {\n this._zlib = new Zlib(INFLATE);\n }\n\n cleanup() {\n if (this._zlib)\n _close(this._zlib);\n }\n\n read(data) {\n return this._zlib.writeSync(data, false);\n }\n}\n\nclass PacketReader {\n cleanup() {}\n\n read(data) {\n return data;\n }\n}\n\nmodule.exports = {\n PacketReader,\n PacketWriter,\n ZlibPacketReader,\n ZlibPacketWriter,\n};\n", "'use strict';\n\nconst {\n bufferSlice,\n bufferParser,\n doFatalError,\n sigSSHToASN1,\n writeUInt32BE,\n} = require('./utils.js');\n\nconst {\n CHANNEL_OPEN_FAILURE,\n COMPAT,\n MESSAGE,\n TERMINAL_MODE,\n} = require('./constants.js');\n\nconst {\n parseKey,\n} = require('./keyParser.js');\n\nconst TERMINAL_MODE_BY_VALUE =\n Array.from(Object.entries(TERMINAL_MODE))\n .reduce((obj, [key, value]) => ({ ...obj, [key]: value }), {});\n\nmodule.exports = {\n // Transport layer protocol ==================================================\n [MESSAGE.DISCONNECT]: (self, payload) => {\n /*\n byte SSH_MSG_DISCONNECT\n uint32 reason code\n string description in ISO-10646 UTF-8 encoding\n string language tag\n */\n bufferParser.init(payload, 1);\n const reason = bufferParser.readUInt32BE();\n const desc = bufferParser.readString(true);\n const lang = bufferParser.readString();\n bufferParser.clear();\n\n if (lang === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed DISCONNECT packet'\n );\n }\n\n self._debug && self._debug(\n `Inbound: Received DISCONNECT (${reason}, \"${desc}\")`\n );\n\n const handler = self._handlers.DISCONNECT;\n handler && handler(self, reason, desc);\n },\n [MESSAGE.IGNORE]: (self, payload) => {\n /*\n byte SSH_MSG_IGNORE\n string data\n */\n self._debug && self._debug('Inbound: Received IGNORE');\n },\n [MESSAGE.UNIMPLEMENTED]: (self, payload) => {\n /*\n byte SSH_MSG_UNIMPLEMENTED\n uint32 packet sequence number of rejected message\n */\n bufferParser.init(payload, 1);\n const seqno = bufferParser.readUInt32BE();\n bufferParser.clear();\n\n if (seqno === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed UNIMPLEMENTED packet'\n );\n }\n\n self._debug\n && self._debug(`Inbound: Received UNIMPLEMENTED (seqno ${seqno})`);\n },\n [MESSAGE.DEBUG]: (self, payload) => {\n /*\n byte SSH_MSG_DEBUG\n boolean always_display\n string message in ISO-10646 UTF-8 encoding [RFC3629]\n string language tag [RFC3066]\n */\n bufferParser.init(payload, 1);\n const display = bufferParser.readBool();\n const msg = bufferParser.readString(true);\n const lang = bufferParser.readString();\n bufferParser.clear();\n\n if (lang === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed DEBUG packet'\n );\n }\n\n self._debug && self._debug('Inbound: Received DEBUG');\n\n const handler = self._handlers.DEBUG;\n handler && handler(self, display, msg);\n },\n [MESSAGE.SERVICE_REQUEST]: (self, payload) => {\n /*\n byte SSH_MSG_SERVICE_REQUEST\n string service name\n */\n bufferParser.init(payload, 1);\n const name = bufferParser.readString(true);\n bufferParser.clear();\n\n if (name === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed SERVICE_REQUEST packet'\n );\n }\n\n self._debug && self._debug(`Inbound: Received SERVICE_REQUEST (${name})`);\n\n const handler = self._handlers.SERVICE_REQUEST;\n handler && handler(self, name);\n },\n [MESSAGE.SERVICE_ACCEPT]: (self, payload) => {\n // S->C\n /*\n byte SSH_MSG_SERVICE_ACCEPT\n string service name\n */\n bufferParser.init(payload, 1);\n const name = bufferParser.readString(true);\n bufferParser.clear();\n\n if (name === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed SERVICE_ACCEPT packet'\n );\n }\n\n self._debug && self._debug(`Inbound: Received SERVICE_ACCEPT (${name})`);\n\n const handler = self._handlers.SERVICE_ACCEPT;\n handler && handler(self, name);\n },\n [MESSAGE.EXT_INFO]: (self, payload) => {\n /*\n byte SSH_MSG_EXT_INFO\n uint32 nr-extensions\n repeat the following 2 fields \"nr-extensions\" times:\n string extension-name\n string extension-value (binary)\n */\n bufferParser.init(payload, 1);\n const numExts = bufferParser.readUInt32BE();\n let exts;\n if (numExts !== undefined) {\n exts = [];\n for (let i = 0; i < numExts; ++i) {\n const name = bufferParser.readString(true);\n const data = bufferParser.readString();\n if (data !== undefined) {\n switch (name) {\n case 'server-sig-algs': {\n const algs = data.latin1Slice(0, data.length).split(',');\n exts.push({ name, algs });\n continue;\n }\n default:\n continue;\n }\n }\n // Malformed\n exts = undefined;\n break;\n }\n }\n bufferParser.clear();\n\n if (exts === undefined)\n return doFatalError(self, 'Inbound: Malformed EXT_INFO packet');\n\n self._debug && self._debug('Inbound: Received EXT_INFO');\n\n const handler = self._handlers.EXT_INFO;\n handler && handler(self, exts);\n },\n\n // User auth protocol -- generic =============================================\n [MESSAGE.USERAUTH_REQUEST]: (self, payload) => {\n /*\n byte SSH_MSG_USERAUTH_REQUEST\n string user name in ISO-10646 UTF-8 encoding [RFC3629]\n string service name in US-ASCII\n string method name in US-ASCII\n .... method specific fields\n */\n bufferParser.init(payload, 1);\n const user = bufferParser.readString(true);\n const service = bufferParser.readString(true);\n const method = bufferParser.readString(true);\n let methodData;\n let methodDesc;\n switch (method) {\n case 'none':\n methodData = null;\n break;\n case 'password': {\n /*\n boolean <new password follows (old) plaintext password?>\n string plaintext password in ISO-10646 UTF-8 encoding [RFC3629]\n [string new password]\n */\n const isChange = bufferParser.readBool();\n if (isChange !== undefined) {\n methodData = bufferParser.readString(true);\n if (methodData !== undefined && isChange) {\n const newPassword = bufferParser.readString(true);\n if (newPassword !== undefined)\n methodData = { oldPassword: methodData, newPassword };\n else\n methodData = undefined;\n }\n }\n break;\n }\n case 'publickey': {\n /*\n boolean <signature follows public key blob?>\n string public key algorithm name\n string public key blob\n [string signature]\n */\n const hasSig = bufferParser.readBool();\n if (hasSig !== undefined) {\n const keyAlgo = bufferParser.readString(true);\n let realKeyAlgo = keyAlgo;\n const key = bufferParser.readString();\n\n let hashAlgo;\n switch (keyAlgo) {\n case 'rsa-sha2-256':\n realKeyAlgo = 'ssh-rsa';\n hashAlgo = 'sha256';\n break;\n case 'rsa-sha2-512':\n realKeyAlgo = 'ssh-rsa';\n hashAlgo = 'sha512';\n break;\n }\n\n if (hasSig) {\n const blobEnd = bufferParser.pos();\n let signature = bufferParser.readString();\n if (signature !== undefined) {\n if (signature.length > (4 + keyAlgo.length + 4)\n && signature.utf8Slice(4, 4 + keyAlgo.length) === keyAlgo) {\n // Skip algoLen + algo + sigLen\n signature = bufferSlice(signature, 4 + keyAlgo.length + 4);\n }\n\n signature = sigSSHToASN1(signature, realKeyAlgo);\n if (signature) {\n const sessionID = self._kex.sessionID;\n const blob = Buffer.allocUnsafe(4 + sessionID.length + blobEnd);\n writeUInt32BE(blob, sessionID.length, 0);\n blob.set(sessionID, 4);\n blob.set(\n new Uint8Array(payload.buffer, payload.byteOffset, blobEnd),\n 4 + sessionID.length\n );\n methodData = {\n keyAlgo: realKeyAlgo,\n key,\n signature,\n blob,\n hashAlgo,\n };\n }\n }\n } else {\n methodData = { keyAlgo: realKeyAlgo, key, hashAlgo };\n methodDesc = 'publickey -- check';\n }\n }\n break;\n }\n case 'hostbased': {\n /*\n string public key algorithm for host key\n string public host key and certificates for client host\n string client host name expressed as the FQDN in US-ASCII\n string user name on the client host in ISO-10646 UTF-8 encoding\n [RFC3629]\n string signature\n */\n const keyAlgo = bufferParser.readString(true);\n let realKeyAlgo = keyAlgo;\n const key = bufferParser.readString();\n const localHostname = bufferParser.readString(true);\n const localUsername = bufferParser.readString(true);\n\n let hashAlgo;\n switch (keyAlgo) {\n case 'rsa-sha2-256':\n realKeyAlgo = 'ssh-rsa';\n hashAlgo = 'sha256';\n break;\n case 'rsa-sha2-512':\n realKeyAlgo = 'ssh-rsa';\n hashAlgo = 'sha512';\n break;\n }\n\n const blobEnd = bufferParser.pos();\n let signature = bufferParser.readString();\n if (signature !== undefined) {\n if (signature.length > (4 + keyAlgo.length + 4)\n && signature.utf8Slice(4, 4 + keyAlgo.length) === keyAlgo) {\n // Skip algoLen + algo + sigLen\n signature = bufferSlice(signature, 4 + keyAlgo.length + 4);\n }\n\n signature = sigSSHToASN1(signature, realKeyAlgo);\n if (signature !== undefined) {\n const sessionID = self._kex.sessionID;\n const blob = Buffer.allocUnsafe(4 + sessionID.length + blobEnd);\n writeUInt32BE(blob, sessionID.length, 0);\n blob.set(sessionID, 4);\n blob.set(\n new Uint8Array(payload.buffer, payload.byteOffset, blobEnd),\n 4 + sessionID.length\n );\n methodData = {\n keyAlgo: realKeyAlgo,\n key,\n signature,\n blob,\n localHostname,\n localUsername,\n hashAlgo\n };\n }\n }\n break;\n }\n case 'keyboard-interactive':\n /*\n string language tag (as defined in [RFC-3066])\n string submethods (ISO-10646 UTF-8)\n */\n // Skip/ignore language field -- it's deprecated in RFC 4256\n bufferParser.skipString();\n\n methodData = bufferParser.readList();\n break;\n default:\n if (method !== undefined)\n methodData = bufferParser.readRaw();\n }\n bufferParser.clear();\n\n if (methodData === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed USERAUTH_REQUEST packet'\n );\n }\n\n if (methodDesc === undefined)\n methodDesc = method;\n\n self._authsQueue.push(method);\n\n self._debug\n && self._debug(`Inbound: Received USERAUTH_REQUEST (${methodDesc})`);\n\n const handler = self._handlers.USERAUTH_REQUEST;\n handler && handler(self, user, service, method, methodData);\n },\n [MESSAGE.USERAUTH_FAILURE]: (self, payload) => {\n // S->C\n /*\n byte SSH_MSG_USERAUTH_FAILURE\n name-list authentications that can continue\n boolean partial success\n */\n bufferParser.init(payload, 1);\n const authMethods = bufferParser.readList();\n const partialSuccess = bufferParser.readBool();\n bufferParser.clear();\n\n if (partialSuccess === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed USERAUTH_FAILURE packet'\n );\n }\n\n self._debug\n && self._debug(`Inbound: Received USERAUTH_FAILURE (${authMethods})`);\n\n self._authsQueue.shift();\n const handler = self._handlers.USERAUTH_FAILURE;\n handler && handler(self, authMethods, partialSuccess);\n },\n [MESSAGE.USERAUTH_SUCCESS]: (self, payload) => {\n // S->C\n /*\n byte SSH_MSG_USERAUTH_SUCCESS\n */\n self._debug && self._debug('Inbound: Received USERAUTH_SUCCESS');\n\n self._authsQueue.shift();\n const handler = self._handlers.USERAUTH_SUCCESS;\n handler && handler(self);\n },\n [MESSAGE.USERAUTH_BANNER]: (self, payload) => {\n // S->C\n /*\n byte SSH_MSG_USERAUTH_BANNER\n string message in ISO-10646 UTF-8 encoding [RFC3629]\n string language tag [RFC3066]\n */\n bufferParser.init(payload, 1);\n const msg = bufferParser.readString(true);\n const lang = bufferParser.readString();\n bufferParser.clear();\n\n if (lang === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed USERAUTH_BANNER packet'\n );\n }\n\n self._debug && self._debug('Inbound: Received USERAUTH_BANNER');\n\n const handler = self._handlers.USERAUTH_BANNER;\n handler && handler(self, msg);\n },\n\n // User auth protocol -- method-specific =====================================\n 60: (self, payload) => {\n if (!self._authsQueue.length) {\n self._debug\n && self._debug('Inbound: Received payload type 60 without auth');\n return;\n }\n\n switch (self._authsQueue[0]) {\n case 'password': {\n // S->C\n /*\n byte SSH_MSG_USERAUTH_PASSWD_CHANGEREQ\n string prompt in ISO-10646 UTF-8 encoding [RFC3629]\n string language tag [RFC3066]\n */\n bufferParser.init(payload, 1);\n const prompt = bufferParser.readString(true);\n const lang = bufferParser.readString();\n bufferParser.clear();\n\n if (lang === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed USERAUTH_PASSWD_CHANGEREQ packet'\n );\n }\n\n self._debug\n && self._debug('Inbound: Received USERAUTH_PASSWD_CHANGEREQ');\n\n const handler = self._handlers.USERAUTH_PASSWD_CHANGEREQ;\n handler && handler(self, prompt);\n break;\n }\n case 'publickey': {\n // S->C\n /*\n byte SSH_MSG_USERAUTH_PK_OK\n string public key algorithm name from the request\n string public key blob from the request\n */\n bufferParser.init(payload, 1);\n const keyAlgo = bufferParser.readString(true);\n const key = bufferParser.readString();\n bufferParser.clear();\n\n if (key === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed USERAUTH_PK_OK packet'\n );\n }\n\n self._debug && self._debug('Inbound: Received USERAUTH_PK_OK');\n\n self._authsQueue.shift();\n const handler = self._handlers.USERAUTH_PK_OK;\n handler && handler(self, keyAlgo, key);\n break;\n }\n case 'keyboard-interactive': {\n // S->C\n /*\n byte SSH_MSG_USERAUTH_INFO_REQUEST\n string name (ISO-10646 UTF-8)\n string instruction (ISO-10646 UTF-8)\n string language tag (as defined in [RFC-3066])\n int num-prompts\n string prompt[1] (ISO-10646 UTF-8)\n boolean echo[1]\n ...\n string prompt[num-prompts] (ISO-10646 UTF-8)\n boolean echo[num-prompts]\n */\n bufferParser.init(payload, 1);\n const name = bufferParser.readString(true);\n const instructions = bufferParser.readString(true);\n bufferParser.readString(); // skip lang\n const numPrompts = bufferParser.readUInt32BE();\n let prompts;\n if (numPrompts !== undefined) {\n prompts = new Array(numPrompts);\n let i;\n for (i = 0; i < numPrompts; ++i) {\n const prompt = bufferParser.readString(true);\n const echo = bufferParser.readBool();\n if (echo === undefined)\n break;\n prompts[i] = { prompt, echo };\n }\n if (i !== numPrompts)\n prompts = undefined;\n }\n bufferParser.clear();\n\n if (prompts === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed USERAUTH_INFO_REQUEST packet'\n );\n }\n\n self._debug && self._debug('Inbound: Received USERAUTH_INFO_REQUEST');\n\n const handler = self._handlers.USERAUTH_INFO_REQUEST;\n handler && handler(self, name, instructions, prompts);\n break;\n }\n default:\n self._debug\n && self._debug('Inbound: Received unexpected payload type 60');\n }\n },\n 61: (self, payload) => {\n if (!self._authsQueue.length) {\n self._debug\n && self._debug('Inbound: Received payload type 61 without auth');\n return;\n }\n /*\n byte SSH_MSG_USERAUTH_INFO_RESPONSE\n int num-responses\n string response[1] (ISO-10646 UTF-8)\n ...\n string response[num-responses] (ISO-10646 UTF-8)\n */\n if (self._authsQueue[0] !== 'keyboard-interactive') {\n return doFatalError(\n self,\n 'Inbound: Received unexpected payload type 61'\n );\n }\n bufferParser.init(payload, 1);\n const numResponses = bufferParser.readUInt32BE();\n let responses;\n if (numResponses !== undefined) {\n responses = new Array(numResponses);\n let i;\n for (i = 0; i < numResponses; ++i) {\n const response = bufferParser.readString(true);\n if (response === undefined)\n break;\n responses[i] = response;\n }\n if (i !== numResponses)\n responses = undefined;\n }\n bufferParser.clear();\n\n if (responses === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed USERAUTH_INFO_RESPONSE packet'\n );\n }\n\n self._debug && self._debug('Inbound: Received USERAUTH_INFO_RESPONSE');\n\n const handler = self._handlers.USERAUTH_INFO_RESPONSE;\n handler && handler(self, responses);\n },\n\n // Connection protocol -- generic ============================================\n [MESSAGE.GLOBAL_REQUEST]: (self, payload) => {\n /*\n byte SSH_MSG_GLOBAL_REQUEST\n string request name in US-ASCII only\n boolean want reply\n .... request-specific data follows\n */\n bufferParser.init(payload, 1);\n const name = bufferParser.readString(true);\n const wantReply = bufferParser.readBool();\n let data;\n if (wantReply !== undefined) {\n switch (name) {\n case 'tcpip-forward':\n case 'cancel-tcpip-forward': {\n /*\n string address to bind (e.g., \"0.0.0.0\")\n uint32 port number to bind\n */\n const bindAddr = bufferParser.readString(true);\n const bindPort = bufferParser.readUInt32BE();\n if (bindPort !== undefined)\n data = { bindAddr, bindPort };\n break;\n }\n case 'streamlocal-forward@openssh.com':\n case 'cancel-streamlocal-forward@openssh.com': {\n /*\n string socket path\n */\n const socketPath = bufferParser.readString(true);\n if (socketPath !== undefined)\n data = { socketPath };\n break;\n }\n case 'no-more-sessions@openssh.com':\n data = null;\n break;\n case 'hostkeys-00@openssh.com': {\n data = [];\n while (bufferParser.avail() > 0) {\n const keyRaw = bufferParser.readString();\n if (keyRaw === undefined) {\n data = undefined;\n break;\n }\n const key = parseKey(keyRaw);\n if (!(key instanceof Error))\n data.push(key);\n }\n break;\n }\n default:\n data = bufferParser.readRaw();\n }\n }\n bufferParser.clear();\n\n if (data === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed GLOBAL_REQUEST packet'\n );\n }\n\n self._debug && self._debug(`Inbound: GLOBAL_REQUEST (${name})`);\n\n const handler = self._handlers.GLOBAL_REQUEST;\n if (handler)\n handler(self, name, wantReply, data);\n else\n self.requestFailure(); // Auto reject\n },\n [MESSAGE.REQUEST_SUCCESS]: (self, payload) => {\n /*\n byte SSH_MSG_REQUEST_SUCCESS\n .... response specific data\n */\n const data = (payload.length > 1 ? bufferSlice(payload, 1) : null);\n\n self._debug && self._debug('Inbound: REQUEST_SUCCESS');\n\n const handler = self._handlers.REQUEST_SUCCESS;\n handler && handler(self, data);\n },\n [MESSAGE.REQUEST_FAILURE]: (self, payload) => {\n /*\n byte SSH_MSG_REQUEST_FAILURE\n */\n self._debug && self._debug('Inbound: Received REQUEST_FAILURE');\n\n const handler = self._handlers.REQUEST_FAILURE;\n handler && handler(self);\n },\n\n // Connection protocol -- channel-related ====================================\n [MESSAGE.CHANNEL_OPEN]: (self, payload) => {\n /*\n byte SSH_MSG_CHANNEL_OPEN\n string channel type in US-ASCII only\n uint32 sender channel\n uint32 initial window size\n uint32 maximum packet size\n .... channel type specific data follows\n */\n bufferParser.init(payload, 1);\n const type = bufferParser.readString(true);\n const sender = bufferParser.readUInt32BE();\n const window = bufferParser.readUInt32BE();\n const packetSize = bufferParser.readUInt32BE();\n let channelInfo;\n\n switch (type) {\n case 'forwarded-tcpip': // S->C\n case 'direct-tcpip': { // C->S\n /*\n string address that was connected / host to connect\n uint32 port that was connected / port to connect\n string originator IP address\n uint32 originator port\n */\n const destIP = bufferParser.readString(true);\n const destPort = bufferParser.readUInt32BE();\n const srcIP = bufferParser.readString(true);\n const srcPort = bufferParser.readUInt32BE();\n if (srcPort !== undefined) {\n channelInfo = {\n type,\n sender,\n window,\n packetSize,\n data: { destIP, destPort, srcIP, srcPort }\n };\n }\n break;\n }\n case 'forwarded-streamlocal@openssh.com': // S->C\n case 'direct-streamlocal@openssh.com': { // C->S\n /*\n string socket path\n string reserved for future use\n\n (direct-streamlocal@openssh.com additionally has:)\n uint32 reserved\n */\n const socketPath = bufferParser.readString(true);\n if (socketPath !== undefined) {\n channelInfo = {\n type,\n sender,\n window,\n packetSize,\n data: { socketPath }\n };\n }\n break;\n }\n case 'x11': { // S->C\n /*\n string originator address (e.g., \"192.168.7.38\")\n uint32 originator port\n */\n const srcIP = bufferParser.readString(true);\n const srcPort = bufferParser.readUInt32BE();\n if (srcPort !== undefined) {\n channelInfo = {\n type,\n sender,\n window,\n packetSize,\n data: { srcIP, srcPort }\n };\n }\n break;\n }\n default:\n // Includes:\n // 'session' (C->S)\n // 'auth-agent@openssh.com' (S->C)\n channelInfo = {\n type,\n sender,\n window,\n packetSize,\n data: {}\n };\n }\n bufferParser.clear();\n\n if (channelInfo === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed CHANNEL_OPEN packet'\n );\n }\n\n self._debug && self._debug(`Inbound: CHANNEL_OPEN (s:${sender}, ${type})`);\n\n const handler = self._handlers.CHANNEL_OPEN;\n if (handler) {\n handler(self, channelInfo);\n } else {\n self.channelOpenFail(\n channelInfo.sender,\n CHANNEL_OPEN_FAILURE.ADMINISTRATIVELY_PROHIBITED,\n '',\n ''\n );\n }\n },\n [MESSAGE.CHANNEL_OPEN_CONFIRMATION]: (self, payload) => {\n /*\n byte SSH_MSG_CHANNEL_OPEN_CONFIRMATION\n uint32 recipient channel\n uint32 sender channel\n uint32 initial window size\n uint32 maximum packet size\n .... channel type specific data follows\n */\n // \"The 'recipient channel' is the channel number given in the\n // original open request, and 'sender channel' is the channel number\n // allocated by the other side.\"\n bufferParser.init(payload, 1);\n const recipient = bufferParser.readUInt32BE();\n const sender = bufferParser.readUInt32BE();\n const window = bufferParser.readUInt32BE();\n const packetSize = bufferParser.readUInt32BE();\n const data = (bufferParser.avail() ? bufferParser.readRaw() : undefined);\n bufferParser.clear();\n\n if (packetSize === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed CHANNEL_OPEN_CONFIRMATION packet'\n );\n }\n\n self._debug && self._debug(\n `Inbound: CHANNEL_OPEN_CONFIRMATION (r:${recipient}, s:${sender})`\n );\n\n const handler = self._handlers.CHANNEL_OPEN_CONFIRMATION;\n if (handler)\n handler(self, { recipient, sender, window, packetSize, data });\n },\n [MESSAGE.CHANNEL_OPEN_FAILURE]: (self, payload) => {\n /*\n byte SSH_MSG_CHANNEL_OPEN_FAILURE\n uint32 recipient channel\n uint32 reason code\n string description in ISO-10646 UTF-8 encoding [RFC3629]\n string language tag [RFC3066]\n */\n bufferParser.init(payload, 1);\n const recipient = bufferParser.readUInt32BE();\n const reason = bufferParser.readUInt32BE();\n const description = bufferParser.readString(true);\n const lang = bufferParser.readString();\n bufferParser.clear();\n\n if (lang === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed CHANNEL_OPEN_FAILURE packet'\n );\n }\n\n self._debug\n && self._debug(`Inbound: CHANNEL_OPEN_FAILURE (r:${recipient})`);\n\n const handler = self._handlers.CHANNEL_OPEN_FAILURE;\n handler && handler(self, recipient, reason, description);\n },\n [MESSAGE.CHANNEL_WINDOW_ADJUST]: (self, payload) => {\n /*\n byte SSH_MSG_CHANNEL_WINDOW_ADJUST\n uint32 recipient channel\n uint32 bytes to add\n */\n bufferParser.init(payload, 1);\n const recipient = bufferParser.readUInt32BE();\n const bytesToAdd = bufferParser.readUInt32BE();\n bufferParser.clear();\n\n if (bytesToAdd === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed CHANNEL_WINDOW_ADJUST packet'\n );\n }\n\n self._debug && self._debug(\n `Inbound: CHANNEL_WINDOW_ADJUST (r:${recipient}, ${bytesToAdd})`\n );\n\n const handler = self._handlers.CHANNEL_WINDOW_ADJUST;\n handler && handler(self, recipient, bytesToAdd);\n },\n [MESSAGE.CHANNEL_DATA]: (self, payload) => {\n /*\n byte SSH_MSG_CHANNEL_DATA\n uint32 recipient channel\n string data\n */\n bufferParser.init(payload, 1);\n const recipient = bufferParser.readUInt32BE();\n const data = bufferParser.readString();\n bufferParser.clear();\n\n if (data === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed CHANNEL_DATA packet'\n );\n }\n\n self._debug\n && self._debug(`Inbound: CHANNEL_DATA (r:${recipient}, ${data.length})`);\n\n const handler = self._handlers.CHANNEL_DATA;\n handler && handler(self, recipient, data);\n },\n [MESSAGE.CHANNEL_EXTENDED_DATA]: (self, payload) => {\n /*\n byte SSH_MSG_CHANNEL_EXTENDED_DATA\n uint32 recipient channel\n uint32 data_type_code\n string data\n */\n bufferParser.init(payload, 1);\n const recipient = bufferParser.readUInt32BE();\n const type = bufferParser.readUInt32BE();\n const data = bufferParser.readString();\n bufferParser.clear();\n\n if (data === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed CHANNEL_EXTENDED_DATA packet'\n );\n }\n\n self._debug && self._debug(\n `Inbound: CHANNEL_EXTENDED_DATA (r:${recipient}, ${data.length})`\n );\n\n const handler = self._handlers.CHANNEL_EXTENDED_DATA;\n handler && handler(self, recipient, data, type);\n },\n [MESSAGE.CHANNEL_EOF]: (self, payload) => {\n /*\n byte SSH_MSG_CHANNEL_EOF\n uint32 recipient channel\n */\n bufferParser.init(payload, 1);\n const recipient = bufferParser.readUInt32BE();\n bufferParser.clear();\n\n if (recipient === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed CHANNEL_EOF packet'\n );\n }\n\n self._debug && self._debug(`Inbound: CHANNEL_EOF (r:${recipient})`);\n\n const handler = self._handlers.CHANNEL_EOF;\n handler && handler(self, recipient);\n },\n [MESSAGE.CHANNEL_CLOSE]: (self, payload) => {\n /*\n byte SSH_MSG_CHANNEL_CLOSE\n uint32 recipient channel\n */\n bufferParser.init(payload, 1);\n const recipient = bufferParser.readUInt32BE();\n bufferParser.clear();\n\n if (recipient === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed CHANNEL_CLOSE packet'\n );\n }\n\n self._debug && self._debug(`Inbound: CHANNEL_CLOSE (r:${recipient})`);\n\n const handler = self._handlers.CHANNEL_CLOSE;\n handler && handler(self, recipient);\n },\n [MESSAGE.CHANNEL_REQUEST]: (self, payload) => {\n /*\n byte SSH_MSG_CHANNEL_REQUEST\n uint32 recipient channel\n string request type in US-ASCII characters only\n boolean want reply\n .... type-specific data follows\n */\n bufferParser.init(payload, 1);\n const recipient = bufferParser.readUInt32BE();\n const type = bufferParser.readString(true);\n const wantReply = bufferParser.readBool();\n let data;\n if (wantReply !== undefined) {\n switch (type) {\n case 'exit-status': // S->C\n /*\n uint32 exit_status\n */\n data = bufferParser.readUInt32BE();\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type}: ${data})`\n );\n break;\n case 'exit-signal': { // S->C\n /*\n string signal name (without the \"SIG\" prefix)\n boolean core dumped\n string error message in ISO-10646 UTF-8 encoding\n string language tag\n */\n let signal;\n let coreDumped;\n if (self._compatFlags & COMPAT.OLD_EXIT) {\n /*\n Instead of `signal name` and `core dumped`, we have just:\n uint32 signal number\n */\n const num = bufferParser.readUInt32BE();\n switch (num) {\n case 1:\n signal = 'HUP';\n break;\n case 2:\n signal = 'INT';\n break;\n case 3:\n signal = 'QUIT';\n break;\n case 6:\n signal = 'ABRT';\n break;\n case 9:\n signal = 'KILL';\n break;\n case 14:\n signal = 'ALRM';\n break;\n case 15:\n signal = 'TERM';\n break;\n default:\n if (num !== undefined) {\n // Unknown or OS-specific\n signal = `UNKNOWN (${num})`;\n }\n }\n coreDumped = false;\n } else {\n signal = bufferParser.readString(true);\n coreDumped = bufferParser.readBool();\n if (coreDumped === undefined)\n signal = undefined;\n }\n const errorMessage = bufferParser.readString(true);\n if (bufferParser.skipString() !== undefined)\n data = { signal, coreDumped, errorMessage };\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type}: ${signal})`\n );\n break;\n }\n case 'pty-req': { // C->S\n /*\n string TERM environment variable value (e.g., vt100)\n uint32 terminal width, characters (e.g., 80)\n uint32 terminal height, rows (e.g., 24)\n uint32 terminal width, pixels (e.g., 640)\n uint32 terminal height, pixels (e.g., 480)\n string encoded terminal modes\n */\n const term = bufferParser.readString(true);\n const cols = bufferParser.readUInt32BE();\n const rows = bufferParser.readUInt32BE();\n const width = bufferParser.readUInt32BE();\n const height = bufferParser.readUInt32BE();\n const modesBinary = bufferParser.readString();\n if (modesBinary !== undefined) {\n bufferParser.init(modesBinary, 1);\n let modes = {};\n while (bufferParser.avail()) {\n const opcode = bufferParser.readByte();\n if (opcode === TERMINAL_MODE.TTY_OP_END)\n break;\n const name = TERMINAL_MODE_BY_VALUE[opcode];\n const value = bufferParser.readUInt32BE();\n if (opcode === undefined\n || name === undefined\n || value === undefined) {\n modes = undefined;\n break;\n }\n modes[name] = value;\n }\n if (modes !== undefined)\n data = { term, cols, rows, width, height, modes };\n }\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type})`\n );\n break;\n }\n case 'window-change': { // C->S\n /*\n uint32 terminal width, columns\n uint32 terminal height, rows\n uint32 terminal width, pixels\n uint32 terminal height, pixels\n */\n const cols = bufferParser.readUInt32BE();\n const rows = bufferParser.readUInt32BE();\n const width = bufferParser.readUInt32BE();\n const height = bufferParser.readUInt32BE();\n if (height !== undefined)\n data = { cols, rows, width, height };\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type})`\n );\n break;\n }\n case 'x11-req': { // C->S\n /*\n boolean single connection\n string x11 authentication protocol\n string x11 authentication cookie\n uint32 x11 screen number\n */\n const single = bufferParser.readBool();\n const protocol = bufferParser.readString(true);\n const cookie = bufferParser.readString();\n const screen = bufferParser.readUInt32BE();\n if (screen !== undefined)\n data = { single, protocol, cookie, screen };\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type})`\n );\n break;\n }\n case 'env': { // C->S\n /*\n string variable name\n string variable value\n */\n const name = bufferParser.readString(true);\n const value = bufferParser.readString(true);\n if (value !== undefined)\n data = { name, value };\n if (self._debug) {\n self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type}: `\n + `${name}=${value})`\n );\n }\n break;\n }\n case 'shell': // C->S\n data = null; // No extra data\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type})`\n );\n break;\n case 'exec': // C->S\n /*\n string command\n */\n data = bufferParser.readString(true);\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type}: ${data})`\n );\n break;\n case 'subsystem': // C->S\n /*\n string subsystem name\n */\n data = bufferParser.readString(true);\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type}: ${data})`\n );\n break;\n case 'signal': // C->S\n /*\n string signal name (without the \"SIG\" prefix)\n */\n data = bufferParser.readString(true);\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type}: ${data})`\n );\n break;\n case 'xon-xoff': // C->S\n /*\n boolean client can do\n */\n data = bufferParser.readBool();\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type}: ${data})`\n );\n break;\n case 'auth-agent-req@openssh.com': // C-S\n data = null; // No extra data\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type})`\n );\n break;\n default:\n data = (bufferParser.avail() ? bufferParser.readRaw() : null);\n self._debug && self._debug(\n `Inbound: CHANNEL_REQUEST (r:${recipient}, ${type})`\n );\n }\n }\n bufferParser.clear();\n\n if (data === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed CHANNEL_REQUEST packet'\n );\n }\n\n const handler = self._handlers.CHANNEL_REQUEST;\n handler && handler(self, recipient, type, wantReply, data);\n },\n [MESSAGE.CHANNEL_SUCCESS]: (self, payload) => {\n /*\n byte SSH_MSG_CHANNEL_SUCCESS\n uint32 recipient channel\n */\n bufferParser.init(payload, 1);\n const recipient = bufferParser.readUInt32BE();\n bufferParser.clear();\n\n if (recipient === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed CHANNEL_SUCCESS packet'\n );\n }\n\n self._debug && self._debug(`Inbound: CHANNEL_SUCCESS (r:${recipient})`);\n\n const handler = self._handlers.CHANNEL_SUCCESS;\n handler && handler(self, recipient);\n },\n [MESSAGE.CHANNEL_FAILURE]: (self, payload) => {\n /*\n byte SSH_MSG_CHANNEL_FAILURE\n uint32 recipient channel\n */\n bufferParser.init(payload, 1);\n const recipient = bufferParser.readUInt32BE();\n bufferParser.clear();\n\n if (recipient === undefined) {\n return doFatalError(\n self,\n 'Inbound: Malformed CHANNEL_FAILURE packet'\n );\n }\n\n self._debug && self._debug(`Inbound: CHANNEL_FAILURE (r:${recipient})`);\n\n const handler = self._handlers.CHANNEL_FAILURE;\n handler && handler(self, recipient);\n },\n};\n", "'use strict';\n\nconst MESSAGE_HANDLERS = new Array(256);\n[\n require('./kex.js').HANDLERS,\n require('./handlers.misc.js'),\n].forEach((handlers) => {\n // eslint-disable-next-line prefer-const\n for (let [type, handler] of Object.entries(handlers)) {\n type = +type;\n if (isFinite(type) && type >= 0 && type < MESSAGE_HANDLERS.length)\n MESSAGE_HANDLERS[type] = handler;\n }\n});\n\nmodule.exports = MESSAGE_HANDLERS;\n", "'use strict';\n\nconst {\n createDiffieHellman,\n createDiffieHellmanGroup,\n createECDH,\n createHash,\n createPublicKey,\n diffieHellman,\n generateKeyPairSync,\n randomFillSync,\n} = require('crypto');\n\nconst { Ber } = require('asn1');\n\nconst {\n COMPAT,\n curve25519Supported,\n DEFAULT_KEX,\n DEFAULT_SERVER_HOST_KEY,\n DEFAULT_CIPHER,\n DEFAULT_MAC,\n DEFAULT_COMPRESSION,\n DISCONNECT_REASON,\n MESSAGE,\n} = require('./constants.js');\nconst {\n CIPHER_INFO,\n createCipher,\n createDecipher,\n MAC_INFO,\n} = require('./crypto.js');\nconst { parseDERKey } = require('./keyParser.js');\nconst {\n bufferFill,\n bufferParser,\n convertSignature,\n doFatalError,\n FastBuffer,\n sigSSHToASN1,\n writeUInt32BE,\n} = require('./utils.js');\nconst {\n PacketReader,\n PacketWriter,\n ZlibPacketReader,\n ZlibPacketWriter,\n} = require('./zlib.js');\n\nlet MESSAGE_HANDLERS;\n\nconst GEX_MIN_BITS = 2048; // RFC 8270\nconst GEX_MAX_BITS = 8192; // RFC 8270\n\nconst EMPTY_BUFFER = Buffer.alloc(0);\n\n// Client/Server\nfunction kexinit(self) {\n /*\n byte SSH_MSG_KEXINIT\n byte[16] cookie (random bytes)\n name-list kex_algorithms\n name-list server_host_key_algorithms\n name-list encryption_algorithms_client_to_server\n name-list encryption_algorithms_server_to_client\n name-list mac_algorithms_client_to_server\n name-list mac_algorithms_server_to_client\n name-list compression_algorithms_client_to_server\n name-list compression_algorithms_server_to_client\n name-list languages_client_to_server\n name-list languages_server_to_client\n boolean first_kex_packet_follows\n uint32 0 (reserved for future extension)\n */\n\n let payload;\n if (self._compatFlags & COMPAT.BAD_DHGEX) {\n const entry = self._offer.lists.kex;\n let kex = entry.array;\n let found = false;\n for (let i = 0; i < kex.length; ++i) {\n if (kex[i].includes('group-exchange')) {\n if (!found) {\n found = true;\n // Copy array lazily\n kex = kex.slice();\n }\n kex.splice(i--, 1);\n }\n }\n if (found) {\n let len = 1 + 16 + self._offer.totalSize + 1 + 4;\n const newKexBuf = Buffer.from(kex.join(','));\n len -= (entry.buffer.length - newKexBuf.length);\n\n const all = self._offer.lists.all;\n const rest = new Uint8Array(\n all.buffer,\n all.byteOffset + 4 + entry.buffer.length,\n all.length - (4 + entry.buffer.length)\n );\n\n payload = Buffer.allocUnsafe(len);\n writeUInt32BE(payload, newKexBuf.length, 17);\n payload.set(newKexBuf, 17 + 4);\n payload.set(rest, 17 + 4 + newKexBuf.length);\n }\n }\n\n if (payload === undefined) {\n payload = Buffer.allocUnsafe(1 + 16 + self._offer.totalSize + 1 + 4);\n self._offer.copyAllTo(payload, 17);\n }\n\n self._debug && self._debug('Outbound: Sending KEXINIT');\n\n payload[0] = MESSAGE.KEXINIT;\n randomFillSync(payload, 1, 16);\n\n // Zero-fill first_kex_packet_follows and reserved bytes\n bufferFill(payload, 0, payload.length - 5);\n\n self._kexinit = payload;\n\n // Needed to correct the starting position in allocated \"packets\" when packets\n // will be buffered due to active key exchange\n self._packetRW.write.allocStart = 0;\n\n // TODO: only create single buffer and set _kexinit as slice of packet instead\n {\n const p = self._packetRW.write.allocStartKEX;\n const packet = self._packetRW.write.alloc(payload.length, true);\n packet.set(payload, p);\n self._cipher.encrypt(self._packetRW.write.finalize(packet, true));\n }\n}\n\nfunction handleKexInit(self, payload) {\n /*\n byte SSH_MSG_KEXINIT\n byte[16] cookie (random bytes)\n name-list kex_algorithms\n name-list server_host_key_algorithms\n name-list encryption_algorithms_client_to_server\n name-list encryption_algorithms_server_to_client\n name-list mac_algorithms_client_to_server\n name-list mac_algorithms_server_to_client\n name-list compression_algorithms_client_to_server\n name-list compression_algorithms_server_to_client\n name-list languages_client_to_server\n name-list languages_server_to_client\n boolean first_kex_packet_follows\n uint32 0 (reserved for future extension)\n */\n const init = {\n kex: undefined,\n serverHostKey: undefined,\n cs: {\n cipher: undefined,\n mac: undefined,\n compress: undefined,\n lang: undefined,\n },\n sc: {\n cipher: undefined,\n mac: undefined,\n compress: undefined,\n lang: undefined,\n },\n };\n\n bufferParser.init(payload, 17);\n\n if ((init.kex = bufferParser.readList()) === undefined\n || (init.serverHostKey = bufferParser.readList()) === undefined\n || (init.cs.cipher = bufferParser.readList()) === undefined\n || (init.sc.cipher = bufferParser.readList()) === undefined\n || (init.cs.mac = bufferParser.readList()) === undefined\n || (init.sc.mac = bufferParser.readList()) === undefined\n || (init.cs.compress = bufferParser.readList()) === undefined\n || (init.sc.compress = bufferParser.readList()) === undefined\n || (init.cs.lang = bufferParser.readList()) === undefined\n || (init.sc.lang = bufferParser.readList()) === undefined) {\n bufferParser.clear();\n return doFatalError(\n self,\n 'Received malformed KEXINIT',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n\n const pos = bufferParser.pos();\n const firstFollows = (pos < payload.length && payload[pos] === 1);\n bufferParser.clear();\n\n const local = self._offer;\n const remote = init;\n\n let localKex = local.lists.kex.array;\n if (self._compatFlags & COMPAT.BAD_DHGEX) {\n let found = false;\n for (let i = 0; i < localKex.length; ++i) {\n if (localKex[i].indexOf('group-exchange') !== -1) {\n if (!found) {\n found = true;\n // Copy array lazily\n localKex = localKex.slice();\n }\n localKex.splice(i--, 1);\n }\n }\n }\n\n let clientList;\n let serverList;\n let i;\n const debug = self._debug;\n\n debug && debug('Inbound: Handshake in progress');\n\n // Key exchange method =======================================================\n debug && debug(`Handshake: (local) KEX method: ${localKex}`);\n debug && debug(`Handshake: (remote) KEX method: ${remote.kex}`);\n let remoteExtInfoEnabled;\n if (self._server) {\n serverList = localKex;\n clientList = remote.kex;\n remoteExtInfoEnabled = (clientList.indexOf('ext-info-c') !== -1);\n } else {\n serverList = remote.kex;\n clientList = localKex;\n remoteExtInfoEnabled = (serverList.indexOf('ext-info-s') !== -1);\n }\n if (self._strictMode === undefined) {\n if (self._server) {\n self._strictMode =\n (clientList.indexOf('kex-strict-c-v00@openssh.com') !== -1);\n } else {\n self._strictMode =\n (serverList.indexOf('kex-strict-s-v00@openssh.com') !== -1);\n }\n // Note: We check for seqno of 1 instead of 0 since we increment before\n // calling the packet handler\n if (self._strictMode) {\n debug && debug('Handshake: strict KEX mode enabled');\n if (self._decipher.inSeqno !== 1) {\n if (debug)\n debug('Handshake: KEXINIT not first packet in strict KEX mode');\n return doFatalError(\n self,\n 'Handshake failed: KEXINIT not first packet in strict KEX mode',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n }\n }\n // Check for agreeable key exchange algorithm\n for (i = 0;\n i < clientList.length && serverList.indexOf(clientList[i]) === -1;\n ++i);\n if (i === clientList.length) {\n // No suitable match found!\n debug && debug('Handshake: no matching key exchange algorithm');\n return doFatalError(\n self,\n 'Handshake failed: no matching key exchange algorithm',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n init.kex = clientList[i];\n debug && debug(`Handshake: KEX algorithm: ${clientList[i]}`);\n if (firstFollows && (!remote.kex.length || clientList[i] !== remote.kex[0])) {\n // Ignore next inbound packet, it was a wrong first guess at KEX algorithm\n self._skipNextInboundPacket = true;\n }\n\n\n // Server host key format ====================================================\n const localSrvHostKey = local.lists.serverHostKey.array;\n debug && debug(`Handshake: (local) Host key format: ${localSrvHostKey}`);\n debug && debug(\n `Handshake: (remote) Host key format: ${remote.serverHostKey}`\n );\n if (self._server) {\n serverList = localSrvHostKey;\n clientList = remote.serverHostKey;\n } else {\n serverList = remote.serverHostKey;\n clientList = localSrvHostKey;\n }\n // Check for agreeable server host key format\n for (i = 0;\n i < clientList.length && serverList.indexOf(clientList[i]) === -1;\n ++i);\n if (i === clientList.length) {\n // No suitable match found!\n debug && debug('Handshake: No matching host key format');\n return doFatalError(\n self,\n 'Handshake failed: no matching host key format',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n init.serverHostKey = clientList[i];\n debug && debug(`Handshake: Host key format: ${clientList[i]}`);\n\n\n // Client->Server cipher =====================================================\n const localCSCipher = local.lists.cs.cipher.array;\n debug && debug(`Handshake: (local) C->S cipher: ${localCSCipher}`);\n debug && debug(`Handshake: (remote) C->S cipher: ${remote.cs.cipher}`);\n if (self._server) {\n serverList = localCSCipher;\n clientList = remote.cs.cipher;\n } else {\n serverList = remote.cs.cipher;\n clientList = localCSCipher;\n }\n // Check for agreeable client->server cipher\n for (i = 0;\n i < clientList.length && serverList.indexOf(clientList[i]) === -1;\n ++i);\n if (i === clientList.length) {\n // No suitable match found!\n debug && debug('Handshake: No matching C->S cipher');\n return doFatalError(\n self,\n 'Handshake failed: no matching C->S cipher',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n init.cs.cipher = clientList[i];\n debug && debug(`Handshake: C->S Cipher: ${clientList[i]}`);\n\n\n // Server->Client cipher =====================================================\n const localSCCipher = local.lists.sc.cipher.array;\n debug && debug(`Handshake: (local) S->C cipher: ${localSCCipher}`);\n debug && debug(`Handshake: (remote) S->C cipher: ${remote.sc.cipher}`);\n if (self._server) {\n serverList = localSCCipher;\n clientList = remote.sc.cipher;\n } else {\n serverList = remote.sc.cipher;\n clientList = localSCCipher;\n }\n // Check for agreeable server->client cipher\n for (i = 0;\n i < clientList.length && serverList.indexOf(clientList[i]) === -1;\n ++i);\n if (i === clientList.length) {\n // No suitable match found!\n debug && debug('Handshake: No matching S->C cipher');\n return doFatalError(\n self,\n 'Handshake failed: no matching S->C cipher',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n init.sc.cipher = clientList[i];\n debug && debug(`Handshake: S->C cipher: ${clientList[i]}`);\n\n\n // Client->Server MAC ========================================================\n const localCSMAC = local.lists.cs.mac.array;\n debug && debug(`Handshake: (local) C->S MAC: ${localCSMAC}`);\n debug && debug(`Handshake: (remote) C->S MAC: ${remote.cs.mac}`);\n if (CIPHER_INFO[init.cs.cipher].authLen > 0) {\n init.cs.mac = '';\n debug && debug('Handshake: C->S MAC: <implicit>');\n } else {\n if (self._server) {\n serverList = localCSMAC;\n clientList = remote.cs.mac;\n } else {\n serverList = remote.cs.mac;\n clientList = localCSMAC;\n }\n // Check for agreeable client->server hmac algorithm\n for (i = 0;\n i < clientList.length && serverList.indexOf(clientList[i]) === -1;\n ++i);\n if (i === clientList.length) {\n // No suitable match found!\n debug && debug('Handshake: No matching C->S MAC');\n return doFatalError(\n self,\n 'Handshake failed: no matching C->S MAC',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n init.cs.mac = clientList[i];\n debug && debug(`Handshake: C->S MAC: ${clientList[i]}`);\n }\n\n\n // Server->Client MAC ========================================================\n const localSCMAC = local.lists.sc.mac.array;\n debug && debug(`Handshake: (local) S->C MAC: ${localSCMAC}`);\n debug && debug(`Handshake: (remote) S->C MAC: ${remote.sc.mac}`);\n if (CIPHER_INFO[init.sc.cipher].authLen > 0) {\n init.sc.mac = '';\n debug && debug('Handshake: S->C MAC: <implicit>');\n } else {\n if (self._server) {\n serverList = localSCMAC;\n clientList = remote.sc.mac;\n } else {\n serverList = remote.sc.mac;\n clientList = localSCMAC;\n }\n // Check for agreeable server->client hmac algorithm\n for (i = 0;\n i < clientList.length && serverList.indexOf(clientList[i]) === -1;\n ++i);\n if (i === clientList.length) {\n // No suitable match found!\n debug && debug('Handshake: No matching S->C MAC');\n return doFatalError(\n self,\n 'Handshake failed: no matching S->C MAC',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n init.sc.mac = clientList[i];\n debug && debug(`Handshake: S->C MAC: ${clientList[i]}`);\n }\n\n\n // Client->Server compression ================================================\n const localCSCompress = local.lists.cs.compress.array;\n debug && debug(`Handshake: (local) C->S compression: ${localCSCompress}`);\n debug && debug(`Handshake: (remote) C->S compression: ${remote.cs.compress}`);\n if (self._server) {\n serverList = localCSCompress;\n clientList = remote.cs.compress;\n } else {\n serverList = remote.cs.compress;\n clientList = localCSCompress;\n }\n // Check for agreeable client->server compression algorithm\n for (i = 0;\n i < clientList.length && serverList.indexOf(clientList[i]) === -1;\n ++i);\n if (i === clientList.length) {\n // No suitable match found!\n debug && debug('Handshake: No matching C->S compression');\n return doFatalError(\n self,\n 'Handshake failed: no matching C->S compression',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n init.cs.compress = clientList[i];\n debug && debug(`Handshake: C->S compression: ${clientList[i]}`);\n\n\n // Server->Client compression ================================================\n const localSCCompress = local.lists.sc.compress.array;\n debug && debug(`Handshake: (local) S->C compression: ${localSCCompress}`);\n debug && debug(`Handshake: (remote) S->C compression: ${remote.sc.compress}`);\n if (self._server) {\n serverList = localSCCompress;\n clientList = remote.sc.compress;\n } else {\n serverList = remote.sc.compress;\n clientList = localSCCompress;\n }\n // Check for agreeable server->client compression algorithm\n for (i = 0;\n i < clientList.length && serverList.indexOf(clientList[i]) === -1;\n ++i);\n if (i === clientList.length) {\n // No suitable match found!\n debug && debug('Handshake: No matching S->C compression');\n return doFatalError(\n self,\n 'Handshake failed: no matching S->C compression',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n init.sc.compress = clientList[i];\n debug && debug(`Handshake: S->C compression: ${clientList[i]}`);\n\n init.cs.lang = '';\n init.sc.lang = '';\n\n // XXX: hack -- find a better way to do this\n if (self._kex) {\n if (!self._kexinit) {\n // We received a rekey request, but we haven't sent a KEXINIT in response\n // yet\n kexinit(self);\n }\n self._decipher._onPayload = onKEXPayload.bind(self, { firstPacket: false });\n }\n\n self._kex = createKeyExchange(init, self, payload);\n self._kex.remoteExtInfoEnabled = remoteExtInfoEnabled;\n self._kex.start();\n}\n\nconst createKeyExchange = (() => {\n function convertToMpint(buf) {\n let idx = 0;\n let length = buf.length;\n while (buf[idx] === 0x00) {\n ++idx;\n --length;\n }\n let newBuf;\n if (buf[idx] & 0x80) {\n newBuf = Buffer.allocUnsafe(1 + length);\n newBuf[0] = 0;\n buf.copy(newBuf, 1, idx);\n buf = newBuf;\n } else if (length !== buf.length) {\n newBuf = Buffer.allocUnsafe(length);\n buf.copy(newBuf, 0, idx);\n buf = newBuf;\n }\n return buf;\n }\n\n class KeyExchange {\n constructor(negotiated, protocol, remoteKexinit) {\n this._protocol = protocol;\n\n this.sessionID = (protocol._kex ? protocol._kex.sessionID : undefined);\n this.negotiated = negotiated;\n this.remoteExtInfoEnabled = false;\n this._step = 1;\n this._public = null;\n this._dh = null;\n this._sentNEWKEYS = false;\n this._receivedNEWKEYS = false;\n this._finished = false;\n this._hostVerified = false;\n\n // Data needed for initializing cipher/decipher/etc.\n this._kexinit = protocol._kexinit;\n this._remoteKexinit = remoteKexinit;\n this._identRaw = protocol._identRaw;\n this._remoteIdentRaw = protocol._remoteIdentRaw;\n this._hostKey = undefined;\n this._dhData = undefined;\n this._sig = undefined;\n }\n finish(scOnly) {\n if (this._finished)\n return false;\n this._finished = true;\n\n const isServer = this._protocol._server;\n const negotiated = this.negotiated;\n\n const pubKey = this.convertPublicKey(this._dhData);\n let secret = this.computeSecret(this._dhData);\n if (secret instanceof Error) {\n secret.message =\n `Error while computing DH secret (${this.type}): ${secret.message}`;\n secret.level = 'handshake';\n return doFatalError(\n this._protocol,\n secret,\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n\n const hash = createHash(this.hashName);\n // V_C\n hashString(hash, (isServer ? this._remoteIdentRaw : this._identRaw));\n // \"V_S\"\n hashString(hash, (isServer ? this._identRaw : this._remoteIdentRaw));\n // \"I_C\"\n hashString(hash, (isServer ? this._remoteKexinit : this._kexinit));\n // \"I_S\"\n hashString(hash, (isServer ? this._kexinit : this._remoteKexinit));\n // \"K_S\"\n const serverPublicHostKey = (isServer\n ? this._hostKey.getPublicSSH()\n : this._hostKey);\n hashString(hash, serverPublicHostKey);\n\n if (this.type === 'groupex') {\n // Group exchange-specific\n const params = this.getDHParams();\n const num = Buffer.allocUnsafe(4);\n // min (uint32)\n writeUInt32BE(num, this._minBits, 0);\n hash.update(num);\n // preferred (uint32)\n writeUInt32BE(num, this._prefBits, 0);\n hash.update(num);\n // max (uint32)\n writeUInt32BE(num, this._maxBits, 0);\n hash.update(num);\n // prime\n hashString(hash, params.prime);\n // generator\n hashString(hash, params.generator);\n }\n\n // method-specific data sent by client\n hashString(hash, (isServer ? pubKey : this.getPublicKey()));\n // method-specific data sent by server\n const serverPublicKey = (isServer ? this.getPublicKey() : pubKey);\n hashString(hash, serverPublicKey);\n // shared secret (\"K\")\n hashString(hash, secret);\n\n // \"H\"\n const exchangeHash = hash.digest();\n\n if (!isServer) {\n bufferParser.init(this._sig, 0);\n const sigType = bufferParser.readString(true);\n\n if (!sigType) {\n return doFatalError(\n this._protocol,\n 'Malformed packet while reading signature',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n\n if (sigType !== negotiated.serverHostKey) {\n return doFatalError(\n this._protocol,\n `Wrong signature type: ${sigType}, `\n + `expected: ${negotiated.serverHostKey}`,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n\n // \"s\"\n let sigValue = bufferParser.readString();\n\n bufferParser.clear();\n\n if (sigValue === undefined) {\n return doFatalError(\n this._protocol,\n 'Malformed packet while reading signature',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n\n if (!(sigValue = sigSSHToASN1(sigValue, sigType))) {\n return doFatalError(\n this._protocol,\n 'Malformed signature',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n\n let parsedHostKey;\n {\n bufferParser.init(this._hostKey, 0);\n const name = bufferParser.readString(true);\n const hostKey = this._hostKey.slice(bufferParser.pos());\n bufferParser.clear();\n parsedHostKey = parseDERKey(hostKey, name);\n if (parsedHostKey instanceof Error) {\n parsedHostKey.level = 'handshake';\n return doFatalError(\n this._protocol,\n parsedHostKey,\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n }\n\n let hashAlgo;\n // Check if we need to override the default hash algorithm\n switch (this.negotiated.serverHostKey) {\n case 'rsa-sha2-256': hashAlgo = 'sha256'; break;\n case 'rsa-sha2-512': hashAlgo = 'sha512'; break;\n }\n\n this._protocol._debug\n && this._protocol._debug('Verifying signature ...');\n\n const verified = parsedHostKey.verify(exchangeHash, sigValue, hashAlgo);\n if (verified !== true) {\n if (verified instanceof Error) {\n this._protocol._debug && this._protocol._debug(\n `Signature verification failed: ${verified.stack}`\n );\n } else {\n this._protocol._debug && this._protocol._debug(\n 'Signature verification failed'\n );\n }\n return doFatalError(\n this._protocol,\n 'Handshake failed: signature verification failed',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n this._protocol._debug && this._protocol._debug('Verified signature');\n } else {\n // Server\n\n let hashAlgo;\n // Check if we need to override the default hash algorithm\n switch (this.negotiated.serverHostKey) {\n case 'rsa-sha2-256': hashAlgo = 'sha256'; break;\n case 'rsa-sha2-512': hashAlgo = 'sha512'; break;\n }\n\n this._protocol._debug && this._protocol._debug(\n 'Generating signature ...'\n );\n\n let signature = this._hostKey.sign(exchangeHash, hashAlgo);\n if (signature instanceof Error) {\n return doFatalError(\n this._protocol,\n 'Handshake failed: signature generation failed for '\n + `${this._hostKey.type} host key: ${signature.message}`,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n\n signature = convertSignature(signature, this._hostKey.type);\n if (signature === false) {\n return doFatalError(\n this._protocol,\n 'Handshake failed: signature conversion failed for '\n + `${this._hostKey.type} host key`,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n\n // Send KEX reply\n /*\n byte SSH_MSG_KEXDH_REPLY\n / SSH_MSG_KEX_DH_GEX_REPLY\n / SSH_MSG_KEX_ECDH_REPLY\n string server public host key and certificates (K_S)\n string <method-specific data>\n string signature of H\n */\n const sigType = this.negotiated.serverHostKey;\n const sigTypeLen = Buffer.byteLength(sigType);\n const sigLen = 4 + sigTypeLen + 4 + signature.length;\n let p = this._protocol._packetRW.write.allocStartKEX;\n const packet = this._protocol._packetRW.write.alloc(\n 1\n + 4 + serverPublicHostKey.length\n + 4 + serverPublicKey.length\n + 4 + sigLen,\n true\n );\n\n packet[p] = MESSAGE.KEXDH_REPLY;\n\n writeUInt32BE(packet, serverPublicHostKey.length, ++p);\n packet.set(serverPublicHostKey, p += 4);\n\n writeUInt32BE(packet,\n serverPublicKey.length,\n p += serverPublicHostKey.length);\n packet.set(serverPublicKey, p += 4);\n\n writeUInt32BE(packet, sigLen, p += serverPublicKey.length);\n\n writeUInt32BE(packet, sigTypeLen, p += 4);\n packet.utf8Write(sigType, p += 4, sigTypeLen);\n\n writeUInt32BE(packet, signature.length, p += sigTypeLen);\n packet.set(signature, p += 4);\n\n if (this._protocol._debug) {\n let type;\n switch (this.type) {\n case 'group':\n type = 'KEXDH_REPLY';\n break;\n case 'groupex':\n type = 'KEXDH_GEX_REPLY';\n break;\n default:\n type = 'KEXECDH_REPLY';\n }\n this._protocol._debug(`Outbound: Sending ${type}`);\n }\n this._protocol._cipher.encrypt(\n this._protocol._packetRW.write.finalize(packet, true)\n );\n }\n\n if (isServer || !scOnly)\n trySendNEWKEYS(this);\n\n let hsCipherConfig;\n let hsWrite;\n const completeHandshake = (partial) => {\n if (hsCipherConfig) {\n trySendNEWKEYS(this);\n hsCipherConfig.outbound.seqno = this._protocol._cipher.outSeqno;\n this._protocol._cipher.free();\n this._protocol._cipher = createCipher(hsCipherConfig);\n this._protocol._packetRW.write = hsWrite;\n hsCipherConfig = undefined;\n hsWrite = undefined;\n this._protocol._onHandshakeComplete(negotiated);\n\n return false;\n }\n\n if (!this.sessionID)\n this.sessionID = exchangeHash;\n\n {\n const newSecret = Buffer.allocUnsafe(4 + secret.length);\n writeUInt32BE(newSecret, secret.length, 0);\n newSecret.set(secret, 4);\n secret = newSecret;\n }\n\n // Initialize new ciphers, deciphers, etc.\n\n const csCipherInfo = CIPHER_INFO[negotiated.cs.cipher];\n const scCipherInfo = CIPHER_INFO[negotiated.sc.cipher];\n\n const csIV = generateKEXVal(csCipherInfo.ivLen,\n this.hashName,\n secret,\n exchangeHash,\n this.sessionID,\n 'A');\n const scIV = generateKEXVal(scCipherInfo.ivLen,\n this.hashName,\n secret,\n exchangeHash,\n this.sessionID,\n 'B');\n const csKey = generateKEXVal(csCipherInfo.keyLen,\n this.hashName,\n secret,\n exchangeHash,\n this.sessionID,\n 'C');\n const scKey = generateKEXVal(scCipherInfo.keyLen,\n this.hashName,\n secret,\n exchangeHash,\n this.sessionID,\n 'D');\n let csMacInfo;\n let csMacKey;\n if (!csCipherInfo.authLen) {\n csMacInfo = MAC_INFO[negotiated.cs.mac];\n csMacKey = generateKEXVal(csMacInfo.len,\n this.hashName,\n secret,\n exchangeHash,\n this.sessionID,\n 'E');\n }\n let scMacInfo;\n let scMacKey;\n if (!scCipherInfo.authLen) {\n scMacInfo = MAC_INFO[negotiated.sc.mac];\n scMacKey = generateKEXVal(scMacInfo.len,\n this.hashName,\n secret,\n exchangeHash,\n this.sessionID,\n 'F');\n }\n\n const config = {\n inbound: {\n onPayload: this._protocol._onPayload,\n seqno: this._protocol._decipher.inSeqno,\n decipherInfo: (!isServer ? scCipherInfo : csCipherInfo),\n decipherIV: (!isServer ? scIV : csIV),\n decipherKey: (!isServer ? scKey : csKey),\n macInfo: (!isServer ? scMacInfo : csMacInfo),\n macKey: (!isServer ? scMacKey : csMacKey),\n },\n outbound: {\n onWrite: this._protocol._onWrite,\n seqno: this._protocol._cipher.outSeqno,\n cipherInfo: (isServer ? scCipherInfo : csCipherInfo),\n cipherIV: (isServer ? scIV : csIV),\n cipherKey: (isServer ? scKey : csKey),\n macInfo: (isServer ? scMacInfo : csMacInfo),\n macKey: (isServer ? scMacKey : csMacKey),\n },\n };\n this._protocol._decipher.free();\n hsCipherConfig = config;\n this._protocol._decipher = createDecipher(config);\n\n const rw = {\n read: undefined,\n write: undefined,\n };\n switch (negotiated.cs.compress) {\n case 'zlib': // starts immediately\n if (isServer)\n rw.read = new ZlibPacketReader();\n else\n rw.write = new ZlibPacketWriter(this._protocol);\n break;\n case 'zlib@openssh.com':\n // Starts after successful user authentication\n\n if (this._protocol._authenticated) {\n // If a rekey happens and this compression method is selected and\n // we already authenticated successfully, we need to start\n // immediately instead\n if (isServer)\n rw.read = new ZlibPacketReader();\n else\n rw.write = new ZlibPacketWriter(this._protocol);\n break;\n }\n // FALLTHROUGH\n default:\n // none -- never any compression/decompression\n\n if (isServer)\n rw.read = new PacketReader();\n else\n rw.write = new PacketWriter(this._protocol);\n }\n switch (negotiated.sc.compress) {\n case 'zlib': // starts immediately\n if (isServer)\n rw.write = new ZlibPacketWriter(this._protocol);\n else\n rw.read = new ZlibPacketReader();\n break;\n case 'zlib@openssh.com':\n // Starts after successful user authentication\n\n if (this._protocol._authenticated) {\n // If a rekey happens and this compression method is selected and\n // we already authenticated successfully, we need to start\n // immediately instead\n if (isServer)\n rw.write = new ZlibPacketWriter(this._protocol);\n else\n rw.read = new ZlibPacketReader();\n break;\n }\n // FALLTHROUGH\n default:\n // none -- never any compression/decompression\n\n if (isServer)\n rw.write = new PacketWriter(this._protocol);\n else\n rw.read = new PacketReader();\n }\n this._protocol._packetRW.read.cleanup();\n this._protocol._packetRW.write.cleanup();\n this._protocol._packetRW.read = rw.read;\n hsWrite = rw.write;\n\n // Cleanup/reset various state\n this._public = null;\n this._dh = null;\n this._kexinit = this._protocol._kexinit = undefined;\n this._remoteKexinit = undefined;\n this._identRaw = undefined;\n this._remoteIdentRaw = undefined;\n this._hostKey = undefined;\n this._dhData = undefined;\n this._sig = undefined;\n\n if (!partial)\n return completeHandshake();\n return false;\n };\n\n if (isServer || scOnly)\n this.finish = completeHandshake;\n\n if (!isServer)\n return completeHandshake(scOnly);\n }\n\n start() {\n if (!this._protocol._server) {\n if (this._protocol._debug) {\n let type;\n switch (this.type) {\n case 'group':\n type = 'KEXDH_INIT';\n break;\n default:\n type = 'KEXECDH_INIT';\n }\n this._protocol._debug(`Outbound: Sending ${type}`);\n }\n\n const pubKey = this.getPublicKey();\n\n let p = this._protocol._packetRW.write.allocStartKEX;\n const packet = this._protocol._packetRW.write.alloc(\n 1 + 4 + pubKey.length,\n true\n );\n packet[p] = MESSAGE.KEXDH_INIT;\n writeUInt32BE(packet, pubKey.length, ++p);\n packet.set(pubKey, p += 4);\n this._protocol._cipher.encrypt(\n this._protocol._packetRW.write.finalize(packet, true)\n );\n }\n }\n getPublicKey() {\n this.generateKeys();\n\n const key = this._public;\n\n if (key)\n return this.convertPublicKey(key);\n }\n convertPublicKey(key) {\n let newKey;\n let idx = 0;\n let len = key.length;\n while (key[idx] === 0x00) {\n ++idx;\n --len;\n }\n\n if (key[idx] & 0x80) {\n newKey = Buffer.allocUnsafe(1 + len);\n newKey[0] = 0;\n key.copy(newKey, 1, idx);\n return newKey;\n }\n\n if (len !== key.length) {\n newKey = Buffer.allocUnsafe(len);\n key.copy(newKey, 0, idx);\n key = newKey;\n }\n return key;\n }\n computeSecret(otherPublicKey) {\n this.generateKeys();\n\n try {\n return convertToMpint(this._dh.computeSecret(otherPublicKey));\n } catch (ex) {\n return ex;\n }\n }\n parse(payload) {\n const type = payload[0];\n switch (this._step) {\n case 1:\n if (this._protocol._server) {\n // Server\n if (type !== MESSAGE.KEXDH_INIT) {\n return doFatalError(\n this._protocol,\n `Received packet ${type} instead of ${MESSAGE.KEXDH_INIT}`,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n this._protocol._debug && this._protocol._debug(\n 'Received DH Init'\n );\n /*\n byte SSH_MSG_KEXDH_INIT\n / SSH_MSG_KEX_ECDH_INIT\n string <method-specific data>\n */\n bufferParser.init(payload, 1);\n const dhData = bufferParser.readString();\n bufferParser.clear();\n if (dhData === undefined) {\n return doFatalError(\n this._protocol,\n 'Received malformed KEX*_INIT',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n\n // Client public key\n this._dhData = dhData;\n\n let hostKey =\n this._protocol._hostKeys[this.negotiated.serverHostKey];\n if (Array.isArray(hostKey))\n hostKey = hostKey[0];\n this._hostKey = hostKey;\n\n this.finish();\n } else {\n // Client\n if (type !== MESSAGE.KEXDH_REPLY) {\n return doFatalError(\n this._protocol,\n `Received packet ${type} instead of ${MESSAGE.KEXDH_REPLY}`,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n this._protocol._debug && this._protocol._debug(\n 'Received DH Reply'\n );\n /*\n byte SSH_MSG_KEXDH_REPLY\n / SSH_MSG_KEX_DH_GEX_REPLY\n / SSH_MSG_KEX_ECDH_REPLY\n string server public host key and certificates (K_S)\n string <method-specific data>\n string signature of H\n */\n bufferParser.init(payload, 1);\n let hostPubKey;\n let dhData;\n let sig;\n if ((hostPubKey = bufferParser.readString()) === undefined\n || (dhData = bufferParser.readString()) === undefined\n || (sig = bufferParser.readString()) === undefined) {\n bufferParser.clear();\n return doFatalError(\n this._protocol,\n 'Received malformed KEX*_REPLY',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n bufferParser.clear();\n\n // Check that the host public key type matches what was negotiated\n // during KEXINIT swap\n bufferParser.init(hostPubKey, 0);\n const hostPubKeyType = bufferParser.readString(true);\n bufferParser.clear();\n if (hostPubKeyType === undefined) {\n return doFatalError(\n this._protocol,\n 'Received malformed host public key',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n if (hostPubKeyType !== this.negotiated.serverHostKey) {\n // Check if we need to make an exception\n switch (this.negotiated.serverHostKey) {\n case 'rsa-sha2-256':\n case 'rsa-sha2-512':\n if (hostPubKeyType === 'ssh-rsa')\n break;\n // FALLTHROUGH\n default:\n return doFatalError(\n this._protocol,\n 'Host key does not match negotiated type',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n }\n\n this._hostKey = hostPubKey;\n this._dhData = dhData;\n this._sig = sig;\n\n let checked = false;\n let ret;\n if (this._protocol._hostVerifier === undefined) {\n ret = true;\n this._protocol._debug && this._protocol._debug(\n 'Host accepted by default (no verification)'\n );\n } else {\n ret = this._protocol._hostVerifier(hostPubKey, (permitted) => {\n if (checked)\n return;\n checked = true;\n if (permitted === false) {\n this._protocol._debug && this._protocol._debug(\n 'Host denied (verification failed)'\n );\n return doFatalError(\n this._protocol,\n 'Host denied (verification failed)',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n this._protocol._debug && this._protocol._debug(\n 'Host accepted (verified)'\n );\n this._hostVerified = true;\n if (this._receivedNEWKEYS)\n this.finish();\n else\n trySendNEWKEYS(this);\n });\n }\n if (ret === undefined) {\n // Async host verification\n ++this._step;\n return;\n }\n checked = true;\n if (ret === false) {\n this._protocol._debug && this._protocol._debug(\n 'Host denied (verification failed)'\n );\n return doFatalError(\n this._protocol,\n 'Host denied (verification failed)',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n this._protocol._debug && this._protocol._debug(\n 'Host accepted (verified)'\n );\n this._hostVerified = true;\n trySendNEWKEYS(this);\n }\n ++this._step;\n break;\n case 2:\n if (type !== MESSAGE.NEWKEYS) {\n return doFatalError(\n this._protocol,\n `Received packet ${type} instead of ${MESSAGE.NEWKEYS}`,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n this._protocol._debug && this._protocol._debug(\n 'Inbound: NEWKEYS'\n );\n this._receivedNEWKEYS = true;\n if (this._protocol._strictMode)\n this._protocol._decipher.inSeqno = 0;\n ++this._step;\n\n return this.finish(!this._protocol._server && !this._hostVerified);\n default:\n return doFatalError(\n this._protocol,\n `Received unexpected packet ${type} after NEWKEYS`,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n }\n }\n\n class Curve25519Exchange extends KeyExchange {\n constructor(hashName, ...args) {\n super(...args);\n\n this.type = '25519';\n this.hashName = hashName;\n this._keys = null;\n }\n generateKeys() {\n if (!this._keys)\n this._keys = generateKeyPairSync('x25519');\n }\n getPublicKey() {\n this.generateKeys();\n\n const key = this._keys.publicKey.export({ type: 'spki', format: 'der' });\n return key.slice(-32); // HACK: avoids parsing DER/BER header\n }\n convertPublicKey(key) {\n let newKey;\n let idx = 0;\n let len = key.length;\n while (key[idx] === 0x00) {\n ++idx;\n --len;\n }\n\n if (key.length === 32)\n return key;\n\n if (len !== key.length) {\n newKey = Buffer.allocUnsafe(len);\n key.copy(newKey, 0, idx);\n key = newKey;\n }\n return key;\n }\n computeSecret(otherPublicKey) {\n this.generateKeys();\n\n try {\n const asnWriter = new Ber.Writer();\n asnWriter.startSequence();\n // algorithm\n asnWriter.startSequence();\n asnWriter.writeOID('1.3.101.110'); // id-X25519\n asnWriter.endSequence();\n\n // PublicKey\n asnWriter.startSequence(Ber.BitString);\n asnWriter.writeByte(0x00);\n // XXX: hack to write a raw buffer without a tag -- yuck\n asnWriter._ensure(otherPublicKey.length);\n otherPublicKey.copy(asnWriter._buf,\n asnWriter._offset,\n 0,\n otherPublicKey.length);\n asnWriter._offset += otherPublicKey.length;\n asnWriter.endSequence();\n asnWriter.endSequence();\n\n return convertToMpint(diffieHellman({\n privateKey: this._keys.privateKey,\n publicKey: createPublicKey({\n key: asnWriter.buffer,\n type: 'spki',\n format: 'der',\n }),\n }));\n } catch (ex) {\n return ex;\n }\n }\n }\n\n class ECDHExchange extends KeyExchange {\n constructor(curveName, hashName, ...args) {\n super(...args);\n\n this.type = 'ecdh';\n this.curveName = curveName;\n this.hashName = hashName;\n }\n generateKeys() {\n if (!this._dh) {\n this._dh = createECDH(this.curveName);\n this._public = this._dh.generateKeys();\n }\n }\n }\n\n class DHGroupExchange extends KeyExchange {\n constructor(hashName, ...args) {\n super(...args);\n\n this.type = 'groupex';\n this.hashName = hashName;\n this._prime = null;\n this._generator = null;\n this._minBits = GEX_MIN_BITS;\n this._prefBits = dhEstimate(this.negotiated);\n if (this._protocol._compatFlags & COMPAT.BUG_DHGEX_LARGE)\n this._prefBits = Math.min(this._prefBits, 4096);\n this._maxBits = GEX_MAX_BITS;\n }\n start() {\n if (this._protocol._server)\n return;\n this._protocol._debug && this._protocol._debug(\n 'Outbound: Sending KEXDH_GEX_REQUEST'\n );\n let p = this._protocol._packetRW.write.allocStartKEX;\n const packet = this._protocol._packetRW.write.alloc(\n 1 + 4 + 4 + 4,\n true\n );\n packet[p] = MESSAGE.KEXDH_GEX_REQUEST;\n writeUInt32BE(packet, this._minBits, ++p);\n writeUInt32BE(packet, this._prefBits, p += 4);\n writeUInt32BE(packet, this._maxBits, p += 4);\n this._protocol._cipher.encrypt(\n this._protocol._packetRW.write.finalize(packet, true)\n );\n }\n generateKeys() {\n if (!this._dh && this._prime && this._generator) {\n this._dh = createDiffieHellman(this._prime, this._generator);\n this._public = this._dh.generateKeys();\n }\n }\n setDHParams(prime, generator) {\n if (!Buffer.isBuffer(prime))\n throw new Error('Invalid prime value');\n if (!Buffer.isBuffer(generator))\n throw new Error('Invalid generator value');\n this._prime = prime;\n this._generator = generator;\n }\n getDHParams() {\n if (this._dh) {\n return {\n prime: convertToMpint(this._dh.getPrime()),\n generator: convertToMpint(this._dh.getGenerator()),\n };\n }\n }\n parse(payload) {\n const type = payload[0];\n switch (this._step) {\n case 1: {\n if (this._protocol._server) {\n if (type !== MESSAGE.KEXDH_GEX_REQUEST) {\n return doFatalError(\n this._protocol,\n `Received packet ${type} instead of `\n + MESSAGE.KEXDH_GEX_REQUEST,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n // TODO: allow user implementation to provide safe prime and\n // generator on demand to support group exchange on server side\n return doFatalError(\n this._protocol,\n 'Group exchange not implemented for server',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n\n if (type !== MESSAGE.KEXDH_GEX_GROUP) {\n return doFatalError(\n this._protocol,\n `Received packet ${type} instead of ${MESSAGE.KEXDH_GEX_GROUP}`,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n\n this._protocol._debug && this._protocol._debug(\n 'Received DH GEX Group'\n );\n\n /*\n byte SSH_MSG_KEX_DH_GEX_GROUP\n mpint p, safe prime\n mpint g, generator for subgroup in GF(p)\n */\n bufferParser.init(payload, 1);\n let prime;\n let gen;\n if ((prime = bufferParser.readString()) === undefined\n || (gen = bufferParser.readString()) === undefined) {\n bufferParser.clear();\n return doFatalError(\n this._protocol,\n 'Received malformed KEXDH_GEX_GROUP',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n bufferParser.clear();\n\n // TODO: validate prime\n this.setDHParams(prime, gen);\n this.generateKeys();\n const pubkey = this.getPublicKey();\n\n this._protocol._debug && this._protocol._debug(\n 'Outbound: Sending KEXDH_GEX_INIT'\n );\n\n let p = this._protocol._packetRW.write.allocStartKEX;\n const packet =\n this._protocol._packetRW.write.alloc(1 + 4 + pubkey.length, true);\n packet[p] = MESSAGE.KEXDH_GEX_INIT;\n writeUInt32BE(packet, pubkey.length, ++p);\n packet.set(pubkey, p += 4);\n this._protocol._cipher.encrypt(\n this._protocol._packetRW.write.finalize(packet, true)\n );\n\n ++this._step;\n break;\n }\n case 2:\n if (this._protocol._server) {\n if (type !== MESSAGE.KEXDH_GEX_INIT) {\n return doFatalError(\n this._protocol,\n `Received packet ${type} instead of ${MESSAGE.KEXDH_GEX_INIT}`,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n this._protocol._debug && this._protocol._debug(\n 'Received DH GEX Init'\n );\n return doFatalError(\n this._protocol,\n 'Group exchange not implemented for server',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n } else if (type !== MESSAGE.KEXDH_GEX_REPLY) {\n return doFatalError(\n this._protocol,\n `Received packet ${type} instead of ${MESSAGE.KEXDH_GEX_REPLY}`,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n this._protocol._debug && this._protocol._debug(\n 'Received DH GEX Reply'\n );\n this._step = 1;\n payload[0] = MESSAGE.KEXDH_REPLY;\n this.parse = KeyExchange.prototype.parse;\n this.parse(payload);\n }\n }\n }\n\n class DHExchange extends KeyExchange {\n constructor(groupName, hashName, ...args) {\n super(...args);\n\n this.type = 'group';\n this.groupName = groupName;\n this.hashName = hashName;\n }\n start() {\n if (!this._protocol._server) {\n this._protocol._debug && this._protocol._debug(\n 'Outbound: Sending KEXDH_INIT'\n );\n const pubKey = this.getPublicKey();\n let p = this._protocol._packetRW.write.allocStartKEX;\n const packet =\n this._protocol._packetRW.write.alloc(1 + 4 + pubKey.length, true);\n packet[p] = MESSAGE.KEXDH_INIT;\n writeUInt32BE(packet, pubKey.length, ++p);\n packet.set(pubKey, p += 4);\n this._protocol._cipher.encrypt(\n this._protocol._packetRW.write.finalize(packet, true)\n );\n }\n }\n generateKeys() {\n if (!this._dh) {\n this._dh = createDiffieHellmanGroup(this.groupName);\n this._public = this._dh.generateKeys();\n }\n }\n getDHParams() {\n if (this._dh) {\n return {\n prime: convertToMpint(this._dh.getPrime()),\n generator: convertToMpint(this._dh.getGenerator()),\n };\n }\n }\n }\n\n return (negotiated, ...args) => {\n if (typeof negotiated !== 'object' || negotiated === null)\n throw new Error('Invalid negotiated argument');\n const kexType = negotiated.kex;\n if (typeof kexType === 'string') {\n args = [negotiated, ...args];\n switch (kexType) {\n case 'curve25519-sha256':\n case 'curve25519-sha256@libssh.org':\n if (!curve25519Supported)\n break;\n return new Curve25519Exchange('sha256', ...args);\n\n case 'ecdh-sha2-nistp256':\n return new ECDHExchange('prime256v1', 'sha256', ...args);\n case 'ecdh-sha2-nistp384':\n return new ECDHExchange('secp384r1', 'sha384', ...args);\n case 'ecdh-sha2-nistp521':\n return new ECDHExchange('secp521r1', 'sha512', ...args);\n\n case 'diffie-hellman-group1-sha1':\n return new DHExchange('modp2', 'sha1', ...args);\n case 'diffie-hellman-group14-sha1':\n return new DHExchange('modp14', 'sha1', ...args);\n case 'diffie-hellman-group14-sha256':\n return new DHExchange('modp14', 'sha256', ...args);\n case 'diffie-hellman-group15-sha512':\n return new DHExchange('modp15', 'sha512', ...args);\n case 'diffie-hellman-group16-sha512':\n return new DHExchange('modp16', 'sha512', ...args);\n case 'diffie-hellman-group17-sha512':\n return new DHExchange('modp17', 'sha512', ...args);\n case 'diffie-hellman-group18-sha512':\n return new DHExchange('modp18', 'sha512', ...args);\n\n case 'diffie-hellman-group-exchange-sha1':\n return new DHGroupExchange('sha1', ...args);\n case 'diffie-hellman-group-exchange-sha256':\n return new DHGroupExchange('sha256', ...args);\n }\n throw new Error(`Unsupported key exchange algorithm: ${kexType}`);\n }\n throw new Error(`Invalid key exchange type: ${kexType}`);\n };\n})();\n\nconst KexInit = (() => {\n const KEX_PROPERTY_NAMES = [\n 'kex',\n 'serverHostKey',\n ['cs', 'cipher' ],\n ['sc', 'cipher' ],\n ['cs', 'mac' ],\n ['sc', 'mac' ],\n ['cs', 'compress' ],\n ['sc', 'compress' ],\n ['cs', 'lang' ],\n ['sc', 'lang' ],\n ];\n return class KexInit {\n constructor(obj) {\n if (typeof obj !== 'object' || obj === null)\n throw new TypeError('Argument must be an object');\n\n const lists = {\n kex: undefined,\n serverHostKey: undefined,\n cs: {\n cipher: undefined,\n mac: undefined,\n compress: undefined,\n lang: undefined,\n },\n sc: {\n cipher: undefined,\n mac: undefined,\n compress: undefined,\n lang: undefined,\n },\n\n all: undefined,\n };\n let totalSize = 0;\n for (const prop of KEX_PROPERTY_NAMES) {\n let base;\n let val;\n let desc;\n let key;\n if (typeof prop === 'string') {\n base = lists;\n val = obj[prop];\n desc = key = prop;\n } else {\n const parent = prop[0];\n base = lists[parent];\n key = prop[1];\n val = obj[parent][key];\n desc = `${parent}.${key}`;\n }\n const entry = { array: undefined, buffer: undefined };\n if (Buffer.isBuffer(val)) {\n entry.array = ('' + val).split(',');\n entry.buffer = val;\n totalSize += 4 + val.length;\n } else {\n if (typeof val === 'string')\n val = val.split(',');\n if (Array.isArray(val)) {\n entry.array = val;\n entry.buffer = Buffer.from(val.join(','));\n } else {\n throw new TypeError(`Invalid \\`${desc}\\` type: ${typeof val}`);\n }\n totalSize += 4 + entry.buffer.length;\n }\n base[key] = entry;\n }\n\n const all = Buffer.allocUnsafe(totalSize);\n lists.all = all;\n\n let allPos = 0;\n for (const prop of KEX_PROPERTY_NAMES) {\n let data;\n if (typeof prop === 'string')\n data = lists[prop].buffer;\n else\n data = lists[prop[0]][prop[1]].buffer;\n allPos = writeUInt32BE(all, data.length, allPos);\n all.set(data, allPos);\n allPos += data.length;\n }\n\n this.totalSize = totalSize;\n this.lists = lists;\n }\n copyAllTo(buf, offset) {\n const src = this.lists.all;\n if (typeof offset !== 'number')\n throw new TypeError(`Invalid offset value: ${typeof offset}`);\n if (buf.length - offset < src.length)\n throw new Error('Insufficient space to copy list');\n buf.set(src, offset);\n return src.length;\n }\n };\n})();\n\nconst hashString = (() => {\n const LEN = Buffer.allocUnsafe(4);\n return (hash, buf) => {\n writeUInt32BE(LEN, buf.length, 0);\n hash.update(LEN);\n hash.update(buf);\n };\n})();\n\nfunction generateKEXVal(len, hashName, secret, exchangeHash, sessionID, char) {\n let ret;\n if (len) {\n let digest = createHash(hashName)\n .update(secret)\n .update(exchangeHash)\n .update(char)\n .update(sessionID)\n .digest();\n while (digest.length < len) {\n const chunk = createHash(hashName)\n .update(secret)\n .update(exchangeHash)\n .update(digest)\n .digest();\n const extended = Buffer.allocUnsafe(digest.length + chunk.length);\n extended.set(digest, 0);\n extended.set(chunk, digest.length);\n digest = extended;\n }\n if (digest.length === len)\n ret = digest;\n else\n ret = new FastBuffer(digest.buffer, digest.byteOffset, len);\n } else {\n ret = EMPTY_BUFFER;\n }\n return ret;\n}\n\nfunction onKEXPayload(state, payload) {\n // XXX: move this to the Decipher implementations?\n if (payload.length === 0) {\n this._debug && this._debug('Inbound: Skipping empty packet payload');\n return;\n }\n\n if (this._skipNextInboundPacket) {\n this._skipNextInboundPacket = false;\n return;\n }\n\n payload = this._packetRW.read.read(payload);\n\n const type = payload[0];\n\n if (!this._strictMode) {\n switch (type) {\n case MESSAGE.IGNORE:\n case MESSAGE.UNIMPLEMENTED:\n case MESSAGE.DEBUG:\n if (!MESSAGE_HANDLERS)\n MESSAGE_HANDLERS = require('./handlers.js');\n return MESSAGE_HANDLERS[type](this, payload);\n }\n }\n\n switch (type) {\n case MESSAGE.DISCONNECT:\n if (!MESSAGE_HANDLERS)\n MESSAGE_HANDLERS = require('./handlers.js');\n return MESSAGE_HANDLERS[type](this, payload);\n case MESSAGE.KEXINIT:\n if (!state.firstPacket) {\n return doFatalError(\n this,\n 'Received extra KEXINIT during handshake',\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n state.firstPacket = false;\n return handleKexInit(this, payload);\n default:\n // Ensure packet is either an algorithm negotiation or KEX\n // algorithm-specific packet\n if (type < 20 || type > 49) {\n return doFatalError(\n this,\n `Received unexpected packet type ${type}`,\n 'handshake',\n DISCONNECT_REASON.KEY_EXCHANGE_FAILED\n );\n }\n }\n\n return this._kex.parse(payload);\n}\n\nfunction dhEstimate(neg) {\n const csCipher = CIPHER_INFO[neg.cs.cipher];\n const scCipher = CIPHER_INFO[neg.sc.cipher];\n // XXX: if OpenSSH's `umac-*` MACs are ever supported, their key lengths will\n // also need to be considered when calculating `bits`\n const bits = Math.max(\n 0,\n (csCipher.sslName === 'des-ede3-cbc' ? 14 : csCipher.keyLen),\n csCipher.blockLen,\n csCipher.ivLen,\n (scCipher.sslName === 'des-ede3-cbc' ? 14 : scCipher.keyLen),\n scCipher.blockLen,\n scCipher.ivLen\n ) * 8;\n if (bits <= 112)\n return 2048;\n if (bits <= 128)\n return 3072;\n if (bits <= 192)\n return 7680;\n return 8192;\n}\n\nfunction trySendNEWKEYS(kex) {\n if (!kex._sentNEWKEYS) {\n kex._protocol._debug && kex._protocol._debug(\n 'Outbound: Sending NEWKEYS'\n );\n const p = kex._protocol._packetRW.write.allocStartKEX;\n const packet = kex._protocol._packetRW.write.alloc(1, true);\n packet[p] = MESSAGE.NEWKEYS;\n kex._protocol._cipher.encrypt(\n kex._protocol._packetRW.write.finalize(packet, true)\n );\n kex._sentNEWKEYS = true;\n if (kex._protocol._strictMode)\n kex._protocol._cipher.outSeqno = 0;\n }\n}\n\nmodule.exports = {\n KexInit,\n kexinit,\n onKEXPayload,\n DEFAULT_KEXINIT_CLIENT: new KexInit({\n kex: DEFAULT_KEX.concat(['ext-info-c', 'kex-strict-c-v00@openssh.com']),\n serverHostKey: DEFAULT_SERVER_HOST_KEY,\n cs: {\n cipher: DEFAULT_CIPHER,\n mac: DEFAULT_MAC,\n compress: DEFAULT_COMPRESSION,\n lang: [],\n },\n sc: {\n cipher: DEFAULT_CIPHER,\n mac: DEFAULT_MAC,\n compress: DEFAULT_COMPRESSION,\n lang: [],\n },\n }),\n DEFAULT_KEXINIT_SERVER: new KexInit({\n kex: DEFAULT_KEX.concat(['kex-strict-s-v00@openssh.com']),\n serverHostKey: DEFAULT_SERVER_HOST_KEY,\n cs: {\n cipher: DEFAULT_CIPHER,\n mac: DEFAULT_MAC,\n compress: DEFAULT_COMPRESSION,\n lang: [],\n },\n sc: {\n cipher: DEFAULT_CIPHER,\n mac: DEFAULT_MAC,\n compress: DEFAULT_COMPRESSION,\n lang: [],\n },\n }),\n HANDLERS: {\n [MESSAGE.KEXINIT]: handleKexInit,\n },\n};\n", "{\n \"name\": \"ssh2\",\n \"version\": \"1.17.0\",\n \"author\": \"Brian White <mscdex@mscdex.net>\",\n \"description\": \"SSH2 client and server modules written in pure JavaScript for node.js\",\n \"main\": \"./lib/index.js\",\n \"engines\": {\n \"node\": \">=10.16.0\"\n },\n \"dependencies\": {\n \"asn1\": \"^0.2.6\",\n \"bcrypt-pbkdf\": \"^1.0.2\"\n },\n \"devDependencies\": {\n \"@mscdex/eslint-config\": \"^1.1.0\",\n \"eslint\": \"^7.32.0\"\n },\n \"optionalDependencies\": {\n \"cpu-features\": \"~0.0.10\",\n \"nan\": \"^2.23.0\"\n },\n \"scripts\": {\n \"install\": \"node install.js\",\n \"rebuild\": \"node install.js\",\n \"test\": \"node test/test.js\",\n \"lint\": \"eslint --cache --report-unused-disable-directives --ext=.js .eslintrc.js examples lib test\",\n \"lint:fix\": \"npm run lint -- --fix\"\n },\n \"keywords\": [\n \"ssh\",\n \"ssh2\",\n \"sftp\",\n \"secure\",\n \"shell\",\n \"exec\",\n \"remote\",\n \"client\"\n ],\n \"licenses\": [\n {\n \"type\": \"MIT\",\n \"url\": \"http://github.com/mscdex/ssh2/raw/master/LICENSE\"\n }\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"http://github.com/mscdex/ssh2.git\"\n }\n}\n", "/*\n TODO:\n * Replace `buffer._pos` usage in keyParser.js and elsewhere\n * Utilize optional \"writev\" support when writing packets from\n cipher.encrypt()\n * Built-in support for automatic re-keying, on by default\n * Revisit receiving unexpected/unknown packets\n * Error (fatal or otherwise) or ignore or pass on to user (in some or all\n cases)?\n * Including server/client check for single directional packet types?\n * Check packets for validity or bail as early as possible?\n * Automatic re-key every 2**31 packets after the last key exchange (sent or\n received), as suggested by RFC4344. OpenSSH currently does this.\n * Automatic re-key every so many blocks depending on cipher. RFC4344:\n Because of a birthday property of block ciphers and some modes of\n operation, implementations must be careful not to encrypt too many\n blocks with the same encryption key.\n\n Let L be the block length (in bits) of an SSH encryption method's\n block cipher (e.g., 128 for AES). If L is at least 128, then, after\n rekeying, an SSH implementation SHOULD NOT encrypt more than 2**(L/4)\n blocks before rekeying again. If L is at least 128, then SSH\n implementations should also attempt to force a rekey before receiving\n more than 2**(L/4) blocks. If L is less than 128 (which is the case\n for older ciphers such as 3DES, Blowfish, CAST-128, and IDEA), then,\n although it may be too expensive to rekey every 2**(L/4) blocks, it\n is still advisable for SSH implementations to follow the original\n recommendation in [RFC4253]: rekey at least once for every gigabyte\n of transmitted data.\n\n Note that if L is less than or equal to 128, then the recommendation\n in this subsection supersedes the recommendation in Section 3.1. If\n an SSH implementation uses a block cipher with a larger block size\n (e.g., Rijndael with 256-bit blocks), then the recommendations in\n Section 3.1 may supersede the recommendations in this subsection\n (depending on the lengths of the packets).\n*/\n\n'use strict';\n\nconst { inspect } = require('util');\n\nconst { bindingAvailable, NullCipher, NullDecipher } = require('./crypto.js');\nconst {\n COMPAT_CHECKS,\n DISCONNECT_REASON,\n eddsaSupported,\n MESSAGE,\n SIGNALS,\n TERMINAL_MODE,\n} = require('./constants.js');\nconst {\n DEFAULT_KEXINIT_CLIENT,\n DEFAULT_KEXINIT_SERVER,\n KexInit,\n kexinit,\n onKEXPayload,\n} = require('./kex.js');\nconst {\n parseKey,\n} = require('./keyParser.js');\nconst MESSAGE_HANDLERS = require('./handlers.js');\nconst {\n bufferCopy,\n bufferFill,\n bufferSlice,\n convertSignature,\n sendPacket,\n writeUInt32BE,\n} = require('./utils.js');\nconst {\n PacketReader,\n PacketWriter,\n ZlibPacketReader,\n ZlibPacketWriter,\n} = require('./zlib.js');\n\nconst MODULE_VER = require('../../package.json').version;\n\nconst VALID_DISCONNECT_REASONS = new Map(\n Object.values(DISCONNECT_REASON).map((n) => [n, 1])\n);\nconst IDENT_RAW = Buffer.from(`SSH-2.0-ssh2js${MODULE_VER}`);\nconst IDENT = Buffer.from(`${IDENT_RAW}\\r\\n`);\nconst MAX_LINE_LEN = 8192;\nconst MAX_LINES = 1024;\nconst PING_PAYLOAD = Buffer.from([\n MESSAGE.GLOBAL_REQUEST,\n // \"keepalive@openssh.com\"\n 0, 0, 0, 21,\n 107, 101, 101, 112, 97, 108, 105, 118, 101, 64, 111, 112, 101, 110, 115,\n 115, 104, 46, 99, 111, 109,\n // Request a reply\n 1,\n]);\nconst NO_TERMINAL_MODES_BUFFER = Buffer.from([ TERMINAL_MODE.TTY_OP_END ]);\n\nfunction noop() {}\n\n/*\n Inbound:\n * kexinit payload (needed only until exchange hash is generated)\n * raw ident\n * rekey packet queue\n * expected packet (implemented as separate _parse() function?)\n Outbound:\n * kexinit payload (needed only until exchange hash is generated)\n * rekey packet queue\n * kex secret (needed only until NEWKEYS)\n * exchange hash (needed only until NEWKEYS)\n * session ID (set to exchange hash from initial handshake)\n*/\nclass Protocol {\n constructor(config) {\n const onWrite = config.onWrite;\n if (typeof onWrite !== 'function')\n throw new Error('Missing onWrite function');\n this._onWrite = (data) => { onWrite(data); };\n\n const onError = config.onError;\n if (typeof onError !== 'function')\n throw new Error('Missing onError function');\n this._onError = (err) => { onError(err); };\n\n const debug = config.debug;\n this._debug = (typeof debug === 'function'\n ? (msg) => { debug(msg); }\n : undefined);\n\n const onHeader = config.onHeader;\n this._onHeader = (typeof onHeader === 'function'\n ? (...args) => { onHeader(...args); }\n : noop);\n\n const onPacket = config.onPacket;\n this._onPacket = (typeof onPacket === 'function'\n ? () => { onPacket(); }\n : noop);\n\n let onHandshakeComplete = config.onHandshakeComplete;\n if (typeof onHandshakeComplete !== 'function')\n onHandshakeComplete = noop;\n let firstHandshake;\n this._onHandshakeComplete = (...args) => {\n this._debug && this._debug('Handshake completed');\n if (firstHandshake === undefined)\n firstHandshake = true;\n else\n firstHandshake = false;\n\n // Process packets queued during a rekey where necessary\n const oldQueue = this._queue;\n if (oldQueue) {\n this._queue = undefined;\n this._debug && this._debug(\n `Draining outbound queue (${oldQueue.length}) ...`\n );\n for (let i = 0; i < oldQueue.length; ++i) {\n const data = oldQueue[i];\n // data === payload only\n\n // XXX: hacky\n let finalized = this._packetRW.write.finalize(data);\n if (finalized === data) {\n const packet = this._cipher.allocPacket(data.length);\n packet.set(data, 5);\n finalized = packet;\n }\n\n sendPacket(this, finalized);\n }\n this._debug && this._debug('... finished draining outbound queue');\n }\n\n if (firstHandshake && this._server && this._kex.remoteExtInfoEnabled)\n sendExtInfo(this);\n\n onHandshakeComplete(...args);\n };\n this._queue = undefined;\n\n const messageHandlers = config.messageHandlers;\n if (typeof messageHandlers === 'object' && messageHandlers !== null)\n this._handlers = messageHandlers;\n else\n this._handlers = {};\n\n this._onPayload = onPayload.bind(this);\n\n this._server = !!config.server;\n this._banner = undefined;\n let greeting;\n if (this._server) {\n if (typeof config.hostKeys !== 'object' || config.hostKeys === null)\n throw new Error('Missing server host key(s)');\n this._hostKeys = config.hostKeys;\n\n // Greeting displayed before the ssh identification string is sent, this\n // is usually ignored by most clients\n if (typeof config.greeting === 'string' && config.greeting.length) {\n greeting = (config.greeting.slice(-2) === '\\r\\n'\n ? config.greeting\n : `${config.greeting}\\r\\n`);\n }\n\n // Banner shown after the handshake completes, but before user\n // authentication begins\n if (typeof config.banner === 'string' && config.banner.length) {\n this._banner = (config.banner.slice(-2) === '\\r\\n'\n ? config.banner\n : `${config.banner}\\r\\n`);\n }\n } else {\n this._hostKeys = undefined;\n }\n\n let offer = config.offer;\n if (typeof offer !== 'object' || offer === null) {\n offer = (this._server ? DEFAULT_KEXINIT_SERVER : DEFAULT_KEXINIT_CLIENT);\n } else if (offer.constructor !== KexInit) {\n if (this._server) {\n offer.kex = offer.kex.concat(['kex-strict-s-v00@openssh.com']);\n } else {\n offer.kex = offer.kex.concat([\n 'ext-info-c',\n 'kex-strict-c-v00@openssh.com',\n ]);\n }\n offer = new KexInit(offer);\n }\n this._kex = undefined;\n this._strictMode = undefined;\n this._kexinit = undefined;\n this._offer = offer;\n this._cipher = new NullCipher(0, this._onWrite);\n this._decipher = undefined;\n this._skipNextInboundPacket = false;\n this._packetRW = {\n read: new PacketReader(),\n write: new PacketWriter(this),\n };\n this._hostVerifier = (!this._server\n && typeof config.hostVerifier === 'function'\n ? config.hostVerifier\n : undefined);\n\n this._parse = parseHeader;\n this._buffer = undefined;\n this._authsQueue = [];\n this._authenticated = false;\n this._remoteIdentRaw = undefined;\n let sentIdent;\n if (typeof config.ident === 'string') {\n this._identRaw = Buffer.from(`SSH-2.0-${config.ident}`);\n\n sentIdent = Buffer.allocUnsafe(this._identRaw.length + 2);\n sentIdent.set(this._identRaw, 0);\n sentIdent[sentIdent.length - 2] = 13; // '\\r'\n sentIdent[sentIdent.length - 1] = 10; // '\\n'\n } else if (Buffer.isBuffer(config.ident)) {\n const fullIdent = Buffer.allocUnsafe(8 + config.ident.length);\n fullIdent.latin1Write('SSH-2.0-', 0, 8);\n fullIdent.set(config.ident, 8);\n this._identRaw = fullIdent;\n\n sentIdent = Buffer.allocUnsafe(fullIdent.length + 2);\n sentIdent.set(fullIdent, 0);\n sentIdent[sentIdent.length - 2] = 13; // '\\r'\n sentIdent[sentIdent.length - 1] = 10; // '\\n'\n } else {\n this._identRaw = IDENT_RAW;\n sentIdent = IDENT;\n }\n this._compatFlags = 0;\n\n if (this._debug) {\n if (bindingAvailable)\n this._debug('Custom crypto binding available');\n else\n this._debug('Custom crypto binding not available');\n }\n\n this._debug && this._debug(\n `Local ident: ${inspect(this._identRaw.toString())}`\n );\n this.start = () => {\n this.start = undefined;\n if (greeting)\n this._onWrite(greeting);\n this._onWrite(sentIdent);\n };\n }\n _destruct(reason) {\n this._packetRW.read.cleanup();\n this._packetRW.write.cleanup();\n this._cipher && this._cipher.free();\n this._decipher && this._decipher.free();\n if (typeof reason !== 'string' || reason.length === 0)\n reason = 'fatal error';\n this.parse = () => {\n throw new Error(`Instance unusable after ${reason}`);\n };\n this._onWrite = () => {\n throw new Error(`Instance unusable after ${reason}`);\n };\n this._destruct = undefined;\n }\n cleanup() {\n this._destruct && this._destruct();\n }\n parse(chunk, i, len) {\n while (i < len)\n i = this._parse(chunk, i, len);\n }\n\n // Protocol message API\n\n // ===========================================================================\n // Common/Shared =============================================================\n // ===========================================================================\n\n // Global\n // ------\n disconnect(reason) {\n const pktLen = 1 + 4 + 4 + 4;\n // We don't use _packetRW.write.* here because we need to make sure that\n // we always get a full packet allocated because this message can be sent\n // at any time -- even during a key exchange\n let p = this._packetRW.write.allocStartKEX;\n const packet = this._packetRW.write.alloc(pktLen, true);\n const end = p + pktLen;\n\n if (!VALID_DISCONNECT_REASONS.has(reason))\n reason = DISCONNECT_REASON.PROTOCOL_ERROR;\n\n packet[p] = MESSAGE.DISCONNECT;\n writeUInt32BE(packet, reason, ++p);\n packet.fill(0, p += 4, end);\n\n this._debug && this._debug(`Outbound: Sending DISCONNECT (${reason})`);\n sendPacket(this, this._packetRW.write.finalize(packet, true), true);\n }\n ping() {\n const p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(PING_PAYLOAD.length);\n\n packet.set(PING_PAYLOAD, p);\n\n this._debug && this._debug(\n 'Outbound: Sending ping (GLOBAL_REQUEST: keepalive@openssh.com)'\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n rekey() {\n if (this._kexinit === undefined) {\n this._debug && this._debug('Outbound: Initiated explicit rekey');\n this._queue = [];\n kexinit(this);\n } else {\n this._debug && this._debug('Outbound: Ignoring rekey during handshake');\n }\n }\n\n // 'ssh-connection' service-specific\n // ---------------------------------\n requestSuccess(data) {\n let p = this._packetRW.write.allocStart;\n let packet;\n if (Buffer.isBuffer(data)) {\n packet = this._packetRW.write.alloc(1 + data.length);\n\n packet[p] = MESSAGE.REQUEST_SUCCESS;\n\n packet.set(data, ++p);\n } else {\n packet = this._packetRW.write.alloc(1);\n\n packet[p] = MESSAGE.REQUEST_SUCCESS;\n }\n\n this._debug && this._debug('Outbound: Sending REQUEST_SUCCESS');\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n requestFailure() {\n const p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1);\n\n packet[p] = MESSAGE.REQUEST_FAILURE;\n\n this._debug && this._debug('Outbound: Sending REQUEST_FAILURE');\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n channelSuccess(chan) {\n // Does not consume window space\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4);\n\n packet[p] = MESSAGE.CHANNEL_SUCCESS;\n\n writeUInt32BE(packet, chan, ++p);\n\n this._debug && this._debug(`Outbound: Sending CHANNEL_SUCCESS (r:${chan})`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n channelFailure(chan) {\n // Does not consume window space\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4);\n\n packet[p] = MESSAGE.CHANNEL_FAILURE;\n\n writeUInt32BE(packet, chan, ++p);\n\n this._debug && this._debug(`Outbound: Sending CHANNEL_FAILURE (r:${chan})`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n channelEOF(chan) {\n // Does not consume window space\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4);\n\n packet[p] = MESSAGE.CHANNEL_EOF;\n\n writeUInt32BE(packet, chan, ++p);\n\n this._debug && this._debug(`Outbound: Sending CHANNEL_EOF (r:${chan})`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n channelClose(chan) {\n // Does not consume window space\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4);\n\n packet[p] = MESSAGE.CHANNEL_CLOSE;\n\n writeUInt32BE(packet, chan, ++p);\n\n this._debug && this._debug(`Outbound: Sending CHANNEL_CLOSE (r:${chan})`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n channelWindowAdjust(chan, amount) {\n // Does not consume window space\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 4);\n\n packet[p] = MESSAGE.CHANNEL_WINDOW_ADJUST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, amount, p += 4);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_WINDOW_ADJUST (r:${chan}, ${amount})`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n channelData(chan, data) {\n const isBuffer = Buffer.isBuffer(data);\n const dataLen = (isBuffer ? data.length : Buffer.byteLength(data));\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 4 + dataLen);\n\n packet[p] = MESSAGE.CHANNEL_DATA;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, dataLen, p += 4);\n\n if (isBuffer)\n packet.set(data, p += 4);\n else\n packet.utf8Write(data, p += 4, dataLen);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_DATA (r:${chan}, ${dataLen})`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n channelExtData(chan, data, type) {\n const isBuffer = Buffer.isBuffer(data);\n const dataLen = (isBuffer ? data.length : Buffer.byteLength(data));\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 4 + 4 + dataLen);\n\n packet[p] = MESSAGE.CHANNEL_EXTENDED_DATA;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, type, p += 4);\n\n writeUInt32BE(packet, dataLen, p += 4);\n\n if (isBuffer)\n packet.set(data, p += 4);\n else\n packet.utf8Write(data, p += 4, dataLen);\n\n this._debug\n && this._debug(`Outbound: Sending CHANNEL_EXTENDED_DATA (r:${chan})`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n channelOpenConfirm(remote, local, initWindow, maxPacket) {\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 4 + 4 + 4);\n\n packet[p] = MESSAGE.CHANNEL_OPEN_CONFIRMATION;\n\n writeUInt32BE(packet, remote, ++p);\n\n writeUInt32BE(packet, local, p += 4);\n\n writeUInt32BE(packet, initWindow, p += 4);\n\n writeUInt32BE(packet, maxPacket, p += 4);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_OPEN_CONFIRMATION (r:${remote}, l:${local})`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n channelOpenFail(remote, reason, desc) {\n if (typeof desc !== 'string')\n desc = '';\n\n const descLen = Buffer.byteLength(desc);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 4 + 4 + descLen + 4);\n\n packet[p] = MESSAGE.CHANNEL_OPEN_FAILURE;\n\n writeUInt32BE(packet, remote, ++p);\n\n writeUInt32BE(packet, reason, p += 4);\n\n writeUInt32BE(packet, descLen, p += 4);\n\n p += 4;\n if (descLen) {\n packet.utf8Write(desc, p, descLen);\n p += descLen;\n }\n\n writeUInt32BE(packet, 0, p); // Empty language tag\n\n this._debug\n && this._debug(`Outbound: Sending CHANNEL_OPEN_FAILURE (r:${remote})`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n\n // ===========================================================================\n // Client-specific ===========================================================\n // ===========================================================================\n\n // Global\n // ------\n service(name) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n const nameLen = Buffer.byteLength(name);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + nameLen);\n\n packet[p] = MESSAGE.SERVICE_REQUEST;\n\n writeUInt32BE(packet, nameLen, ++p);\n packet.utf8Write(name, p += 4, nameLen);\n\n this._debug && this._debug(`Outbound: Sending SERVICE_REQUEST (${name})`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n\n // 'ssh-userauth' service-specific\n // -------------------------------\n authPassword(username, password, newPassword) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n const userLen = Buffer.byteLength(username);\n const passLen = Buffer.byteLength(password);\n const newPassLen = (newPassword ? Buffer.byteLength(newPassword) : 0);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + userLen + 4 + 14 + 4 + 8 + 1 + 4 + passLen\n + (newPassword ? 4 + newPassLen : 0)\n );\n\n packet[p] = MESSAGE.USERAUTH_REQUEST;\n\n writeUInt32BE(packet, userLen, ++p);\n packet.utf8Write(username, p += 4, userLen);\n\n writeUInt32BE(packet, 14, p += userLen);\n packet.utf8Write('ssh-connection', p += 4, 14);\n\n writeUInt32BE(packet, 8, p += 14);\n packet.utf8Write('password', p += 4, 8);\n\n packet[p += 8] = (newPassword ? 1 : 0);\n\n writeUInt32BE(packet, passLen, ++p);\n if (Buffer.isBuffer(password))\n bufferCopy(password, packet, 0, passLen, p += 4);\n else\n packet.utf8Write(password, p += 4, passLen);\n\n if (newPassword) {\n writeUInt32BE(packet, newPassLen, p += passLen);\n if (Buffer.isBuffer(newPassword))\n bufferCopy(newPassword, packet, 0, newPassLen, p += 4);\n else\n packet.utf8Write(newPassword, p += 4, newPassLen);\n this._debug && this._debug(\n 'Outbound: Sending USERAUTH_REQUEST (changed password)'\n );\n } else {\n this._debug && this._debug(\n 'Outbound: Sending USERAUTH_REQUEST (password)'\n );\n }\n\n this._authsQueue.push('password');\n\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n authPK(username, pubKey, keyAlgo, cbSign) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n pubKey = parseKey(pubKey);\n if (pubKey instanceof Error)\n throw new Error('Invalid key');\n\n const keyType = pubKey.type;\n pubKey = pubKey.getPublicSSH();\n\n if (typeof keyAlgo === 'function') {\n cbSign = keyAlgo;\n keyAlgo = undefined;\n }\n if (!keyAlgo)\n keyAlgo = keyType;\n\n const userLen = Buffer.byteLength(username);\n const algoLen = Buffer.byteLength(keyAlgo);\n const pubKeyLen = pubKey.length;\n const sessionID = this._kex.sessionID;\n const sesLen = sessionID.length;\n const payloadLen =\n (cbSign ? 4 + sesLen : 0)\n + 1 + 4 + userLen + 4 + 14 + 4 + 9 + 1 + 4 + algoLen + 4 + pubKeyLen;\n let packet;\n let p;\n if (cbSign) {\n packet = Buffer.allocUnsafe(payloadLen);\n p = 0;\n writeUInt32BE(packet, sesLen, p);\n packet.set(sessionID, p += 4);\n p += sesLen;\n } else {\n packet = this._packetRW.write.alloc(payloadLen);\n p = this._packetRW.write.allocStart;\n }\n\n packet[p] = MESSAGE.USERAUTH_REQUEST;\n\n writeUInt32BE(packet, userLen, ++p);\n packet.utf8Write(username, p += 4, userLen);\n\n writeUInt32BE(packet, 14, p += userLen);\n packet.utf8Write('ssh-connection', p += 4, 14);\n\n writeUInt32BE(packet, 9, p += 14);\n packet.utf8Write('publickey', p += 4, 9);\n\n packet[p += 9] = (cbSign ? 1 : 0);\n\n writeUInt32BE(packet, algoLen, ++p);\n packet.utf8Write(keyAlgo, p += 4, algoLen);\n\n writeUInt32BE(packet, pubKeyLen, p += algoLen);\n packet.set(pubKey, p += 4);\n\n if (!cbSign) {\n this._authsQueue.push('publickey');\n\n this._debug && this._debug(\n 'Outbound: Sending USERAUTH_REQUEST (publickey -- check)'\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n return;\n }\n\n cbSign(packet, (signature) => {\n signature = convertSignature(signature, keyType);\n if (signature === false)\n throw new Error('Error while converting handshake signature');\n\n const sigLen = signature.length;\n p = this._packetRW.write.allocStart;\n packet = this._packetRW.write.alloc(\n 1 + 4 + userLen + 4 + 14 + 4 + 9 + 1 + 4 + algoLen + 4 + pubKeyLen + 4\n + 4 + algoLen + 4 + sigLen\n );\n\n // TODO: simply copy from original \"packet\" to new `packet` to avoid\n // having to write each individual field a second time?\n packet[p] = MESSAGE.USERAUTH_REQUEST;\n\n writeUInt32BE(packet, userLen, ++p);\n packet.utf8Write(username, p += 4, userLen);\n\n writeUInt32BE(packet, 14, p += userLen);\n packet.utf8Write('ssh-connection', p += 4, 14);\n\n writeUInt32BE(packet, 9, p += 14);\n packet.utf8Write('publickey', p += 4, 9);\n\n packet[p += 9] = 1;\n\n writeUInt32BE(packet, algoLen, ++p);\n packet.utf8Write(keyAlgo, p += 4, algoLen);\n\n writeUInt32BE(packet, pubKeyLen, p += algoLen);\n packet.set(pubKey, p += 4);\n\n writeUInt32BE(packet, 4 + algoLen + 4 + sigLen, p += pubKeyLen);\n\n writeUInt32BE(packet, algoLen, p += 4);\n packet.utf8Write(keyAlgo, p += 4, algoLen);\n\n writeUInt32BE(packet, sigLen, p += algoLen);\n packet.set(signature, p += 4);\n\n // Servers shouldn't send packet type 60 in response to signed publickey\n // attempts, but if they do, interpret as type 60.\n this._authsQueue.push('publickey');\n\n this._debug && this._debug(\n 'Outbound: Sending USERAUTH_REQUEST (publickey)'\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n });\n }\n authHostbased(username, pubKey, hostname, userlocal, keyAlgo, cbSign) {\n // TODO: Make DRY by sharing similar code with authPK()\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n pubKey = parseKey(pubKey);\n if (pubKey instanceof Error)\n throw new Error('Invalid key');\n\n const keyType = pubKey.type;\n pubKey = pubKey.getPublicSSH();\n\n if (typeof keyAlgo === 'function') {\n cbSign = keyAlgo;\n keyAlgo = undefined;\n }\n if (!keyAlgo)\n keyAlgo = keyType;\n\n const userLen = Buffer.byteLength(username);\n const algoLen = Buffer.byteLength(keyAlgo);\n const pubKeyLen = pubKey.length;\n const sessionID = this._kex.sessionID;\n const sesLen = sessionID.length;\n const hostnameLen = Buffer.byteLength(hostname);\n const userlocalLen = Buffer.byteLength(userlocal);\n const data = Buffer.allocUnsafe(\n 4 + sesLen + 1 + 4 + userLen + 4 + 14 + 4 + 9 + 4 + algoLen\n + 4 + pubKeyLen + 4 + hostnameLen + 4 + userlocalLen\n );\n let p = 0;\n\n writeUInt32BE(data, sesLen, p);\n data.set(sessionID, p += 4);\n\n data[p += sesLen] = MESSAGE.USERAUTH_REQUEST;\n\n writeUInt32BE(data, userLen, ++p);\n data.utf8Write(username, p += 4, userLen);\n\n writeUInt32BE(data, 14, p += userLen);\n data.utf8Write('ssh-connection', p += 4, 14);\n\n writeUInt32BE(data, 9, p += 14);\n data.utf8Write('hostbased', p += 4, 9);\n\n writeUInt32BE(data, algoLen, p += 9);\n data.utf8Write(keyAlgo, p += 4, algoLen);\n\n writeUInt32BE(data, pubKeyLen, p += algoLen);\n data.set(pubKey, p += 4);\n\n writeUInt32BE(data, hostnameLen, p += pubKeyLen);\n data.utf8Write(hostname, p += 4, hostnameLen);\n\n writeUInt32BE(data, userlocalLen, p += hostnameLen);\n data.utf8Write(userlocal, p += 4, userlocalLen);\n\n cbSign(data, (signature) => {\n signature = convertSignature(signature, keyType);\n if (!signature)\n throw new Error('Error while converting handshake signature');\n\n const sigLen = signature.length;\n const reqDataLen = (data.length - sesLen - 4);\n p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n reqDataLen + 4 + 4 + algoLen + 4 + sigLen\n );\n\n bufferCopy(data, packet, 4 + sesLen, data.length, p);\n\n writeUInt32BE(packet, 4 + algoLen + 4 + sigLen, p += reqDataLen);\n writeUInt32BE(packet, algoLen, p += 4);\n packet.utf8Write(keyAlgo, p += 4, algoLen);\n writeUInt32BE(packet, sigLen, p += algoLen);\n packet.set(signature, p += 4);\n\n this._authsQueue.push('hostbased');\n\n this._debug && this._debug(\n 'Outbound: Sending USERAUTH_REQUEST (hostbased)'\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n });\n }\n authKeyboard(username) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n const userLen = Buffer.byteLength(username);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + userLen + 4 + 14 + 4 + 20 + 4 + 4\n );\n\n packet[p] = MESSAGE.USERAUTH_REQUEST;\n\n writeUInt32BE(packet, userLen, ++p);\n packet.utf8Write(username, p += 4, userLen);\n\n writeUInt32BE(packet, 14, p += userLen);\n packet.utf8Write('ssh-connection', p += 4, 14);\n\n writeUInt32BE(packet, 20, p += 14);\n packet.utf8Write('keyboard-interactive', p += 4, 20);\n\n writeUInt32BE(packet, 0, p += 20);\n\n writeUInt32BE(packet, 0, p += 4);\n\n this._authsQueue.push('keyboard-interactive');\n\n this._debug && this._debug(\n 'Outbound: Sending USERAUTH_REQUEST (keyboard-interactive)'\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n authNone(username) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n const userLen = Buffer.byteLength(username);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + userLen + 4 + 14 + 4 + 4);\n\n packet[p] = MESSAGE.USERAUTH_REQUEST;\n\n writeUInt32BE(packet, userLen, ++p);\n packet.utf8Write(username, p += 4, userLen);\n\n writeUInt32BE(packet, 14, p += userLen);\n packet.utf8Write('ssh-connection', p += 4, 14);\n\n writeUInt32BE(packet, 4, p += 14);\n packet.utf8Write('none', p += 4, 4);\n\n this._authsQueue.push('none');\n\n this._debug && this._debug('Outbound: Sending USERAUTH_REQUEST (none)');\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n authInfoRes(responses) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n let responsesTotalLen = 0;\n let responseLens;\n\n if (responses) {\n responseLens = new Array(responses.length);\n for (let i = 0; i < responses.length; ++i) {\n const len = Buffer.byteLength(responses[i]);\n responseLens[i] = len;\n responsesTotalLen += 4 + len;\n }\n }\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + responsesTotalLen);\n\n packet[p] = MESSAGE.USERAUTH_INFO_RESPONSE;\n\n if (responses) {\n writeUInt32BE(packet, responses.length, ++p);\n p += 4;\n for (let i = 0; i < responses.length; ++i) {\n const len = responseLens[i];\n writeUInt32BE(packet, len, p);\n p += 4;\n if (len) {\n packet.utf8Write(responses[i], p, len);\n p += len;\n }\n }\n } else {\n writeUInt32BE(packet, 0, ++p);\n }\n\n this._debug && this._debug('Outbound: Sending USERAUTH_INFO_RESPONSE');\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n\n // 'ssh-connection' service-specific\n // ---------------------------------\n tcpipForward(bindAddr, bindPort, wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n const addrLen = Buffer.byteLength(bindAddr);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 13 + 1 + 4 + addrLen + 4);\n\n packet[p] = MESSAGE.GLOBAL_REQUEST;\n\n writeUInt32BE(packet, 13, ++p);\n packet.utf8Write('tcpip-forward', p += 4, 13);\n\n packet[p += 13] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n writeUInt32BE(packet, addrLen, ++p);\n packet.utf8Write(bindAddr, p += 4, addrLen);\n\n writeUInt32BE(packet, bindPort, p += addrLen);\n\n this._debug\n && this._debug('Outbound: Sending GLOBAL_REQUEST (tcpip-forward)');\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n cancelTcpipForward(bindAddr, bindPort, wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n const addrLen = Buffer.byteLength(bindAddr);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 20 + 1 + 4 + addrLen + 4);\n\n packet[p] = MESSAGE.GLOBAL_REQUEST;\n\n writeUInt32BE(packet, 20, ++p);\n packet.utf8Write('cancel-tcpip-forward', p += 4, 20);\n\n packet[p += 20] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n writeUInt32BE(packet, addrLen, ++p);\n packet.utf8Write(bindAddr, p += 4, addrLen);\n\n writeUInt32BE(packet, bindPort, p += addrLen);\n\n this._debug\n && this._debug('Outbound: Sending GLOBAL_REQUEST (cancel-tcpip-forward)');\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n openssh_streamLocalForward(socketPath, wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n const socketPathLen = Buffer.byteLength(socketPath);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 31 + 1 + 4 + socketPathLen\n );\n\n packet[p] = MESSAGE.GLOBAL_REQUEST;\n\n writeUInt32BE(packet, 31, ++p);\n packet.utf8Write('streamlocal-forward@openssh.com', p += 4, 31);\n\n packet[p += 31] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n writeUInt32BE(packet, socketPathLen, ++p);\n packet.utf8Write(socketPath, p += 4, socketPathLen);\n\n this._debug && this._debug(\n 'Outbound: Sending GLOBAL_REQUEST (streamlocal-forward@openssh.com)'\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n openssh_cancelStreamLocalForward(socketPath, wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n const socketPathLen = Buffer.byteLength(socketPath);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 38 + 1 + 4 + socketPathLen\n );\n\n packet[p] = MESSAGE.GLOBAL_REQUEST;\n\n writeUInt32BE(packet, 38, ++p);\n packet.utf8Write('cancel-streamlocal-forward@openssh.com', p += 4, 38);\n\n packet[p += 38] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n writeUInt32BE(packet, socketPathLen, ++p);\n packet.utf8Write(socketPath, p += 4, socketPathLen);\n\n if (this._debug) {\n this._debug(\n 'Outbound: Sending GLOBAL_REQUEST '\n + '(cancel-streamlocal-forward@openssh.com)'\n );\n }\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n directTcpip(chan, initWindow, maxPacket, cfg) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n const srcLen = Buffer.byteLength(cfg.srcIP);\n const dstLen = Buffer.byteLength(cfg.dstIP);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 12 + 4 + 4 + 4 + 4 + srcLen + 4 + 4 + dstLen + 4\n );\n\n packet[p] = MESSAGE.CHANNEL_OPEN;\n\n writeUInt32BE(packet, 12, ++p);\n packet.utf8Write('direct-tcpip', p += 4, 12);\n\n writeUInt32BE(packet, chan, p += 12);\n\n writeUInt32BE(packet, initWindow, p += 4);\n\n writeUInt32BE(packet, maxPacket, p += 4);\n\n writeUInt32BE(packet, dstLen, p += 4);\n packet.utf8Write(cfg.dstIP, p += 4, dstLen);\n\n writeUInt32BE(packet, cfg.dstPort, p += dstLen);\n\n writeUInt32BE(packet, srcLen, p += 4);\n packet.utf8Write(cfg.srcIP, p += 4, srcLen);\n\n writeUInt32BE(packet, cfg.srcPort, p += srcLen);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_OPEN (r:${chan}, direct-tcpip)`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n openssh_directStreamLocal(chan, initWindow, maxPacket, cfg) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n const pathLen = Buffer.byteLength(cfg.socketPath);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 30 + 4 + 4 + 4 + 4 + pathLen + 4 + 4\n );\n\n packet[p] = MESSAGE.CHANNEL_OPEN;\n\n writeUInt32BE(packet, 30, ++p);\n packet.utf8Write('direct-streamlocal@openssh.com', p += 4, 30);\n\n writeUInt32BE(packet, chan, p += 30);\n\n writeUInt32BE(packet, initWindow, p += 4);\n\n writeUInt32BE(packet, maxPacket, p += 4);\n\n writeUInt32BE(packet, pathLen, p += 4);\n packet.utf8Write(cfg.socketPath, p += 4, pathLen);\n\n // zero-fill reserved fields (string and uint32)\n bufferFill(packet, 0, p += pathLen, p + 8);\n\n if (this._debug) {\n this._debug(\n 'Outbound: Sending CHANNEL_OPEN '\n + `(r:${chan}, direct-streamlocal@openssh.com)`\n );\n }\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n openssh_noMoreSessions(wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 28 + 1);\n\n packet[p] = MESSAGE.GLOBAL_REQUEST;\n\n writeUInt32BE(packet, 28, ++p);\n packet.utf8Write('no-more-sessions@openssh.com', p += 4, 28);\n\n packet[p += 28] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n this._debug && this._debug(\n 'Outbound: Sending GLOBAL_REQUEST (no-more-sessions@openssh.com)'\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n session(chan, initWindow, maxPacket) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n // Does not consume window space\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 7 + 4 + 4 + 4);\n\n packet[p] = MESSAGE.CHANNEL_OPEN;\n\n writeUInt32BE(packet, 7, ++p);\n packet.utf8Write('session', p += 4, 7);\n\n writeUInt32BE(packet, chan, p += 7);\n\n writeUInt32BE(packet, initWindow, p += 4);\n\n writeUInt32BE(packet, maxPacket, p += 4);\n\n this._debug\n && this._debug(`Outbound: Sending CHANNEL_OPEN (r:${chan}, session)`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n windowChange(chan, rows, cols, height, width) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n // Does not consume window space\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 4 + 13 + 1 + 4 + 4 + 4 + 4\n );\n\n packet[p] = MESSAGE.CHANNEL_REQUEST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, 13, p += 4);\n packet.utf8Write('window-change', p += 4, 13);\n\n packet[p += 13] = 0;\n\n writeUInt32BE(packet, cols, ++p);\n\n writeUInt32BE(packet, rows, p += 4);\n\n writeUInt32BE(packet, width, p += 4);\n\n writeUInt32BE(packet, height, p += 4);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_REQUEST (r:${chan}, window-change)`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n pty(chan, rows, cols, height, width, term, modes, wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n // Does not consume window space\n\n if (!term || !term.length)\n term = 'vt100';\n if (modes\n && !Buffer.isBuffer(modes)\n && !Array.isArray(modes)\n && typeof modes === 'object'\n && modes !== null) {\n modes = modesToBytes(modes);\n }\n if (!modes || !modes.length)\n modes = NO_TERMINAL_MODES_BUFFER;\n\n const termLen = term.length;\n const modesLen = modes.length;\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 4 + 7 + 1 + 4 + termLen + 4 + 4 + 4 + 4 + 4 + modesLen\n );\n\n packet[p] = MESSAGE.CHANNEL_REQUEST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, 7, p += 4);\n packet.utf8Write('pty-req', p += 4, 7);\n\n packet[p += 7] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n writeUInt32BE(packet, termLen, ++p);\n packet.utf8Write(term, p += 4, termLen);\n\n writeUInt32BE(packet, cols, p += termLen);\n\n writeUInt32BE(packet, rows, p += 4);\n\n writeUInt32BE(packet, width, p += 4);\n\n writeUInt32BE(packet, height, p += 4);\n\n writeUInt32BE(packet, modesLen, p += 4);\n p += 4;\n if (Array.isArray(modes)) {\n for (let i = 0; i < modesLen; ++i)\n packet[p++] = modes[i];\n } else if (Buffer.isBuffer(modes)) {\n packet.set(modes, p);\n }\n\n this._debug\n && this._debug(`Outbound: Sending CHANNEL_REQUEST (r:${chan}, pty-req)`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n shell(chan, wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n // Does not consume window space\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 4 + 5 + 1);\n\n packet[p] = MESSAGE.CHANNEL_REQUEST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, 5, p += 4);\n packet.utf8Write('shell', p += 4, 5);\n\n packet[p += 5] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n this._debug\n && this._debug(`Outbound: Sending CHANNEL_REQUEST (r:${chan}, shell)`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n exec(chan, cmd, wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n // Does not consume window space\n\n const isBuf = Buffer.isBuffer(cmd);\n const cmdLen = (isBuf ? cmd.length : Buffer.byteLength(cmd));\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 4 + 4 + 1 + 4 + cmdLen);\n\n packet[p] = MESSAGE.CHANNEL_REQUEST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, 4, p += 4);\n packet.utf8Write('exec', p += 4, 4);\n\n packet[p += 4] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n writeUInt32BE(packet, cmdLen, ++p);\n if (isBuf)\n packet.set(cmd, p += 4);\n else\n packet.utf8Write(cmd, p += 4, cmdLen);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_REQUEST (r:${chan}, exec: ${cmd})`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n signal(chan, signal) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n // Does not consume window space\n\n const origSignal = signal;\n\n signal = signal.toUpperCase();\n if (signal.slice(0, 3) === 'SIG')\n signal = signal.slice(3);\n\n if (SIGNALS[signal] !== 1)\n throw new Error(`Invalid signal: ${origSignal}`);\n\n const signalLen = signal.length;\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 4 + 6 + 1 + 4 + signalLen\n );\n\n packet[p] = MESSAGE.CHANNEL_REQUEST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, 6, p += 4);\n packet.utf8Write('signal', p += 4, 6);\n\n packet[p += 6] = 0;\n\n writeUInt32BE(packet, signalLen, ++p);\n packet.utf8Write(signal, p += 4, signalLen);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_REQUEST (r:${chan}, signal: ${signal})`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n env(chan, key, val, wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n // Does not consume window space\n\n const keyLen = Buffer.byteLength(key);\n const isBuf = Buffer.isBuffer(val);\n const valLen = (isBuf ? val.length : Buffer.byteLength(val));\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 4 + 3 + 1 + 4 + keyLen + 4 + valLen\n );\n\n packet[p] = MESSAGE.CHANNEL_REQUEST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, 3, p += 4);\n packet.utf8Write('env', p += 4, 3);\n\n packet[p += 3] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n writeUInt32BE(packet, keyLen, ++p);\n packet.utf8Write(key, p += 4, keyLen);\n\n writeUInt32BE(packet, valLen, p += keyLen);\n if (isBuf)\n packet.set(val, p += 4);\n else\n packet.utf8Write(val, p += 4, valLen);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_REQUEST (r:${chan}, env: ${key}=${val})`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n x11Forward(chan, cfg, wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n // Does not consume window space\n\n const protocol = cfg.protocol;\n const cookie = cfg.cookie;\n const isBufProto = Buffer.isBuffer(protocol);\n const protoLen = (isBufProto\n ? protocol.length\n : Buffer.byteLength(protocol));\n const isBufCookie = Buffer.isBuffer(cookie);\n const cookieLen = (isBufCookie\n ? cookie.length\n : Buffer.byteLength(cookie));\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 4 + 7 + 1 + 1 + 4 + protoLen + 4 + cookieLen + 4\n );\n\n packet[p] = MESSAGE.CHANNEL_REQUEST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, 7, p += 4);\n packet.utf8Write('x11-req', p += 4, 7);\n\n packet[p += 7] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n packet[++p] = (cfg.single ? 1 : 0);\n\n writeUInt32BE(packet, protoLen, ++p);\n if (isBufProto)\n packet.set(protocol, p += 4);\n else\n packet.utf8Write(protocol, p += 4, protoLen);\n\n writeUInt32BE(packet, cookieLen, p += protoLen);\n if (isBufCookie)\n packet.set(cookie, p += 4);\n else\n packet.latin1Write(cookie, p += 4, cookieLen);\n\n writeUInt32BE(packet, (cfg.screen || 0), p += cookieLen);\n\n this._debug\n && this._debug(`Outbound: Sending CHANNEL_REQUEST (r:${chan}, x11-req)`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n subsystem(chan, name, wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n // Does not consume window space\n const nameLen = Buffer.byteLength(name);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 4 + 9 + 1 + 4 + nameLen);\n\n packet[p] = MESSAGE.CHANNEL_REQUEST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, 9, p += 4);\n packet.utf8Write('subsystem', p += 4, 9);\n\n packet[p += 9] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n writeUInt32BE(packet, nameLen, ++p);\n packet.utf8Write(name, p += 4, nameLen);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_REQUEST (r:${chan}, subsystem: ${name})`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n openssh_agentForward(chan, wantReply) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n // Does not consume window space\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 4 + 26 + 1);\n\n packet[p] = MESSAGE.CHANNEL_REQUEST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, 26, p += 4);\n packet.utf8Write('auth-agent-req@openssh.com', p += 4, 26);\n\n packet[p += 26] = (wantReply === undefined || wantReply === true ? 1 : 0);\n\n if (this._debug) {\n this._debug(\n 'Outbound: Sending CHANNEL_REQUEST '\n + `(r:${chan}, auth-agent-req@openssh.com)`\n );\n }\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n openssh_hostKeysProve(keys) {\n if (this._server)\n throw new Error('Client-only method called in server mode');\n\n let keysTotal = 0;\n const publicKeys = [];\n for (const key of keys) {\n const publicKey = key.getPublicSSH();\n keysTotal += 4 + publicKey.length;\n publicKeys.push(publicKey);\n }\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 29 + 1 + keysTotal);\n\n packet[p] = MESSAGE.GLOBAL_REQUEST;\n\n writeUInt32BE(packet, 29, ++p);\n packet.utf8Write('hostkeys-prove-00@openssh.com', p += 4, 29);\n\n packet[p += 29] = 1; // want reply\n\n ++p;\n for (const buf of publicKeys) {\n writeUInt32BE(packet, buf.length, p);\n bufferCopy(buf, packet, 0, buf.length, p += 4);\n p += buf.length;\n }\n\n if (this._debug) {\n this._debug(\n 'Outbound: Sending GLOBAL_REQUEST (hostkeys-prove-00@openssh.com)'\n );\n }\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n\n // ===========================================================================\n // Server-specific ===========================================================\n // ===========================================================================\n\n // Global\n // ------\n serviceAccept(svcName) {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n const svcNameLen = Buffer.byteLength(svcName);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + svcNameLen);\n\n packet[p] = MESSAGE.SERVICE_ACCEPT;\n\n writeUInt32BE(packet, svcNameLen, ++p);\n packet.utf8Write(svcName, p += 4, svcNameLen);\n\n this._debug && this._debug(`Outbound: Sending SERVICE_ACCEPT (${svcName})`);\n sendPacket(this, this._packetRW.write.finalize(packet));\n\n if (this._server && this._banner && svcName === 'ssh-userauth') {\n const banner = this._banner;\n this._banner = undefined; // Prevent banner from being displayed again\n const bannerLen = Buffer.byteLength(banner);\n p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + bannerLen + 4);\n\n packet[p] = MESSAGE.USERAUTH_BANNER;\n\n writeUInt32BE(packet, bannerLen, ++p);\n packet.utf8Write(banner, p += 4, bannerLen);\n\n writeUInt32BE(packet, 0, p += bannerLen); // Empty language tag\n\n this._debug && this._debug('Outbound: Sending USERAUTH_BANNER');\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n }\n // 'ssh-connection' service-specific\n forwardedTcpip(chan, initWindow, maxPacket, cfg) {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n const boundAddrLen = Buffer.byteLength(cfg.boundAddr);\n const remoteAddrLen = Buffer.byteLength(cfg.remoteAddr);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 15 + 4 + 4 + 4 + 4 + boundAddrLen + 4 + 4 + remoteAddrLen + 4\n );\n\n packet[p] = MESSAGE.CHANNEL_OPEN;\n\n writeUInt32BE(packet, 15, ++p);\n packet.utf8Write('forwarded-tcpip', p += 4, 15);\n\n writeUInt32BE(packet, chan, p += 15);\n\n writeUInt32BE(packet, initWindow, p += 4);\n\n writeUInt32BE(packet, maxPacket, p += 4);\n\n writeUInt32BE(packet, boundAddrLen, p += 4);\n packet.utf8Write(cfg.boundAddr, p += 4, boundAddrLen);\n\n writeUInt32BE(packet, cfg.boundPort, p += boundAddrLen);\n\n writeUInt32BE(packet, remoteAddrLen, p += 4);\n packet.utf8Write(cfg.remoteAddr, p += 4, remoteAddrLen);\n\n writeUInt32BE(packet, cfg.remotePort, p += remoteAddrLen);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_OPEN (r:${chan}, forwarded-tcpip)`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n x11(chan, initWindow, maxPacket, cfg) {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n const addrLen = Buffer.byteLength(cfg.originAddr);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 3 + 4 + 4 + 4 + 4 + addrLen + 4\n );\n\n packet[p] = MESSAGE.CHANNEL_OPEN;\n\n writeUInt32BE(packet, 3, ++p);\n packet.utf8Write('x11', p += 4, 3);\n\n writeUInt32BE(packet, chan, p += 3);\n\n writeUInt32BE(packet, initWindow, p += 4);\n\n writeUInt32BE(packet, maxPacket, p += 4);\n\n writeUInt32BE(packet, addrLen, p += 4);\n packet.utf8Write(cfg.originAddr, p += 4, addrLen);\n\n writeUInt32BE(packet, cfg.originPort, p += addrLen);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_OPEN (r:${chan}, x11)`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n openssh_authAgent(chan, initWindow, maxPacket) {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 22 + 4 + 4 + 4);\n\n packet[p] = MESSAGE.CHANNEL_OPEN;\n\n writeUInt32BE(packet, 22, ++p);\n packet.utf8Write('auth-agent@openssh.com', p += 4, 22);\n\n writeUInt32BE(packet, chan, p += 22);\n\n writeUInt32BE(packet, initWindow, p += 4);\n\n writeUInt32BE(packet, maxPacket, p += 4);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_OPEN (r:${chan}, auth-agent@openssh.com)`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n openssh_forwardedStreamLocal(chan, initWindow, maxPacket, cfg) {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n const pathLen = Buffer.byteLength(cfg.socketPath);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 33 + 4 + 4 + 4 + 4 + pathLen + 4\n );\n\n packet[p] = MESSAGE.CHANNEL_OPEN;\n\n writeUInt32BE(packet, 33, ++p);\n packet.utf8Write('forwarded-streamlocal@openssh.com', p += 4, 33);\n\n writeUInt32BE(packet, chan, p += 33);\n\n writeUInt32BE(packet, initWindow, p += 4);\n\n writeUInt32BE(packet, maxPacket, p += 4);\n\n writeUInt32BE(packet, pathLen, p += 4);\n packet.utf8Write(cfg.socketPath, p += 4, pathLen);\n\n writeUInt32BE(packet, 0, p += pathLen);\n\n if (this._debug) {\n this._debug(\n 'Outbound: Sending CHANNEL_OPEN '\n + `(r:${chan}, forwarded-streamlocal@openssh.com)`\n );\n }\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n exitStatus(chan, status) {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n // Does not consume window space\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + 4 + 11 + 1 + 4);\n\n packet[p] = MESSAGE.CHANNEL_REQUEST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, 11, p += 4);\n packet.utf8Write('exit-status', p += 4, 11);\n\n packet[p += 11] = 0;\n\n writeUInt32BE(packet, status, ++p);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_REQUEST (r:${chan}, exit-status: ${status})`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n exitSignal(chan, name, coreDumped, msg) {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n // Does not consume window space\n\n const origSignal = name;\n\n if (typeof origSignal !== 'string' || !origSignal)\n throw new Error(`Invalid signal: ${origSignal}`);\n\n let signal = name.toUpperCase();\n if (signal.slice(0, 3) === 'SIG')\n signal = signal.slice(3);\n\n if (SIGNALS[signal] !== 1)\n throw new Error(`Invalid signal: ${origSignal}`);\n\n const nameLen = Buffer.byteLength(signal);\n const msgLen = (msg ? Buffer.byteLength(msg) : 0);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + 4 + 11 + 1 + 4 + nameLen + 1 + 4 + msgLen + 4\n );\n\n packet[p] = MESSAGE.CHANNEL_REQUEST;\n\n writeUInt32BE(packet, chan, ++p);\n\n writeUInt32BE(packet, 11, p += 4);\n packet.utf8Write('exit-signal', p += 4, 11);\n\n packet[p += 11] = 0;\n\n writeUInt32BE(packet, nameLen, ++p);\n packet.utf8Write(signal, p += 4, nameLen);\n\n packet[p += nameLen] = (coreDumped ? 1 : 0);\n\n writeUInt32BE(packet, msgLen, ++p);\n\n p += 4;\n if (msgLen) {\n packet.utf8Write(msg, p, msgLen);\n p += msgLen;\n }\n\n writeUInt32BE(packet, 0, p);\n\n this._debug && this._debug(\n `Outbound: Sending CHANNEL_REQUEST (r:${chan}, exit-signal: ${name})`\n );\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n // 'ssh-userauth' service-specific\n authFailure(authMethods, isPartial) {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n if (this._authsQueue.length === 0)\n throw new Error('No auth in progress');\n\n let methods;\n\n if (typeof authMethods === 'boolean') {\n isPartial = authMethods;\n authMethods = undefined;\n }\n\n if (authMethods) {\n methods = [];\n for (let i = 0; i < authMethods.length; ++i) {\n if (authMethods[i].toLowerCase() === 'none')\n continue;\n methods.push(authMethods[i]);\n }\n methods = methods.join(',');\n } else {\n methods = '';\n }\n\n const methodsLen = methods.length;\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + methodsLen + 1);\n\n packet[p] = MESSAGE.USERAUTH_FAILURE;\n\n writeUInt32BE(packet, methodsLen, ++p);\n packet.utf8Write(methods, p += 4, methodsLen);\n\n packet[p += methodsLen] = (isPartial === true ? 1 : 0);\n\n this._authsQueue.shift();\n\n this._debug && this._debug('Outbound: Sending USERAUTH_FAILURE');\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n authSuccess() {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n if (this._authsQueue.length === 0)\n throw new Error('No auth in progress');\n\n const p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1);\n\n packet[p] = MESSAGE.USERAUTH_SUCCESS;\n\n this._authsQueue.shift();\n this._authenticated = true;\n\n this._debug && this._debug('Outbound: Sending USERAUTH_SUCCESS');\n sendPacket(this, this._packetRW.write.finalize(packet));\n\n if (this._kex.negotiated.cs.compress === 'zlib@openssh.com')\n this._packetRW.read = new ZlibPacketReader();\n if (this._kex.negotiated.sc.compress === 'zlib@openssh.com')\n this._packetRW.write = new ZlibPacketWriter(this);\n }\n authPKOK(keyAlgo, key) {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n if (this._authsQueue.length === 0 || this._authsQueue[0] !== 'publickey')\n throw new Error('\"publickey\" auth not in progress');\n\n // TODO: support parsed key for `key`\n\n const keyAlgoLen = Buffer.byteLength(keyAlgo);\n const keyLen = key.length;\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + keyAlgoLen + 4 + keyLen);\n\n packet[p] = MESSAGE.USERAUTH_PK_OK;\n\n writeUInt32BE(packet, keyAlgoLen, ++p);\n packet.utf8Write(keyAlgo, p += 4, keyAlgoLen);\n\n writeUInt32BE(packet, keyLen, p += keyAlgoLen);\n packet.set(key, p += 4);\n\n this._authsQueue.shift();\n\n this._debug && this._debug('Outbound: Sending USERAUTH_PK_OK');\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n authPasswdChg(prompt) {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n const promptLen = Buffer.byteLength(prompt);\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(1 + 4 + promptLen + 4);\n\n packet[p] = MESSAGE.USERAUTH_PASSWD_CHANGEREQ;\n\n writeUInt32BE(packet, promptLen, ++p);\n packet.utf8Write(prompt, p += 4, promptLen);\n\n writeUInt32BE(packet, 0, p += promptLen); // Empty language tag\n\n this._debug && this._debug('Outbound: Sending USERAUTH_PASSWD_CHANGEREQ');\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n authInfoReq(name, instructions, prompts) {\n if (!this._server)\n throw new Error('Server-only method called in client mode');\n\n let promptsLen = 0;\n const nameLen = name ? Buffer.byteLength(name) : 0;\n const instrLen = instructions ? Buffer.byteLength(instructions) : 0;\n\n for (let i = 0; i < prompts.length; ++i)\n promptsLen += 4 + Buffer.byteLength(prompts[i].prompt) + 1;\n\n let p = this._packetRW.write.allocStart;\n const packet = this._packetRW.write.alloc(\n 1 + 4 + nameLen + 4 + instrLen + 4 + 4 + promptsLen\n );\n\n packet[p] = MESSAGE.USERAUTH_INFO_REQUEST;\n\n writeUInt32BE(packet, nameLen, ++p);\n p += 4;\n if (name) {\n packet.utf8Write(name, p, nameLen);\n p += nameLen;\n }\n\n writeUInt32BE(packet, instrLen, p);\n p += 4;\n if (instructions) {\n packet.utf8Write(instructions, p, instrLen);\n p += instrLen;\n }\n\n writeUInt32BE(packet, 0, p);\n\n writeUInt32BE(packet, prompts.length, p += 4);\n p += 4;\n for (let i = 0; i < prompts.length; ++i) {\n const prompt = prompts[i];\n const promptLen = Buffer.byteLength(prompt.prompt);\n\n writeUInt32BE(packet, promptLen, p);\n p += 4;\n if (promptLen) {\n packet.utf8Write(prompt.prompt, p, promptLen);\n p += promptLen;\n }\n packet[p++] = (prompt.echo ? 1 : 0);\n }\n\n this._debug && this._debug('Outbound: Sending USERAUTH_INFO_REQUEST');\n sendPacket(this, this._packetRW.write.finalize(packet));\n }\n}\n\n// SSH-protoversion-softwareversion (SP comments) CR LF\nconst RE_IDENT = /^SSH-(2\\.0|1\\.99)-([^ ]+)(?: (.*))?$/;\n\n// TODO: optimize this by starting n bytes from the end of this._buffer instead\n// of the beginning\nfunction parseHeader(chunk, p, len) {\n let data;\n let chunkOffset;\n if (this._buffer) {\n data = Buffer.allocUnsafe(this._buffer.length + (len - p));\n data.set(this._buffer, 0);\n if (p === 0) {\n data.set(chunk, this._buffer.length);\n } else {\n data.set(new Uint8Array(chunk.buffer,\n chunk.byteOffset + p,\n (len - p)),\n this._buffer.length);\n }\n chunkOffset = this._buffer.length;\n p = 0;\n } else {\n data = chunk;\n chunkOffset = 0;\n }\n const op = p;\n let start = p;\n let end = p;\n let needNL = false;\n let lineLen = 0;\n let lines = 0;\n for (; p < data.length; ++p) {\n const ch = data[p];\n\n if (ch === 13 /* '\\r' */) {\n needNL = true;\n continue;\n }\n\n if (ch === 10 /* '\\n' */) {\n if (end > start\n && end - start > 4\n && data[start] === 83 /* 'S' */\n && data[start + 1] === 83 /* 'S' */\n && data[start + 2] === 72 /* 'H' */\n && data[start + 3] === 45 /* '-' */) {\n\n const full = data.latin1Slice(op, end + 1);\n const identRaw = (start === op ? full : full.slice(start - op));\n const m = RE_IDENT.exec(identRaw);\n if (!m)\n throw new Error('Invalid identification string');\n\n const header = {\n greeting: (start === op ? '' : full.slice(0, start - op)),\n identRaw,\n versions: {\n protocol: m[1],\n software: m[2],\n },\n comments: m[3]\n };\n\n // Needed during handshake\n this._remoteIdentRaw = Buffer.from(identRaw);\n\n this._debug && this._debug(`Remote ident: ${inspect(identRaw)}`);\n this._compatFlags = getCompatFlags(header);\n\n this._buffer = undefined;\n this._decipher =\n new NullDecipher(0, onKEXPayload.bind(this, { firstPacket: true }));\n this._parse = parsePacket;\n\n this._onHeader(header);\n if (!this._destruct) {\n // We disconnected inside _onHeader\n return len;\n }\n\n kexinit(this);\n\n return p + 1 - chunkOffset;\n }\n\n // Only allow pre-ident greetings when we're a client\n if (this._server)\n throw new Error('Greetings from clients not permitted');\n\n if (++lines > MAX_LINES)\n throw new Error('Max greeting lines exceeded');\n\n needNL = false;\n start = p + 1;\n lineLen = 0;\n } else if (needNL) {\n throw new Error('Invalid header: expected newline');\n } else if (++lineLen >= MAX_LINE_LEN) {\n throw new Error('Header line too long');\n }\n\n end = p;\n }\n if (!this._buffer)\n this._buffer = bufferSlice(data, op);\n\n return p - chunkOffset;\n}\n\nfunction parsePacket(chunk, p, len) {\n return this._decipher.decrypt(chunk, p, len);\n}\n\nfunction onPayload(payload) {\n // XXX: move this to the Decipher implementations?\n\n this._onPacket();\n\n if (payload.length === 0) {\n this._debug && this._debug('Inbound: Skipping empty packet payload');\n return;\n }\n\n payload = this._packetRW.read.read(payload);\n\n const type = payload[0];\n if (type === MESSAGE.USERAUTH_SUCCESS\n && !this._server\n && !this._authenticated) {\n this._authenticated = true;\n if (this._kex.negotiated.cs.compress === 'zlib@openssh.com')\n this._packetRW.write = new ZlibPacketWriter(this);\n if (this._kex.negotiated.sc.compress === 'zlib@openssh.com')\n this._packetRW.read = new ZlibPacketReader();\n }\n const handler = MESSAGE_HANDLERS[type];\n if (handler === undefined) {\n this._debug && this._debug(`Inbound: Unsupported message type: ${type}`);\n return;\n }\n\n return handler(this, payload);\n}\n\nfunction getCompatFlags(header) {\n const software = header.versions.software;\n\n let flags = 0;\n\n for (const rule of COMPAT_CHECKS) {\n if (typeof rule[0] === 'string') {\n if (software === rule[0])\n flags |= rule[1];\n } else if (rule[0].test(software)) {\n flags |= rule[1];\n }\n }\n\n return flags;\n}\n\nfunction modesToBytes(modes) {\n const keys = Object.keys(modes);\n const bytes = Buffer.allocUnsafe((5 * keys.length) + 1);\n let b = 0;\n\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (key === 'TTY_OP_END')\n continue;\n\n const opcode = TERMINAL_MODE[key];\n if (opcode === undefined)\n continue;\n\n const val = modes[key];\n if (typeof val === 'number' && isFinite(val)) {\n bytes[b++] = opcode;\n bytes[b++] = val >>> 24;\n bytes[b++] = val >>> 16;\n bytes[b++] = val >>> 8;\n bytes[b++] = val;\n }\n }\n\n bytes[b++] = TERMINAL_MODE.TTY_OP_END;\n\n if (b < bytes.length)\n return bufferSlice(bytes, 0, b);\n\n return bytes;\n}\n\nfunction sendExtInfo(proto) {\n let serverSigAlgs =\n 'ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'\n + 'rsa-sha2-512,rsa-sha2-256,ssh-rsa,ssh-dss';\n if (eddsaSupported)\n serverSigAlgs = `ssh-ed25519,${serverSigAlgs}`;\n const algsLen = Buffer.byteLength(serverSigAlgs);\n\n let p = proto._packetRW.write.allocStart;\n const packet = proto._packetRW.write.alloc(1 + 4 + 4 + 15 + 4 + algsLen);\n\n packet[p] = MESSAGE.EXT_INFO;\n\n writeUInt32BE(packet, 1, ++p);\n\n writeUInt32BE(packet, 15, p += 4);\n packet.utf8Write('server-sig-algs', p += 4, 15);\n\n writeUInt32BE(packet, algsLen, p += 15);\n packet.utf8Write(serverSigAlgs, p += 4, algsLen);\n\n proto._debug && proto._debug('Outbound: Sending EXT_INFO');\n sendPacket(proto, proto._packetRW.write.finalize(packet));\n}\n\nmodule.exports = Protocol;\n", "'use strict';\n\nconst assert = require('assert');\nconst { inspect } = require('util');\n\n// Only use this for integers! Decimal numbers do not work with this function.\nfunction addNumericalSeparator(val) {\n let res = '';\n let i = val.length;\n const start = val[0] === '-' ? 1 : 0;\n for (; i >= start + 4; i -= 3)\n res = `_${val.slice(i - 3, i)}${res}`;\n return `${val.slice(0, i)}${res}`;\n}\n\nfunction oneOf(expected, thing) {\n assert(typeof thing === 'string', '`thing` has to be of type string');\n if (Array.isArray(expected)) {\n const len = expected.length;\n assert(len > 0, 'At least one expected value needs to be specified');\n expected = expected.map((i) => String(i));\n if (len > 2) {\n return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or `\n + expected[len - 1];\n } else if (len === 2) {\n return `one of ${thing} ${expected[0]} or ${expected[1]}`;\n }\n return `of ${thing} ${expected[0]}`;\n }\n return `of ${thing} ${String(expected)}`;\n}\n\n\nexports.ERR_INTERNAL_ASSERTION = class ERR_INTERNAL_ASSERTION extends Error {\n constructor(message) {\n super();\n Error.captureStackTrace(this, ERR_INTERNAL_ASSERTION);\n\n const suffix = 'This is caused by either a bug in ssh2 '\n + 'or incorrect usage of ssh2 internals.\\n'\n + 'Please open an issue with this stack trace at '\n + 'https://github.com/mscdex/ssh2/issues\\n';\n\n this.message = (message === undefined ? suffix : `${message}\\n${suffix}`);\n }\n};\n\nconst MAX_32BIT_INT = 2 ** 32;\nconst MAX_32BIT_BIGINT = (() => {\n try {\n return new Function('return 2n ** 32n')();\n } catch {}\n})();\nexports.ERR_OUT_OF_RANGE = class ERR_OUT_OF_RANGE extends RangeError {\n constructor(str, range, input, replaceDefaultBoolean) {\n super();\n Error.captureStackTrace(this, ERR_OUT_OF_RANGE);\n\n assert(range, 'Missing \"range\" argument');\n let msg = (replaceDefaultBoolean\n ? str\n : `The value of \"${str}\" is out of range.`);\n let received;\n if (Number.isInteger(input) && Math.abs(input) > MAX_32BIT_INT) {\n received = addNumericalSeparator(String(input));\n } else if (typeof input === 'bigint') {\n received = String(input);\n if (input > MAX_32BIT_BIGINT || input < -MAX_32BIT_BIGINT)\n received = addNumericalSeparator(received);\n received += 'n';\n } else {\n received = inspect(input);\n }\n msg += ` It must be ${range}. Received ${received}`;\n\n this.message = msg;\n }\n};\n\nclass ERR_INVALID_ARG_TYPE extends TypeError {\n constructor(name, expected, actual) {\n super();\n Error.captureStackTrace(this, ERR_INVALID_ARG_TYPE);\n\n assert(typeof name === 'string', `'name' must be a string`);\n\n // determiner: 'must be' or 'must not be'\n let determiner;\n if (typeof expected === 'string' && expected.startsWith('not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n let msg;\n if (name.endsWith(' argument')) {\n // For cases like 'first argument'\n msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`;\n } else {\n const type = (name.includes('.') ? 'property' : 'argument');\n msg = `The \"${name}\" ${type} ${determiner} ${oneOf(expected, 'type')}`;\n }\n\n msg += `. Received type ${typeof actual}`;\n\n this.message = msg;\n }\n}\nexports.ERR_INVALID_ARG_TYPE = ERR_INVALID_ARG_TYPE;\n\nexports.validateNumber = function validateNumber(value, name) {\n if (typeof value !== 'number')\n throw new ERR_INVALID_ARG_TYPE(name, 'number', value);\n};\n", "'use strict';\n\nconst EventEmitter = require('events');\nconst fs = require('fs');\nconst { constants } = fs;\nconst {\n Readable: ReadableStream,\n Writable: WritableStream\n} = require('stream');\nconst { inherits, types: { isDate } } = require('util');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst {\n bufferCopy,\n bufferSlice,\n makeBufferParser,\n writeUInt32BE,\n} = require('./utils.js');\n\nconst ATTR = {\n SIZE: 0x00000001,\n UIDGID: 0x00000002,\n PERMISSIONS: 0x00000004,\n ACMODTIME: 0x00000008,\n EXTENDED: 0x80000000,\n};\n\n// Large enough to store all possible attributes\nconst ATTRS_BUF = Buffer.alloc(28);\n\nconst STATUS_CODE = {\n OK: 0,\n EOF: 1,\n NO_SUCH_FILE: 2,\n PERMISSION_DENIED: 3,\n FAILURE: 4,\n BAD_MESSAGE: 5,\n NO_CONNECTION: 6,\n CONNECTION_LOST: 7,\n OP_UNSUPPORTED: 8\n};\n\nconst VALID_STATUS_CODES = new Map(\n Object.values(STATUS_CODE).map((n) => [n, 1])\n);\n\nconst STATUS_CODE_STR = {\n [STATUS_CODE.OK]: 'No error',\n [STATUS_CODE.EOF]: 'End of file',\n [STATUS_CODE.NO_SUCH_FILE]: 'No such file or directory',\n [STATUS_CODE.PERMISSION_DENIED]: 'Permission denied',\n [STATUS_CODE.FAILURE]: 'Failure',\n [STATUS_CODE.BAD_MESSAGE]: 'Bad message',\n [STATUS_CODE.NO_CONNECTION]: 'No connection',\n [STATUS_CODE.CONNECTION_LOST]: 'Connection lost',\n [STATUS_CODE.OP_UNSUPPORTED]: 'Operation unsupported',\n};\n\nconst REQUEST = {\n INIT: 1,\n OPEN: 3,\n CLOSE: 4,\n READ: 5,\n WRITE: 6,\n LSTAT: 7,\n FSTAT: 8,\n SETSTAT: 9,\n FSETSTAT: 10,\n OPENDIR: 11,\n READDIR: 12,\n REMOVE: 13,\n MKDIR: 14,\n RMDIR: 15,\n REALPATH: 16,\n STAT: 17,\n RENAME: 18,\n READLINK: 19,\n SYMLINK: 20,\n EXTENDED: 200\n};\n\nconst RESPONSE = {\n VERSION: 2,\n STATUS: 101,\n HANDLE: 102,\n DATA: 103,\n NAME: 104,\n ATTRS: 105,\n EXTENDED: 201\n};\n\nconst OPEN_MODE = {\n READ: 0x00000001,\n WRITE: 0x00000002,\n APPEND: 0x00000004,\n CREAT: 0x00000008,\n TRUNC: 0x00000010,\n EXCL: 0x00000020\n};\n\nconst PKT_RW_OVERHEAD = 2 * 1024;\nconst MAX_REQID = 2 ** 32 - 1;\nconst CLIENT_VERSION_BUFFER = Buffer.from([\n 0, 0, 0, 5 /* length */,\n REQUEST.INIT,\n 0, 0, 0, 3 /* version */\n]);\nconst SERVER_VERSION_BUFFER = Buffer.from([\n 0, 0, 0, 5 /* length */,\n RESPONSE.VERSION,\n 0, 0, 0, 3 /* version */\n]);\n\nconst RE_OPENSSH = /^SSH-2.0-(?:OpenSSH|dropbear)/;\nconst OPENSSH_MAX_PKT_LEN = 256 * 1024;\n\nconst bufferParser = makeBufferParser();\n\nconst fakeStderr = {\n readable: false,\n writable: false,\n push: (data) => {},\n once: () => {},\n on: () => {},\n emit: () => {},\n end: () => {},\n};\n\nfunction noop() {}\n\n// Emulates enough of `Channel` to be able to be used as a drop-in replacement\n// in order to process incoming data with as little overhead as possible\nclass SFTP extends EventEmitter {\n constructor(client, chanInfo, cfg) {\n super();\n\n if (typeof cfg !== 'object' || !cfg)\n cfg = {};\n\n const remoteIdentRaw = client._protocol._remoteIdentRaw;\n\n this.server = !!cfg.server;\n this._debug = (typeof cfg.debug === 'function' ? cfg.debug : undefined);\n this._isOpenSSH = (remoteIdentRaw && RE_OPENSSH.test(remoteIdentRaw));\n\n this._version = -1;\n this._extensions = {};\n this._biOpt = cfg.biOpt;\n this._pktLenBytes = 0;\n this._pktLen = 0;\n this._pktPos = 0;\n this._pktType = 0;\n this._pktData = undefined;\n this._writeReqid = -1;\n this._requests = {};\n this._maxInPktLen = OPENSSH_MAX_PKT_LEN;\n this._maxOutPktLen = 34000;\n this._maxReadLen =\n (this._isOpenSSH ? OPENSSH_MAX_PKT_LEN : 34000) - PKT_RW_OVERHEAD;\n this._maxWriteLen =\n (this._isOpenSSH ? OPENSSH_MAX_PKT_LEN : 34000) - PKT_RW_OVERHEAD;\n\n this.maxOpenHandles = undefined;\n\n // Channel compatibility\n this._client = client;\n this._protocol = client._protocol;\n this._callbacks = [];\n this._hasX11 = false;\n this._exit = {\n code: undefined,\n signal: undefined,\n dump: undefined,\n desc: undefined,\n };\n this._waitWindow = false; // SSH-level backpressure\n this._chunkcb = undefined;\n this._buffer = [];\n this.type = chanInfo.type;\n this.subtype = undefined;\n this.incoming = chanInfo.incoming;\n this.outgoing = chanInfo.outgoing;\n this.stderr = fakeStderr;\n this.readable = true;\n }\n\n // This handles incoming data to parse\n push(data) {\n if (data === null) {\n cleanupRequests(this);\n if (!this.readable)\n return;\n // No more incoming data from the remote side\n this.readable = false;\n this.emit('end');\n return;\n }\n /*\n uint32 length\n byte type\n byte[length - 1] data payload\n */\n let p = 0;\n\n while (p < data.length) {\n if (this._pktLenBytes < 4) {\n let nb = Math.min(4 - this._pktLenBytes, data.length - p);\n this._pktLenBytes += nb;\n\n while (nb--)\n this._pktLen = (this._pktLen << 8) + data[p++];\n\n if (this._pktLenBytes < 4)\n return;\n if (this._pktLen === 0)\n return doFatalSFTPError(this, 'Invalid packet length');\n if (this._pktLen > this._maxInPktLen) {\n const max = this._maxInPktLen;\n return doFatalSFTPError(\n this,\n `Packet length ${this._pktLen} exceeds max length of ${max}`\n );\n }\n if (p >= data.length)\n return;\n }\n if (this._pktPos < this._pktLen) {\n const nb = Math.min(this._pktLen - this._pktPos, data.length - p);\n if (p !== 0 || nb !== data.length) {\n if (nb === this._pktLen) {\n this._pkt = new FastBuffer(data.buffer, data.byteOffset + p, nb);\n } else {\n if (!this._pkt)\n this._pkt = Buffer.allocUnsafe(this._pktLen);\n this._pkt.set(\n new Uint8Array(data.buffer, data.byteOffset + p, nb),\n this._pktPos\n );\n }\n } else if (nb === this._pktLen) {\n this._pkt = data;\n } else {\n if (!this._pkt)\n this._pkt = Buffer.allocUnsafe(this._pktLen);\n this._pkt.set(data, this._pktPos);\n }\n p += nb;\n this._pktPos += nb;\n if (this._pktPos < this._pktLen)\n return;\n }\n\n const type = this._pkt[0];\n const payload = this._pkt;\n\n // Prepare for next packet\n this._pktLen = 0;\n this._pktLenBytes = 0;\n this._pkt = undefined;\n this._pktPos = 0;\n\n const handler = (this.server\n ? SERVER_HANDLERS[type]\n : CLIENT_HANDLERS[type]);\n if (!handler)\n return doFatalSFTPError(this, `Unknown packet type ${type}`);\n\n if (this._version === -1) {\n if (this.server) {\n if (type !== REQUEST.INIT)\n return doFatalSFTPError(this, `Expected INIT packet, got ${type}`);\n } else if (type !== RESPONSE.VERSION) {\n return doFatalSFTPError(this, `Expected VERSION packet, got ${type}`);\n }\n }\n\n if (handler(this, payload) === false)\n return;\n }\n }\n\n end() {\n this.destroy();\n }\n destroy() {\n if (this.outgoing.state === 'open' || this.outgoing.state === 'eof') {\n this.outgoing.state = 'closing';\n this._protocol.channelClose(this.outgoing.id);\n }\n }\n _init() {\n this._init = noop;\n if (!this.server)\n sendOrBuffer(this, CLIENT_VERSION_BUFFER);\n }\n\n // ===========================================================================\n // Client-specific ===========================================================\n // ===========================================================================\n createReadStream(path, options) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n return new ReadStream(this, path, options);\n }\n createWriteStream(path, options) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n return new WriteStream(this, path, options);\n }\n open(path, flags_, attrs, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n if (typeof attrs === 'function') {\n cb = attrs;\n attrs = undefined;\n }\n\n const flags = (typeof flags_ === 'number' ? flags_ : stringToFlags(flags_));\n if (flags === null)\n throw new Error(`Unknown flags string: ${flags_}`);\n\n let attrsFlags = 0;\n let attrsLen = 0;\n if (typeof attrs === 'string' || typeof attrs === 'number')\n attrs = { mode: attrs };\n if (typeof attrs === 'object' && attrs !== null) {\n attrs = attrsToBytes(attrs);\n attrsFlags = attrs.flags;\n attrsLen = attrs.nb;\n }\n\n /*\n uint32 id\n string filename\n uint32 pflags\n ATTRS attrs\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + pathLen + 4 + 4 + attrsLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.OPEN;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, pathLen, p);\n buf.utf8Write(path, p += 4, pathLen);\n writeUInt32BE(buf, flags, p += pathLen);\n writeUInt32BE(buf, attrsFlags, p += 4);\n if (attrsLen) {\n p += 4;\n\n if (attrsLen === ATTRS_BUF.length)\n buf.set(ATTRS_BUF, p);\n else\n bufferCopy(ATTRS_BUF, buf, 0, attrsLen, p);\n\n p += attrsLen;\n }\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} OPEN`\n );\n }\n close(handle, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n if (!Buffer.isBuffer(handle))\n throw new Error('handle is not a Buffer');\n\n /*\n uint32 id\n string handle\n */\n const handleLen = handle.length;\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + handleLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.CLOSE;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, handleLen, p);\n buf.set(handle, p += 4);\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} CLOSE`\n );\n }\n read(handle, buf, off, len, position, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n if (!Buffer.isBuffer(handle))\n throw new Error('handle is not a Buffer');\n if (!Buffer.isBuffer(buf))\n throw new Error('buffer is not a Buffer');\n if (off >= buf.length)\n throw new Error('offset is out of bounds');\n if (off + len > buf.length)\n throw new Error('length extends beyond buffer');\n if (position === null)\n throw new Error('null position currently unsupported');\n\n read_(this, handle, buf, off, len, position, cb);\n }\n readData(handle, buf, off, len, position, cb) {\n // Backwards compatibility\n this.read(handle, buf, off, len, position, cb);\n }\n write(handle, buf, off, len, position, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n if (!Buffer.isBuffer(handle))\n throw new Error('handle is not a Buffer');\n if (!Buffer.isBuffer(buf))\n throw new Error('buffer is not a Buffer');\n if (off > buf.length)\n throw new Error('offset is out of bounds');\n if (off + len > buf.length)\n throw new Error('length extends beyond buffer');\n if (position === null)\n throw new Error('null position currently unsupported');\n\n if (!len) {\n cb && process.nextTick(cb, undefined, 0);\n return;\n }\n\n const maxDataLen = this._maxWriteLen;\n const overflow = Math.max(len - maxDataLen, 0);\n const origPosition = position;\n\n if (overflow)\n len = maxDataLen;\n\n /*\n uint32 id\n string handle\n uint64 offset\n string data\n */\n const handleLen = handle.length;\n let p = 9;\n const out = Buffer.allocUnsafe(4 + 1 + 4 + 4 + handleLen + 8 + 4 + len);\n\n writeUInt32BE(out, out.length - 4, 0);\n out[4] = REQUEST.WRITE;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(out, reqid, 5);\n\n writeUInt32BE(out, handleLen, p);\n out.set(handle, p += 4);\n p += handleLen;\n for (let i = 7; i >= 0; --i) {\n out[p + i] = position & 0xFF;\n position /= 256;\n }\n writeUInt32BE(out, len, p += 8);\n bufferCopy(buf, out, off, off + len, p += 4);\n\n this._requests[reqid] = {\n cb: (err) => {\n if (err) {\n if (typeof cb === 'function')\n cb(err);\n } else if (overflow) {\n this.write(handle,\n buf,\n off + len,\n overflow,\n origPosition + len,\n cb);\n } else if (typeof cb === 'function') {\n cb(undefined, off + len);\n }\n }\n };\n\n const isSent = sendOrBuffer(this, out);\n if (this._debug) {\n const how = (isSent ? 'Sent' : 'Buffered');\n this._debug(`SFTP: Outbound: ${how} WRITE (id:${reqid})`);\n }\n }\n writeData(handle, buf, off, len, position, cb) {\n // Backwards compatibility\n this.write(handle, buf, off, len, position, cb);\n }\n fastGet(remotePath, localPath, opts, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n fastXfer(this, fs, remotePath, localPath, opts, cb);\n }\n fastPut(localPath, remotePath, opts, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n fastXfer(fs, this, localPath, remotePath, opts, cb);\n }\n readFile(path, options, callback_) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n let callback;\n if (typeof callback_ === 'function') {\n callback = callback_;\n } else if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n\n if (typeof options === 'string')\n options = { encoding: options, flag: 'r' };\n else if (!options)\n options = { encoding: null, flag: 'r' };\n else if (typeof options !== 'object')\n throw new TypeError('Bad arguments');\n\n const encoding = options.encoding;\n if (encoding && !Buffer.isEncoding(encoding))\n throw new Error(`Unknown encoding: ${encoding}`);\n\n // First stat the file, so we know the size.\n let size;\n let buffer; // Single buffer with file data\n let buffers; // List for when size is unknown\n let pos = 0;\n let handle;\n\n // SFTPv3 does not support using -1 for read position, so we have to track\n // read position manually\n let bytesRead = 0;\n\n const flag = options.flag || 'r';\n\n const read = () => {\n if (size === 0) {\n buffer = Buffer.allocUnsafe(8192);\n this.read(handle, buffer, 0, 8192, bytesRead, afterRead);\n } else {\n this.read(handle, buffer, pos, size - pos, bytesRead, afterRead);\n }\n };\n\n const afterRead = (er, nbytes) => {\n let eof;\n if (er) {\n eof = (er.code === STATUS_CODE.EOF);\n if (!eof) {\n return this.close(handle, () => {\n return callback && callback(er);\n });\n }\n } else {\n eof = false;\n }\n\n if (eof || (size === 0 && nbytes === 0))\n return close();\n\n bytesRead += nbytes;\n pos += nbytes;\n if (size !== 0) {\n if (pos === size)\n close();\n else\n read();\n } else {\n // Unknown size, just read until we don't get bytes.\n buffers.push(bufferSlice(buffer, 0, nbytes));\n read();\n }\n };\n afterRead._wantEOFError = true;\n\n const close = () => {\n this.close(handle, (er) => {\n if (size === 0) {\n // Collect the data into the buffers list.\n buffer = Buffer.concat(buffers, pos);\n } else if (pos < size) {\n buffer = bufferSlice(buffer, 0, pos);\n }\n\n if (encoding)\n buffer = buffer.toString(encoding);\n return callback && callback(er, buffer);\n });\n };\n\n this.open(path, flag, 0o666, (er, handle_) => {\n if (er)\n return callback && callback(er);\n handle = handle_;\n\n const tryStat = (er, st) => {\n if (er) {\n // Try stat() for sftp servers that may not support fstat() for\n // whatever reason\n this.stat(path, (er_, st_) => {\n if (er_) {\n return this.close(handle, () => {\n callback && callback(er);\n });\n }\n tryStat(null, st_);\n });\n return;\n }\n\n size = st.size || 0;\n if (size === 0) {\n // The kernel lies about many files.\n // Go ahead and try to read some bytes.\n buffers = [];\n return read();\n }\n\n buffer = Buffer.allocUnsafe(size);\n read();\n };\n this.fstat(handle, tryStat);\n });\n }\n writeFile(path, data, options, callback_) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n let callback;\n if (typeof callback_ === 'function') {\n callback = callback_;\n } else if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n\n if (typeof options === 'string')\n options = { encoding: options, mode: 0o666, flag: 'w' };\n else if (!options)\n options = { encoding: 'utf8', mode: 0o666, flag: 'w' };\n else if (typeof options !== 'object')\n throw new TypeError('Bad arguments');\n\n if (options.encoding && !Buffer.isEncoding(options.encoding))\n throw new Error(`Unknown encoding: ${options.encoding}`);\n\n const flag = options.flag || 'w';\n this.open(path, flag, options.mode, (openErr, handle) => {\n if (openErr) {\n callback && callback(openErr);\n } else {\n const buffer = (Buffer.isBuffer(data)\n ? data\n : Buffer.from('' + data, options.encoding || 'utf8'));\n const position = (/a/.test(flag) ? null : 0);\n\n // SFTPv3 does not support the notion of 'current position'\n // (null position), so we just attempt to append to the end of the file\n // instead\n if (position === null) {\n const tryStat = (er, st) => {\n if (er) {\n // Try stat() for sftp servers that may not support fstat() for\n // whatever reason\n this.stat(path, (er_, st_) => {\n if (er_) {\n return this.close(handle, () => {\n callback && callback(er);\n });\n }\n tryStat(null, st_);\n });\n return;\n }\n writeAll(this, handle, buffer, 0, buffer.length, st.size, callback);\n };\n this.fstat(handle, tryStat);\n return;\n }\n writeAll(this, handle, buffer, 0, buffer.length, position, callback);\n }\n });\n }\n appendFile(path, data, options, callback_) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n let callback;\n if (typeof callback_ === 'function') {\n callback = callback_;\n } else if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n\n if (typeof options === 'string')\n options = { encoding: options, mode: 0o666, flag: 'a' };\n else if (!options)\n options = { encoding: 'utf8', mode: 0o666, flag: 'a' };\n else if (typeof options !== 'object')\n throw new TypeError('Bad arguments');\n\n if (!options.flag)\n options = Object.assign({ flag: 'a' }, options);\n this.writeFile(path, data, options, callback);\n }\n exists(path, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n this.stat(path, (err) => {\n cb && cb(err ? false : true);\n });\n }\n unlink(filename, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n /*\n uint32 id\n string filename\n */\n const fnameLen = Buffer.byteLength(filename);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + fnameLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.REMOVE;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, fnameLen, p);\n buf.utf8Write(filename, p += 4, fnameLen);\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} REMOVE`\n );\n }\n rename(oldPath, newPath, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n /*\n uint32 id\n string oldpath\n string newpath\n */\n const oldLen = Buffer.byteLength(oldPath);\n const newLen = Buffer.byteLength(newPath);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + oldLen + 4 + newLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.RENAME;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, oldLen, p);\n buf.utf8Write(oldPath, p += 4, oldLen);\n writeUInt32BE(buf, newLen, p += oldLen);\n buf.utf8Write(newPath, p += 4, newLen);\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} RENAME`\n );\n }\n mkdir(path, attrs, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n let flags = 0;\n let attrsLen = 0;\n\n if (typeof attrs === 'function') {\n cb = attrs;\n attrs = undefined;\n }\n if (typeof attrs === 'object' && attrs !== null) {\n attrs = attrsToBytes(attrs);\n flags = attrs.flags;\n attrsLen = attrs.nb;\n }\n\n /*\n uint32 id\n string path\n ATTRS attrs\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + pathLen + 4 + attrsLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.MKDIR;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, pathLen, p);\n buf.utf8Write(path, p += 4, pathLen);\n writeUInt32BE(buf, flags, p += pathLen);\n if (attrsLen) {\n p += 4;\n\n if (attrsLen === ATTRS_BUF.length)\n buf.set(ATTRS_BUF, p);\n else\n bufferCopy(ATTRS_BUF, buf, 0, attrsLen, p);\n\n p += attrsLen;\n }\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} MKDIR`\n );\n }\n rmdir(path, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n /*\n uint32 id\n string path\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + pathLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.RMDIR;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, pathLen, p);\n buf.utf8Write(path, p += 4, pathLen);\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} RMDIR`\n );\n }\n readdir(where, opts, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n if (typeof opts !== 'object' || opts === null)\n opts = {};\n\n const doFilter = (opts && opts.full ? false : true);\n\n if (!Buffer.isBuffer(where) && typeof where !== 'string')\n throw new Error('missing directory handle or path');\n\n if (typeof where === 'string') {\n const entries = [];\n let e = 0;\n\n const reread = (err, handle) => {\n if (err)\n return cb(err);\n\n this.readdir(handle, opts, (err, list) => {\n const eof = (err && err.code === STATUS_CODE.EOF);\n\n if (err && !eof)\n return this.close(handle, () => cb(err));\n\n if (eof) {\n return this.close(handle, (err) => {\n if (err)\n return cb(err);\n cb(undefined, entries);\n });\n }\n\n for (let i = 0; i < list.length; ++i, ++e)\n entries[e] = list[i];\n\n reread(undefined, handle);\n });\n };\n return this.opendir(where, reread);\n }\n\n /*\n uint32 id\n string handle\n */\n const handleLen = where.length;\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + handleLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.READDIR;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, handleLen, p);\n buf.set(where, p += 4);\n\n this._requests[reqid] = {\n cb: (doFilter\n ? (err, list) => {\n if (typeof cb !== 'function')\n return;\n if (err)\n return cb(err);\n\n for (let i = list.length - 1; i >= 0; --i) {\n if (list[i].filename === '.' || list[i].filename === '..')\n list.splice(i, 1);\n }\n\n cb(undefined, list);\n }\n : cb)\n };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} READDIR`\n );\n }\n fstat(handle, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n if (!Buffer.isBuffer(handle))\n throw new Error('handle is not a Buffer');\n\n /*\n uint32 id\n string handle\n */\n const handleLen = handle.length;\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + handleLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.FSTAT;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, handleLen, p);\n buf.set(handle, p += 4);\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} FSTAT`\n );\n }\n stat(path, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n /*\n uint32 id\n string path\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + pathLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.STAT;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, pathLen, p);\n buf.utf8Write(path, p += 4, pathLen);\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} STAT`\n );\n }\n lstat(path, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n /*\n uint32 id\n string path\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + pathLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.LSTAT;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, pathLen, p);\n buf.utf8Write(path, p += 4, pathLen);\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} LSTAT`\n );\n }\n opendir(path, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n /*\n uint32 id\n string path\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + pathLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.OPENDIR;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, pathLen, p);\n buf.utf8Write(path, p += 4, pathLen);\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} OPENDIR`\n );\n }\n setstat(path, attrs, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n let flags = 0;\n let attrsLen = 0;\n\n if (typeof attrs === 'object' && attrs !== null) {\n attrs = attrsToBytes(attrs);\n flags = attrs.flags;\n attrsLen = attrs.nb;\n } else if (typeof attrs === 'function') {\n cb = attrs;\n }\n\n /*\n uint32 id\n string path\n ATTRS attrs\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + pathLen + 4 + attrsLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.SETSTAT;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, pathLen, p);\n buf.utf8Write(path, p += 4, pathLen);\n writeUInt32BE(buf, flags, p += pathLen);\n if (attrsLen) {\n p += 4;\n\n if (attrsLen === ATTRS_BUF.length)\n buf.set(ATTRS_BUF, p);\n else\n bufferCopy(ATTRS_BUF, buf, 0, attrsLen, p);\n\n p += attrsLen;\n }\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} SETSTAT`\n );\n }\n fsetstat(handle, attrs, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n if (!Buffer.isBuffer(handle))\n throw new Error('handle is not a Buffer');\n\n let flags = 0;\n let attrsLen = 0;\n\n if (typeof attrs === 'object' && attrs !== null) {\n attrs = attrsToBytes(attrs);\n flags = attrs.flags;\n attrsLen = attrs.nb;\n } else if (typeof attrs === 'function') {\n cb = attrs;\n }\n\n /*\n uint32 id\n string handle\n ATTRS attrs\n */\n const handleLen = handle.length;\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + handleLen + 4 + attrsLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.FSETSTAT;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, handleLen, p);\n buf.set(handle, p += 4);\n writeUInt32BE(buf, flags, p += handleLen);\n if (attrsLen) {\n p += 4;\n\n if (attrsLen === ATTRS_BUF.length)\n buf.set(ATTRS_BUF, p);\n else\n bufferCopy(ATTRS_BUF, buf, 0, attrsLen, p);\n\n p += attrsLen;\n }\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} FSETSTAT`\n );\n }\n futimes(handle, atime, mtime, cb) {\n return this.fsetstat(handle, {\n atime: toUnixTimestamp(atime),\n mtime: toUnixTimestamp(mtime)\n }, cb);\n }\n utimes(path, atime, mtime, cb) {\n return this.setstat(path, {\n atime: toUnixTimestamp(atime),\n mtime: toUnixTimestamp(mtime)\n }, cb);\n }\n fchown(handle, uid, gid, cb) {\n return this.fsetstat(handle, {\n uid: uid,\n gid: gid\n }, cb);\n }\n chown(path, uid, gid, cb) {\n return this.setstat(path, {\n uid: uid,\n gid: gid\n }, cb);\n }\n fchmod(handle, mode, cb) {\n return this.fsetstat(handle, {\n mode: mode\n }, cb);\n }\n chmod(path, mode, cb) {\n return this.setstat(path, {\n mode: mode\n }, cb);\n }\n readlink(path, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n /*\n uint32 id\n string path\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + pathLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.READLINK;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, pathLen, p);\n buf.utf8Write(path, p += 4, pathLen);\n\n this._requests[reqid] = {\n cb: (err, names) => {\n if (typeof cb !== 'function')\n return;\n if (err)\n return cb(err);\n if (!names || !names.length)\n return cb(new Error('Response missing link info'));\n cb(undefined, names[0].filename);\n }\n };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} READLINK`\n );\n }\n symlink(targetPath, linkPath, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n /*\n uint32 id\n string linkpath\n string targetpath\n */\n const linkLen = Buffer.byteLength(linkPath);\n const targetLen = Buffer.byteLength(targetPath);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + linkLen + 4 + targetLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.SYMLINK;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n if (this._isOpenSSH) {\n // OpenSSH has linkpath and targetpath positions switched\n writeUInt32BE(buf, targetLen, p);\n buf.utf8Write(targetPath, p += 4, targetLen);\n writeUInt32BE(buf, linkLen, p += targetLen);\n buf.utf8Write(linkPath, p += 4, linkLen);\n } else {\n writeUInt32BE(buf, linkLen, p);\n buf.utf8Write(linkPath, p += 4, linkLen);\n writeUInt32BE(buf, targetLen, p += linkLen);\n buf.utf8Write(targetPath, p += 4, targetLen);\n }\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} SYMLINK`\n );\n }\n realpath(path, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n /*\n uint32 id\n string path\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + pathLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.REALPATH;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, pathLen, p);\n buf.utf8Write(path, p += 4, pathLen);\n\n this._requests[reqid] = {\n cb: (err, names) => {\n if (typeof cb !== 'function')\n return;\n if (err)\n return cb(err);\n if (!names || !names.length)\n return cb(new Error('Response missing path info'));\n cb(undefined, names[0].filename);\n }\n };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} REALPATH`\n );\n }\n // extended requests\n ext_openssh_rename(oldPath, newPath, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n const ext = this._extensions['posix-rename@openssh.com'];\n if (!ext || ext !== '1')\n throw new Error('Server does not support this extended request');\n\n /*\n uint32 id\n string \"posix-rename@openssh.com\"\n string oldpath\n string newpath\n */\n const oldLen = Buffer.byteLength(oldPath);\n const newLen = Buffer.byteLength(newPath);\n let p = 9;\n const buf =\n Buffer.allocUnsafe(4 + 1 + 4 + 4 + 24 + 4 + oldLen + 4 + newLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.EXTENDED;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, 24, p);\n buf.utf8Write('posix-rename@openssh.com', p += 4, 24);\n writeUInt32BE(buf, oldLen, p += 24);\n buf.utf8Write(oldPath, p += 4, oldLen);\n writeUInt32BE(buf, newLen, p += oldLen);\n buf.utf8Write(newPath, p += 4, newLen);\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n if (this._debug) {\n const which = (isBuffered ? 'Buffered' : 'Sending');\n this._debug(`SFTP: Outbound: ${which} posix-rename@openssh.com`);\n }\n }\n ext_openssh_statvfs(path, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n const ext = this._extensions['statvfs@openssh.com'];\n if (!ext || ext !== '2')\n throw new Error('Server does not support this extended request');\n\n /*\n uint32 id\n string \"statvfs@openssh.com\"\n string path\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + 19 + 4 + pathLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.EXTENDED;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, 19, p);\n buf.utf8Write('statvfs@openssh.com', p += 4, 19);\n writeUInt32BE(buf, pathLen, p += 19);\n buf.utf8Write(path, p += 4, pathLen);\n\n this._requests[reqid] = { extended: 'statvfs@openssh.com', cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n if (this._debug) {\n const which = (isBuffered ? 'Buffered' : 'Sending');\n this._debug(`SFTP: Outbound: ${which} statvfs@openssh.com`);\n }\n }\n ext_openssh_fstatvfs(handle, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n const ext = this._extensions['fstatvfs@openssh.com'];\n if (!ext || ext !== '2')\n throw new Error('Server does not support this extended request');\n if (!Buffer.isBuffer(handle))\n throw new Error('handle is not a Buffer');\n\n /*\n uint32 id\n string \"fstatvfs@openssh.com\"\n string handle\n */\n const handleLen = handle.length;\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + 20 + 4 + handleLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.EXTENDED;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, 20, p);\n buf.utf8Write('fstatvfs@openssh.com', p += 4, 20);\n writeUInt32BE(buf, handleLen, p += 20);\n buf.set(handle, p += 4);\n\n this._requests[reqid] = { extended: 'fstatvfs@openssh.com', cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n if (this._debug) {\n const which = (isBuffered ? 'Buffered' : 'Sending');\n this._debug(`SFTP: Outbound: ${which} fstatvfs@openssh.com`);\n }\n }\n ext_openssh_hardlink(oldPath, newPath, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n const ext = this._extensions['hardlink@openssh.com'];\n if (ext !== '1')\n throw new Error('Server does not support this extended request');\n\n /*\n uint32 id\n string \"hardlink@openssh.com\"\n string oldpath\n string newpath\n */\n const oldLen = Buffer.byteLength(oldPath);\n const newLen = Buffer.byteLength(newPath);\n let p = 9;\n const buf =\n Buffer.allocUnsafe(4 + 1 + 4 + 4 + 20 + 4 + oldLen + 4 + newLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.EXTENDED;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, 20, p);\n buf.utf8Write('hardlink@openssh.com', p += 4, 20);\n writeUInt32BE(buf, oldLen, p += 20);\n buf.utf8Write(oldPath, p += 4, oldLen);\n writeUInt32BE(buf, newLen, p += oldLen);\n buf.utf8Write(newPath, p += 4, newLen);\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n if (this._debug) {\n const which = (isBuffered ? 'Buffered' : 'Sending');\n this._debug(`SFTP: Outbound: ${which} hardlink@openssh.com`);\n }\n }\n ext_openssh_fsync(handle, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n const ext = this._extensions['fsync@openssh.com'];\n if (ext !== '1')\n throw new Error('Server does not support this extended request');\n if (!Buffer.isBuffer(handle))\n throw new Error('handle is not a Buffer');\n\n /*\n uint32 id\n string \"fsync@openssh.com\"\n string handle\n */\n const handleLen = handle.length;\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + 17 + 4 + handleLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.EXTENDED;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, 17, p);\n buf.utf8Write('fsync@openssh.com', p += 4, 17);\n writeUInt32BE(buf, handleLen, p += 17);\n buf.set(handle, p += 4);\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} fsync@openssh.com`\n );\n }\n ext_openssh_lsetstat(path, attrs, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n const ext = this._extensions['lsetstat@openssh.com'];\n if (ext !== '1')\n throw new Error('Server does not support this extended request');\n\n let flags = 0;\n let attrsLen = 0;\n\n if (typeof attrs === 'object' && attrs !== null) {\n attrs = attrsToBytes(attrs);\n flags = attrs.flags;\n attrsLen = attrs.nb;\n } else if (typeof attrs === 'function') {\n cb = attrs;\n }\n\n /*\n uint32 id\n string \"lsetstat@openssh.com\"\n string path\n ATTRS attrs\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf =\n Buffer.allocUnsafe(4 + 1 + 4 + 4 + 20 + 4 + pathLen + 4 + attrsLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.EXTENDED;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, 20, p);\n buf.utf8Write('lsetstat@openssh.com', p += 4, 20);\n\n writeUInt32BE(buf, pathLen, p += 20);\n buf.utf8Write(path, p += 4, pathLen);\n\n writeUInt32BE(buf, flags, p += pathLen);\n if (attrsLen) {\n p += 4;\n\n if (attrsLen === ATTRS_BUF.length)\n buf.set(ATTRS_BUF, p);\n else\n bufferCopy(ATTRS_BUF, buf, 0, attrsLen, p);\n\n p += attrsLen;\n }\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n if (this._debug) {\n const status = (isBuffered ? 'Buffered' : 'Sending');\n this._debug(`SFTP: Outbound: ${status} lsetstat@openssh.com`);\n }\n }\n ext_openssh_expandPath(path, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n const ext = this._extensions['expand-path@openssh.com'];\n if (ext !== '1')\n throw new Error('Server does not support this extended request');\n\n /*\n uint32 id\n string \"expand-path@openssh.com\"\n string path\n */\n const pathLen = Buffer.byteLength(path);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + 23 + 4 + pathLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.EXTENDED;\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, 23, p);\n buf.utf8Write('expand-path@openssh.com', p += 4, 23);\n\n writeUInt32BE(buf, pathLen, p += 20);\n buf.utf8Write(path, p += 4, pathLen);\n\n this._requests[reqid] = {\n cb: (err, names) => {\n if (typeof cb !== 'function')\n return;\n if (err)\n return cb(err);\n if (!names || !names.length)\n return cb(new Error('Response missing expanded path'));\n cb(undefined, names[0].filename);\n }\n };\n\n const isBuffered = sendOrBuffer(this, buf);\n if (this._debug) {\n const status = (isBuffered ? 'Buffered' : 'Sending');\n this._debug(`SFTP: Outbound: ${status} expand-path@openssh.com`);\n }\n }\n ext_copy_data(srcHandle, srcOffset, len, dstHandle, dstOffset, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n const ext = this._extensions['copy-data'];\n if (ext !== '1')\n throw new Error('Server does not support this extended request');\n\n if (!Buffer.isBuffer(srcHandle))\n throw new Error('Source handle is not a Buffer');\n\n if (!Buffer.isBuffer(dstHandle))\n throw new Error('Destination handle is not a Buffer');\n\n /*\n uint32 id\n string \"copy-data\"\n string read-from-handle\n uint64 read-from-offset\n uint64 read-data-length\n string write-to-handle\n uint64 write-to-offset\n */\n let p = 0;\n const buf = Buffer.allocUnsafe(\n 4 + 1\n + 4\n + 4 + 9\n + 4 + srcHandle.length\n + 8\n + 8\n + 4 + dstHandle.length\n + 8\n );\n\n writeUInt32BE(buf, buf.length - 4, p);\n p += 4;\n\n buf[p] = REQUEST.EXTENDED;\n ++p;\n\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, p);\n p += 4;\n\n writeUInt32BE(buf, 9, p);\n p += 4;\n buf.utf8Write('copy-data', p, 9);\n p += 9;\n\n writeUInt32BE(buf, srcHandle.length, p);\n p += 4;\n buf.set(srcHandle, p);\n p += srcHandle.length;\n\n for (let i = 7; i >= 0; --i) {\n buf[p + i] = srcOffset & 0xFF;\n srcOffset /= 256;\n }\n p += 8;\n\n for (let i = 7; i >= 0; --i) {\n buf[p + i] = len & 0xFF;\n len /= 256;\n }\n p += 8;\n\n writeUInt32BE(buf, dstHandle.length, p);\n p += 4;\n buf.set(dstHandle, p);\n p += dstHandle.length;\n\n for (let i = 7; i >= 0; --i) {\n buf[p + i] = dstOffset & 0xFF;\n dstOffset /= 256;\n }\n\n this._requests[reqid] = { cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n if (this._debug) {\n const status = (isBuffered ? 'Buffered' : 'Sending');\n this._debug(`SFTP: Outbound: ${status} copy-data`);\n }\n }\n ext_home_dir(username, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n const ext = this._extensions['home-directory'];\n if (ext !== '1')\n throw new Error('Server does not support this extended request');\n\n if (typeof username !== 'string')\n throw new TypeError('username is not a string');\n\n /*\n uint32 id\n string \"home-directory\"\n string username\n */\n let p = 0;\n const usernameLen = Buffer.byteLength(username);\n const buf = Buffer.allocUnsafe(\n 4 + 1\n + 4\n + 4 + 14\n + 4 + usernameLen\n );\n\n writeUInt32BE(buf, buf.length - 4, p);\n p += 4;\n\n buf[p] = REQUEST.EXTENDED;\n ++p;\n\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, p);\n p += 4;\n\n writeUInt32BE(buf, 14, p);\n p += 4;\n buf.utf8Write('home-directory', p, 14);\n p += 14;\n\n writeUInt32BE(buf, usernameLen, p);\n p += 4;\n buf.utf8Write(username, p, usernameLen);\n p += usernameLen;\n\n this._requests[reqid] = {\n cb: (err, names) => {\n if (typeof cb !== 'function')\n return;\n if (err)\n return cb(err);\n if (!names || !names.length)\n return cb(new Error('Response missing home directory'));\n cb(undefined, names[0].filename);\n }\n };\n\n const isBuffered = sendOrBuffer(this, buf);\n if (this._debug) {\n const status = (isBuffered ? 'Buffered' : 'Sending');\n this._debug(`SFTP: Outbound: ${status} home-directory`);\n }\n }\n ext_users_groups(uids, gids, cb) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n const ext = this._extensions['users-groups-by-id@openssh.com'];\n if (ext !== '1')\n throw new Error('Server does not support this extended request');\n\n if (!Array.isArray(uids))\n throw new TypeError('uids is not an array');\n for (const val of uids) {\n if (!Number.isInteger(val) || val < 0 || val > (2 ** 32 - 1))\n throw new Error('uid values must all be 32-bit unsigned integers');\n }\n if (!Array.isArray(gids))\n throw new TypeError('gids is not an array');\n for (const val of gids) {\n if (!Number.isInteger(val) || val < 0 || val > (2 ** 32 - 1))\n throw new Error('gid values must all be 32-bit unsigned integers');\n }\n\n /*\n uint32 id\n string \"users-groups-by-id@openssh.com\"\n string uids\n uint32 uid1\n ...\n string gids\n uint32 gid1\n ...\n */\n let p = 0;\n const buf = Buffer.allocUnsafe(\n 4 + 1\n + 4\n + 4 + 30\n + 4 + (4 * uids.length)\n + 4 + (4 * gids.length)\n );\n\n writeUInt32BE(buf, buf.length - 4, p);\n p += 4;\n\n buf[p] = REQUEST.EXTENDED;\n ++p;\n\n const reqid = this._writeReqid = (this._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, p);\n p += 4;\n\n writeUInt32BE(buf, 30, p);\n p += 4;\n buf.utf8Write('users-groups-by-id@openssh.com', p, 30);\n p += 30;\n\n writeUInt32BE(buf, 4 * uids.length, p);\n p += 4;\n for (const val of uids) {\n writeUInt32BE(buf, val, p);\n p += 4;\n }\n\n writeUInt32BE(buf, 4 * gids.length, p);\n p += 4;\n for (const val of gids) {\n writeUInt32BE(buf, val, p);\n p += 4;\n }\n\n this._requests[reqid] = { extended: 'users-groups-by-id@openssh.com', cb };\n\n const isBuffered = sendOrBuffer(this, buf);\n if (this._debug) {\n const status = (isBuffered ? 'Buffered' : 'Sending');\n this._debug(`SFTP: Outbound: ${status} users-groups-by-id@openssh.com`);\n }\n }\n // ===========================================================================\n // Server-specific ===========================================================\n // ===========================================================================\n handle(reqid, handle) {\n if (!this.server)\n throw new Error('Server-only method called in client mode');\n\n if (!Buffer.isBuffer(handle))\n throw new Error('handle is not a Buffer');\n\n const handleLen = handle.length;\n\n if (handleLen > 256)\n throw new Error('handle too large (> 256 bytes)');\n\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + handleLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = RESPONSE.HANDLE;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, handleLen, p);\n if (handleLen)\n buf.set(handle, p += 4);\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} HANDLE`\n );\n }\n status(reqid, code, message) {\n if (!this.server)\n throw new Error('Server-only method called in client mode');\n\n if (!VALID_STATUS_CODES.has(code))\n throw new Error(`Bad status code: ${code}`);\n\n message || (message = '');\n\n const msgLen = Buffer.byteLength(message);\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + 4 + msgLen + 4);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = RESPONSE.STATUS;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, code, p);\n\n writeUInt32BE(buf, msgLen, p += 4);\n p += 4;\n if (msgLen) {\n buf.utf8Write(message, p, msgLen);\n p += msgLen;\n }\n\n writeUInt32BE(buf, 0, p); // Empty language tag\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} STATUS`\n );\n }\n data(reqid, data, encoding) {\n if (!this.server)\n throw new Error('Server-only method called in client mode');\n\n const isBuffer = Buffer.isBuffer(data);\n\n if (!isBuffer && typeof data !== 'string')\n throw new Error('data is not a Buffer or string');\n\n let isUTF8;\n if (!isBuffer && !encoding) {\n encoding = undefined;\n isUTF8 = true;\n }\n\n const dataLen = (\n isBuffer\n ? data.length\n : Buffer.byteLength(data, encoding)\n );\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + dataLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = RESPONSE.DATA;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, dataLen, p);\n if (dataLen) {\n if (isBuffer)\n buf.set(data, p += 4);\n else if (isUTF8)\n buf.utf8Write(data, p += 4, dataLen);\n else\n buf.write(data, p += 4, dataLen, encoding);\n }\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} DATA`\n );\n }\n name(reqid, names) {\n if (!this.server)\n throw new Error('Server-only method called in client mode');\n\n if (!Array.isArray(names)) {\n if (typeof names !== 'object' || names === null)\n throw new Error('names is not an object or array');\n names = [ names ];\n }\n\n const count = names.length;\n let namesLen = 0;\n let nameAttrs;\n const attrs = [];\n\n for (let i = 0; i < count; ++i) {\n const name = names[i];\n const filename = (\n !name || !name.filename || typeof name.filename !== 'string'\n ? ''\n : name.filename\n );\n namesLen += 4 + Buffer.byteLength(filename);\n const longname = (\n !name || !name.longname || typeof name.longname !== 'string'\n ? ''\n : name.longname\n );\n namesLen += 4 + Buffer.byteLength(longname);\n\n if (typeof name.attrs === 'object' && name.attrs !== null) {\n nameAttrs = attrsToBytes(name.attrs);\n namesLen += 4 + nameAttrs.nb;\n\n if (nameAttrs.nb) {\n let bytes;\n\n if (nameAttrs.nb === ATTRS_BUF.length) {\n bytes = new Uint8Array(ATTRS_BUF);\n } else {\n bytes = new Uint8Array(nameAttrs.nb);\n bufferCopy(ATTRS_BUF, bytes, 0, nameAttrs.nb, 0);\n }\n\n nameAttrs.bytes = bytes;\n }\n\n attrs.push(nameAttrs);\n } else {\n namesLen += 4;\n attrs.push(null);\n }\n }\n\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + namesLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = RESPONSE.NAME;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, count, p);\n\n p += 4;\n\n for (let i = 0; i < count; ++i) {\n const name = names[i];\n\n {\n const filename = (\n !name || !name.filename || typeof name.filename !== 'string'\n ? ''\n : name.filename\n );\n const len = Buffer.byteLength(filename);\n writeUInt32BE(buf, len, p);\n p += 4;\n if (len) {\n buf.utf8Write(filename, p, len);\n p += len;\n }\n }\n\n {\n const longname = (\n !name || !name.longname || typeof name.longname !== 'string'\n ? ''\n : name.longname\n );\n const len = Buffer.byteLength(longname);\n writeUInt32BE(buf, len, p);\n p += 4;\n if (len) {\n buf.utf8Write(longname, p, len);\n p += len;\n }\n }\n\n const attr = attrs[i];\n if (attr) {\n writeUInt32BE(buf, attr.flags, p);\n p += 4;\n if (attr.flags && attr.bytes) {\n buf.set(attr.bytes, p);\n p += attr.nb;\n }\n } else {\n writeUInt32BE(buf, 0, p);\n p += 4;\n }\n }\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} NAME`\n );\n }\n attrs(reqid, attrs) {\n if (!this.server)\n throw new Error('Server-only method called in client mode');\n\n if (typeof attrs !== 'object' || attrs === null)\n throw new Error('attrs is not an object');\n\n attrs = attrsToBytes(attrs);\n const flags = attrs.flags;\n const attrsLen = attrs.nb;\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + attrsLen);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = RESPONSE.ATTRS;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, flags, p);\n if (attrsLen) {\n p += 4;\n\n if (attrsLen === ATTRS_BUF.length)\n buf.set(ATTRS_BUF, p);\n else\n bufferCopy(ATTRS_BUF, buf, 0, attrsLen, p);\n\n p += attrsLen;\n }\n\n const isBuffered = sendOrBuffer(this, buf);\n this._debug && this._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} ATTRS`\n );\n }\n}\n\nfunction tryCreateBuffer(size) {\n try {\n return Buffer.allocUnsafe(size);\n } catch (ex) {\n return ex;\n }\n}\n\nfunction read_(self, handle, buf, off, len, position, cb, req_) {\n const maxDataLen = self._maxReadLen;\n const overflow = Math.max(len - maxDataLen, 0);\n\n if (overflow)\n len = maxDataLen;\n\n /*\n uint32 id\n string handle\n uint64 offset\n uint32 len\n */\n const handleLen = handle.length;\n let p = 9;\n let pos = position;\n const out = Buffer.allocUnsafe(4 + 1 + 4 + 4 + handleLen + 8 + 4);\n\n writeUInt32BE(out, out.length - 4, 0);\n out[4] = REQUEST.READ;\n const reqid = self._writeReqid = (self._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(out, reqid, 5);\n\n writeUInt32BE(out, handleLen, p);\n out.set(handle, p += 4);\n p += handleLen;\n for (let i = 7; i >= 0; --i) {\n out[p + i] = pos & 0xFF;\n pos /= 256;\n }\n writeUInt32BE(out, len, p += 8);\n\n if (typeof cb !== 'function')\n cb = noop;\n\n const req = (req_ || {\n nb: 0,\n position,\n off,\n origOff: off,\n len: undefined,\n overflow: undefined,\n cb: (err, data, nb) => {\n const len = req.len;\n const overflow = req.overflow;\n\n if (err) {\n if (cb._wantEOFError || err.code !== STATUS_CODE.EOF)\n return cb(err);\n } else if (nb > len) {\n return cb(new Error('Received more data than requested'));\n } else if (nb === len && overflow) {\n req.nb += nb;\n req.position += nb;\n req.off += nb;\n read_(self, handle, buf, req.off, overflow, req.position, cb, req);\n return;\n }\n\n nb = (nb || 0);\n if (req.origOff === 0 && buf.length === req.nb)\n data = buf;\n else\n data = bufferSlice(buf, req.origOff, req.origOff + req.nb + nb);\n cb(undefined, req.nb + nb, data, req.position);\n },\n buffer: undefined,\n });\n\n req.len = len;\n req.overflow = overflow;\n\n // TODO: avoid creating multiple buffer slices when we need to re-call read_()\n // because of overflow\n req.buffer = bufferSlice(buf, off, off + len);\n\n self._requests[reqid] = req;\n\n const isBuffered = sendOrBuffer(self, out);\n self._debug && self._debug(\n `SFTP: Outbound: ${isBuffered ? 'Buffered' : 'Sending'} READ`\n );\n}\n\nfunction fastXfer(src, dst, srcPath, dstPath, opts, cb) {\n let concurrency = 64;\n let chunkSize = 32768;\n let onstep;\n let mode;\n let fileSize;\n\n if (typeof opts === 'function') {\n cb = opts;\n } else if (typeof opts === 'object' && opts !== null) {\n if (typeof opts.concurrency === 'number'\n && opts.concurrency > 0\n && !isNaN(opts.concurrency)) {\n concurrency = opts.concurrency;\n }\n if (typeof opts.chunkSize === 'number'\n && opts.chunkSize > 0\n && !isNaN(opts.chunkSize)) {\n chunkSize = opts.chunkSize;\n }\n if (typeof opts.fileSize === 'number'\n && opts.fileSize > 0\n && !isNaN(opts.fileSize)) {\n fileSize = opts.fileSize;\n }\n if (typeof opts.step === 'function')\n onstep = opts.step;\n\n if (typeof opts.mode === 'string' || typeof opts.mode === 'number')\n mode = modeNum(opts.mode);\n }\n\n // Internal state variables\n let fsize;\n let pdst = 0;\n let total = 0;\n let hadError = false;\n let srcHandle;\n let dstHandle;\n let readbuf;\n let bufsize = chunkSize * concurrency;\n\n function onerror(err) {\n if (hadError)\n return;\n\n hadError = true;\n\n let left = 0;\n let cbfinal;\n\n if (srcHandle || dstHandle) {\n cbfinal = () => {\n if (--left === 0)\n cb(err);\n };\n if (srcHandle && (src === fs || src.outgoing.state === 'open'))\n ++left;\n if (dstHandle && (dst === fs || dst.outgoing.state === 'open'))\n ++left;\n if (srcHandle && (src === fs || src.outgoing.state === 'open'))\n src.close(srcHandle, cbfinal);\n if (dstHandle && (dst === fs || dst.outgoing.state === 'open'))\n dst.close(dstHandle, cbfinal);\n } else {\n cb(err);\n }\n }\n\n src.open(srcPath, 'r', (err, sourceHandle) => {\n if (err)\n return onerror(err);\n\n srcHandle = sourceHandle;\n\n if (fileSize === undefined)\n src.fstat(srcHandle, tryStat);\n else\n tryStat(null, { size: fileSize });\n\n function tryStat(err, attrs) {\n if (err) {\n if (src !== fs) {\n // Try stat() for sftp servers that may not support fstat() for\n // whatever reason\n src.stat(srcPath, (err_, attrs_) => {\n if (err_)\n return onerror(err);\n tryStat(null, attrs_);\n });\n return;\n }\n return onerror(err);\n }\n fsize = attrs.size;\n\n dst.open(dstPath, 'w', (err, destHandle) => {\n if (err)\n return onerror(err);\n\n dstHandle = destHandle;\n\n if (fsize <= 0)\n return onerror();\n\n // Use less memory where possible\n while (bufsize > fsize) {\n if (concurrency === 1) {\n bufsize = fsize;\n break;\n }\n bufsize -= chunkSize;\n --concurrency;\n }\n\n readbuf = tryCreateBuffer(bufsize);\n if (readbuf instanceof Error)\n return onerror(readbuf);\n\n if (mode !== undefined) {\n dst.fchmod(dstHandle, mode, function tryAgain(err) {\n if (err) {\n // Try chmod() for sftp servers that may not support fchmod()\n // for whatever reason\n dst.chmod(dstPath, mode, (err_) => tryAgain());\n return;\n }\n startReads();\n });\n } else {\n startReads();\n }\n\n function onread(err, nb, data, dstpos, datapos, origChunkLen) {\n if (err)\n return onerror(err);\n\n datapos = datapos || 0;\n\n dst.write(dstHandle, readbuf, datapos, nb, dstpos, writeCb);\n\n function writeCb(err) {\n if (err)\n return onerror(err);\n\n total += nb;\n onstep && onstep(total, nb, fsize);\n\n if (nb < origChunkLen)\n return singleRead(datapos, dstpos + nb, origChunkLen - nb);\n\n if (total === fsize) {\n dst.close(dstHandle, (err) => {\n dstHandle = undefined;\n if (err)\n return onerror(err);\n src.close(srcHandle, (err) => {\n srcHandle = undefined;\n if (err)\n return onerror(err);\n cb();\n });\n });\n return;\n }\n\n if (pdst >= fsize)\n return;\n\n const chunk =\n (pdst + chunkSize > fsize ? fsize - pdst : chunkSize);\n singleRead(datapos, pdst, chunk);\n pdst += chunk;\n }\n }\n\n function makeCb(psrc, pdst, chunk) {\n return (err, nb, data) => {\n onread(err, nb, data, pdst, psrc, chunk);\n };\n }\n\n function singleRead(psrc, pdst, chunk) {\n src.read(srcHandle,\n readbuf,\n psrc,\n chunk,\n pdst,\n makeCb(psrc, pdst, chunk));\n }\n\n function startReads() {\n let reads = 0;\n let psrc = 0;\n while (pdst < fsize && reads < concurrency) {\n const chunk =\n (pdst + chunkSize > fsize ? fsize - pdst : chunkSize);\n singleRead(psrc, pdst, chunk);\n psrc += chunk;\n pdst += chunk;\n ++reads;\n }\n }\n });\n }\n });\n}\n\nfunction writeAll(sftp, handle, buffer, offset, length, position, callback_) {\n const callback = (typeof callback_ === 'function' ? callback_ : undefined);\n\n sftp.write(handle,\n buffer,\n offset,\n length,\n position,\n (writeErr, written) => {\n if (writeErr) {\n return sftp.close(handle, () => {\n callback && callback(writeErr);\n });\n }\n if (written === length) {\n sftp.close(handle, callback);\n } else {\n offset += written;\n length -= written;\n position += written;\n writeAll(sftp, handle, buffer, offset, length, position, callback);\n }\n });\n}\n\nclass Stats {\n constructor(initial) {\n this.mode = (initial && initial.mode);\n this.uid = (initial && initial.uid);\n this.gid = (initial && initial.gid);\n this.size = (initial && initial.size);\n this.atime = (initial && initial.atime);\n this.mtime = (initial && initial.mtime);\n this.extended = (initial && initial.extended);\n }\n isDirectory() {\n return ((this.mode & constants.S_IFMT) === constants.S_IFDIR);\n }\n isFile() {\n return ((this.mode & constants.S_IFMT) === constants.S_IFREG);\n }\n isBlockDevice() {\n return ((this.mode & constants.S_IFMT) === constants.S_IFBLK);\n }\n isCharacterDevice() {\n return ((this.mode & constants.S_IFMT) === constants.S_IFCHR);\n }\n isSymbolicLink() {\n return ((this.mode & constants.S_IFMT) === constants.S_IFLNK);\n }\n isFIFO() {\n return ((this.mode & constants.S_IFMT) === constants.S_IFIFO);\n }\n isSocket() {\n return ((this.mode & constants.S_IFMT) === constants.S_IFSOCK);\n }\n}\n\nfunction attrsToBytes(attrs) {\n let flags = 0;\n let nb = 0;\n\n if (typeof attrs === 'object' && attrs !== null) {\n if (typeof attrs.size === 'number') {\n flags |= ATTR.SIZE;\n const val = attrs.size;\n // Big Endian\n ATTRS_BUF[nb++] = val / 72057594037927940; // 2**56\n ATTRS_BUF[nb++] = val / 281474976710656; // 2**48\n ATTRS_BUF[nb++] = val / 1099511627776; // 2**40\n ATTRS_BUF[nb++] = val / 4294967296; // 2**32\n ATTRS_BUF[nb++] = val / 16777216; // 2**24\n ATTRS_BUF[nb++] = val / 65536; // 2**16\n ATTRS_BUF[nb++] = val / 256; // 2**8\n ATTRS_BUF[nb++] = val;\n }\n if (typeof attrs.uid === 'number' && typeof attrs.gid === 'number') {\n flags |= ATTR.UIDGID;\n const uid = attrs.uid;\n const gid = attrs.gid;\n // Big Endian\n ATTRS_BUF[nb++] = uid >>> 24;\n ATTRS_BUF[nb++] = uid >>> 16;\n ATTRS_BUF[nb++] = uid >>> 8;\n ATTRS_BUF[nb++] = uid;\n ATTRS_BUF[nb++] = gid >>> 24;\n ATTRS_BUF[nb++] = gid >>> 16;\n ATTRS_BUF[nb++] = gid >>> 8;\n ATTRS_BUF[nb++] = gid;\n }\n if (typeof attrs.mode === 'number' || typeof attrs.mode === 'string') {\n const mode = modeNum(attrs.mode);\n flags |= ATTR.PERMISSIONS;\n // Big Endian\n ATTRS_BUF[nb++] = mode >>> 24;\n ATTRS_BUF[nb++] = mode >>> 16;\n ATTRS_BUF[nb++] = mode >>> 8;\n ATTRS_BUF[nb++] = mode;\n }\n if ((typeof attrs.atime === 'number' || isDate(attrs.atime))\n && (typeof attrs.mtime === 'number' || isDate(attrs.mtime))) {\n const atime = toUnixTimestamp(attrs.atime);\n const mtime = toUnixTimestamp(attrs.mtime);\n\n flags |= ATTR.ACMODTIME;\n // Big Endian\n ATTRS_BUF[nb++] = atime >>> 24;\n ATTRS_BUF[nb++] = atime >>> 16;\n ATTRS_BUF[nb++] = atime >>> 8;\n ATTRS_BUF[nb++] = atime;\n ATTRS_BUF[nb++] = mtime >>> 24;\n ATTRS_BUF[nb++] = mtime >>> 16;\n ATTRS_BUF[nb++] = mtime >>> 8;\n ATTRS_BUF[nb++] = mtime;\n }\n // TODO: extended attributes\n }\n\n return { flags, nb };\n}\n\nfunction toUnixTimestamp(time) {\n // eslint-disable-next-line no-self-compare\n if (typeof time === 'number' && time === time) // Valid, non-NaN number\n return time;\n if (isDate(time))\n return parseInt(time.getTime() / 1000, 10);\n throw new Error(`Cannot parse time: ${time}`);\n}\n\nfunction modeNum(mode) {\n // eslint-disable-next-line no-self-compare\n if (typeof mode === 'number' && mode === mode) // Valid, non-NaN number\n return mode;\n if (typeof mode === 'string')\n return modeNum(parseInt(mode, 8));\n throw new Error(`Cannot parse mode: ${mode}`);\n}\n\nconst stringFlagMap = {\n 'r': OPEN_MODE.READ,\n 'r+': OPEN_MODE.READ | OPEN_MODE.WRITE,\n 'w': OPEN_MODE.TRUNC | OPEN_MODE.CREAT | OPEN_MODE.WRITE,\n 'wx': OPEN_MODE.TRUNC | OPEN_MODE.CREAT | OPEN_MODE.WRITE | OPEN_MODE.EXCL,\n 'xw': OPEN_MODE.TRUNC | OPEN_MODE.CREAT | OPEN_MODE.WRITE | OPEN_MODE.EXCL,\n 'w+': OPEN_MODE.TRUNC | OPEN_MODE.CREAT | OPEN_MODE.READ | OPEN_MODE.WRITE,\n 'wx+': OPEN_MODE.TRUNC | OPEN_MODE.CREAT | OPEN_MODE.READ | OPEN_MODE.WRITE\n | OPEN_MODE.EXCL,\n 'xw+': OPEN_MODE.TRUNC | OPEN_MODE.CREAT | OPEN_MODE.READ | OPEN_MODE.WRITE\n | OPEN_MODE.EXCL,\n 'a': OPEN_MODE.APPEND | OPEN_MODE.CREAT | OPEN_MODE.WRITE,\n 'ax': OPEN_MODE.APPEND | OPEN_MODE.CREAT | OPEN_MODE.WRITE | OPEN_MODE.EXCL,\n 'xa': OPEN_MODE.APPEND | OPEN_MODE.CREAT | OPEN_MODE.WRITE | OPEN_MODE.EXCL,\n 'a+': OPEN_MODE.APPEND | OPEN_MODE.CREAT | OPEN_MODE.READ | OPEN_MODE.WRITE,\n 'ax+': OPEN_MODE.APPEND | OPEN_MODE.CREAT | OPEN_MODE.READ | OPEN_MODE.WRITE\n | OPEN_MODE.EXCL,\n 'xa+': OPEN_MODE.APPEND | OPEN_MODE.CREAT | OPEN_MODE.READ | OPEN_MODE.WRITE\n | OPEN_MODE.EXCL\n};\n\nfunction stringToFlags(str) {\n const flags = stringFlagMap[str];\n return (flags !== undefined ? flags : null);\n}\n\nconst flagsToString = (() => {\n const stringFlagMapKeys = Object.keys(stringFlagMap);\n return (flags) => {\n for (let i = 0; i < stringFlagMapKeys.length; ++i) {\n const key = stringFlagMapKeys[i];\n if (stringFlagMap[key] === flags)\n return key;\n }\n return null;\n };\n})();\n\nfunction readAttrs(biOpt) {\n /*\n uint32 flags\n uint64 size present only if flag SSH_FILEXFER_ATTR_SIZE\n uint32 uid present only if flag SSH_FILEXFER_ATTR_UIDGID\n uint32 gid present only if flag SSH_FILEXFER_ATTR_UIDGID\n uint32 permissions present only if flag SSH_FILEXFER_ATTR_PERMISSIONS\n uint32 atime present only if flag SSH_FILEXFER_ACMODTIME\n uint32 mtime present only if flag SSH_FILEXFER_ACMODTIME\n uint32 extended_count present only if flag SSH_FILEXFER_ATTR_EXTENDED\n string extended_type\n string extended_data\n ... more extended data (extended_type - extended_data pairs),\n so that number of pairs equals extended_count\n */\n const flags = bufferParser.readUInt32BE();\n if (flags === undefined)\n return;\n\n const attrs = new Stats();\n if (flags & ATTR.SIZE) {\n const size = bufferParser.readUInt64BE(biOpt);\n if (size === undefined)\n return;\n attrs.size = size;\n }\n\n if (flags & ATTR.UIDGID) {\n const uid = bufferParser.readUInt32BE();\n const gid = bufferParser.readUInt32BE();\n if (gid === undefined)\n return;\n attrs.uid = uid;\n attrs.gid = gid;\n }\n\n if (flags & ATTR.PERMISSIONS) {\n const mode = bufferParser.readUInt32BE();\n if (mode === undefined)\n return;\n attrs.mode = mode;\n }\n\n if (flags & ATTR.ACMODTIME) {\n const atime = bufferParser.readUInt32BE();\n const mtime = bufferParser.readUInt32BE();\n if (mtime === undefined)\n return;\n attrs.atime = atime;\n attrs.mtime = mtime;\n }\n\n if (flags & ATTR.EXTENDED) {\n const count = bufferParser.readUInt32BE();\n if (count === undefined)\n return;\n const extended = {};\n for (let i = 0; i < count; ++i) {\n const type = bufferParser.readString(true);\n const data = bufferParser.readString();\n if (data === undefined)\n return;\n extended[type] = data;\n }\n attrs.extended = extended;\n }\n\n return attrs;\n}\n\nfunction sendOrBuffer(sftp, payload) {\n const ret = tryWritePayload(sftp, payload);\n if (ret !== undefined) {\n sftp._buffer.push(ret);\n return false;\n }\n return true;\n}\n\nfunction tryWritePayload(sftp, payload) {\n const outgoing = sftp.outgoing;\n if (outgoing.state !== 'open')\n return;\n\n if (outgoing.window === 0) {\n sftp._waitWindow = true;\n sftp._chunkcb = drainBuffer;\n return payload;\n }\n\n let ret;\n const len = payload.length;\n let p = 0;\n\n while (len - p > 0 && outgoing.window > 0) {\n const actualLen = Math.min(len - p, outgoing.window, outgoing.packetSize);\n outgoing.window -= actualLen;\n if (outgoing.window === 0) {\n sftp._waitWindow = true;\n sftp._chunkcb = drainBuffer;\n }\n\n if (p === 0 && actualLen === len) {\n sftp._protocol.channelData(sftp.outgoing.id, payload);\n } else {\n sftp._protocol.channelData(sftp.outgoing.id,\n bufferSlice(payload, p, p + actualLen));\n }\n\n p += actualLen;\n }\n\n if (len - p > 0) {\n if (p > 0)\n ret = bufferSlice(payload, p, len);\n else\n ret = payload; // XXX: should never get here?\n }\n\n return ret;\n}\n\nfunction drainBuffer() {\n this._chunkcb = undefined;\n const buffer = this._buffer;\n let i = 0;\n while (i < buffer.length) {\n const payload = buffer[i];\n const ret = tryWritePayload(this, payload);\n if (ret !== undefined) {\n if (ret !== payload)\n buffer[i] = ret;\n if (i > 0)\n this._buffer = buffer.slice(i);\n return;\n }\n ++i;\n }\n if (i > 0)\n this._buffer = [];\n}\n\nfunction doFatalSFTPError(sftp, msg, noDebug) {\n const err = new Error(msg);\n err.level = 'sftp-protocol';\n if (!noDebug && sftp._debug)\n sftp._debug(`SFTP: Inbound: ${msg}`);\n sftp.emit('error', err);\n sftp.destroy();\n cleanupRequests(sftp);\n return false;\n}\n\nfunction cleanupRequests(sftp) {\n const keys = Object.keys(sftp._requests);\n if (keys.length === 0)\n return;\n\n const reqs = sftp._requests;\n sftp._requests = {};\n const err = new Error('No response from server');\n for (let i = 0; i < keys.length; ++i) {\n const req = reqs[keys[i]];\n if (typeof req.cb === 'function')\n req.cb(err);\n }\n}\n\nfunction requestLimits(sftp, cb) {\n /*\n uint32 id\n string \"limits@openssh.com\"\n */\n let p = 9;\n const buf = Buffer.allocUnsafe(4 + 1 + 4 + 4 + 18);\n\n writeUInt32BE(buf, buf.length - 4, 0);\n buf[4] = REQUEST.EXTENDED;\n const reqid = sftp._writeReqid = (sftp._writeReqid + 1) & MAX_REQID;\n writeUInt32BE(buf, reqid, 5);\n\n writeUInt32BE(buf, 18, p);\n buf.utf8Write('limits@openssh.com', p += 4, 18);\n\n sftp._requests[reqid] = { extended: 'limits@openssh.com', cb };\n\n const isBuffered = sendOrBuffer(sftp, buf);\n if (sftp._debug) {\n const which = (isBuffered ? 'Buffered' : 'Sending');\n sftp._debug(`SFTP: Outbound: ${which} limits@openssh.com`);\n }\n}\n\nconst CLIENT_HANDLERS = {\n [RESPONSE.VERSION]: (sftp, payload) => {\n if (sftp._version !== -1)\n return doFatalSFTPError(sftp, 'Duplicate VERSION packet');\n\n const extensions = {};\n\n /*\n uint32 version\n <extension data>\n */\n bufferParser.init(payload, 1);\n let version = bufferParser.readUInt32BE();\n while (bufferParser.avail()) {\n const extName = bufferParser.readString(true);\n const extData = bufferParser.readString(true);\n if (extData === undefined) {\n version = undefined;\n break;\n }\n extensions[extName] = extData;\n }\n bufferParser.clear();\n\n if (version === undefined)\n return doFatalSFTPError(sftp, 'Malformed VERSION packet');\n\n if (sftp._debug) {\n const names = Object.keys(extensions);\n if (names.length) {\n sftp._debug(\n `SFTP: Inbound: Received VERSION (v${version}, exts:${names})`\n );\n } else {\n sftp._debug(`SFTP: Inbound: Received VERSION (v${version})`);\n }\n }\n\n sftp._version = version;\n sftp._extensions = extensions;\n\n if (extensions['limits@openssh.com'] === '1') {\n return requestLimits(sftp, (err, limits) => {\n if (!err) {\n if (limits.maxPktLen > 0)\n sftp._maxOutPktLen = limits.maxPktLen;\n if (limits.maxReadLen > 0)\n sftp._maxReadLen = limits.maxReadLen;\n if (limits.maxWriteLen > 0)\n sftp._maxWriteLen = limits.maxWriteLen;\n sftp.maxOpenHandles = (\n limits.maxOpenHandles > 0 ? limits.maxOpenHandles : Infinity\n );\n }\n sftp.emit('ready');\n });\n }\n\n sftp.emit('ready');\n },\n [RESPONSE.STATUS]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n uint32 error/status code\n string error message (ISO-10646 UTF-8)\n string language tag\n */\n const errorCode = bufferParser.readUInt32BE();\n const errorMsg = bufferParser.readString(true);\n bufferParser.clear();\n\n // Note: we avoid checking that the error message and language tag are in\n // the packet because there are some broken implementations that incorrectly\n // omit them. The language tag in general was never really used amongst ssh\n // implementations, so in the case of a missing error message we just\n // default to something sensible.\n\n if (sftp._debug) {\n const jsonMsg = JSON.stringify(errorMsg);\n sftp._debug(\n `SFTP: Inbound: Received STATUS (id:${reqID}, ${errorCode}, ${jsonMsg})`\n );\n }\n const req = sftp._requests[reqID];\n delete sftp._requests[reqID];\n if (req && typeof req.cb === 'function') {\n if (errorCode === STATUS_CODE.OK) {\n req.cb();\n return;\n }\n const err = new Error(errorMsg\n || STATUS_CODE_STR[errorCode]\n || 'Unknown status');\n err.code = errorCode;\n req.cb(err);\n }\n },\n [RESPONSE.HANDLE]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string handle\n */\n const handle = bufferParser.readString();\n bufferParser.clear();\n\n if (handle === undefined) {\n if (reqID !== undefined)\n delete sftp._requests[reqID];\n return doFatalSFTPError(sftp, 'Malformed HANDLE packet');\n }\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received HANDLE (id:${reqID})`);\n\n const req = sftp._requests[reqID];\n delete sftp._requests[reqID];\n if (req && typeof req.cb === 'function')\n req.cb(undefined, handle);\n },\n [RESPONSE.DATA]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n let req;\n if (reqID !== undefined) {\n req = sftp._requests[reqID];\n delete sftp._requests[reqID];\n }\n /*\n string data\n */\n if (req && typeof req.cb === 'function') {\n if (req.buffer) {\n // We have already pre-allocated space to store the data\n\n const nb = bufferParser.readString(req.buffer);\n bufferParser.clear();\n\n if (nb !== undefined) {\n sftp._debug && sftp._debug(\n `SFTP: Inbound: Received DATA (id:${reqID}, ${nb})`\n );\n req.cb(undefined, req.buffer, nb);\n return;\n }\n } else {\n const data = bufferParser.readString();\n bufferParser.clear();\n\n if (data !== undefined) {\n sftp._debug && sftp._debug(\n `SFTP: Inbound: Received DATA (id:${reqID}, ${data.length})`\n );\n req.cb(undefined, data);\n return;\n }\n }\n } else {\n const nb = bufferParser.skipString();\n bufferParser.clear();\n if (nb !== undefined) {\n sftp._debug && sftp._debug(\n `SFTP: Inbound: Received DATA (id:${reqID}, ${nb})`\n );\n return;\n }\n }\n\n return doFatalSFTPError(sftp, 'Malformed DATA packet');\n },\n [RESPONSE.NAME]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n let req;\n if (reqID !== undefined) {\n req = sftp._requests[reqID];\n delete sftp._requests[reqID];\n }\n /*\n uint32 count\n repeats count times:\n string filename\n string longname\n ATTRS attrs\n */\n const count = bufferParser.readUInt32BE();\n if (count !== undefined) {\n let names = [];\n for (let i = 0; i < count; ++i) {\n // We are going to assume UTF-8 for filenames despite the SFTPv3\n // spec not specifying an encoding because the specs for newer\n // versions of the protocol all explicitly specify UTF-8 for\n // filenames\n const filename = bufferParser.readString(true);\n\n // `longname` only exists in SFTPv3 and since it typically will\n // contain the filename, we assume it is also UTF-8\n const longname = bufferParser.readString(true);\n\n const attrs = readAttrs(sftp._biOpt);\n if (attrs === undefined) {\n names = undefined;\n break;\n }\n names.push({ filename, longname, attrs });\n }\n if (names !== undefined) {\n sftp._debug && sftp._debug(\n `SFTP: Inbound: Received NAME (id:${reqID}, ${names.length})`\n );\n bufferParser.clear();\n if (req && typeof req.cb === 'function')\n req.cb(undefined, names);\n return;\n }\n }\n\n bufferParser.clear();\n return doFatalSFTPError(sftp, 'Malformed NAME packet');\n },\n [RESPONSE.ATTRS]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n let req;\n if (reqID !== undefined) {\n req = sftp._requests[reqID];\n delete sftp._requests[reqID];\n }\n /*\n ATTRS attrs\n */\n const attrs = readAttrs(sftp._biOpt);\n bufferParser.clear();\n if (attrs !== undefined) {\n sftp._debug && sftp._debug(`SFTP: Inbound: Received ATTRS (id:${reqID})`);\n if (req && typeof req.cb === 'function')\n req.cb(undefined, attrs);\n return;\n }\n\n return doFatalSFTPError(sftp, 'Malformed ATTRS packet');\n },\n [RESPONSE.EXTENDED]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n if (reqID !== undefined) {\n const req = sftp._requests[reqID];\n if (req) {\n delete sftp._requests[reqID];\n switch (req.extended) {\n case 'statvfs@openssh.com':\n case 'fstatvfs@openssh.com': {\n /*\n uint64 f_bsize // file system block size\n uint64 f_frsize // fundamental fs block size\n uint64 f_blocks // number of blocks (unit f_frsize)\n uint64 f_bfree // free blocks in file system\n uint64 f_bavail // free blocks for non-root\n uint64 f_files // total file inodes\n uint64 f_ffree // free file inodes\n uint64 f_favail // free file inodes for to non-root\n uint64 f_fsid // file system id\n uint64 f_flag // bit mask of f_flag values\n uint64 f_namemax // maximum filename length\n */\n const biOpt = sftp._biOpt;\n const stats = {\n f_bsize: bufferParser.readUInt64BE(biOpt),\n f_frsize: bufferParser.readUInt64BE(biOpt),\n f_blocks: bufferParser.readUInt64BE(biOpt),\n f_bfree: bufferParser.readUInt64BE(biOpt),\n f_bavail: bufferParser.readUInt64BE(biOpt),\n f_files: bufferParser.readUInt64BE(biOpt),\n f_ffree: bufferParser.readUInt64BE(biOpt),\n f_favail: bufferParser.readUInt64BE(biOpt),\n f_sid: bufferParser.readUInt64BE(biOpt),\n f_flag: bufferParser.readUInt64BE(biOpt),\n f_namemax: bufferParser.readUInt64BE(biOpt),\n };\n if (stats.f_namemax === undefined)\n break;\n if (sftp._debug) {\n sftp._debug(\n 'SFTP: Inbound: Received EXTENDED_REPLY '\n + `(id:${reqID}, ${req.extended})`\n );\n }\n bufferParser.clear();\n if (typeof req.cb === 'function')\n req.cb(undefined, stats);\n return;\n }\n case 'limits@openssh.com': {\n /*\n uint64 max-packet-length\n uint64 max-read-length\n uint64 max-write-length\n uint64 max-open-handles\n */\n const limits = {\n maxPktLen: bufferParser.readUInt64BE(),\n maxReadLen: bufferParser.readUInt64BE(),\n maxWriteLen: bufferParser.readUInt64BE(),\n maxOpenHandles: bufferParser.readUInt64BE(),\n };\n if (limits.maxOpenHandles === undefined)\n break;\n if (sftp._debug) {\n sftp._debug(\n 'SFTP: Inbound: Received EXTENDED_REPLY '\n + `(id:${reqID}, ${req.extended})`\n );\n }\n bufferParser.clear();\n if (typeof req.cb === 'function')\n req.cb(undefined, limits);\n return;\n }\n case 'users-groups-by-id@openssh.com': {\n /*\n string usernames\n string username1\n ...\n string groupnames\n string groupname1\n ...\n */\n const usernameCount = bufferParser.readUInt32BE();\n if (usernameCount === undefined)\n break;\n const usernames = new Array(usernameCount);\n for (let i = 0; i < usernames.length; ++i)\n usernames[i] = bufferParser.readString(true);\n\n const groupnameCount = bufferParser.readUInt32BE();\n if (groupnameCount === undefined)\n break;\n const groupnames = new Array(groupnameCount);\n for (let i = 0; i < groupnames.length; ++i)\n groupnames[i] = bufferParser.readString(true);\n if (groupnames.length > 0\n && groupnames[groupnames.length - 1] === undefined) {\n break;\n }\n\n if (sftp._debug) {\n sftp._debug(\n 'SFTP: Inbound: Received EXTENDED_REPLY '\n + `(id:${reqID}, ${req.extended})`\n );\n }\n bufferParser.clear();\n if (typeof req.cb === 'function')\n req.cb(undefined, usernames, groupnames);\n return;\n }\n default:\n // Unknown extended request\n sftp._debug && sftp._debug(\n `SFTP: Inbound: Received EXTENDED_REPLY (id:${reqID}, ???)`\n );\n bufferParser.clear();\n if (typeof req.cb === 'function')\n req.cb();\n return;\n }\n } else {\n sftp._debug && sftp._debug(\n `SFTP: Inbound: Received EXTENDED_REPLY (id:${reqID}, ???)`\n );\n bufferParser.clear();\n return;\n }\n }\n\n bufferParser.clear();\n return doFatalSFTPError(sftp, 'Malformed EXTENDED_REPLY packet');\n },\n};\nconst SERVER_HANDLERS = {\n [REQUEST.INIT]: (sftp, payload) => {\n if (sftp._version !== -1)\n return doFatalSFTPError(sftp, 'Duplicate INIT packet');\n\n const extensions = {};\n\n /*\n uint32 version\n <extension data>\n */\n bufferParser.init(payload, 1);\n let version = bufferParser.readUInt32BE();\n while (bufferParser.avail()) {\n const extName = bufferParser.readString(true);\n const extData = bufferParser.readString(true);\n if (extData === undefined) {\n version = undefined;\n break;\n }\n extensions[extName] = extData;\n }\n bufferParser.clear();\n\n if (version === undefined)\n return doFatalSFTPError(sftp, 'Malformed INIT packet');\n\n if (sftp._debug) {\n const names = Object.keys(extensions);\n if (names.length) {\n sftp._debug(\n `SFTP: Inbound: Received INIT (v${version}, exts:${names})`\n );\n } else {\n sftp._debug(`SFTP: Inbound: Received INIT (v${version})`);\n }\n }\n\n sendOrBuffer(sftp, SERVER_VERSION_BUFFER);\n\n sftp._version = version;\n sftp._extensions = extensions;\n sftp.emit('ready');\n },\n [REQUEST.OPEN]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string filename\n uint32 pflags\n ATTRS attrs\n */\n const filename = bufferParser.readString(true);\n const pflags = bufferParser.readUInt32BE();\n const attrs = readAttrs(sftp._biOpt);\n bufferParser.clear();\n\n if (attrs === undefined)\n return doFatalSFTPError(sftp, 'Malformed OPEN packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received OPEN (id:${reqID})`);\n\n if (!sftp.emit('OPEN', reqID, filename, pflags, attrs)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.CLOSE]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string handle\n */\n const handle = bufferParser.readString();\n bufferParser.clear();\n\n if (handle === undefined || handle.length > 256)\n return doFatalSFTPError(sftp, 'Malformed CLOSE packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received CLOSE (id:${reqID})`);\n\n if (!sftp.emit('CLOSE', reqID, handle)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.READ]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string handle\n uint64 offset\n uint32 len\n */\n const handle = bufferParser.readString();\n const offset = bufferParser.readUInt64BE(sftp._biOpt);\n const len = bufferParser.readUInt32BE();\n bufferParser.clear();\n\n if (len === undefined || handle.length > 256)\n return doFatalSFTPError(sftp, 'Malformed READ packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received READ (id:${reqID})`);\n\n if (!sftp.emit('READ', reqID, handle, offset, len)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.WRITE]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string handle\n uint64 offset\n string data\n */\n const handle = bufferParser.readString();\n const offset = bufferParser.readUInt64BE(sftp._biOpt);\n const data = bufferParser.readString();\n bufferParser.clear();\n\n if (data === undefined || handle.length > 256)\n return doFatalSFTPError(sftp, 'Malformed WRITE packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received WRITE (id:${reqID})`);\n\n if (!sftp.emit('WRITE', reqID, handle, offset, data)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.LSTAT]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string path\n */\n const path = bufferParser.readString(true);\n bufferParser.clear();\n\n if (path === undefined)\n return doFatalSFTPError(sftp, 'Malformed LSTAT packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received LSTAT (id:${reqID})`);\n\n if (!sftp.emit('LSTAT', reqID, path)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.FSTAT]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string handle\n */\n const handle = bufferParser.readString();\n bufferParser.clear();\n\n if (handle === undefined || handle.length > 256)\n return doFatalSFTPError(sftp, 'Malformed FSTAT packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received FSTAT (id:${reqID})`);\n\n if (!sftp.emit('FSTAT', reqID, handle)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.SETSTAT]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string path\n ATTRS attrs\n */\n const path = bufferParser.readString(true);\n const attrs = readAttrs(sftp._biOpt);\n bufferParser.clear();\n\n if (attrs === undefined)\n return doFatalSFTPError(sftp, 'Malformed SETSTAT packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received SETSTAT (id:${reqID})`);\n\n if (!sftp.emit('SETSTAT', reqID, path, attrs)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.FSETSTAT]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string handle\n ATTRS attrs\n */\n const handle = bufferParser.readString();\n const attrs = readAttrs(sftp._biOpt);\n bufferParser.clear();\n\n if (attrs === undefined || handle.length > 256)\n return doFatalSFTPError(sftp, 'Malformed FSETSTAT packet');\n\n sftp._debug && sftp._debug(\n `SFTP: Inbound: Received FSETSTAT (id:${reqID})`\n );\n\n if (!sftp.emit('FSETSTAT', reqID, handle, attrs)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.OPENDIR]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string path\n */\n const path = bufferParser.readString(true);\n bufferParser.clear();\n\n if (path === undefined)\n return doFatalSFTPError(sftp, 'Malformed OPENDIR packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received OPENDIR (id:${reqID})`);\n\n if (!sftp.emit('OPENDIR', reqID, path)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.READDIR]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string handle\n */\n const handle = bufferParser.readString();\n bufferParser.clear();\n\n if (handle === undefined || handle.length > 256)\n return doFatalSFTPError(sftp, 'Malformed READDIR packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received READDIR (id:${reqID})`);\n\n if (!sftp.emit('READDIR', reqID, handle)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.REMOVE]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string path\n */\n const path = bufferParser.readString(true);\n bufferParser.clear();\n\n if (path === undefined)\n return doFatalSFTPError(sftp, 'Malformed REMOVE packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received REMOVE (id:${reqID})`);\n\n if (!sftp.emit('REMOVE', reqID, path)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.MKDIR]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string path\n ATTRS attrs\n */\n const path = bufferParser.readString(true);\n const attrs = readAttrs(sftp._biOpt);\n bufferParser.clear();\n\n if (attrs === undefined)\n return doFatalSFTPError(sftp, 'Malformed MKDIR packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received MKDIR (id:${reqID})`);\n\n if (!sftp.emit('MKDIR', reqID, path, attrs)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.RMDIR]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string path\n */\n const path = bufferParser.readString(true);\n bufferParser.clear();\n\n if (path === undefined)\n return doFatalSFTPError(sftp, 'Malformed RMDIR packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received RMDIR (id:${reqID})`);\n\n if (!sftp.emit('RMDIR', reqID, path)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.REALPATH]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string path\n */\n const path = bufferParser.readString(true);\n bufferParser.clear();\n\n if (path === undefined)\n return doFatalSFTPError(sftp, 'Malformed REALPATH packet');\n\n sftp._debug && sftp._debug(\n `SFTP: Inbound: Received REALPATH (id:${reqID})`\n );\n\n if (!sftp.emit('REALPATH', reqID, path)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.STAT]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string path\n */\n const path = bufferParser.readString(true);\n bufferParser.clear();\n\n if (path === undefined)\n return doFatalSFTPError(sftp, 'Malformed STAT packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received STAT (id:${reqID})`);\n\n if (!sftp.emit('STAT', reqID, path)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.RENAME]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string oldpath\n string newpath\n */\n const oldPath = bufferParser.readString(true);\n const newPath = bufferParser.readString(true);\n bufferParser.clear();\n\n if (newPath === undefined)\n return doFatalSFTPError(sftp, 'Malformed RENAME packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received RENAME (id:${reqID})`);\n\n if (!sftp.emit('RENAME', reqID, oldPath, newPath)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.READLINK]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string path\n */\n const path = bufferParser.readString(true);\n bufferParser.clear();\n\n if (path === undefined)\n return doFatalSFTPError(sftp, 'Malformed READLINK packet');\n\n sftp._debug && sftp._debug(\n `SFTP: Inbound: Received READLINK (id:${reqID})`\n );\n\n if (!sftp.emit('READLINK', reqID, path)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.SYMLINK]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string linkpath\n string targetpath\n */\n const linkPath = bufferParser.readString(true);\n const targetPath = bufferParser.readString(true);\n bufferParser.clear();\n\n if (targetPath === undefined)\n return doFatalSFTPError(sftp, 'Malformed SYMLINK packet');\n\n sftp._debug && sftp._debug(`SFTP: Inbound: Received SYMLINK (id:${reqID})`);\n\n let handled;\n if (sftp._isOpenSSH) {\n // OpenSSH has linkpath and targetpath positions switched\n handled = sftp.emit('SYMLINK', reqID, targetPath, linkPath);\n } else {\n handled = sftp.emit('SYMLINK', reqID, linkPath, targetPath);\n }\n if (!handled) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n [REQUEST.EXTENDED]: (sftp, payload) => {\n bufferParser.init(payload, 1);\n const reqID = bufferParser.readUInt32BE();\n /*\n string extended-request\n ... any request-specific data ...\n */\n const extName = bufferParser.readString(true);\n if (extName === undefined) {\n bufferParser.clear();\n return doFatalSFTPError(sftp, 'Malformed EXTENDED packet');\n }\n\n let extData;\n if (bufferParser.avail())\n extData = bufferParser.readRaw();\n bufferParser.clear();\n\n sftp._debug && sftp._debug(\n `SFTP: Inbound: Received EXTENDED (id:${reqID})`\n );\n\n if (!sftp.emit('EXTENDED', reqID, extName, extData)) {\n // Automatically reject request if no handler for request type\n sftp.status(reqID, STATUS_CODE.OP_UNSUPPORTED);\n }\n },\n};\n\n// =============================================================================\n// ReadStream/WriteStream-related ==============================================\n// =============================================================================\nconst {\n ERR_INVALID_ARG_TYPE,\n ERR_OUT_OF_RANGE,\n validateNumber\n} = require('./node-fs-compat');\n\nconst kMinPoolSpace = 128;\n\nlet pool;\n// It can happen that we expect to read a large chunk of data, and reserve\n// a large chunk of the pool accordingly, but the read() call only filled\n// a portion of it. If a concurrently executing read() then uses the same pool,\n// the \"reserved\" portion cannot be used, so we allow it to be re-used as a\n// new pool later.\nconst poolFragments = [];\n\nfunction allocNewPool(poolSize) {\n if (poolFragments.length > 0)\n pool = poolFragments.pop();\n else\n pool = Buffer.allocUnsafe(poolSize);\n pool.used = 0;\n}\n\n// Check the `this.start` and `this.end` of stream.\nfunction checkPosition(pos, name) {\n if (!Number.isSafeInteger(pos)) {\n validateNumber(pos, name);\n if (!Number.isInteger(pos))\n throw new ERR_OUT_OF_RANGE(name, 'an integer', pos);\n throw new ERR_OUT_OF_RANGE(name, '>= 0 and <= 2 ** 53 - 1', pos);\n }\n if (pos < 0)\n throw new ERR_OUT_OF_RANGE(name, '>= 0 and <= 2 ** 53 - 1', pos);\n}\n\nfunction roundUpToMultipleOf8(n) {\n return (n + 7) & ~7; // Align to 8 byte boundary.\n}\n\nfunction ReadStream(sftp, path, options) {\n if (options === undefined)\n options = {};\n else if (typeof options === 'string')\n options = { encoding: options };\n else if (options === null || typeof options !== 'object')\n throw new TypeError('\"options\" argument must be a string or an object');\n else\n options = Object.create(options);\n\n // A little bit bigger buffer and water marks by default\n if (options.highWaterMark === undefined)\n options.highWaterMark = 64 * 1024;\n\n // For backwards compat do not emit close on destroy.\n options.emitClose = false;\n options.autoDestroy = false; // Node 14 major change.\n\n ReadableStream.call(this, options);\n\n this.path = path;\n this.flags = options.flags === undefined ? 'r' : options.flags;\n this.mode = options.mode === undefined ? 0o666 : options.mode;\n\n this.start = options.start;\n this.end = options.end;\n this.autoClose = options.autoClose === undefined ? true : options.autoClose;\n this.pos = 0;\n this.bytesRead = 0;\n this.isClosed = false;\n\n this.handle = options.handle === undefined ? null : options.handle;\n this.sftp = sftp;\n this._opening = false;\n\n if (this.start !== undefined) {\n checkPosition(this.start, 'start');\n\n this.pos = this.start;\n }\n\n if (this.end === undefined) {\n this.end = Infinity;\n } else if (this.end !== Infinity) {\n checkPosition(this.end, 'end');\n\n if (this.start !== undefined && this.start > this.end) {\n throw new ERR_OUT_OF_RANGE(\n 'start',\n `<= \"end\" (here: ${this.end})`,\n this.start\n );\n }\n }\n\n this.on('end', function() {\n if (this.autoClose)\n this.destroy();\n });\n\n if (!Buffer.isBuffer(this.handle))\n this.open();\n}\ninherits(ReadStream, ReadableStream);\n\nReadStream.prototype.open = function() {\n if (this._opening)\n return;\n\n this._opening = true;\n\n this.sftp.open(this.path, this.flags, this.mode, (er, handle) => {\n this._opening = false;\n\n if (er) {\n this.emit('error', er);\n if (this.autoClose)\n this.destroy();\n return;\n }\n\n this.handle = handle;\n this.emit('open', handle);\n this.emit('ready');\n // Start the flow of data.\n this.read();\n });\n};\n\nReadStream.prototype._read = function(n) {\n if (!Buffer.isBuffer(this.handle))\n return this.once('open', () => this._read(n));\n\n // XXX: safe to remove this?\n if (this.destroyed)\n return;\n\n if (!pool || pool.length - pool.used < kMinPoolSpace) {\n // Discard the old pool.\n allocNewPool(this.readableHighWaterMark\n || this._readableState.highWaterMark);\n }\n\n // Grab another reference to the pool in the case that while we're\n // in the thread pool another read() finishes up the pool, and\n // allocates a new one.\n const thisPool = pool;\n let toRead = Math.min(pool.length - pool.used, n);\n const start = pool.used;\n\n if (this.end !== undefined)\n toRead = Math.min(this.end - this.pos + 1, toRead);\n\n // Already read everything we were supposed to read!\n // treat as EOF.\n if (toRead <= 0)\n return this.push(null);\n\n // the actual read.\n this.sftp.read(this.handle,\n pool,\n pool.used,\n toRead,\n this.pos,\n (er, bytesRead) => {\n if (er) {\n this.emit('error', er);\n if (this.autoClose)\n this.destroy();\n return;\n }\n let b = null;\n\n // Now that we know how much data we have actually read, re-wind the\n // 'used' field if we can, and otherwise allow the remainder of our\n // reservation to be used as a new pool later.\n if (start + toRead === thisPool.used && thisPool === pool) {\n thisPool.used = roundUpToMultipleOf8(thisPool.used + bytesRead - toRead);\n } else {\n // Round down to the next lowest multiple of 8 to ensure the new pool\n // fragment start and end positions are aligned to an 8 byte boundary.\n const alignedEnd = (start + toRead) & ~7;\n const alignedStart = roundUpToMultipleOf8(start + bytesRead);\n if (alignedEnd - alignedStart >= kMinPoolSpace)\n poolFragments.push(thisPool.slice(alignedStart, alignedEnd));\n }\n\n if (bytesRead > 0) {\n this.bytesRead += bytesRead;\n b = thisPool.slice(start, start + bytesRead);\n }\n\n // Move the pool positions, and internal position for reading.\n this.pos += bytesRead;\n\n this.push(b);\n });\n\n pool.used = roundUpToMultipleOf8(pool.used + toRead);\n};\n\nReadStream.prototype._destroy = function(err, cb) {\n if (this._opening && !Buffer.isBuffer(this.handle)) {\n this.once('open', closeStream.bind(null, this, cb, err));\n return;\n }\n\n closeStream(this, cb, err);\n this.handle = null;\n this._opening = false;\n};\n\nfunction closeStream(stream, cb, err) {\n if (!stream.handle)\n return onclose();\n\n stream.sftp.close(stream.handle, onclose);\n\n function onclose(er) {\n er = er || err;\n cb(er);\n stream.isClosed = true;\n if (!er)\n stream.emit('close');\n }\n}\n\nReadStream.prototype.close = function(cb) {\n this.destroy(null, cb);\n};\n\nObject.defineProperty(ReadStream.prototype, 'pending', {\n get() {\n return this.handle === null;\n },\n configurable: true\n});\n\n// TODO: add `concurrency` setting to allow more than one in-flight WRITE\n// request to server to improve throughput\nfunction WriteStream(sftp, path, options) {\n if (options === undefined)\n options = {};\n else if (typeof options === 'string')\n options = { encoding: options };\n else if (options === null || typeof options !== 'object')\n throw new TypeError('\"options\" argument must be a string or an object');\n else\n options = Object.create(options);\n\n // For backwards compat do not emit close on destroy.\n options.emitClose = false;\n options.autoDestroy = false; // Node 14 major change.\n\n WritableStream.call(this, options);\n\n this.path = path;\n this.flags = options.flags === undefined ? 'w' : options.flags;\n this.mode = options.mode === undefined ? 0o666 : options.mode;\n\n this.start = options.start;\n this.autoClose = options.autoClose === undefined ? true : options.autoClose;\n this.pos = 0;\n this.bytesWritten = 0;\n this.isClosed = false;\n\n this.handle = options.handle === undefined ? null : options.handle;\n this.sftp = sftp;\n this._opening = false;\n\n if (this.start !== undefined) {\n checkPosition(this.start, 'start');\n\n this.pos = this.start;\n }\n\n if (options.encoding)\n this.setDefaultEncoding(options.encoding);\n\n // Node v6.x only\n this.on('finish', function() {\n if (this._writableState.finalCalled)\n return;\n if (this.autoClose)\n this.destroy();\n });\n\n if (!Buffer.isBuffer(this.handle))\n this.open();\n}\ninherits(WriteStream, WritableStream);\n\nWriteStream.prototype._final = function(cb) {\n if (this.autoClose)\n this.destroy();\n cb();\n};\n\nWriteStream.prototype.open = function() {\n if (this._opening)\n return;\n\n this._opening = true;\n\n this.sftp.open(this.path, this.flags, this.mode, (er, handle) => {\n this._opening = false;\n\n if (er) {\n this.emit('error', er);\n if (this.autoClose)\n this.destroy();\n return;\n }\n\n this.handle = handle;\n\n const tryAgain = (err) => {\n if (err) {\n // Try chmod() for sftp servers that may not support fchmod() for\n // whatever reason\n this.sftp.chmod(this.path, this.mode, (err_) => tryAgain());\n return;\n }\n\n // SFTPv3 requires absolute offsets, no matter the open flag used\n if (this.flags[0] === 'a') {\n const tryStat = (err, st) => {\n if (err) {\n // Try stat() for sftp servers that may not support fstat() for\n // whatever reason\n this.sftp.stat(this.path, (err_, st_) => {\n if (err_) {\n this.destroy();\n this.emit('error', err);\n return;\n }\n tryStat(null, st_);\n });\n return;\n }\n\n this.pos = st.size;\n this.emit('open', handle);\n this.emit('ready');\n };\n\n this.sftp.fstat(handle, tryStat);\n return;\n }\n\n this.emit('open', handle);\n this.emit('ready');\n };\n\n this.sftp.fchmod(handle, this.mode, tryAgain);\n });\n};\n\nWriteStream.prototype._write = function(data, encoding, cb) {\n if (!Buffer.isBuffer(data)) {\n const err = new ERR_INVALID_ARG_TYPE('data', 'Buffer', data);\n return this.emit('error', err);\n }\n\n if (!Buffer.isBuffer(this.handle)) {\n return this.once('open', function() {\n this._write(data, encoding, cb);\n });\n }\n\n this.sftp.write(this.handle,\n data,\n 0,\n data.length,\n this.pos,\n (er, bytes) => {\n if (er) {\n if (this.autoClose)\n this.destroy();\n return cb(er);\n }\n this.bytesWritten += bytes;\n cb();\n });\n\n this.pos += data.length;\n};\n\nWriteStream.prototype._writev = function(data, cb) {\n if (!Buffer.isBuffer(this.handle)) {\n return this.once('open', function() {\n this._writev(data, cb);\n });\n }\n\n const sftp = this.sftp;\n const handle = this.handle;\n let writesLeft = data.length;\n\n const onwrite = (er, bytes) => {\n if (er) {\n this.destroy();\n return cb(er);\n }\n this.bytesWritten += bytes;\n if (--writesLeft === 0)\n cb();\n };\n\n // TODO: try to combine chunks to reduce number of requests to the server?\n for (let i = 0; i < data.length; ++i) {\n const chunk = data[i].chunk;\n\n sftp.write(handle, chunk, 0, chunk.length, this.pos, onwrite);\n this.pos += chunk.length;\n }\n};\n\nif (typeof WritableStream.prototype.destroy !== 'function')\n WriteStream.prototype.destroy = ReadStream.prototype.destroy;\n\nWriteStream.prototype._destroy = ReadStream.prototype._destroy;\nWriteStream.prototype.close = function(cb) {\n if (cb) {\n if (this.isClosed) {\n process.nextTick(cb);\n return;\n }\n this.on('close', cb);\n }\n\n // If we are not autoClosing, we should call\n // destroy on 'finish'.\n if (!this.autoClose)\n this.on('finish', this.destroy.bind(this));\n\n this.end();\n};\n\n// There is no shutdown() for files.\nWriteStream.prototype.destroySoon = WriteStream.prototype.end;\n\nObject.defineProperty(WriteStream.prototype, 'pending', {\n get() {\n return this.handle === null;\n },\n configurable: true\n});\n// =============================================================================\n\nmodule.exports = {\n flagsToString,\n OPEN_MODE,\n SFTP,\n Stats,\n STATUS_CODE,\n stringToFlags,\n};\n", "'use strict';\n\nconst {\n Duplex: DuplexStream,\n Readable: ReadableStream,\n Writable: WritableStream,\n} = require('stream');\n\nconst {\n CHANNEL_EXTENDED_DATATYPE: { STDERR },\n} = require('./protocol/constants.js');\nconst { bufferSlice } = require('./protocol/utils.js');\n\nconst PACKET_SIZE = 32 * 1024;\nconst MAX_WINDOW = 2 * 1024 * 1024;\nconst WINDOW_THRESHOLD = MAX_WINDOW / 2;\n\nclass ClientStderr extends ReadableStream {\n constructor(channel, streamOpts) {\n super(streamOpts);\n\n this._channel = channel;\n }\n _read(n) {\n if (this._channel._waitChanDrain) {\n this._channel._waitChanDrain = false;\n if (this._channel.incoming.window <= WINDOW_THRESHOLD)\n windowAdjust(this._channel);\n }\n }\n}\n\nclass ServerStderr extends WritableStream {\n constructor(channel) {\n super({ highWaterMark: MAX_WINDOW });\n\n this._channel = channel;\n }\n\n _write(data, encoding, cb) {\n const channel = this._channel;\n const protocol = channel._client._protocol;\n const outgoing = channel.outgoing;\n const packetSize = outgoing.packetSize;\n const id = outgoing.id;\n let window = outgoing.window;\n const len = data.length;\n let p = 0;\n\n if (outgoing.state !== 'open')\n return;\n\n while (len - p > 0 && window > 0) {\n let sliceLen = len - p;\n if (sliceLen > window)\n sliceLen = window;\n if (sliceLen > packetSize)\n sliceLen = packetSize;\n\n if (p === 0 && sliceLen === len)\n protocol.channelExtData(id, data, STDERR);\n else\n protocol.channelExtData(id, bufferSlice(data, p, p + sliceLen), STDERR);\n\n p += sliceLen;\n window -= sliceLen;\n }\n\n outgoing.window = window;\n\n if (len - p > 0) {\n if (window === 0)\n channel._waitWindow = true;\n if (p > 0)\n channel._chunkErr = bufferSlice(data, p, len);\n else\n channel._chunkErr = data;\n channel._chunkcbErr = cb;\n return;\n }\n\n cb();\n }\n}\n\nclass Channel extends DuplexStream {\n constructor(client, info, opts) {\n const streamOpts = {\n highWaterMark: MAX_WINDOW,\n allowHalfOpen: (!opts || (opts && opts.allowHalfOpen !== false)),\n emitClose: false,\n };\n super(streamOpts);\n this.allowHalfOpen = streamOpts.allowHalfOpen;\n\n const server = !!(opts && opts.server);\n\n this.server = server;\n this.type = info.type;\n this.subtype = undefined;\n\n /*\n incoming and outgoing contain these properties:\n {\n id: undefined,\n window: undefined,\n packetSize: undefined,\n state: 'closed'\n }\n */\n this.incoming = info.incoming;\n this.outgoing = info.outgoing;\n this._callbacks = [];\n\n this._client = client;\n this._hasX11 = false;\n this._exit = {\n code: undefined,\n signal: undefined,\n dump: undefined,\n desc: undefined,\n };\n\n this.stdin = this.stdout = this;\n\n if (server)\n this.stderr = new ServerStderr(this);\n else\n this.stderr = new ClientStderr(this, streamOpts);\n\n // Outgoing data\n this._waitWindow = false; // SSH-level backpressure\n\n // Incoming data\n this._waitChanDrain = false; // Channel Readable side backpressure\n\n this._chunk = undefined;\n this._chunkcb = undefined;\n this._chunkErr = undefined;\n this._chunkcbErr = undefined;\n\n this.on('finish', onFinish)\n .on('prefinish', onFinish); // For node v0.11+\n\n this.on('end', onEnd).on('close', onEnd);\n }\n\n _read(n) {\n if (this._waitChanDrain) {\n this._waitChanDrain = false;\n if (this.incoming.window <= WINDOW_THRESHOLD)\n windowAdjust(this);\n }\n }\n\n _write(data, encoding, cb) {\n const protocol = this._client._protocol;\n const outgoing = this.outgoing;\n const packetSize = outgoing.packetSize;\n const id = outgoing.id;\n let window = outgoing.window;\n const len = data.length;\n let p = 0;\n\n if (outgoing.state !== 'open')\n return;\n\n while (len - p > 0 && window > 0) {\n let sliceLen = len - p;\n if (sliceLen > window)\n sliceLen = window;\n if (sliceLen > packetSize)\n sliceLen = packetSize;\n\n if (p === 0 && sliceLen === len)\n protocol.channelData(id, data);\n else\n protocol.channelData(id, bufferSlice(data, p, p + sliceLen));\n\n p += sliceLen;\n window -= sliceLen;\n }\n\n outgoing.window = window;\n\n if (len - p > 0) {\n if (window === 0)\n this._waitWindow = true;\n if (p > 0)\n this._chunk = bufferSlice(data, p, len);\n else\n this._chunk = data;\n this._chunkcb = cb;\n return;\n }\n\n cb();\n }\n\n eof() {\n if (this.outgoing.state === 'open') {\n this.outgoing.state = 'eof';\n this._client._protocol.channelEOF(this.outgoing.id);\n }\n }\n\n close() {\n if (this.outgoing.state === 'open' || this.outgoing.state === 'eof') {\n this.outgoing.state = 'closing';\n this._client._protocol.channelClose(this.outgoing.id);\n }\n }\n\n destroy() {\n this.end();\n this.close();\n return this;\n }\n\n // Session type-specific methods =============================================\n setWindow(rows, cols, height, width) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n if (this.type === 'session'\n && (this.subtype === 'shell' || this.subtype === 'exec')\n && this.writable\n && this.outgoing.state === 'open') {\n this._client._protocol.windowChange(this.outgoing.id,\n rows,\n cols,\n height,\n width);\n }\n }\n\n signal(signalName) {\n if (this.server)\n throw new Error('Client-only method called in server mode');\n\n if (this.type === 'session'\n && this.writable\n && this.outgoing.state === 'open') {\n this._client._protocol.signal(this.outgoing.id, signalName);\n }\n }\n\n exit(statusOrSignal, coreDumped, msg) {\n if (!this.server)\n throw new Error('Server-only method called in client mode');\n\n if (this.type === 'session'\n && this.writable\n && this.outgoing.state === 'open') {\n if (typeof statusOrSignal === 'number') {\n this._client._protocol.exitStatus(this.outgoing.id, statusOrSignal);\n } else {\n this._client._protocol.exitSignal(this.outgoing.id,\n statusOrSignal,\n coreDumped,\n msg);\n }\n }\n }\n\n}\n\nfunction onFinish() {\n this.eof();\n if (this.server || !this.allowHalfOpen)\n this.close();\n this.writable = false;\n}\n\nfunction onEnd() {\n this.readable = false;\n}\n\nfunction windowAdjust(self) {\n if (self.outgoing.state === 'closed')\n return;\n const amt = MAX_WINDOW - self.incoming.window;\n if (amt <= 0)\n return;\n self.incoming.window += amt;\n self._client._protocol.channelWindowAdjust(self.outgoing.id, amt);\n}\n\nmodule.exports = {\n Channel,\n MAX_WINDOW,\n PACKET_SIZE,\n windowAdjust,\n WINDOW_THRESHOLD,\n};\n", "'use strict';\n\nconst { SFTP } = require('./protocol/SFTP.js');\n\nconst MAX_CHANNEL = 2 ** 32 - 1;\n\nfunction onChannelOpenFailure(self, recipient, info, cb) {\n self._chanMgr.remove(recipient);\n if (typeof cb !== 'function')\n return;\n\n let err;\n if (info instanceof Error) {\n err = info;\n } else if (typeof info === 'object' && info !== null) {\n err = new Error(`(SSH) Channel open failure: ${info.description}`);\n err.reason = info.reason;\n } else {\n err = new Error(\n '(SSH) Channel open failure: server closed channel unexpectedly'\n );\n err.reason = '';\n }\n\n cb(err);\n}\n\nfunction onCHANNEL_CLOSE(self, recipient, channel, err, dead) {\n if (typeof channel === 'function') {\n // We got CHANNEL_CLOSE instead of CHANNEL_OPEN_FAILURE when\n // requesting to open a channel\n onChannelOpenFailure(self, recipient, err, channel);\n return;\n }\n\n if (typeof channel !== 'object' || channel === null)\n return;\n\n if (channel.incoming && channel.incoming.state === 'closed')\n return;\n\n self._chanMgr.remove(recipient);\n\n if (channel.server && channel.constructor.name === 'Session')\n return;\n\n channel.incoming.state = 'closed';\n\n if (channel.readable)\n channel.push(null);\n if (channel.server) {\n if (channel.stderr.writable)\n channel.stderr.end();\n } else if (channel.stderr.readable) {\n channel.stderr.push(null);\n }\n\n if (channel.constructor !== SFTP\n && (channel.outgoing.state === 'open'\n || channel.outgoing.state === 'eof')\n && !dead) {\n channel.close();\n }\n if (channel.outgoing.state === 'closing')\n channel.outgoing.state = 'closed';\n\n const readState = channel._readableState;\n const writeState = channel._writableState;\n if (writeState && !writeState.ending && !writeState.finished && !dead)\n channel.end();\n\n // Take care of any outstanding channel requests\n const chanCallbacks = channel._callbacks;\n channel._callbacks = [];\n for (let i = 0; i < chanCallbacks.length; ++i)\n chanCallbacks[i](true);\n\n if (channel.server) {\n if (!channel.readable\n || channel.destroyed\n || (readState && readState.endEmitted)) {\n channel.emit('close');\n } else {\n channel.once('end', () => channel.emit('close'));\n }\n } else {\n let doClose;\n switch (channel.type) {\n case 'direct-streamlocal@openssh.com':\n case 'direct-tcpip':\n doClose = () => channel.emit('close');\n break;\n default: {\n // Align more with node child processes, where the close event gets\n // the same arguments as the exit event\n const exit = channel._exit;\n doClose = () => {\n if (exit.code === null)\n channel.emit('close', exit.code, exit.signal, exit.dump, exit.desc);\n else\n channel.emit('close', exit.code);\n };\n }\n }\n if (!channel.readable\n || channel.destroyed\n || (readState && readState.endEmitted)) {\n doClose();\n } else {\n channel.once('end', doClose);\n }\n\n const errReadState = channel.stderr._readableState;\n if (!channel.stderr.readable\n || channel.stderr.destroyed\n || (errReadState && errReadState.endEmitted)) {\n channel.stderr.emit('close');\n } else {\n channel.stderr.once('end', () => channel.stderr.emit('close'));\n }\n }\n}\n\nclass ChannelManager {\n constructor(client) {\n this._client = client;\n this._channels = {};\n this._cur = -1;\n this._count = 0;\n }\n add(val) {\n // Attempt to reserve an id\n\n let id;\n // Optimized paths\n if (this._cur < MAX_CHANNEL) {\n id = ++this._cur;\n } else if (this._count === 0) {\n // Revert and reset back to fast path once we no longer have any channels\n // open\n this._cur = 0;\n id = 0;\n } else {\n // Slower lookup path\n\n // This path is triggered we have opened at least MAX_CHANNEL channels\n // while having at least one channel open at any given time, so we have\n // to search for a free id.\n const channels = this._channels;\n for (let i = 0; i < MAX_CHANNEL; ++i) {\n if (channels[i] === undefined) {\n id = i;\n break;\n }\n }\n }\n\n if (id === undefined)\n return -1;\n\n this._channels[id] = (val || true);\n ++this._count;\n\n return id;\n }\n update(id, val) {\n if (typeof id !== 'number' || id < 0 || id >= MAX_CHANNEL || !isFinite(id))\n throw new Error(`Invalid channel id: ${id}`);\n\n if (val && this._channels[id])\n this._channels[id] = val;\n }\n get(id) {\n if (typeof id !== 'number' || id < 0 || id >= MAX_CHANNEL || !isFinite(id))\n throw new Error(`Invalid channel id: ${id}`);\n\n return this._channels[id];\n }\n remove(id) {\n if (typeof id !== 'number' || id < 0 || id >= MAX_CHANNEL || !isFinite(id))\n throw new Error(`Invalid channel id: ${id}`);\n\n if (this._channels[id]) {\n delete this._channels[id];\n if (this._count)\n --this._count;\n }\n }\n cleanup(err) {\n const channels = this._channels;\n this._channels = {};\n this._cur = -1;\n this._count = 0;\n\n const chanIDs = Object.keys(channels);\n const client = this._client;\n for (let i = 0; i < chanIDs.length; ++i) {\n const id = +chanIDs[i];\n const channel = channels[id];\n onCHANNEL_CLOSE(client, id, channel._channel || channel, err, true);\n }\n }\n}\n\nconst isRegExp = (() => {\n const toString = Object.prototype.toString;\n return (val) => toString.call(val) === '[object RegExp]';\n})();\n\nfunction generateAlgorithmList(algoList, defaultList, supportedList) {\n if (Array.isArray(algoList) && algoList.length > 0) {\n // Exact list\n for (let i = 0; i < algoList.length; ++i) {\n if (supportedList.indexOf(algoList[i]) === -1)\n throw new Error(`Unsupported algorithm: ${algoList[i]}`);\n }\n return algoList;\n }\n\n if (typeof algoList === 'object' && algoList !== null) {\n // Operations based on the default list\n const keys = Object.keys(algoList);\n let list = defaultList;\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n let val = algoList[key];\n switch (key) {\n case 'append':\n if (!Array.isArray(val))\n val = [val];\n if (Array.isArray(val)) {\n for (let j = 0; j < val.length; ++j) {\n const append = val[j];\n if (typeof append === 'string') {\n if (!append || list.indexOf(append) !== -1)\n continue;\n if (supportedList.indexOf(append) === -1)\n throw new Error(`Unsupported algorithm: ${append}`);\n if (list === defaultList)\n list = list.slice();\n list.push(append);\n } else if (isRegExp(append)) {\n for (let k = 0; k < supportedList.length; ++k) {\n const algo = supportedList[k];\n if (append.test(algo)) {\n if (list.indexOf(algo) !== -1)\n continue;\n if (list === defaultList)\n list = list.slice();\n list.push(algo);\n }\n }\n }\n }\n }\n break;\n case 'prepend':\n if (!Array.isArray(val))\n val = [val];\n if (Array.isArray(val)) {\n for (let j = val.length; j >= 0; --j) {\n const prepend = val[j];\n if (typeof prepend === 'string') {\n if (!prepend || list.indexOf(prepend) !== -1)\n continue;\n if (supportedList.indexOf(prepend) === -1)\n throw new Error(`Unsupported algorithm: ${prepend}`);\n if (list === defaultList)\n list = list.slice();\n list.unshift(prepend);\n } else if (isRegExp(prepend)) {\n for (let k = supportedList.length; k >= 0; --k) {\n const algo = supportedList[k];\n if (prepend.test(algo)) {\n if (list.indexOf(algo) !== -1)\n continue;\n if (list === defaultList)\n list = list.slice();\n list.unshift(algo);\n }\n }\n }\n }\n }\n break;\n case 'remove':\n if (!Array.isArray(val))\n val = [val];\n if (Array.isArray(val)) {\n for (let j = 0; j < val.length; ++j) {\n const search = val[j];\n if (typeof search === 'string') {\n if (!search)\n continue;\n const idx = list.indexOf(search);\n if (idx === -1)\n continue;\n if (list === defaultList)\n list = list.slice();\n list.splice(idx, 1);\n } else if (isRegExp(search)) {\n for (let k = 0; k < list.length; ++k) {\n if (search.test(list[k])) {\n if (list === defaultList)\n list = list.slice();\n list.splice(k, 1);\n --k;\n }\n }\n }\n }\n }\n break;\n }\n }\n\n return list;\n }\n\n return defaultList;\n}\n\nmodule.exports = {\n ChannelManager,\n generateAlgorithmList,\n onChannelOpenFailure,\n onCHANNEL_CLOSE,\n isWritable: (stream) => {\n // XXX: hack to workaround regression in node\n // See: https://github.com/nodejs/node/issues/36029\n return (stream\n && stream.writable\n && stream._readableState\n && stream._readableState.ended === false);\n },\n};\n", "// TODO:\n// * add `.connected` or similar property to allow immediate connection\n// status checking\n// * add/improve debug output during user authentication phase\n'use strict';\n\nconst {\n createHash,\n getHashes,\n randomFillSync,\n} = require('crypto');\nconst { Socket } = require('net');\nconst { lookup: dnsLookup } = require('dns');\nconst EventEmitter = require('events');\nconst HASHES = getHashes();\n\nconst {\n COMPAT,\n CHANNEL_EXTENDED_DATATYPE: { STDERR },\n CHANNEL_OPEN_FAILURE,\n DEFAULT_CIPHER,\n DEFAULT_COMPRESSION,\n DEFAULT_KEX,\n DEFAULT_MAC,\n DEFAULT_SERVER_HOST_KEY,\n DISCONNECT_REASON,\n DISCONNECT_REASON_BY_VALUE,\n SUPPORTED_CIPHER,\n SUPPORTED_COMPRESSION,\n SUPPORTED_KEX,\n SUPPORTED_MAC,\n SUPPORTED_SERVER_HOST_KEY,\n} = require('./protocol/constants.js');\nconst { init: cryptoInit } = require('./protocol/crypto.js');\nconst Protocol = require('./protocol/Protocol.js');\nconst { parseKey } = require('./protocol/keyParser.js');\nconst { SFTP } = require('./protocol/SFTP.js');\nconst {\n bufferCopy,\n makeBufferParser,\n makeError,\n readUInt32BE,\n sigSSHToASN1,\n writeUInt32BE,\n} = require('./protocol/utils.js');\n\nconst { AgentContext, createAgent, isAgent } = require('./agent.js');\nconst {\n Channel,\n MAX_WINDOW,\n PACKET_SIZE,\n windowAdjust,\n WINDOW_THRESHOLD,\n} = require('./Channel.js');\nconst {\n ChannelManager,\n generateAlgorithmList,\n isWritable,\n onChannelOpenFailure,\n onCHANNEL_CLOSE,\n} = require('./utils.js');\n\nconst bufferParser = makeBufferParser();\nconst sigParser = makeBufferParser();\nconst RE_OPENSSH = /^OpenSSH_(?:(?![0-4])\\d)|(?:\\d{2,})/;\nconst noop = (err) => {};\n\nclass Client extends EventEmitter {\n constructor() {\n super();\n\n this.config = {\n host: undefined,\n port: undefined,\n localAddress: undefined,\n localPort: undefined,\n forceIPv4: undefined,\n forceIPv6: undefined,\n keepaliveCountMax: undefined,\n keepaliveInterval: undefined,\n readyTimeout: undefined,\n ident: undefined,\n\n username: undefined,\n password: undefined,\n privateKey: undefined,\n tryKeyboard: undefined,\n agent: undefined,\n allowAgentFwd: undefined,\n authHandler: undefined,\n\n hostHashAlgo: undefined,\n hostHashCb: undefined,\n strictVendor: undefined,\n debug: undefined\n };\n\n this._agent = undefined;\n this._readyTimeout = undefined;\n this._chanMgr = undefined;\n this._callbacks = undefined;\n this._forwarding = undefined;\n this._forwardingUnix = undefined;\n this._acceptX11 = undefined;\n this._agentFwdEnabled = undefined;\n this._remoteVer = undefined;\n\n this._protocol = undefined;\n this._sock = undefined;\n this._resetKA = undefined;\n }\n\n connect(cfg) {\n if (this._sock && isWritable(this._sock)) {\n this.once('close', () => {\n this.connect(cfg);\n });\n this.end();\n return this;\n }\n\n this.config.host = cfg.hostname || cfg.host || 'localhost';\n this.config.port = cfg.port || 22;\n this.config.localAddress = (typeof cfg.localAddress === 'string'\n ? cfg.localAddress\n : undefined);\n this.config.localPort = (typeof cfg.localPort === 'string'\n || typeof cfg.localPort === 'number'\n ? cfg.localPort\n : undefined);\n this.config.forceIPv4 = cfg.forceIPv4 || false;\n this.config.forceIPv6 = cfg.forceIPv6 || false;\n this.config.keepaliveCountMax = (typeof cfg.keepaliveCountMax === 'number'\n && cfg.keepaliveCountMax >= 0\n ? cfg.keepaliveCountMax\n : 3);\n this.config.keepaliveInterval = (typeof cfg.keepaliveInterval === 'number'\n && cfg.keepaliveInterval > 0\n ? cfg.keepaliveInterval\n : 0);\n this.config.readyTimeout = (typeof cfg.readyTimeout === 'number'\n && cfg.readyTimeout >= 0\n ? cfg.readyTimeout\n : 20000);\n this.config.ident = (typeof cfg.ident === 'string'\n || Buffer.isBuffer(cfg.ident)\n ? cfg.ident\n : undefined);\n\n const algorithms = {\n kex: undefined,\n serverHostKey: undefined,\n cs: {\n cipher: undefined,\n mac: undefined,\n compress: undefined,\n lang: [],\n },\n sc: undefined,\n };\n let allOfferDefaults = true;\n if (typeof cfg.algorithms === 'object' && cfg.algorithms !== null) {\n algorithms.kex = generateAlgorithmList(cfg.algorithms.kex,\n DEFAULT_KEX,\n SUPPORTED_KEX);\n if (algorithms.kex !== DEFAULT_KEX)\n allOfferDefaults = false;\n\n algorithms.serverHostKey =\n generateAlgorithmList(cfg.algorithms.serverHostKey,\n DEFAULT_SERVER_HOST_KEY,\n SUPPORTED_SERVER_HOST_KEY);\n if (algorithms.serverHostKey !== DEFAULT_SERVER_HOST_KEY)\n allOfferDefaults = false;\n\n algorithms.cs.cipher = generateAlgorithmList(cfg.algorithms.cipher,\n DEFAULT_CIPHER,\n SUPPORTED_CIPHER);\n if (algorithms.cs.cipher !== DEFAULT_CIPHER)\n allOfferDefaults = false;\n\n algorithms.cs.mac = generateAlgorithmList(cfg.algorithms.hmac,\n DEFAULT_MAC,\n SUPPORTED_MAC);\n if (algorithms.cs.mac !== DEFAULT_MAC)\n allOfferDefaults = false;\n\n algorithms.cs.compress = generateAlgorithmList(cfg.algorithms.compress,\n DEFAULT_COMPRESSION,\n SUPPORTED_COMPRESSION);\n if (algorithms.cs.compress !== DEFAULT_COMPRESSION)\n allOfferDefaults = false;\n\n if (!allOfferDefaults)\n algorithms.sc = algorithms.cs;\n }\n\n if (typeof cfg.username === 'string')\n this.config.username = cfg.username;\n else if (typeof cfg.user === 'string')\n this.config.username = cfg.user;\n else\n throw new Error('Invalid username');\n\n this.config.password = (typeof cfg.password === 'string'\n ? cfg.password\n : undefined);\n this.config.privateKey = (typeof cfg.privateKey === 'string'\n || Buffer.isBuffer(cfg.privateKey)\n ? cfg.privateKey\n : undefined);\n this.config.localHostname = (typeof cfg.localHostname === 'string'\n ? cfg.localHostname\n : undefined);\n this.config.localUsername = (typeof cfg.localUsername === 'string'\n ? cfg.localUsername\n : undefined);\n this.config.tryKeyboard = (cfg.tryKeyboard === true);\n if (typeof cfg.agent === 'string' && cfg.agent.length)\n this.config.agent = createAgent(cfg.agent);\n else if (isAgent(cfg.agent))\n this.config.agent = cfg.agent;\n else\n this.config.agent = undefined;\n this.config.allowAgentFwd = (cfg.agentForward === true\n && this.config.agent !== undefined);\n let authHandler = this.config.authHandler = (\n typeof cfg.authHandler === 'function'\n || Array.isArray(cfg.authHandler)\n ? cfg.authHandler\n : undefined\n );\n\n this.config.strictVendor = (typeof cfg.strictVendor === 'boolean'\n ? cfg.strictVendor\n : true);\n\n const debug = this.config.debug = (typeof cfg.debug === 'function'\n ? cfg.debug\n : undefined);\n\n if (cfg.agentForward === true && !this.config.allowAgentFwd) {\n throw new Error(\n 'You must set a valid agent path to allow agent forwarding'\n );\n }\n\n let callbacks = this._callbacks = [];\n this._chanMgr = new ChannelManager(this);\n this._forwarding = {};\n this._forwardingUnix = {};\n this._acceptX11 = 0;\n this._agentFwdEnabled = false;\n this._agent = (this.config.agent ? this.config.agent : undefined);\n this._remoteVer = undefined;\n let privateKey;\n\n if (this.config.privateKey) {\n privateKey = parseKey(this.config.privateKey, cfg.passphrase);\n if (privateKey instanceof Error)\n throw new Error(`Cannot parse privateKey: ${privateKey.message}`);\n if (Array.isArray(privateKey)) {\n // OpenSSH's newer format only stores 1 key for now\n privateKey = privateKey[0];\n }\n if (privateKey.getPrivatePEM() === null) {\n throw new Error(\n 'privateKey value does not contain a (valid) private key'\n );\n }\n }\n\n let hostVerifier;\n if (typeof cfg.hostVerifier === 'function') {\n const hashCb = cfg.hostVerifier;\n let hashAlgo;\n if (HASHES.indexOf(cfg.hostHash) !== -1) {\n // Default to old behavior of hashing on user's behalf\n hashAlgo = cfg.hostHash;\n }\n hostVerifier = (key, verify) => {\n if (hashAlgo)\n key = createHash(hashAlgo).update(key).digest('hex');\n const ret = hashCb(key, verify);\n if (ret !== undefined)\n verify(ret);\n };\n }\n\n const sock = this._sock = (cfg.sock || new Socket());\n let ready = false;\n let sawHeader = false;\n if (this._protocol)\n this._protocol.cleanup();\n const DEBUG_HANDLER = (!debug ? undefined : (p, display, msg) => {\n debug(`Debug output from server: ${JSON.stringify(msg)}`);\n });\n let serverSigAlgs;\n const proto = this._protocol = new Protocol({\n ident: this.config.ident,\n offer: (allOfferDefaults ? undefined : algorithms),\n onWrite: (data) => {\n if (isWritable(sock))\n sock.write(data);\n },\n onError: (err) => {\n if (err.level === 'handshake')\n clearTimeout(this._readyTimeout);\n if (!proto._destruct)\n sock.removeAllListeners('data');\n this.emit('error', err);\n try {\n sock.end();\n } catch {}\n },\n onHeader: (header) => {\n sawHeader = true;\n this._remoteVer = header.versions.software;\n if (header.greeting)\n this.emit('greeting', header.greeting);\n },\n onHandshakeComplete: (negotiated) => {\n this.emit('handshake', negotiated);\n if (!ready) {\n ready = true;\n proto.service('ssh-userauth');\n }\n },\n debug,\n hostVerifier,\n messageHandlers: {\n DEBUG: DEBUG_HANDLER,\n DISCONNECT: (p, reason, desc) => {\n if (reason !== DISCONNECT_REASON.BY_APPLICATION) {\n if (!desc) {\n desc = DISCONNECT_REASON_BY_VALUE[reason];\n if (desc === undefined)\n desc = `Unexpected disconnection reason: ${reason}`;\n }\n const err = new Error(desc);\n err.code = reason;\n this.emit('error', err);\n }\n sock.end();\n },\n SERVICE_ACCEPT: (p, name) => {\n if (name === 'ssh-userauth')\n tryNextAuth();\n },\n EXT_INFO: (p, exts) => {\n if (serverSigAlgs === undefined) {\n for (const ext of exts) {\n if (ext.name === 'server-sig-algs') {\n serverSigAlgs = ext.algs;\n return;\n }\n }\n serverSigAlgs = null;\n }\n },\n USERAUTH_BANNER: (p, msg) => {\n this.emit('banner', msg);\n },\n USERAUTH_SUCCESS: (p) => {\n // Start keepalive mechanism\n resetKA();\n\n clearTimeout(this._readyTimeout);\n\n this.emit('ready');\n },\n USERAUTH_FAILURE: (p, authMethods, partialSuccess) => {\n // For key-based authentication, check if we should retry the current\n // key with a different algorithm first\n if (curAuth.keyAlgos) {\n const oldKeyAlgo = curAuth.keyAlgos[0][0];\n if (debug)\n debug(`Client: ${curAuth.type} (${oldKeyAlgo}) auth failed`);\n curAuth.keyAlgos.shift();\n if (curAuth.keyAlgos.length) {\n const [keyAlgo, hashAlgo] = curAuth.keyAlgos[0];\n switch (curAuth.type) {\n case 'agent':\n proto.authPK(\n curAuth.username,\n curAuth.agentCtx.currentKey(),\n keyAlgo\n );\n return;\n case 'publickey':\n proto.authPK(curAuth.username, curAuth.key, keyAlgo);\n return;\n case 'hostbased':\n proto.authHostbased(curAuth.username,\n curAuth.key,\n curAuth.localHostname,\n curAuth.localUsername,\n keyAlgo,\n (buf, cb) => {\n const signature = curAuth.key.sign(buf, hashAlgo);\n if (signature instanceof Error) {\n signature.message =\n `Error while signing with key: ${signature.message}`;\n signature.level = 'client-authentication';\n this.emit('error', signature);\n return tryNextAuth();\n }\n\n cb(signature);\n });\n return;\n }\n } else {\n curAuth.keyAlgos = undefined;\n }\n }\n\n if (curAuth.type === 'agent') {\n const pos = curAuth.agentCtx.pos();\n debug && debug(`Client: Agent key #${pos + 1} failed`);\n return tryNextAgentKey();\n }\n\n debug && debug(`Client: ${curAuth.type} auth failed`);\n\n curPartial = partialSuccess;\n curAuthsLeft = authMethods;\n tryNextAuth();\n },\n USERAUTH_PASSWD_CHANGEREQ: (p, prompt) => {\n if (curAuth.type === 'password') {\n // TODO: support a `changePrompt()` on `curAuth` that defaults to\n // emitting 'change password' as before\n this.emit('change password', prompt, (newPassword) => {\n proto.authPassword(\n this.config.username,\n this.config.password,\n newPassword\n );\n });\n }\n },\n USERAUTH_PK_OK: (p) => {\n let keyAlgo;\n let hashAlgo;\n if (curAuth.keyAlgos)\n [keyAlgo, hashAlgo] = curAuth.keyAlgos[0];\n if (curAuth.type === 'agent') {\n const key = curAuth.agentCtx.currentKey();\n proto.authPK(curAuth.username, key, keyAlgo, (buf, cb) => {\n const opts = { hash: hashAlgo };\n curAuth.agentCtx.sign(key, buf, opts, (err, signed) => {\n if (err) {\n err.level = 'agent';\n this.emit('error', err);\n } else {\n return cb(signed);\n }\n\n tryNextAgentKey();\n });\n });\n } else if (curAuth.type === 'publickey') {\n proto.authPK(curAuth.username, curAuth.key, keyAlgo, (buf, cb) => {\n const signature = curAuth.key.sign(buf, hashAlgo);\n if (signature instanceof Error) {\n signature.message =\n `Error signing data with key: ${signature.message}`;\n signature.level = 'client-authentication';\n this.emit('error', signature);\n return tryNextAuth();\n }\n cb(signature);\n });\n }\n },\n USERAUTH_INFO_REQUEST: (p, name, instructions, prompts) => {\n if (curAuth.type === 'keyboard-interactive') {\n const nprompts = (Array.isArray(prompts) ? prompts.length : 0);\n if (nprompts === 0) {\n debug && debug(\n 'Client: Sending automatic USERAUTH_INFO_RESPONSE'\n );\n proto.authInfoRes();\n return;\n }\n // We sent a keyboard-interactive user authentication request and\n // now the server is sending us the prompts we need to present to\n // the user\n curAuth.prompt(\n name,\n instructions,\n '',\n prompts,\n (answers) => {\n proto.authInfoRes(answers);\n }\n );\n }\n },\n REQUEST_SUCCESS: (p, data) => {\n if (callbacks.length)\n callbacks.shift()(false, data);\n },\n REQUEST_FAILURE: (p) => {\n if (callbacks.length)\n callbacks.shift()(true);\n },\n GLOBAL_REQUEST: (p, name, wantReply, data) => {\n switch (name) {\n case 'hostkeys-00@openssh.com':\n // Automatically verify keys before passing to end user\n hostKeysProve(this, data, (err, keys) => {\n if (err)\n return;\n this.emit('hostkeys', keys);\n });\n if (wantReply)\n proto.requestSuccess();\n break;\n default:\n // Auto-reject all other global requests, this can be especially\n // useful if the server is sending us dummy keepalive global\n // requests\n if (wantReply)\n proto.requestFailure();\n }\n },\n CHANNEL_OPEN: (p, info) => {\n // Handle incoming requests from server, typically a forwarded TCP or\n // X11 connection\n onCHANNEL_OPEN(this, info);\n },\n CHANNEL_OPEN_CONFIRMATION: (p, info) => {\n const channel = this._chanMgr.get(info.recipient);\n if (typeof channel !== 'function')\n return;\n\n const isSFTP = (channel.type === 'sftp');\n const type = (isSFTP ? 'session' : channel.type);\n const chanInfo = {\n type,\n incoming: {\n id: info.recipient,\n window: MAX_WINDOW,\n packetSize: PACKET_SIZE,\n state: 'open'\n },\n outgoing: {\n id: info.sender,\n window: info.window,\n packetSize: info.packetSize,\n state: 'open'\n }\n };\n const instance = (\n isSFTP\n ? new SFTP(this, chanInfo, { debug })\n : new Channel(this, chanInfo)\n );\n this._chanMgr.update(info.recipient, instance);\n channel(undefined, instance);\n },\n CHANNEL_OPEN_FAILURE: (p, recipient, reason, description) => {\n const channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'function')\n return;\n\n const info = { reason, description };\n onChannelOpenFailure(this, recipient, info, channel);\n },\n CHANNEL_DATA: (p, recipient, data) => {\n const channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n // The remote party should not be sending us data if there is no\n // window space available ...\n // TODO: raise error on data with not enough window?\n if (channel.incoming.window === 0)\n return;\n\n channel.incoming.window -= data.length;\n\n if (channel.push(data) === false) {\n channel._waitChanDrain = true;\n return;\n }\n\n if (channel.incoming.window <= WINDOW_THRESHOLD)\n windowAdjust(channel);\n },\n CHANNEL_EXTENDED_DATA: (p, recipient, data, type) => {\n if (type !== STDERR)\n return;\n\n const channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n // The remote party should not be sending us data if there is no\n // window space available ...\n // TODO: raise error on data with not enough window?\n if (channel.incoming.window === 0)\n return;\n\n channel.incoming.window -= data.length;\n\n if (!channel.stderr.push(data)) {\n channel._waitChanDrain = true;\n return;\n }\n\n if (channel.incoming.window <= WINDOW_THRESHOLD)\n windowAdjust(channel);\n },\n CHANNEL_WINDOW_ADJUST: (p, recipient, amount) => {\n const channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n // The other side is allowing us to send `amount` more bytes of data\n channel.outgoing.window += amount;\n\n if (channel._waitWindow) {\n channel._waitWindow = false;\n\n if (channel._chunk) {\n channel._write(channel._chunk, null, channel._chunkcb);\n } else if (channel._chunkcb) {\n channel._chunkcb();\n } else if (channel._chunkErr) {\n channel.stderr._write(channel._chunkErr,\n null,\n channel._chunkcbErr);\n } else if (channel._chunkcbErr) {\n channel._chunkcbErr();\n }\n }\n },\n CHANNEL_SUCCESS: (p, recipient) => {\n const channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n this._resetKA();\n\n if (channel._callbacks.length)\n channel._callbacks.shift()(false);\n },\n CHANNEL_FAILURE: (p, recipient) => {\n const channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n this._resetKA();\n\n if (channel._callbacks.length)\n channel._callbacks.shift()(true);\n },\n CHANNEL_REQUEST: (p, recipient, type, wantReply, data) => {\n const channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n const exit = channel._exit;\n if (exit.code !== undefined)\n return;\n switch (type) {\n case 'exit-status':\n channel.emit('exit', exit.code = data);\n return;\n case 'exit-signal':\n channel.emit('exit',\n exit.code = null,\n exit.signal = `SIG${data.signal}`,\n exit.dump = data.coreDumped,\n exit.desc = data.errorMessage);\n return;\n }\n\n // Keepalive request? OpenSSH will send one as a channel request if\n // there is a channel open\n\n if (wantReply)\n p.channelFailure(channel.outgoing.id);\n },\n CHANNEL_EOF: (p, recipient) => {\n const channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n if (channel.incoming.state !== 'open')\n return;\n channel.incoming.state = 'eof';\n\n if (channel.readable)\n channel.push(null);\n if (channel.stderr.readable)\n channel.stderr.push(null);\n },\n CHANNEL_CLOSE: (p, recipient) => {\n onCHANNEL_CLOSE(this, recipient, this._chanMgr.get(recipient));\n },\n },\n });\n\n sock.pause();\n\n // TODO: check keepalive implementation\n // Keepalive-related\n const kainterval = this.config.keepaliveInterval;\n const kacountmax = this.config.keepaliveCountMax;\n let kacount = 0;\n let katimer;\n const sendKA = () => {\n if (++kacount > kacountmax) {\n clearInterval(katimer);\n if (sock.readable) {\n const err = new Error('Keepalive timeout');\n err.level = 'client-timeout';\n this.emit('error', err);\n sock.destroy();\n }\n return;\n }\n if (isWritable(sock)) {\n // Append dummy callback to keep correct callback order\n callbacks.push(resetKA);\n proto.ping();\n } else {\n clearInterval(katimer);\n }\n };\n function resetKA() {\n if (kainterval > 0) {\n kacount = 0;\n clearInterval(katimer);\n if (isWritable(sock))\n katimer = setInterval(sendKA, kainterval);\n }\n }\n this._resetKA = resetKA;\n\n const onDone = (() => {\n let called = false;\n return () => {\n if (called)\n return;\n called = true;\n if (wasConnected && !sawHeader) {\n const err =\n makeError('Connection lost before handshake', 'protocol', true);\n this.emit('error', err);\n }\n };\n })();\n const onConnect = (() => {\n let called = false;\n return () => {\n if (called)\n return;\n called = true;\n\n wasConnected = true;\n debug && debug('Socket connected');\n this.emit('connect');\n\n cryptoInit.then(() => {\n proto.start();\n sock.on('data', (data) => {\n try {\n proto.parse(data, 0, data.length);\n } catch (ex) {\n this.emit('error', ex);\n try {\n if (isWritable(sock))\n sock.end();\n } catch {}\n }\n });\n\n // Drain stderr if we are connection hopping using an exec stream\n if (sock.stderr && typeof sock.stderr.resume === 'function')\n sock.stderr.resume();\n\n sock.resume();\n }).catch((err) => {\n this.emit('error', err);\n try {\n if (isWritable(sock))\n sock.end();\n } catch {}\n });\n };\n })();\n let wasConnected = false;\n sock.on('connect', onConnect)\n .on('timeout', () => {\n this.emit('timeout');\n }).on('error', (err) => {\n debug && debug(`Socket error: ${err.message}`);\n clearTimeout(this._readyTimeout);\n err.level = 'client-socket';\n this.emit('error', err);\n }).on('end', () => {\n debug && debug('Socket ended');\n onDone();\n proto.cleanup();\n clearTimeout(this._readyTimeout);\n clearInterval(katimer);\n this.emit('end');\n }).on('close', () => {\n debug && debug('Socket closed');\n onDone();\n proto.cleanup();\n clearTimeout(this._readyTimeout);\n clearInterval(katimer);\n this.emit('close');\n\n // Notify outstanding channel requests of disconnection ...\n const callbacks_ = callbacks;\n callbacks = this._callbacks = [];\n const err = new Error('No response from server');\n for (let i = 0; i < callbacks_.length; ++i)\n callbacks_[i](err);\n\n // Simulate error for any channels waiting to be opened\n this._chanMgr.cleanup(err);\n });\n\n // Begin authentication handling ===========================================\n let curAuth;\n let curPartial = null;\n let curAuthsLeft = null;\n const authsAllowed = ['none'];\n if (this.config.password !== undefined)\n authsAllowed.push('password');\n if (privateKey !== undefined)\n authsAllowed.push('publickey');\n if (this._agent !== undefined)\n authsAllowed.push('agent');\n if (this.config.tryKeyboard)\n authsAllowed.push('keyboard-interactive');\n if (privateKey !== undefined\n && this.config.localHostname !== undefined\n && this.config.localUsername !== undefined) {\n authsAllowed.push('hostbased');\n }\n\n if (Array.isArray(authHandler))\n authHandler = makeSimpleAuthHandler(authHandler);\n else if (typeof authHandler !== 'function')\n authHandler = makeSimpleAuthHandler(authsAllowed);\n\n let hasSentAuth = false;\n const doNextAuth = (nextAuth) => {\n if (hasSentAuth)\n return;\n hasSentAuth = true;\n\n if (nextAuth === false) {\n const err = new Error('All configured authentication methods failed');\n err.level = 'client-authentication';\n this.emit('error', err);\n this.end();\n return;\n }\n\n if (typeof nextAuth === 'string') {\n // Remain backwards compatible with original `authHandler()` usage,\n // which only supported passing names of next method to try using data\n // from the `connect()` config object\n\n const type = nextAuth;\n if (authsAllowed.indexOf(type) === -1)\n return skipAuth(`Authentication method not allowed: ${type}`);\n\n const username = this.config.username;\n switch (type) {\n case 'password':\n nextAuth = { type, username, password: this.config.password };\n break;\n case 'publickey':\n nextAuth = { type, username, key: privateKey };\n break;\n case 'hostbased':\n nextAuth = {\n type,\n username,\n key: privateKey,\n localHostname: this.config.localHostname,\n localUsername: this.config.localUsername,\n };\n break;\n case 'agent':\n nextAuth = {\n type,\n username,\n agentCtx: new AgentContext(this._agent),\n };\n break;\n case 'keyboard-interactive':\n nextAuth = {\n type,\n username,\n prompt: (...args) => this.emit('keyboard-interactive', ...args),\n };\n break;\n case 'none':\n nextAuth = { type, username };\n break;\n default:\n return skipAuth(\n `Skipping unsupported authentication method: ${nextAuth}`\n );\n }\n } else if (typeof nextAuth !== 'object' || nextAuth === null) {\n return skipAuth(\n `Skipping invalid authentication attempt: ${nextAuth}`\n );\n } else {\n const username = nextAuth.username;\n if (typeof username !== 'string') {\n return skipAuth(\n `Skipping invalid authentication attempt: ${nextAuth}`\n );\n }\n const type = nextAuth.type;\n switch (type) {\n case 'password': {\n const { password } = nextAuth;\n if (typeof password !== 'string' && !Buffer.isBuffer(password))\n return skipAuth('Skipping invalid password auth attempt');\n nextAuth = { type, username, password };\n break;\n }\n case 'publickey': {\n const key = parseKey(nextAuth.key, nextAuth.passphrase);\n if (key instanceof Error)\n return skipAuth('Skipping invalid key auth attempt');\n if (!key.isPrivateKey())\n return skipAuth('Skipping non-private key');\n nextAuth = { type, username, key };\n break;\n }\n case 'hostbased': {\n const { localHostname, localUsername } = nextAuth;\n const key = parseKey(nextAuth.key, nextAuth.passphrase);\n if (key instanceof Error\n || typeof localHostname !== 'string'\n || typeof localUsername !== 'string') {\n return skipAuth('Skipping invalid hostbased auth attempt');\n }\n if (!key.isPrivateKey())\n return skipAuth('Skipping non-private key');\n nextAuth = { type, username, key, localHostname, localUsername };\n break;\n }\n case 'agent': {\n let agent = nextAuth.agent;\n if (typeof agent === 'string' && agent.length) {\n agent = createAgent(agent);\n } else if (!isAgent(agent)) {\n return skipAuth(\n `Skipping invalid agent: ${nextAuth.agent}`\n );\n }\n nextAuth = { type, username, agentCtx: new AgentContext(agent) };\n break;\n }\n case 'keyboard-interactive': {\n const { prompt } = nextAuth;\n if (typeof prompt !== 'function') {\n return skipAuth(\n 'Skipping invalid keyboard-interactive auth attempt'\n );\n }\n nextAuth = { type, username, prompt };\n break;\n }\n case 'none':\n nextAuth = { type, username };\n break;\n default:\n return skipAuth(\n `Skipping unsupported authentication method: ${nextAuth}`\n );\n }\n }\n curAuth = nextAuth;\n\n // Begin authentication method's process\n try {\n const username = curAuth.username;\n switch (curAuth.type) {\n case 'password':\n proto.authPassword(username, curAuth.password);\n break;\n case 'publickey': {\n let keyAlgo;\n curAuth.keyAlgos = getKeyAlgos(this, curAuth.key, serverSigAlgs);\n if (curAuth.keyAlgos) {\n if (curAuth.keyAlgos.length) {\n keyAlgo = curAuth.keyAlgos[0][0];\n } else {\n return skipAuth(\n 'Skipping key authentication (no mutual hash algorithm)'\n );\n }\n }\n proto.authPK(username, curAuth.key, keyAlgo);\n break;\n }\n case 'hostbased': {\n let keyAlgo;\n let hashAlgo;\n curAuth.keyAlgos = getKeyAlgos(this, curAuth.key, serverSigAlgs);\n if (curAuth.keyAlgos) {\n if (curAuth.keyAlgos.length) {\n [keyAlgo, hashAlgo] = curAuth.keyAlgos[0];\n } else {\n return skipAuth(\n 'Skipping hostbased authentication (no mutual hash algorithm)'\n );\n }\n }\n\n proto.authHostbased(username,\n curAuth.key,\n curAuth.localHostname,\n curAuth.localUsername,\n keyAlgo,\n (buf, cb) => {\n const signature = curAuth.key.sign(buf, hashAlgo);\n if (signature instanceof Error) {\n signature.message =\n `Error while signing with key: ${signature.message}`;\n signature.level = 'client-authentication';\n this.emit('error', signature);\n return tryNextAuth();\n }\n\n cb(signature);\n });\n break;\n }\n case 'agent':\n curAuth.agentCtx.init((err) => {\n if (err) {\n err.level = 'agent';\n this.emit('error', err);\n return tryNextAuth();\n }\n tryNextAgentKey();\n });\n break;\n case 'keyboard-interactive':\n proto.authKeyboard(username);\n break;\n case 'none':\n proto.authNone(username);\n break;\n }\n } finally {\n hasSentAuth = false;\n }\n };\n\n function skipAuth(msg) {\n debug && debug(msg);\n process.nextTick(tryNextAuth);\n }\n\n function tryNextAuth() {\n hasSentAuth = false;\n const auth = authHandler(curAuthsLeft, curPartial, doNextAuth);\n if (hasSentAuth || auth === undefined)\n return;\n doNextAuth(auth);\n }\n\n const tryNextAgentKey = () => {\n if (curAuth.type === 'agent') {\n const key = curAuth.agentCtx.nextKey();\n if (key === false) {\n debug && debug('Agent: No more keys left to try');\n debug && debug('Client: agent auth failed');\n tryNextAuth();\n } else {\n const pos = curAuth.agentCtx.pos();\n let keyAlgo;\n curAuth.keyAlgos = getKeyAlgos(this, key, serverSigAlgs);\n if (curAuth.keyAlgos) {\n if (curAuth.keyAlgos.length) {\n keyAlgo = curAuth.keyAlgos[0][0];\n } else {\n debug && debug(\n `Agent: Skipping key #${pos + 1} (no mutual hash algorithm)`\n );\n tryNextAgentKey();\n return;\n }\n }\n debug && debug(`Agent: Trying key #${pos + 1}`);\n proto.authPK(curAuth.username, key, keyAlgo);\n }\n }\n };\n\n const startTimeout = () => {\n if (this.config.readyTimeout > 0) {\n this._readyTimeout = setTimeout(() => {\n const err = new Error('Timed out while waiting for handshake');\n err.level = 'client-timeout';\n this.emit('error', err);\n sock.destroy();\n }, this.config.readyTimeout);\n }\n };\n\n if (!cfg.sock) {\n let host = this.config.host;\n const forceIPv4 = this.config.forceIPv4;\n const forceIPv6 = this.config.forceIPv6;\n\n debug && debug(`Client: Trying ${host} on port ${this.config.port} ...`);\n\n const doConnect = () => {\n startTimeout();\n sock.connect({\n host,\n port: this.config.port,\n localAddress: this.config.localAddress,\n localPort: this.config.localPort\n });\n sock.setMaxListeners(0);\n sock.setTimeout(typeof cfg.timeout === 'number' ? cfg.timeout : 0);\n };\n\n if ((!forceIPv4 && !forceIPv6) || (forceIPv4 && forceIPv6)) {\n doConnect();\n } else {\n dnsLookup(host, (forceIPv4 ? 4 : 6), (err, address, family) => {\n if (err) {\n const type = (forceIPv4 ? 'IPv4' : 'IPv6');\n const error = new Error(\n `Error while looking up ${type} address for '${host}': ${err}`\n );\n clearTimeout(this._readyTimeout);\n error.level = 'client-dns';\n this.emit('error', error);\n this.emit('close');\n return;\n }\n host = address;\n doConnect();\n });\n }\n } else {\n // Custom socket passed in\n startTimeout();\n if (typeof sock.connecting === 'boolean') {\n // net.Socket\n\n if (!sock.connecting) {\n // Already connected\n onConnect();\n }\n } else {\n // Assume socket/stream is already \"connected\"\n onConnect();\n }\n }\n\n return this;\n }\n\n end() {\n if (this._sock && isWritable(this._sock)) {\n this._protocol.disconnect(DISCONNECT_REASON.BY_APPLICATION);\n this._sock.end();\n }\n return this;\n }\n\n destroy() {\n this._sock && isWritable(this._sock) && this._sock.destroy();\n return this;\n }\n\n exec(cmd, opts, cb) {\n if (!this._sock || !isWritable(this._sock))\n throw new Error('Not connected');\n\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n\n const extraOpts = { allowHalfOpen: (opts.allowHalfOpen !== false) };\n\n openChannel(this, 'session', extraOpts, (err, chan) => {\n if (err) {\n cb(err);\n return;\n }\n\n const todo = [];\n\n function reqCb(err) {\n if (err) {\n chan.close();\n cb(err);\n return;\n }\n if (todo.length)\n todo.shift()();\n }\n\n if (this.config.allowAgentFwd === true\n || (opts\n && opts.agentForward === true\n && this._agent !== undefined)) {\n todo.push(() => reqAgentFwd(chan, reqCb));\n }\n\n if (typeof opts === 'object' && opts !== null) {\n if (typeof opts.env === 'object' && opts.env !== null)\n reqEnv(chan, opts.env);\n if ((typeof opts.pty === 'object' && opts.pty !== null)\n || opts.pty === true) {\n todo.push(() => reqPty(chan, opts.pty, reqCb));\n }\n if ((typeof opts.x11 === 'object' && opts.x11 !== null)\n || opts.x11 === 'number'\n || opts.x11 === true) {\n todo.push(() => reqX11(chan, opts.x11, reqCb));\n }\n }\n\n todo.push(() => reqExec(chan, cmd, opts, cb));\n todo.shift()();\n });\n\n return this;\n }\n\n shell(wndopts, opts, cb) {\n if (!this._sock || !isWritable(this._sock))\n throw new Error('Not connected');\n\n if (typeof wndopts === 'function') {\n cb = wndopts;\n wndopts = opts = undefined;\n } else if (typeof opts === 'function') {\n cb = opts;\n opts = undefined;\n }\n if (wndopts && (wndopts.x11 !== undefined || wndopts.env !== undefined)) {\n opts = wndopts;\n wndopts = undefined;\n }\n\n openChannel(this, 'session', (err, chan) => {\n if (err) {\n cb(err);\n return;\n }\n\n const todo = [];\n\n function reqCb(err) {\n if (err) {\n chan.close();\n cb(err);\n return;\n }\n if (todo.length)\n todo.shift()();\n }\n\n if (this.config.allowAgentFwd === true\n || (opts\n && opts.agentForward === true\n && this._agent !== undefined)) {\n todo.push(() => reqAgentFwd(chan, reqCb));\n }\n\n if (wndopts !== false)\n todo.push(() => reqPty(chan, wndopts, reqCb));\n\n if (typeof opts === 'object' && opts !== null) {\n if (typeof opts.env === 'object' && opts.env !== null)\n reqEnv(chan, opts.env);\n if ((typeof opts.x11 === 'object' && opts.x11 !== null)\n || opts.x11 === 'number'\n || opts.x11 === true) {\n todo.push(() => reqX11(chan, opts.x11, reqCb));\n }\n }\n\n todo.push(() => reqShell(chan, cb));\n todo.shift()();\n });\n\n return this;\n }\n\n subsys(name, cb) {\n if (!this._sock || !isWritable(this._sock))\n throw new Error('Not connected');\n\n openChannel(this, 'session', (err, chan) => {\n if (err) {\n cb(err);\n return;\n }\n\n reqSubsystem(chan, name, (err, stream) => {\n if (err) {\n cb(err);\n return;\n }\n\n cb(undefined, stream);\n });\n });\n\n return this;\n }\n\n forwardIn(bindAddr, bindPort, cb) {\n if (!this._sock || !isWritable(this._sock))\n throw new Error('Not connected');\n\n // Send a request for the server to start forwarding TCP connections to us\n // on a particular address and port\n\n const wantReply = (typeof cb === 'function');\n\n if (wantReply) {\n this._callbacks.push((had_err, data) => {\n if (had_err) {\n cb(had_err !== true\n ? had_err\n : new Error(`Unable to bind to ${bindAddr}:${bindPort}`));\n return;\n }\n\n let realPort = bindPort;\n if (bindPort === 0 && data && data.length >= 4) {\n realPort = readUInt32BE(data, 0);\n if (!(this._protocol._compatFlags & COMPAT.DYN_RPORT_BUG))\n bindPort = realPort;\n }\n\n this._forwarding[`${bindAddr}:${bindPort}`] = realPort;\n\n cb(undefined, realPort);\n });\n }\n\n this._protocol.tcpipForward(bindAddr, bindPort, wantReply);\n\n return this;\n }\n\n unforwardIn(bindAddr, bindPort, cb) {\n if (!this._sock || !isWritable(this._sock))\n throw new Error('Not connected');\n\n // Send a request to stop forwarding us new connections for a particular\n // address and port\n\n const wantReply = (typeof cb === 'function');\n\n if (wantReply) {\n this._callbacks.push((had_err) => {\n if (had_err) {\n cb(had_err !== true\n ? had_err\n : new Error(`Unable to unbind from ${bindAddr}:${bindPort}`));\n return;\n }\n\n delete this._forwarding[`${bindAddr}:${bindPort}`];\n\n cb();\n });\n }\n\n this._protocol.cancelTcpipForward(bindAddr, bindPort, wantReply);\n\n return this;\n }\n\n forwardOut(srcIP, srcPort, dstIP, dstPort, cb) {\n if (!this._sock || !isWritable(this._sock))\n throw new Error('Not connected');\n\n // Send a request to forward a TCP connection to the server\n\n const cfg = {\n srcIP: srcIP,\n srcPort: srcPort,\n dstIP: dstIP,\n dstPort: dstPort\n };\n\n if (typeof cb !== 'function')\n cb = noop;\n\n openChannel(this, 'direct-tcpip', cfg, cb);\n\n return this;\n }\n\n openssh_noMoreSessions(cb) {\n if (!this._sock || !isWritable(this._sock))\n throw new Error('Not connected');\n\n const wantReply = (typeof cb === 'function');\n\n if (!this.config.strictVendor\n || (this.config.strictVendor && RE_OPENSSH.test(this._remoteVer))) {\n if (wantReply) {\n this._callbacks.push((had_err) => {\n if (had_err) {\n cb(had_err !== true\n ? had_err\n : new Error('Unable to disable future sessions'));\n return;\n }\n\n cb();\n });\n }\n\n this._protocol.openssh_noMoreSessions(wantReply);\n return this;\n }\n\n if (!wantReply)\n return this;\n\n process.nextTick(\n cb,\n new Error(\n 'strictVendor enabled and server is not OpenSSH or compatible version'\n )\n );\n\n return this;\n }\n\n openssh_forwardInStreamLocal(socketPath, cb) {\n if (!this._sock || !isWritable(this._sock))\n throw new Error('Not connected');\n\n const wantReply = (typeof cb === 'function');\n\n if (!this.config.strictVendor\n || (this.config.strictVendor && RE_OPENSSH.test(this._remoteVer))) {\n if (wantReply) {\n this._callbacks.push((had_err) => {\n if (had_err) {\n cb(had_err !== true\n ? had_err\n : new Error(`Unable to bind to ${socketPath}`));\n return;\n }\n this._forwardingUnix[socketPath] = true;\n cb();\n });\n }\n\n this._protocol.openssh_streamLocalForward(socketPath, wantReply);\n return this;\n }\n\n if (!wantReply)\n return this;\n\n process.nextTick(\n cb,\n new Error(\n 'strictVendor enabled and server is not OpenSSH or compatible version'\n )\n );\n\n return this;\n }\n\n openssh_unforwardInStreamLocal(socketPath, cb) {\n if (!this._sock || !isWritable(this._sock))\n throw new Error('Not connected');\n\n const wantReply = (typeof cb === 'function');\n\n if (!this.config.strictVendor\n || (this.config.strictVendor && RE_OPENSSH.test(this._remoteVer))) {\n if (wantReply) {\n this._callbacks.push((had_err) => {\n if (had_err) {\n cb(had_err !== true\n ? had_err\n : new Error(`Unable to unbind from ${socketPath}`));\n return;\n }\n delete this._forwardingUnix[socketPath];\n cb();\n });\n }\n\n this._protocol.openssh_cancelStreamLocalForward(socketPath, wantReply);\n return this;\n }\n\n if (!wantReply)\n return this;\n\n process.nextTick(\n cb,\n new Error(\n 'strictVendor enabled and server is not OpenSSH or compatible version'\n )\n );\n\n return this;\n }\n\n openssh_forwardOutStreamLocal(socketPath, cb) {\n if (!this._sock || !isWritable(this._sock))\n throw new Error('Not connected');\n\n if (typeof cb !== 'function')\n cb = noop;\n\n if (!this.config.strictVendor\n || (this.config.strictVendor && RE_OPENSSH.test(this._remoteVer))) {\n openChannel(this, 'direct-streamlocal@openssh.com', { socketPath }, cb);\n return this;\n }\n process.nextTick(\n cb,\n new Error(\n 'strictVendor enabled and server is not OpenSSH or compatible version'\n )\n );\n\n return this;\n }\n\n sftp(env, cb) {\n if (!this._sock || !isWritable(this._sock))\n throw new Error('Not connected');\n\n if (typeof env === 'function') {\n cb = env;\n env = undefined;\n }\n\n openChannel(this, 'sftp', (err, sftp) => {\n if (err) {\n cb(err);\n return;\n }\n\n const reqSubsystemCb = (err, sftp_) => {\n if (err) {\n cb(err);\n return;\n }\n\n function removeListeners() {\n sftp.removeListener('ready', onReady);\n sftp.removeListener('error', onError);\n sftp.removeListener('exit', onExit);\n sftp.removeListener('close', onExit);\n }\n\n function onReady() {\n // TODO: do not remove exit/close in case remote end closes the\n // channel abruptly and we need to notify outstanding callbacks\n removeListeners();\n cb(undefined, sftp);\n }\n\n function onError(err) {\n removeListeners();\n cb(err);\n }\n\n function onExit(code, signal) {\n removeListeners();\n let msg;\n if (typeof code === 'number')\n msg = `Received exit code ${code} while establishing SFTP session`;\n else if (signal !== undefined)\n msg = `Received signal ${signal} while establishing SFTP session`;\n else\n msg = 'Received unexpected SFTP session termination';\n const err = new Error(msg);\n err.code = code;\n err.signal = signal;\n cb(err);\n }\n\n sftp.on('ready', onReady)\n .on('error', onError)\n .on('exit', onExit)\n .on('close', onExit);\n\n sftp._init();\n };\n\n if (typeof env === 'object' && env !== null) {\n reqEnv(sftp, env, (err) => {\n if (err) {\n cb(err);\n return;\n }\n\n reqSubsystem(sftp, 'sftp', reqSubsystemCb);\n });\n } else {\n reqSubsystem(sftp, 'sftp', reqSubsystemCb);\n }\n });\n\n return this;\n }\n\n setNoDelay(noDelay) {\n if (this._sock && typeof this._sock.setNoDelay === 'function')\n this._sock.setNoDelay(noDelay);\n\n return this;\n }\n}\n\nfunction openChannel(self, type, opts, cb) {\n // Ask the server to open a channel for some purpose\n // (e.g. session (sftp, exec, shell), or forwarding a TCP connection\n const initWindow = MAX_WINDOW;\n const maxPacket = PACKET_SIZE;\n\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n\n const wrapper = (err, stream) => {\n cb(err, stream);\n };\n wrapper.type = type;\n\n const localChan = self._chanMgr.add(wrapper);\n\n if (localChan === -1) {\n cb(new Error('No free channels available'));\n return;\n }\n\n switch (type) {\n case 'session':\n case 'sftp':\n self._protocol.session(localChan, initWindow, maxPacket);\n break;\n case 'direct-tcpip':\n self._protocol.directTcpip(localChan, initWindow, maxPacket, opts);\n break;\n case 'direct-streamlocal@openssh.com':\n self._protocol.openssh_directStreamLocal(\n localChan, initWindow, maxPacket, opts\n );\n break;\n default:\n throw new Error(`Unsupported channel type: ${type}`);\n }\n}\n\nfunction reqX11(chan, screen, cb) {\n // Asks server to start sending us X11 connections\n const cfg = {\n single: false,\n protocol: 'MIT-MAGIC-COOKIE-1',\n cookie: undefined,\n screen: 0\n };\n\n if (typeof screen === 'function') {\n cb = screen;\n } else if (typeof screen === 'object' && screen !== null) {\n if (typeof screen.single === 'boolean')\n cfg.single = screen.single;\n if (typeof screen.screen === 'number')\n cfg.screen = screen.screen;\n if (typeof screen.protocol === 'string')\n cfg.protocol = screen.protocol;\n if (typeof screen.cookie === 'string')\n cfg.cookie = screen.cookie;\n else if (Buffer.isBuffer(screen.cookie))\n cfg.cookie = screen.cookie.hexSlice(0, screen.cookie.length);\n }\n if (cfg.cookie === undefined)\n cfg.cookie = randomCookie();\n\n const wantReply = (typeof cb === 'function');\n\n if (chan.outgoing.state !== 'open') {\n if (wantReply)\n cb(new Error('Channel is not open'));\n return;\n }\n\n if (wantReply) {\n chan._callbacks.push((had_err) => {\n if (had_err) {\n cb(had_err !== true ? had_err : new Error('Unable to request X11'));\n return;\n }\n\n chan._hasX11 = true;\n ++chan._client._acceptX11;\n chan.once('close', () => {\n if (chan._client._acceptX11)\n --chan._client._acceptX11;\n });\n\n cb();\n });\n }\n\n chan._client._protocol.x11Forward(chan.outgoing.id, cfg, wantReply);\n}\n\nfunction reqPty(chan, opts, cb) {\n let rows = 24;\n let cols = 80;\n let width = 640;\n let height = 480;\n let term = 'vt100';\n let modes = null;\n\n if (typeof opts === 'function') {\n cb = opts;\n } else if (typeof opts === 'object' && opts !== null) {\n if (typeof opts.rows === 'number')\n rows = opts.rows;\n if (typeof opts.cols === 'number')\n cols = opts.cols;\n if (typeof opts.width === 'number')\n width = opts.width;\n if (typeof opts.height === 'number')\n height = opts.height;\n if (typeof opts.term === 'string')\n term = opts.term;\n if (typeof opts.modes === 'object')\n modes = opts.modes;\n }\n\n const wantReply = (typeof cb === 'function');\n\n if (chan.outgoing.state !== 'open') {\n if (wantReply)\n cb(new Error('Channel is not open'));\n return;\n }\n\n if (wantReply) {\n chan._callbacks.push((had_err) => {\n if (had_err) {\n cb(had_err !== true\n ? had_err\n : new Error('Unable to request a pseudo-terminal'));\n return;\n }\n cb();\n });\n }\n\n chan._client._protocol.pty(chan.outgoing.id,\n rows,\n cols,\n height,\n width,\n term,\n modes,\n wantReply);\n}\n\nfunction reqAgentFwd(chan, cb) {\n const wantReply = (typeof cb === 'function');\n\n if (chan.outgoing.state !== 'open') {\n wantReply && cb(new Error('Channel is not open'));\n return;\n }\n if (chan._client._agentFwdEnabled) {\n wantReply && cb(false);\n return;\n }\n\n chan._client._agentFwdEnabled = true;\n\n chan._callbacks.push((had_err) => {\n if (had_err) {\n chan._client._agentFwdEnabled = false;\n if (wantReply) {\n cb(had_err !== true\n ? had_err\n : new Error('Unable to request agent forwarding'));\n }\n return;\n }\n\n if (wantReply)\n cb();\n });\n\n chan._client._protocol.openssh_agentForward(chan.outgoing.id, true);\n}\n\nfunction reqShell(chan, cb) {\n if (chan.outgoing.state !== 'open') {\n cb(new Error('Channel is not open'));\n return;\n }\n\n chan._callbacks.push((had_err) => {\n if (had_err) {\n cb(had_err !== true ? had_err : new Error('Unable to open shell'));\n return;\n }\n chan.subtype = 'shell';\n cb(undefined, chan);\n });\n\n chan._client._protocol.shell(chan.outgoing.id, true);\n}\n\nfunction reqExec(chan, cmd, opts, cb) {\n if (chan.outgoing.state !== 'open') {\n cb(new Error('Channel is not open'));\n return;\n }\n\n chan._callbacks.push((had_err) => {\n if (had_err) {\n cb(had_err !== true ? had_err : new Error('Unable to exec'));\n return;\n }\n chan.subtype = 'exec';\n chan.allowHalfOpen = (opts.allowHalfOpen !== false);\n cb(undefined, chan);\n });\n\n chan._client._protocol.exec(chan.outgoing.id, cmd, true);\n}\n\nfunction reqEnv(chan, env, cb) {\n const wantReply = (typeof cb === 'function');\n\n if (chan.outgoing.state !== 'open') {\n if (wantReply)\n cb(new Error('Channel is not open'));\n return;\n }\n\n if (wantReply) {\n chan._callbacks.push((had_err) => {\n if (had_err) {\n cb(had_err !== true\n ? had_err\n : new Error('Unable to set environment'));\n return;\n }\n cb();\n });\n }\n\n const keys = Object.keys(env || {});\n\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n const val = env[key];\n chan._client._protocol.env(chan.outgoing.id, key, val, wantReply);\n }\n}\n\nfunction reqSubsystem(chan, name, cb) {\n if (chan.outgoing.state !== 'open') {\n cb(new Error('Channel is not open'));\n return;\n }\n\n chan._callbacks.push((had_err) => {\n if (had_err) {\n cb(had_err !== true\n ? had_err\n : new Error(`Unable to start subsystem: ${name}`));\n return;\n }\n chan.subtype = 'subsystem';\n cb(undefined, chan);\n });\n\n chan._client._protocol.subsystem(chan.outgoing.id, name, true);\n}\n\n// TODO: inline implementation into single call site\nfunction onCHANNEL_OPEN(self, info) {\n // The server is trying to open a channel with us, this is usually when\n // we asked the server to forward us connections on some port and now they\n // are asking us to accept/deny an incoming connection on their side\n\n let localChan = -1;\n let reason;\n\n const accept = () => {\n const chanInfo = {\n type: info.type,\n incoming: {\n id: localChan,\n window: MAX_WINDOW,\n packetSize: PACKET_SIZE,\n state: 'open'\n },\n outgoing: {\n id: info.sender,\n window: info.window,\n packetSize: info.packetSize,\n state: 'open'\n }\n };\n const stream = new Channel(self, chanInfo);\n self._chanMgr.update(localChan, stream);\n\n self._protocol.channelOpenConfirm(info.sender,\n localChan,\n MAX_WINDOW,\n PACKET_SIZE);\n return stream;\n };\n const reject = () => {\n if (reason === undefined) {\n if (localChan === -1)\n reason = CHANNEL_OPEN_FAILURE.RESOURCE_SHORTAGE;\n else\n reason = CHANNEL_OPEN_FAILURE.CONNECT_FAILED;\n }\n\n if (localChan !== -1)\n self._chanMgr.remove(localChan);\n\n self._protocol.channelOpenFail(info.sender, reason, '');\n };\n const reserveChannel = () => {\n localChan = self._chanMgr.add();\n\n if (localChan === -1) {\n reason = CHANNEL_OPEN_FAILURE.RESOURCE_SHORTAGE;\n if (self.config.debug) {\n self.config.debug(\n 'Client: Automatic rejection of incoming channel open: '\n + 'no channels available'\n );\n }\n }\n\n return (localChan !== -1);\n };\n\n const data = info.data;\n switch (info.type) {\n case 'forwarded-tcpip': {\n const val = self._forwarding[`${data.destIP}:${data.destPort}`];\n if (val !== undefined && reserveChannel()) {\n if (data.destPort === 0)\n data.destPort = val;\n self.emit('tcp connection', data, accept, reject);\n return;\n }\n break;\n }\n case 'forwarded-streamlocal@openssh.com':\n if (self._forwardingUnix[data.socketPath] !== undefined\n && reserveChannel()) {\n self.emit('unix connection', data, accept, reject);\n return;\n }\n break;\n case 'auth-agent@openssh.com':\n if (self._agentFwdEnabled\n && typeof self._agent.getStream === 'function'\n && reserveChannel()) {\n self._agent.getStream((err, stream) => {\n if (err)\n return reject();\n\n const upstream = accept();\n upstream.pipe(stream).pipe(upstream);\n });\n return;\n }\n break;\n case 'x11':\n if (self._acceptX11 !== 0 && reserveChannel()) {\n self.emit('x11', data, accept, reject);\n return;\n }\n break;\n default:\n // Automatically reject any unsupported channel open requests\n reason = CHANNEL_OPEN_FAILURE.UNKNOWN_CHANNEL_TYPE;\n if (self.config.debug) {\n self.config.debug(\n 'Client: Automatic rejection of unsupported incoming channel open '\n + `type: ${info.type}`\n );\n }\n }\n\n if (reason === undefined) {\n reason = CHANNEL_OPEN_FAILURE.ADMINISTRATIVELY_PROHIBITED;\n if (self.config.debug) {\n self.config.debug(\n 'Client: Automatic rejection of unexpected incoming channel open for: '\n + info.type\n );\n }\n }\n\n reject();\n}\n\nconst randomCookie = (() => {\n const buffer = Buffer.allocUnsafe(16);\n return () => {\n randomFillSync(buffer, 0, 16);\n return buffer.hexSlice(0, 16);\n };\n})();\n\nfunction makeSimpleAuthHandler(authList) {\n if (!Array.isArray(authList))\n throw new Error('authList must be an array');\n\n let a = 0;\n return (authsLeft, partialSuccess, cb) => {\n if (a === authList.length)\n return false;\n return authList[a++];\n };\n}\n\nfunction hostKeysProve(client, keys_, cb) {\n if (!client._sock || !isWritable(client._sock))\n return;\n\n if (typeof cb !== 'function')\n cb = noop;\n\n if (!Array.isArray(keys_))\n throw new TypeError('Invalid keys argument type');\n\n const keys = [];\n for (const key of keys_) {\n const parsed = parseKey(key);\n if (parsed instanceof Error)\n throw parsed;\n keys.push(parsed);\n }\n\n if (!client.config.strictVendor\n || (client.config.strictVendor && RE_OPENSSH.test(client._remoteVer))) {\n client._callbacks.push((had_err, data) => {\n if (had_err) {\n cb(had_err !== true\n ? had_err\n : new Error('Server failed to prove supplied keys'));\n return;\n }\n\n // TODO: move all of this parsing/verifying logic out of the client?\n const ret = [];\n let keyIdx = 0;\n bufferParser.init(data, 0);\n while (bufferParser.avail()) {\n if (keyIdx === keys.length)\n break;\n const key = keys[keyIdx++];\n const keyPublic = key.getPublicSSH();\n\n const sigEntry = bufferParser.readString();\n sigParser.init(sigEntry, 0);\n const type = sigParser.readString(true);\n let value = sigParser.readString();\n\n let algo;\n if (type !== key.type) {\n if (key.type === 'ssh-rsa') {\n switch (type) {\n case 'rsa-sha2-256':\n algo = 'sha256';\n break;\n case 'rsa-sha2-512':\n algo = 'sha512';\n break;\n default:\n continue;\n }\n } else {\n continue;\n }\n }\n\n const sessionID = client._protocol._kex.sessionID;\n const verifyData = Buffer.allocUnsafe(\n 4 + 29 + 4 + sessionID.length + 4 + keyPublic.length\n );\n let p = 0;\n writeUInt32BE(verifyData, 29, p);\n verifyData.utf8Write('hostkeys-prove-00@openssh.com', p += 4, 29);\n writeUInt32BE(verifyData, sessionID.length, p += 29);\n bufferCopy(sessionID, verifyData, 0, sessionID.length, p += 4);\n writeUInt32BE(verifyData, keyPublic.length, p += sessionID.length);\n bufferCopy(keyPublic, verifyData, 0, keyPublic.length, p += 4);\n\n if (!(value = sigSSHToASN1(value, type)))\n continue;\n if (key.verify(verifyData, value, algo) === true)\n ret.push(key);\n }\n sigParser.clear();\n bufferParser.clear();\n\n cb(null, ret);\n });\n\n client._protocol.openssh_hostKeysProve(keys);\n return;\n }\n\n process.nextTick(\n cb,\n new Error(\n 'strictVendor enabled and server is not OpenSSH or compatible version'\n )\n );\n}\n\nfunction getKeyAlgos(client, key, serverSigAlgs) {\n switch (key.type) {\n case 'ssh-rsa':\n if (client._protocol._compatFlags & COMPAT.IMPLY_RSA_SHA2_SIGALGS) {\n if (!Array.isArray(serverSigAlgs))\n serverSigAlgs = ['rsa-sha2-256', 'rsa-sha2-512'];\n else\n serverSigAlgs = ['rsa-sha2-256', 'rsa-sha2-512', ...serverSigAlgs];\n }\n if (Array.isArray(serverSigAlgs)) {\n if (serverSigAlgs.indexOf('rsa-sha2-256') !== -1)\n return [['rsa-sha2-256', 'sha256']];\n if (serverSigAlgs.indexOf('rsa-sha2-512') !== -1)\n return [['rsa-sha2-512', 'sha512']];\n if (serverSigAlgs.indexOf('ssh-rsa') === -1)\n return [];\n }\n return [['ssh-rsa', 'sha1']];\n }\n}\n\nmodule.exports = Client;\n", "'use strict';\n\nconst { Agent: HttpAgent } = require('http');\nconst { Agent: HttpsAgent } = require('https');\nconst { connect: tlsConnect } = require('tls');\n\nlet Client;\n\nfor (const ctor of [HttpAgent, HttpsAgent]) {\n class SSHAgent extends ctor {\n constructor(connectCfg, agentOptions) {\n super(agentOptions);\n\n this._connectCfg = connectCfg;\n this._defaultSrcIP = (agentOptions && agentOptions.srcIP) || 'localhost';\n }\n\n createConnection(options, cb) {\n const srcIP = (options && options.localAddress) || this._defaultSrcIP;\n const srcPort = (options && options.localPort) || 0;\n const dstIP = options.host;\n const dstPort = options.port;\n\n if (Client === undefined)\n Client = require('./client.js');\n\n const client = new Client();\n let triedForward = false;\n client.on('ready', () => {\n client.forwardOut(srcIP, srcPort, dstIP, dstPort, (err, stream) => {\n triedForward = true;\n if (err) {\n client.end();\n return cb(err);\n }\n stream.once('close', () => client.end());\n cb(null, decorateStream(stream, ctor, options));\n });\n }).on('error', cb).on('close', () => {\n if (!triedForward)\n cb(new Error('Unexpected connection close'));\n }).connect(this._connectCfg);\n }\n }\n\n exports[ctor === HttpAgent ? 'SSHTTPAgent' : 'SSHTTPSAgent'] = SSHAgent;\n}\n\nfunction noop() {}\n\nfunction decorateStream(stream, ctor, options) {\n if (ctor === HttpAgent) {\n // HTTP\n stream.setKeepAlive = noop;\n stream.setNoDelay = noop;\n stream.setTimeout = noop;\n stream.ref = noop;\n stream.unref = noop;\n stream.destroySoon = stream.destroy;\n return stream;\n }\n\n // HTTPS\n options.socket = stream;\n const wrapped = tlsConnect(options);\n\n // This is a workaround for a regression in node v12.16.3+\n // https://github.com/nodejs/node/issues/35904\n const onClose = (() => {\n let called = false;\n return () => {\n if (called)\n return;\n called = true;\n if (stream.isPaused())\n stream.resume();\n };\n })();\n // 'end' listener is needed because 'close' is not emitted in some scenarios\n // in node v12.x for some unknown reason\n wrapped.on('end', onClose).on('close', onClose);\n\n return wrapped;\n}\n", "// TODO:\n// * convert listenerCount() usage to emit() return value checking?\n// * emit error when connection severed early (e.g. before handshake)\n// * add '.connected' or similar property to connection objects to allow\n// immediate connection status checking\n'use strict';\n\nconst { Server: netServer } = require('net');\nconst EventEmitter = require('events');\nconst { listenerCount } = EventEmitter;\n\nconst {\n CHANNEL_OPEN_FAILURE,\n DEFAULT_CIPHER,\n DEFAULT_COMPRESSION,\n DEFAULT_KEX,\n DEFAULT_MAC,\n DEFAULT_SERVER_HOST_KEY,\n DISCONNECT_REASON,\n DISCONNECT_REASON_BY_VALUE,\n SUPPORTED_CIPHER,\n SUPPORTED_COMPRESSION,\n SUPPORTED_KEX,\n SUPPORTED_MAC,\n SUPPORTED_SERVER_HOST_KEY,\n} = require('./protocol/constants.js');\nconst { init: cryptoInit } = require('./protocol/crypto.js');\nconst { KexInit } = require('./protocol/kex.js');\nconst { parseKey } = require('./protocol/keyParser.js');\nconst Protocol = require('./protocol/Protocol.js');\nconst { SFTP } = require('./protocol/SFTP.js');\nconst { writeUInt32BE } = require('./protocol/utils.js');\n\nconst {\n Channel,\n MAX_WINDOW,\n PACKET_SIZE,\n windowAdjust,\n WINDOW_THRESHOLD,\n} = require('./Channel.js');\n\nconst {\n ChannelManager,\n generateAlgorithmList,\n isWritable,\n onChannelOpenFailure,\n onCHANNEL_CLOSE,\n} = require('./utils.js');\n\nconst MAX_PENDING_AUTHS = 10;\n\nclass AuthContext extends EventEmitter {\n constructor(protocol, username, service, method, cb) {\n super();\n\n this.username = this.user = username;\n this.service = service;\n this.method = method;\n this._initialResponse = false;\n this._finalResponse = false;\n this._multistep = false;\n this._cbfinal = (allowed, methodsLeft, isPartial) => {\n if (!this._finalResponse) {\n this._finalResponse = true;\n cb(this, allowed, methodsLeft, isPartial);\n }\n };\n this._protocol = protocol;\n }\n\n accept() {\n this._cleanup && this._cleanup();\n this._initialResponse = true;\n this._cbfinal(true);\n }\n reject(methodsLeft, isPartial) {\n this._cleanup && this._cleanup();\n this._initialResponse = true;\n this._cbfinal(false, methodsLeft, isPartial);\n }\n}\n\n\nclass KeyboardAuthContext extends AuthContext {\n constructor(protocol, username, service, method, submethods, cb) {\n super(protocol, username, service, method, cb);\n\n this._multistep = true;\n\n this._cb = undefined;\n this._onInfoResponse = (responses) => {\n const callback = this._cb;\n if (callback) {\n this._cb = undefined;\n callback(responses);\n }\n };\n this.submethods = submethods;\n this.on('abort', () => {\n this._cb && this._cb(new Error('Authentication request aborted'));\n });\n }\n\n prompt(prompts, title, instructions, cb) {\n if (!Array.isArray(prompts))\n prompts = [ prompts ];\n\n if (typeof title === 'function') {\n cb = title;\n title = instructions = undefined;\n } else if (typeof instructions === 'function') {\n cb = instructions;\n instructions = undefined;\n } else if (typeof cb !== 'function') {\n cb = undefined;\n }\n\n for (let i = 0; i < prompts.length; ++i) {\n if (typeof prompts[i] === 'string') {\n prompts[i] = {\n prompt: prompts[i],\n echo: true\n };\n }\n }\n\n this._cb = cb;\n this._initialResponse = true;\n\n this._protocol.authInfoReq(title, instructions, prompts);\n }\n}\n\nclass PKAuthContext extends AuthContext {\n constructor(protocol, username, service, method, pkInfo, cb) {\n super(protocol, username, service, method, cb);\n\n this.key = { algo: pkInfo.keyAlgo, data: pkInfo.key };\n this.hashAlgo = pkInfo.hashAlgo;\n this.signature = pkInfo.signature;\n this.blob = pkInfo.blob;\n }\n\n accept() {\n if (!this.signature) {\n this._initialResponse = true;\n this._protocol.authPKOK(this.key.algo, this.key.data);\n } else {\n AuthContext.prototype.accept.call(this);\n }\n }\n}\n\nclass HostbasedAuthContext extends AuthContext {\n constructor(protocol, username, service, method, pkInfo, cb) {\n super(protocol, username, service, method, cb);\n\n this.key = { algo: pkInfo.keyAlgo, data: pkInfo.key };\n this.hashAlgo = pkInfo.hashAlgo;\n this.signature = pkInfo.signature;\n this.blob = pkInfo.blob;\n this.localHostname = pkInfo.localHostname;\n this.localUsername = pkInfo.localUsername;\n }\n}\n\nclass PwdAuthContext extends AuthContext {\n constructor(protocol, username, service, method, password, cb) {\n super(protocol, username, service, method, cb);\n\n this.password = password;\n this._changeCb = undefined;\n }\n\n requestChange(prompt, cb) {\n if (this._changeCb)\n throw new Error('Change request already in progress');\n if (typeof prompt !== 'string')\n throw new Error('prompt argument must be a string');\n if (typeof cb !== 'function')\n throw new Error('Callback argument must be a function');\n this._changeCb = cb;\n this._protocol.authPasswdChg(prompt);\n }\n}\n\n\nclass Session extends EventEmitter {\n constructor(client, info, localChan) {\n super();\n\n this.type = 'session';\n this.subtype = undefined;\n this.server = true;\n this._ending = false;\n this._channel = undefined;\n this._chanInfo = {\n type: 'session',\n incoming: {\n id: localChan,\n window: MAX_WINDOW,\n packetSize: PACKET_SIZE,\n state: 'open'\n },\n outgoing: {\n id: info.sender,\n window: info.window,\n packetSize: info.packetSize,\n state: 'open'\n }\n };\n }\n}\n\n\nclass Server extends EventEmitter {\n constructor(cfg, listener) {\n super();\n\n if (typeof cfg !== 'object' || cfg === null)\n throw new Error('Missing configuration object');\n\n const hostKeys = Object.create(null);\n const hostKeyAlgoOrder = [];\n\n const hostKeys_ = cfg.hostKeys;\n if (!Array.isArray(hostKeys_))\n throw new Error('hostKeys must be an array');\n\n const cfgAlgos = (\n typeof cfg.algorithms === 'object' && cfg.algorithms !== null\n ? cfg.algorithms\n : {}\n );\n\n const hostKeyAlgos = generateAlgorithmList(\n cfgAlgos.serverHostKey,\n DEFAULT_SERVER_HOST_KEY,\n SUPPORTED_SERVER_HOST_KEY\n );\n for (let i = 0; i < hostKeys_.length; ++i) {\n let privateKey;\n if (Buffer.isBuffer(hostKeys_[i]) || typeof hostKeys_[i] === 'string')\n privateKey = parseKey(hostKeys_[i]);\n else\n privateKey = parseKey(hostKeys_[i].key, hostKeys_[i].passphrase);\n\n if (privateKey instanceof Error)\n throw new Error(`Cannot parse privateKey: ${privateKey.message}`);\n\n if (Array.isArray(privateKey)) {\n // OpenSSH's newer format only stores 1 key for now\n privateKey = privateKey[0];\n }\n\n if (privateKey.getPrivatePEM() === null)\n throw new Error('privateKey value contains an invalid private key');\n\n // Discard key if we already found a key of the same type\n if (hostKeyAlgoOrder.includes(privateKey.type))\n continue;\n\n if (privateKey.type === 'ssh-rsa') {\n // SSH supports multiple signature hashing algorithms for RSA, so we add\n // the algorithms in the desired order\n let sha1Pos = hostKeyAlgos.indexOf('ssh-rsa');\n const sha256Pos = hostKeyAlgos.indexOf('rsa-sha2-256');\n const sha512Pos = hostKeyAlgos.indexOf('rsa-sha2-512');\n if (sha1Pos === -1) {\n // Fall back to giving SHA1 the lowest priority\n sha1Pos = Infinity;\n }\n [sha1Pos, sha256Pos, sha512Pos].sort(compareNumbers).forEach((pos) => {\n if (pos === -1)\n return;\n\n let type;\n switch (pos) {\n case sha1Pos: type = 'ssh-rsa'; break;\n case sha256Pos: type = 'rsa-sha2-256'; break;\n case sha512Pos: type = 'rsa-sha2-512'; break;\n default: return;\n }\n\n // Store same RSA key under each hash algorithm name for convenience\n hostKeys[type] = privateKey;\n\n hostKeyAlgoOrder.push(type);\n });\n } else {\n hostKeys[privateKey.type] = privateKey;\n hostKeyAlgoOrder.push(privateKey.type);\n }\n }\n\n const algorithms = {\n kex: generateAlgorithmList(\n cfgAlgos.kex,\n DEFAULT_KEX,\n SUPPORTED_KEX\n ).concat(['kex-strict-s-v00@openssh.com']),\n serverHostKey: hostKeyAlgoOrder,\n cs: {\n cipher: generateAlgorithmList(\n cfgAlgos.cipher,\n DEFAULT_CIPHER,\n SUPPORTED_CIPHER\n ),\n mac: generateAlgorithmList(cfgAlgos.hmac, DEFAULT_MAC, SUPPORTED_MAC),\n compress: generateAlgorithmList(\n cfgAlgos.compress,\n DEFAULT_COMPRESSION,\n SUPPORTED_COMPRESSION\n ),\n lang: [],\n },\n sc: undefined,\n };\n algorithms.sc = algorithms.cs;\n\n if (typeof listener === 'function')\n this.on('connection', listener);\n\n const origDebug = (typeof cfg.debug === 'function' ? cfg.debug : undefined);\n const ident = (cfg.ident ? Buffer.from(cfg.ident) : undefined);\n const offer = new KexInit(algorithms);\n\n this._srv = new netServer((socket) => {\n if (this._connections >= this.maxConnections) {\n socket.destroy();\n return;\n }\n ++this._connections;\n socket.once('close', () => {\n --this._connections;\n });\n\n let debug;\n if (origDebug) {\n // Prepend debug output with a unique identifier in case there are\n // multiple clients connected at the same time\n const debugPrefix = `[${process.hrtime().join('.')}] `;\n debug = (msg) => {\n origDebug(`${debugPrefix}${msg}`);\n };\n }\n\n // eslint-disable-next-line no-use-before-define\n new Client(socket, hostKeys, ident, offer, debug, this, cfg);\n }).on('error', (err) => {\n this.emit('error', err);\n }).on('listening', () => {\n this.emit('listening');\n }).on('close', () => {\n this.emit('close');\n });\n this._connections = 0;\n this.maxConnections = Infinity;\n }\n\n injectSocket(socket) {\n this._srv.emit('connection', socket);\n }\n\n listen(...args) {\n this._srv.listen(...args);\n return this;\n }\n\n address() {\n return this._srv.address();\n }\n\n getConnections(cb) {\n this._srv.getConnections(cb);\n return this;\n }\n\n close(cb) {\n this._srv.close(cb);\n return this;\n }\n\n ref() {\n this._srv.ref();\n return this;\n }\n\n unref() {\n this._srv.unref();\n return this;\n }\n}\nServer.KEEPALIVE_CLIENT_INTERVAL = 15000;\nServer.KEEPALIVE_CLIENT_COUNT_MAX = 3;\n\n\nclass Client extends EventEmitter {\n constructor(socket, hostKeys, ident, offer, debug, server, srvCfg) {\n super();\n\n let exchanges = 0;\n let acceptedAuthSvc = false;\n let pendingAuths = [];\n let authCtx;\n let kaTimer;\n let onPacket;\n const unsentGlobalRequestsReplies = [];\n this._sock = socket;\n this._chanMgr = new ChannelManager(this);\n this._debug = debug;\n this.noMoreSessions = false;\n this.authenticated = false;\n\n // Silence pre-header errors\n function onClientPreHeaderError(err) {}\n this.on('error', onClientPreHeaderError);\n\n const DEBUG_HANDLER = (!debug ? undefined : (p, display, msg) => {\n debug(`Debug output from client: ${JSON.stringify(msg)}`);\n });\n\n const kaIntvl = (\n typeof srvCfg.keepaliveInterval === 'number'\n && isFinite(srvCfg.keepaliveInterval)\n && srvCfg.keepaliveInterval > 0\n ? srvCfg.keepaliveInterval\n : (\n typeof Server.KEEPALIVE_CLIENT_INTERVAL === 'number'\n && isFinite(Server.KEEPALIVE_CLIENT_INTERVAL)\n && Server.KEEPALIVE_CLIENT_INTERVAL > 0\n ? Server.KEEPALIVE_CLIENT_INTERVAL\n : -1\n )\n );\n const kaCountMax = (\n typeof srvCfg.keepaliveCountMax === 'number'\n && isFinite(srvCfg.keepaliveCountMax)\n && srvCfg.keepaliveCountMax >= 0\n ? srvCfg.keepaliveCountMax\n : (\n typeof Server.KEEPALIVE_CLIENT_COUNT_MAX === 'number'\n && isFinite(Server.KEEPALIVE_CLIENT_COUNT_MAX)\n && Server.KEEPALIVE_CLIENT_COUNT_MAX >= 0\n ? Server.KEEPALIVE_CLIENT_COUNT_MAX\n : -1\n )\n );\n let kaCurCount = 0;\n if (kaIntvl !== -1 && kaCountMax !== -1) {\n this.once('ready', () => {\n const onClose = () => {\n clearInterval(kaTimer);\n };\n this.on('close', onClose).on('end', onClose);\n kaTimer = setInterval(() => {\n if (++kaCurCount > kaCountMax) {\n clearInterval(kaTimer);\n const err = new Error('Keepalive timeout');\n err.level = 'client-timeout';\n this.emit('error', err);\n this.end();\n } else {\n // XXX: if the server ever starts sending real global requests to\n // the client, we will need to add a dummy callback here to\n // keep the correct reply order\n proto.ping();\n }\n }, kaIntvl);\n });\n // TODO: re-verify keepalive behavior with OpenSSH\n onPacket = () => {\n kaTimer && kaTimer.refresh();\n kaCurCount = 0;\n };\n }\n\n const proto = this._protocol = new Protocol({\n server: true,\n hostKeys,\n ident,\n offer,\n onPacket,\n greeting: srvCfg.greeting,\n banner: srvCfg.banner,\n onWrite: (data) => {\n if (isWritable(socket))\n socket.write(data);\n },\n onError: (err) => {\n if (!proto._destruct)\n socket.removeAllListeners('data');\n this.emit('error', err);\n try {\n socket.end();\n } catch {}\n },\n onHeader: (header) => {\n this.removeListener('error', onClientPreHeaderError);\n\n const info = {\n ip: socket.remoteAddress,\n family: socket.remoteFamily,\n port: socket.remotePort,\n header,\n };\n if (!server.emit('connection', this, info)) {\n // auto reject\n proto.disconnect(DISCONNECT_REASON.BY_APPLICATION);\n socket.end();\n return;\n }\n\n if (header.greeting)\n this.emit('greeting', header.greeting);\n },\n onHandshakeComplete: (negotiated) => {\n if (++exchanges > 1)\n this.emit('rekey');\n this.emit('handshake', negotiated);\n },\n debug,\n messageHandlers: {\n DEBUG: DEBUG_HANDLER,\n DISCONNECT: (p, reason, desc) => {\n if (reason !== DISCONNECT_REASON.BY_APPLICATION) {\n if (!desc) {\n desc = DISCONNECT_REASON_BY_VALUE[reason];\n if (desc === undefined)\n desc = `Unexpected disconnection reason: ${reason}`;\n }\n const err = new Error(desc);\n err.code = reason;\n this.emit('error', err);\n }\n socket.end();\n },\n CHANNEL_OPEN: (p, info) => {\n // Handle incoming requests from client\n\n // Do early reject in some cases to prevent wasteful channel\n // allocation\n if ((info.type === 'session' && this.noMoreSessions)\n || !this.authenticated) {\n const reasonCode = CHANNEL_OPEN_FAILURE.ADMINISTRATIVELY_PROHIBITED;\n return proto.channelOpenFail(info.sender, reasonCode);\n }\n\n let localChan = -1;\n let reason;\n let replied = false;\n\n let accept;\n const reject = () => {\n if (replied)\n return;\n replied = true;\n\n if (reason === undefined) {\n if (localChan === -1)\n reason = CHANNEL_OPEN_FAILURE.RESOURCE_SHORTAGE;\n else\n reason = CHANNEL_OPEN_FAILURE.CONNECT_FAILED;\n }\n\n if (localChan !== -1)\n this._chanMgr.remove(localChan);\n proto.channelOpenFail(info.sender, reason, '');\n };\n const reserveChannel = () => {\n localChan = this._chanMgr.add();\n\n if (localChan === -1) {\n reason = CHANNEL_OPEN_FAILURE.RESOURCE_SHORTAGE;\n if (debug) {\n debug('Automatic rejection of incoming channel open: '\n + 'no channels available');\n }\n }\n\n return (localChan !== -1);\n };\n\n const data = info.data;\n switch (info.type) {\n case 'session':\n if (listenerCount(this, 'session') && reserveChannel()) {\n accept = () => {\n if (replied)\n return;\n replied = true;\n\n const instance = new Session(this, info, localChan);\n this._chanMgr.update(localChan, instance);\n\n proto.channelOpenConfirm(info.sender,\n localChan,\n MAX_WINDOW,\n PACKET_SIZE);\n\n return instance;\n };\n\n this.emit('session', accept, reject);\n return;\n }\n break;\n case 'direct-tcpip':\n if (listenerCount(this, 'tcpip') && reserveChannel()) {\n accept = () => {\n if (replied)\n return;\n replied = true;\n\n const chanInfo = {\n type: undefined,\n incoming: {\n id: localChan,\n window: MAX_WINDOW,\n packetSize: PACKET_SIZE,\n state: 'open'\n },\n outgoing: {\n id: info.sender,\n window: info.window,\n packetSize: info.packetSize,\n state: 'open'\n }\n };\n\n const stream = new Channel(this, chanInfo, { server: true });\n this._chanMgr.update(localChan, stream);\n\n proto.channelOpenConfirm(info.sender,\n localChan,\n MAX_WINDOW,\n PACKET_SIZE);\n\n return stream;\n };\n\n this.emit('tcpip', accept, reject, data);\n return;\n }\n break;\n case 'direct-streamlocal@openssh.com':\n if (listenerCount(this, 'openssh.streamlocal')\n && reserveChannel()) {\n accept = () => {\n if (replied)\n return;\n replied = true;\n\n const chanInfo = {\n type: undefined,\n incoming: {\n id: localChan,\n window: MAX_WINDOW,\n packetSize: PACKET_SIZE,\n state: 'open'\n },\n outgoing: {\n id: info.sender,\n window: info.window,\n packetSize: info.packetSize,\n state: 'open'\n }\n };\n\n const stream = new Channel(this, chanInfo, { server: true });\n this._chanMgr.update(localChan, stream);\n\n proto.channelOpenConfirm(info.sender,\n localChan,\n MAX_WINDOW,\n PACKET_SIZE);\n\n return stream;\n };\n\n this.emit('openssh.streamlocal', accept, reject, data);\n return;\n }\n break;\n default:\n // Automatically reject any unsupported channel open requests\n reason = CHANNEL_OPEN_FAILURE.UNKNOWN_CHANNEL_TYPE;\n if (debug) {\n debug('Automatic rejection of unsupported incoming channel open'\n + ` type: ${info.type}`);\n }\n }\n\n if (reason === undefined) {\n reason = CHANNEL_OPEN_FAILURE.ADMINISTRATIVELY_PROHIBITED;\n if (debug) {\n debug('Automatic rejection of unexpected incoming channel open'\n + ` for: ${info.type}`);\n }\n }\n\n reject();\n },\n CHANNEL_OPEN_CONFIRMATION: (p, info) => {\n const channel = this._chanMgr.get(info.recipient);\n if (typeof channel !== 'function')\n return;\n\n const chanInfo = {\n type: channel.type,\n incoming: {\n id: info.recipient,\n window: MAX_WINDOW,\n packetSize: PACKET_SIZE,\n state: 'open'\n },\n outgoing: {\n id: info.sender,\n window: info.window,\n packetSize: info.packetSize,\n state: 'open'\n }\n };\n\n const instance = new Channel(this, chanInfo, { server: true });\n this._chanMgr.update(info.recipient, instance);\n channel(undefined, instance);\n },\n CHANNEL_OPEN_FAILURE: (p, recipient, reason, description) => {\n const channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'function')\n return;\n\n const info = { reason, description };\n onChannelOpenFailure(this, recipient, info, channel);\n },\n CHANNEL_DATA: (p, recipient, data) => {\n let channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n if (channel.constructor === Session) {\n channel = channel._channel;\n if (!channel)\n return;\n }\n\n // The remote party should not be sending us data if there is no\n // window space available ...\n // TODO: raise error on data with not enough window?\n if (channel.incoming.window === 0)\n return;\n\n channel.incoming.window -= data.length;\n\n if (channel.push(data) === false) {\n channel._waitChanDrain = true;\n return;\n }\n\n if (channel.incoming.window <= WINDOW_THRESHOLD)\n windowAdjust(channel);\n },\n CHANNEL_EXTENDED_DATA: (p, recipient, data, type) => {\n // NOOP -- should not be sent by client\n },\n CHANNEL_WINDOW_ADJUST: (p, recipient, amount) => {\n let channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n if (channel.constructor === Session) {\n channel = channel._channel;\n if (!channel)\n return;\n }\n\n // The other side is allowing us to send `amount` more bytes of data\n channel.outgoing.window += amount;\n\n if (channel._waitWindow) {\n channel._waitWindow = false;\n\n if (channel._chunk) {\n channel._write(channel._chunk, null, channel._chunkcb);\n } else if (channel._chunkcb) {\n channel._chunkcb();\n } else if (channel._chunkErr) {\n channel.stderr._write(channel._chunkErr,\n null,\n channel._chunkcbErr);\n } else if (channel._chunkcbErr) {\n channel._chunkcbErr();\n }\n }\n },\n CHANNEL_SUCCESS: (p, recipient) => {\n let channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n if (channel.constructor === Session) {\n channel = channel._channel;\n if (!channel)\n return;\n }\n\n if (channel._callbacks.length)\n channel._callbacks.shift()(false);\n },\n CHANNEL_FAILURE: (p, recipient) => {\n let channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n if (channel.constructor === Session) {\n channel = channel._channel;\n if (!channel)\n return;\n }\n\n if (channel._callbacks.length)\n channel._callbacks.shift()(true);\n },\n CHANNEL_REQUEST: (p, recipient, type, wantReply, data) => {\n const session = this._chanMgr.get(recipient);\n if (typeof session !== 'object' || session === null)\n return;\n\n let replied = false;\n let accept;\n let reject;\n\n if (session.constructor !== Session) {\n // normal Channel instance\n if (wantReply)\n proto.channelFailure(session.outgoing.id);\n return;\n }\n\n if (wantReply) {\n // \"real session\" requests will have custom accept behaviors\n if (type !== 'shell'\n && type !== 'exec'\n && type !== 'subsystem') {\n accept = () => {\n if (replied || session._ending || session._channel)\n return;\n replied = true;\n\n proto.channelSuccess(session._chanInfo.outgoing.id);\n };\n }\n\n reject = () => {\n if (replied || session._ending || session._channel)\n return;\n replied = true;\n\n proto.channelFailure(session._chanInfo.outgoing.id);\n };\n }\n\n if (session._ending) {\n reject && reject();\n return;\n }\n\n switch (type) {\n // \"pre-real session start\" requests\n case 'env':\n if (listenerCount(session, 'env')) {\n session.emit('env', accept, reject, {\n key: data.name,\n val: data.value\n });\n return;\n }\n break;\n case 'pty-req':\n if (listenerCount(session, 'pty')) {\n session.emit('pty', accept, reject, data);\n return;\n }\n break;\n case 'window-change':\n if (listenerCount(session, 'window-change'))\n session.emit('window-change', accept, reject, data);\n else\n reject && reject();\n break;\n case 'x11-req':\n if (listenerCount(session, 'x11')) {\n session.emit('x11', accept, reject, data);\n return;\n }\n break;\n // \"post-real session start\" requests\n case 'signal':\n if (listenerCount(session, 'signal')) {\n session.emit('signal', accept, reject, {\n name: data\n });\n return;\n }\n break;\n // XXX: is `auth-agent-req@openssh.com` really \"post-real session\n // start\"?\n case 'auth-agent-req@openssh.com':\n if (listenerCount(session, 'auth-agent')) {\n session.emit('auth-agent', accept, reject);\n return;\n }\n break;\n // \"real session start\" requests\n case 'shell':\n if (listenerCount(session, 'shell')) {\n accept = () => {\n if (replied || session._ending || session._channel)\n return;\n replied = true;\n\n if (wantReply)\n proto.channelSuccess(session._chanInfo.outgoing.id);\n\n const channel = new Channel(\n this, session._chanInfo, { server: true }\n );\n\n channel.subtype = session.subtype = type;\n session._channel = channel;\n\n return channel;\n };\n\n session.emit('shell', accept, reject);\n return;\n }\n break;\n case 'exec':\n if (listenerCount(session, 'exec')) {\n accept = () => {\n if (replied || session._ending || session._channel)\n return;\n replied = true;\n\n if (wantReply)\n proto.channelSuccess(session._chanInfo.outgoing.id);\n\n const channel = new Channel(\n this, session._chanInfo, { server: true }\n );\n\n channel.subtype = session.subtype = type;\n session._channel = channel;\n\n return channel;\n };\n\n session.emit('exec', accept, reject, {\n command: data\n });\n return;\n }\n break;\n case 'subsystem': {\n let useSFTP = (data === 'sftp');\n accept = () => {\n if (replied || session._ending || session._channel)\n return;\n replied = true;\n\n if (wantReply)\n proto.channelSuccess(session._chanInfo.outgoing.id);\n\n let instance;\n if (useSFTP) {\n instance = new SFTP(this, session._chanInfo, {\n server: true,\n debug,\n });\n } else {\n instance = new Channel(\n this, session._chanInfo, { server: true }\n );\n instance.subtype =\n session.subtype = `${type}:${data}`;\n }\n session._channel = instance;\n\n return instance;\n };\n\n if (data === 'sftp') {\n if (listenerCount(session, 'sftp')) {\n session.emit('sftp', accept, reject);\n return;\n }\n useSFTP = false;\n }\n if (listenerCount(session, 'subsystem')) {\n session.emit('subsystem', accept, reject, {\n name: data\n });\n return;\n }\n break;\n }\n }\n debug && debug(\n `Automatic rejection of incoming channel request: ${type}`\n );\n reject && reject();\n },\n CHANNEL_EOF: (p, recipient) => {\n let channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n if (channel.constructor === Session) {\n if (!channel._ending) {\n channel._ending = true;\n channel.emit('eof');\n channel.emit('end');\n }\n channel = channel._channel;\n if (!channel)\n return;\n }\n\n if (channel.incoming.state !== 'open')\n return;\n channel.incoming.state = 'eof';\n\n if (channel.readable)\n channel.push(null);\n },\n CHANNEL_CLOSE: (p, recipient) => {\n let channel = this._chanMgr.get(recipient);\n if (typeof channel !== 'object' || channel === null)\n return;\n\n if (channel.constructor === Session) {\n channel._ending = true;\n channel.emit('close');\n channel = channel._channel;\n if (!channel)\n return;\n }\n\n onCHANNEL_CLOSE(this, recipient, channel);\n },\n // Begin service/auth-related ==========================================\n SERVICE_REQUEST: (p, service) => {\n if (exchanges === 0\n || acceptedAuthSvc\n || this.authenticated\n || service !== 'ssh-userauth') {\n proto.disconnect(DISCONNECT_REASON.SERVICE_NOT_AVAILABLE);\n socket.end();\n return;\n }\n\n acceptedAuthSvc = true;\n proto.serviceAccept(service);\n },\n USERAUTH_REQUEST: (p, username, service, method, methodData) => {\n if (exchanges === 0\n || this.authenticated\n || (authCtx\n && (authCtx.username !== username\n || authCtx.service !== service))\n // TODO: support hostbased auth\n || (method !== 'password'\n && method !== 'publickey'\n && method !== 'hostbased'\n && method !== 'keyboard-interactive'\n && method !== 'none')\n || pendingAuths.length === MAX_PENDING_AUTHS) {\n proto.disconnect(DISCONNECT_REASON.PROTOCOL_ERROR);\n socket.end();\n return;\n } else if (service !== 'ssh-connection') {\n proto.disconnect(DISCONNECT_REASON.SERVICE_NOT_AVAILABLE);\n socket.end();\n return;\n }\n\n let ctx;\n switch (method) {\n case 'keyboard-interactive':\n ctx = new KeyboardAuthContext(proto, username, service, method,\n methodData, onAuthDecide);\n break;\n case 'publickey':\n ctx = new PKAuthContext(proto, username, service, method,\n methodData, onAuthDecide);\n break;\n case 'hostbased':\n ctx = new HostbasedAuthContext(proto, username, service, method,\n methodData, onAuthDecide);\n break;\n case 'password':\n if (authCtx\n && authCtx instanceof PwdAuthContext\n && authCtx._changeCb) {\n const cb = authCtx._changeCb;\n authCtx._changeCb = undefined;\n cb(methodData.newPassword);\n return;\n }\n ctx = new PwdAuthContext(proto, username, service, method,\n methodData, onAuthDecide);\n break;\n case 'none':\n ctx = new AuthContext(proto, username, service, method,\n onAuthDecide);\n break;\n }\n\n if (authCtx) {\n if (!authCtx._initialResponse) {\n return pendingAuths.push(ctx);\n } else if (authCtx._multistep && !authCtx._finalResponse) {\n // RFC 4252 says to silently abort the current auth request if a\n // new auth request comes in before the final response from an\n // auth method that requires additional request/response exchanges\n // -- this means keyboard-interactive for now ...\n authCtx._cleanup && authCtx._cleanup();\n authCtx.emit('abort');\n }\n }\n\n authCtx = ctx;\n\n if (listenerCount(this, 'authentication'))\n this.emit('authentication', authCtx);\n else\n authCtx.reject();\n },\n USERAUTH_INFO_RESPONSE: (p, responses) => {\n if (authCtx && authCtx instanceof KeyboardAuthContext)\n authCtx._onInfoResponse(responses);\n },\n // End service/auth-related ============================================\n GLOBAL_REQUEST: (p, name, wantReply, data) => {\n const reply = {\n type: null,\n buf: null\n };\n\n function setReply(type, buf) {\n reply.type = type;\n reply.buf = buf;\n sendReplies();\n }\n\n if (wantReply)\n unsentGlobalRequestsReplies.push(reply);\n\n if ((name === 'tcpip-forward'\n || name === 'cancel-tcpip-forward'\n || name === 'no-more-sessions@openssh.com'\n || name === 'streamlocal-forward@openssh.com'\n || name === 'cancel-streamlocal-forward@openssh.com')\n && listenerCount(this, 'request')\n && this.authenticated) {\n let accept;\n let reject;\n\n if (wantReply) {\n let replied = false;\n accept = (chosenPort) => {\n if (replied)\n return;\n replied = true;\n let bufPort;\n if (name === 'tcpip-forward'\n && data.bindPort === 0\n && typeof chosenPort === 'number') {\n bufPort = Buffer.allocUnsafe(4);\n writeUInt32BE(bufPort, chosenPort, 0);\n }\n setReply('SUCCESS', bufPort);\n };\n reject = () => {\n if (replied)\n return;\n replied = true;\n setReply('FAILURE');\n };\n }\n\n if (name === 'no-more-sessions@openssh.com') {\n this.noMoreSessions = true;\n accept && accept();\n return;\n }\n\n this.emit('request', accept, reject, name, data);\n } else if (wantReply) {\n setReply('FAILURE');\n }\n },\n },\n });\n\n socket.pause();\n cryptoInit.then(() => {\n proto.start();\n socket.on('data', (data) => {\n try {\n proto.parse(data, 0, data.length);\n } catch (ex) {\n this.emit('error', ex);\n try {\n if (isWritable(socket))\n socket.end();\n } catch {}\n }\n });\n socket.resume();\n }).catch((err) => {\n this.emit('error', err);\n try {\n if (isWritable(socket))\n socket.end();\n } catch {}\n });\n socket.on('error', (err) => {\n err.level = 'socket';\n this.emit('error', err);\n }).once('end', () => {\n debug && debug('Socket ended');\n proto.cleanup();\n this.emit('end');\n }).once('close', () => {\n debug && debug('Socket closed');\n proto.cleanup();\n this.emit('close');\n\n const err = new Error('No response from server');\n\n // Simulate error for pending channels and close any open channels\n this._chanMgr.cleanup(err);\n });\n\n const onAuthDecide = (ctx, allowed, methodsLeft, isPartial) => {\n if (authCtx === ctx && !this.authenticated) {\n if (allowed) {\n authCtx = undefined;\n this.authenticated = true;\n proto.authSuccess();\n pendingAuths = [];\n this.emit('ready');\n } else {\n proto.authFailure(methodsLeft, isPartial);\n if (pendingAuths.length) {\n authCtx = pendingAuths.pop();\n if (listenerCount(this, 'authentication'))\n this.emit('authentication', authCtx);\n else\n authCtx.reject();\n }\n }\n }\n };\n\n function sendReplies() {\n while (unsentGlobalRequestsReplies.length > 0\n && unsentGlobalRequestsReplies[0].type) {\n const reply = unsentGlobalRequestsReplies.shift();\n if (reply.type === 'SUCCESS')\n proto.requestSuccess(reply.buf);\n if (reply.type === 'FAILURE')\n proto.requestFailure();\n }\n }\n }\n\n end() {\n if (this._sock && isWritable(this._sock)) {\n this._protocol.disconnect(DISCONNECT_REASON.BY_APPLICATION);\n this._sock.end();\n }\n return this;\n }\n\n x11(originAddr, originPort, cb) {\n const opts = { originAddr, originPort };\n openChannel(this, 'x11', opts, cb);\n return this;\n }\n\n forwardOut(boundAddr, boundPort, remoteAddr, remotePort, cb) {\n const opts = { boundAddr, boundPort, remoteAddr, remotePort };\n openChannel(this, 'forwarded-tcpip', opts, cb);\n return this;\n }\n\n openssh_forwardOutStreamLocal(socketPath, cb) {\n const opts = { socketPath };\n openChannel(this, 'forwarded-streamlocal@openssh.com', opts, cb);\n return this;\n }\n\n rekey(cb) {\n let error;\n\n try {\n this._protocol.rekey();\n } catch (ex) {\n error = ex;\n }\n\n // TODO: re-throw error if no callback?\n\n if (typeof cb === 'function') {\n if (error)\n process.nextTick(cb, error);\n else\n this.once('rekey', cb);\n }\n }\n\n setNoDelay(noDelay) {\n if (this._sock && typeof this._sock.setNoDelay === 'function')\n this._sock.setNoDelay(noDelay);\n\n return this;\n }\n}\n\n\nfunction openChannel(self, type, opts, cb) {\n // Ask the client to open a channel for some purpose (e.g. a forwarded TCP\n // connection)\n const initWindow = MAX_WINDOW;\n const maxPacket = PACKET_SIZE;\n\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n\n const wrapper = (err, stream) => {\n cb(err, stream);\n };\n wrapper.type = type;\n\n const localChan = self._chanMgr.add(wrapper);\n\n if (localChan === -1) {\n cb(new Error('No free channels available'));\n return;\n }\n\n switch (type) {\n case 'forwarded-tcpip':\n self._protocol.forwardedTcpip(localChan, initWindow, maxPacket, opts);\n break;\n case 'x11':\n self._protocol.x11(localChan, initWindow, maxPacket, opts);\n break;\n case 'forwarded-streamlocal@openssh.com':\n self._protocol.openssh_forwardedStreamLocal(\n localChan, initWindow, maxPacket, opts\n );\n break;\n default:\n throw new Error(`Unsupported channel type: ${type}`);\n }\n}\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\nmodule.exports = Server;\nmodule.exports.IncomingClient = Client;\n", "'use strict';\n\nconst {\n createCipheriv,\n generateKeyPair: generateKeyPair_,\n generateKeyPairSync: generateKeyPairSync_,\n getCurves,\n randomBytes,\n} = require('crypto');\n\nconst { Ber } = require('asn1');\nconst bcrypt_pbkdf = require('bcrypt-pbkdf').pbkdf;\n\nconst { CIPHER_INFO } = require('./protocol/crypto.js');\n\nconst SALT_LEN = 16;\nconst DEFAULT_ROUNDS = 16;\n\nconst curves = getCurves();\nconst ciphers = new Map(Object.entries(CIPHER_INFO));\n\nfunction makeArgs(type, opts) {\n if (typeof type !== 'string')\n throw new TypeError('Key type must be a string');\n\n const publicKeyEncoding = { type: 'spki', format: 'der' };\n const privateKeyEncoding = { type: 'pkcs8', format: 'der' };\n\n switch (type.toLowerCase()) {\n case 'rsa': {\n if (typeof opts !== 'object' || opts === null)\n throw new TypeError('Missing options object for RSA key');\n const modulusLength = opts.bits;\n if (!Number.isInteger(modulusLength))\n throw new TypeError('RSA bits must be an integer');\n if (modulusLength <= 0 || modulusLength > 16384)\n throw new RangeError('RSA bits must be non-zero and <= 16384');\n return ['rsa', { modulusLength, publicKeyEncoding, privateKeyEncoding }];\n }\n case 'ecdsa': {\n if (typeof opts !== 'object' || opts === null)\n throw new TypeError('Missing options object for ECDSA key');\n if (!Number.isInteger(opts.bits))\n throw new TypeError('ECDSA bits must be an integer');\n let namedCurve;\n switch (opts.bits) {\n case 256:\n namedCurve = 'prime256v1';\n break;\n case 384:\n namedCurve = 'secp384r1';\n break;\n case 521:\n namedCurve = 'secp521r1';\n break;\n default:\n throw new Error('ECDSA bits must be 256, 384, or 521');\n }\n if (!curves.includes(namedCurve))\n throw new Error('Unsupported ECDSA bits value');\n return ['ec', { namedCurve, publicKeyEncoding, privateKeyEncoding }];\n }\n case 'ed25519':\n return ['ed25519', { publicKeyEncoding, privateKeyEncoding }];\n default:\n throw new Error(`Unsupported key type: ${type}`);\n }\n}\n\nfunction parseDERs(keyType, pub, priv) {\n switch (keyType) {\n case 'rsa': {\n // Note: we don't need to parse the public key since the PKCS8 private key\n // already includes the public key parameters\n\n // Parse private key\n let reader = new Ber.Reader(priv);\n reader.readSequence();\n\n // - Version\n if (reader.readInt() !== 0)\n throw new Error('Unsupported version in RSA private key');\n\n // - Algorithm\n reader.readSequence();\n if (reader.readOID() !== '1.2.840.113549.1.1.1')\n throw new Error('Bad RSA private OID');\n // - Algorithm parameters (RSA has none)\n if (reader.readByte() !== Ber.Null)\n throw new Error('Malformed RSA private key (expected null)');\n if (reader.readByte() !== 0x00) {\n throw new Error(\n 'Malformed RSA private key (expected zero-length null)'\n );\n }\n\n reader = new Ber.Reader(reader.readString(Ber.OctetString, true));\n reader.readSequence();\n if (reader.readInt() !== 0)\n throw new Error('Unsupported version in RSA private key');\n const n = reader.readString(Ber.Integer, true);\n const e = reader.readString(Ber.Integer, true);\n const d = reader.readString(Ber.Integer, true);\n const p = reader.readString(Ber.Integer, true);\n const q = reader.readString(Ber.Integer, true);\n reader.readString(Ber.Integer, true); // dmp1\n reader.readString(Ber.Integer, true); // dmq1\n const iqmp = reader.readString(Ber.Integer, true);\n\n /*\n OpenSSH RSA private key:\n string \"ssh-rsa\"\n string n -- public\n string e -- public\n string d -- private\n string iqmp -- private\n string p -- private\n string q -- private\n */\n const keyName = Buffer.from('ssh-rsa');\n const privBuf = Buffer.allocUnsafe(\n 4 + keyName.length\n + 4 + n.length\n + 4 + e.length\n + 4 + d.length\n + 4 + iqmp.length\n + 4 + p.length\n + 4 + q.length\n );\n let pos = 0;\n\n privBuf.writeUInt32BE(keyName.length, pos += 0);\n privBuf.set(keyName, pos += 4);\n privBuf.writeUInt32BE(n.length, pos += keyName.length);\n privBuf.set(n, pos += 4);\n privBuf.writeUInt32BE(e.length, pos += n.length);\n privBuf.set(e, pos += 4);\n privBuf.writeUInt32BE(d.length, pos += e.length);\n privBuf.set(d, pos += 4);\n privBuf.writeUInt32BE(iqmp.length, pos += d.length);\n privBuf.set(iqmp, pos += 4);\n privBuf.writeUInt32BE(p.length, pos += iqmp.length);\n privBuf.set(p, pos += 4);\n privBuf.writeUInt32BE(q.length, pos += p.length);\n privBuf.set(q, pos += 4);\n\n /*\n OpenSSH RSA public key:\n string \"ssh-rsa\"\n string e -- public\n string n -- public\n */\n const pubBuf = Buffer.allocUnsafe(\n 4 + keyName.length\n + 4 + e.length\n + 4 + n.length\n );\n pos = 0;\n\n pubBuf.writeUInt32BE(keyName.length, pos += 0);\n pubBuf.set(keyName, pos += 4);\n pubBuf.writeUInt32BE(e.length, pos += keyName.length);\n pubBuf.set(e, pos += 4);\n pubBuf.writeUInt32BE(n.length, pos += e.length);\n pubBuf.set(n, pos += 4);\n\n return { sshName: keyName.toString(), priv: privBuf, pub: pubBuf };\n }\n case 'ec': {\n // Parse public key\n let reader = new Ber.Reader(pub);\n reader.readSequence();\n\n reader.readSequence();\n if (reader.readOID() !== '1.2.840.10045.2.1')\n throw new Error('Bad ECDSA public OID');\n // Skip curve OID, we'll get it from the private key\n reader.readOID();\n let pubBin = reader.readString(Ber.BitString, true);\n {\n // Remove leading zero bytes\n let i = 0;\n for (; i < pubBin.length && pubBin[i] === 0x00; ++i);\n if (i > 0)\n pubBin = pubBin.slice(i);\n }\n\n // Parse private key\n reader = new Ber.Reader(priv);\n reader.readSequence();\n\n // - Version\n if (reader.readInt() !== 0)\n throw new Error('Unsupported version in ECDSA private key');\n\n reader.readSequence();\n if (reader.readOID() !== '1.2.840.10045.2.1')\n throw new Error('Bad ECDSA private OID');\n const curveOID = reader.readOID();\n let sshCurveName;\n switch (curveOID) {\n case '1.2.840.10045.3.1.7':\n // prime256v1/secp256r1\n sshCurveName = 'nistp256';\n break;\n case '1.3.132.0.34':\n // secp384r1\n sshCurveName = 'nistp384';\n break;\n case '1.3.132.0.35':\n // secp521r1\n sshCurveName = 'nistp521';\n break;\n default:\n throw new Error('Unsupported curve in ECDSA private key');\n }\n\n reader = new Ber.Reader(reader.readString(Ber.OctetString, true));\n reader.readSequence();\n\n // - Version\n if (reader.readInt() !== 1)\n throw new Error('Unsupported version in ECDSA private key');\n\n // Add leading zero byte to prevent negative bignum in private key\n const privBin = Buffer.concat([\n Buffer.from([0x00]),\n reader.readString(Ber.OctetString, true)\n ]);\n\n /*\n OpenSSH ECDSA private key:\n string \"ecdsa-sha2-<sshCurveName>\"\n string curve name\n string Q -- public\n string d -- private\n */\n const keyName = Buffer.from(`ecdsa-sha2-${sshCurveName}`);\n sshCurveName = Buffer.from(sshCurveName);\n const privBuf = Buffer.allocUnsafe(\n 4 + keyName.length\n + 4 + sshCurveName.length\n + 4 + pubBin.length\n + 4 + privBin.length\n );\n let pos = 0;\n\n privBuf.writeUInt32BE(keyName.length, pos += 0);\n privBuf.set(keyName, pos += 4);\n privBuf.writeUInt32BE(sshCurveName.length, pos += keyName.length);\n privBuf.set(sshCurveName, pos += 4);\n privBuf.writeUInt32BE(pubBin.length, pos += sshCurveName.length);\n privBuf.set(pubBin, pos += 4);\n privBuf.writeUInt32BE(privBin.length, pos += pubBin.length);\n privBuf.set(privBin, pos += 4);\n\n /*\n OpenSSH ECDSA public key:\n string \"ecdsa-sha2-<sshCurveName>\"\n string curve name\n string Q -- public\n */\n const pubBuf = Buffer.allocUnsafe(\n 4 + keyName.length\n + 4 + sshCurveName.length\n + 4 + pubBin.length\n );\n pos = 0;\n\n pubBuf.writeUInt32BE(keyName.length, pos += 0);\n pubBuf.set(keyName, pos += 4);\n pubBuf.writeUInt32BE(sshCurveName.length, pos += keyName.length);\n pubBuf.set(sshCurveName, pos += 4);\n pubBuf.writeUInt32BE(pubBin.length, pos += sshCurveName.length);\n pubBuf.set(pubBin, pos += 4);\n\n return { sshName: keyName.toString(), priv: privBuf, pub: pubBuf };\n }\n case 'ed25519': {\n // Parse public key\n let reader = new Ber.Reader(pub);\n reader.readSequence();\n\n // - Algorithm\n reader.readSequence();\n if (reader.readOID() !== '1.3.101.112')\n throw new Error('Bad ED25519 public OID');\n // - Attributes (absent for ED25519)\n\n let pubBin = reader.readString(Ber.BitString, true);\n {\n // Remove leading zero bytes\n let i = 0;\n for (; i < pubBin.length && pubBin[i] === 0x00; ++i);\n if (i > 0)\n pubBin = pubBin.slice(i);\n }\n\n // Parse private key\n reader = new Ber.Reader(priv);\n reader.readSequence();\n\n // - Version\n if (reader.readInt() !== 0)\n throw new Error('Unsupported version in ED25519 private key');\n\n // - Algorithm\n reader.readSequence();\n if (reader.readOID() !== '1.3.101.112')\n throw new Error('Bad ED25519 private OID');\n // - Attributes (absent)\n\n reader = new Ber.Reader(reader.readString(Ber.OctetString, true));\n const privBin = reader.readString(Ber.OctetString, true);\n\n /*\n OpenSSH ed25519 private key:\n string \"ssh-ed25519\"\n string public key\n string private key + public key\n */\n const keyName = Buffer.from('ssh-ed25519');\n const privBuf = Buffer.allocUnsafe(\n 4 + keyName.length\n + 4 + pubBin.length\n + 4 + (privBin.length + pubBin.length)\n );\n let pos = 0;\n\n privBuf.writeUInt32BE(keyName.length, pos += 0);\n privBuf.set(keyName, pos += 4);\n privBuf.writeUInt32BE(pubBin.length, pos += keyName.length);\n privBuf.set(pubBin, pos += 4);\n privBuf.writeUInt32BE(\n privBin.length + pubBin.length,\n pos += pubBin.length\n );\n privBuf.set(privBin, pos += 4);\n privBuf.set(pubBin, pos += privBin.length);\n\n /*\n OpenSSH ed25519 public key:\n string \"ssh-ed25519\"\n string public key\n */\n const pubBuf = Buffer.allocUnsafe(\n 4 + keyName.length\n + 4 + pubBin.length\n );\n pos = 0;\n\n pubBuf.writeUInt32BE(keyName.length, pos += 0);\n pubBuf.set(keyName, pos += 4);\n pubBuf.writeUInt32BE(pubBin.length, pos += keyName.length);\n pubBuf.set(pubBin, pos += 4);\n\n return { sshName: keyName.toString(), priv: privBuf, pub: pubBuf };\n }\n }\n}\n\nfunction convertKeys(keyType, pub, priv, opts) {\n let format = 'new';\n let encrypted;\n let comment = '';\n if (typeof opts === 'object' && opts !== null) {\n if (typeof opts.comment === 'string' && opts.comment)\n comment = opts.comment;\n if (typeof opts.format === 'string' && opts.format)\n format = opts.format;\n if (opts.passphrase) {\n let passphrase;\n if (typeof opts.passphrase === 'string')\n passphrase = Buffer.from(opts.passphrase);\n else if (Buffer.isBuffer(opts.passphrase))\n passphrase = opts.passphrase;\n else\n throw new Error('Invalid passphrase');\n\n if (opts.cipher === undefined)\n throw new Error('Missing cipher name');\n const cipher = ciphers.get(opts.cipher);\n if (cipher === undefined)\n throw new Error('Invalid cipher name');\n\n if (format === 'new') {\n let rounds = DEFAULT_ROUNDS;\n if (opts.rounds !== undefined) {\n if (!Number.isInteger(opts.rounds))\n throw new TypeError('rounds must be an integer');\n if (opts.rounds > 0)\n rounds = opts.rounds;\n }\n\n const gen = Buffer.allocUnsafe(cipher.keyLen + cipher.ivLen);\n const salt = randomBytes(SALT_LEN);\n const r = bcrypt_pbkdf(\n passphrase,\n passphrase.length,\n salt,\n salt.length,\n gen,\n gen.length,\n rounds\n );\n if (r !== 0)\n return new Error('Failed to generate information to encrypt key');\n\n /*\n string salt\n uint32 rounds\n */\n const kdfOptions = Buffer.allocUnsafe(4 + salt.length + 4);\n {\n let pos = 0;\n kdfOptions.writeUInt32BE(salt.length, pos += 0);\n kdfOptions.set(salt, pos += 4);\n kdfOptions.writeUInt32BE(rounds, pos += salt.length);\n }\n\n encrypted = {\n cipher,\n cipherName: opts.cipher,\n kdfName: 'bcrypt',\n kdfOptions,\n key: gen.slice(0, cipher.keyLen),\n iv: gen.slice(cipher.keyLen),\n };\n }\n }\n }\n\n switch (format) {\n case 'new': {\n let privateB64 = '-----BEGIN OPENSSH PRIVATE KEY-----\\n';\n let publicB64;\n /*\n byte[] \"openssh-key-v1\\0\"\n string ciphername\n string kdfname\n string kdfoptions\n uint32 number of keys N\n string publickey1\n string encrypted, padded list of private keys\n uint32 checkint\n uint32 checkint\n byte[] privatekey1\n string comment1\n byte 1\n byte 2\n byte 3\n ...\n byte padlen % 255\n */\n const cipherName = Buffer.from(encrypted ? encrypted.cipherName : 'none');\n const kdfName = Buffer.from(encrypted ? encrypted.kdfName : 'none');\n const kdfOptions = (encrypted ? encrypted.kdfOptions : Buffer.alloc(0));\n const blockLen = (encrypted ? encrypted.cipher.blockLen : 8);\n\n const parsed = parseDERs(keyType, pub, priv);\n\n const checkInt = randomBytes(4);\n const commentBin = Buffer.from(comment);\n const privBlobLen = (4 + 4 + parsed.priv.length + 4 + commentBin.length);\n let padding = [];\n for (let i = 1; ((privBlobLen + padding.length) % blockLen); ++i)\n padding.push(i & 0xFF);\n padding = Buffer.from(padding);\n\n let privBlob = Buffer.allocUnsafe(privBlobLen + padding.length);\n let extra;\n {\n let pos = 0;\n privBlob.set(checkInt, pos += 0);\n privBlob.set(checkInt, pos += 4);\n privBlob.set(parsed.priv, pos += 4);\n privBlob.writeUInt32BE(commentBin.length, pos += parsed.priv.length);\n privBlob.set(commentBin, pos += 4);\n privBlob.set(padding, pos += commentBin.length);\n }\n\n if (encrypted) {\n const options = { authTagLength: encrypted.cipher.authLen };\n const cipher = createCipheriv(\n encrypted.cipher.sslName,\n encrypted.key,\n encrypted.iv,\n options\n );\n cipher.setAutoPadding(false);\n privBlob = Buffer.concat([ cipher.update(privBlob), cipher.final() ]);\n if (encrypted.cipher.authLen > 0)\n extra = cipher.getAuthTag();\n else\n extra = Buffer.alloc(0);\n encrypted.key.fill(0);\n encrypted.iv.fill(0);\n } else {\n extra = Buffer.alloc(0);\n }\n\n const magicBytes = Buffer.from('openssh-key-v1\\0');\n const privBin = Buffer.allocUnsafe(\n magicBytes.length\n + 4 + cipherName.length\n + 4 + kdfName.length\n + 4 + kdfOptions.length\n + 4\n + 4 + parsed.pub.length\n + 4 + privBlob.length\n + extra.length\n );\n {\n let pos = 0;\n privBin.set(magicBytes, pos += 0);\n privBin.writeUInt32BE(cipherName.length, pos += magicBytes.length);\n privBin.set(cipherName, pos += 4);\n privBin.writeUInt32BE(kdfName.length, pos += cipherName.length);\n privBin.set(kdfName, pos += 4);\n privBin.writeUInt32BE(kdfOptions.length, pos += kdfName.length);\n privBin.set(kdfOptions, pos += 4);\n privBin.writeUInt32BE(1, pos += kdfOptions.length);\n privBin.writeUInt32BE(parsed.pub.length, pos += 4);\n privBin.set(parsed.pub, pos += 4);\n privBin.writeUInt32BE(privBlob.length, pos += parsed.pub.length);\n privBin.set(privBlob, pos += 4);\n privBin.set(extra, pos += privBlob.length);\n }\n\n {\n const b64 = privBin.base64Slice(0, privBin.length);\n let formatted = b64.replace(/.{64}/g, '$&\\n');\n if (b64.length & 63)\n formatted += '\\n';\n privateB64 += formatted;\n }\n\n {\n const b64 = parsed.pub.base64Slice(0, parsed.pub.length);\n publicB64 = `${parsed.sshName} ${b64}${comment ? ` ${comment}` : ''}`;\n }\n\n privateB64 += '-----END OPENSSH PRIVATE KEY-----\\n';\n return {\n private: privateB64,\n public: publicB64,\n };\n }\n default:\n throw new Error('Invalid output key format');\n }\n}\n\nfunction noop() {}\n\nmodule.exports = {\n generateKeyPair: (keyType, opts, cb) => {\n if (typeof opts === 'function') {\n cb = opts;\n opts = undefined;\n }\n if (typeof cb !== 'function')\n cb = noop;\n const args = makeArgs(keyType, opts);\n generateKeyPair_(...args, (err, pub, priv) => {\n if (err)\n return cb(err);\n let ret;\n try {\n ret = convertKeys(args[0], pub, priv, opts);\n } catch (ex) {\n return cb(ex);\n }\n cb(null, ret);\n });\n },\n generateKeyPairSync: (keyType, opts) => {\n const args = makeArgs(keyType, opts);\n const { publicKey: pub, privateKey: priv } = generateKeyPairSync_(...args);\n return convertKeys(args[0], pub, priv, opts);\n }\n};\n", "'use strict';\n\nconst {\n AgentProtocol,\n BaseAgent,\n createAgent,\n CygwinAgent,\n OpenSSHAgent,\n PageantAgent,\n} = require('./agent.js');\nconst {\n SSHTTPAgent: HTTPAgent,\n SSHTTPSAgent: HTTPSAgent,\n} = require('./http-agents.js');\nconst { parseKey } = require('./protocol/keyParser.js');\nconst {\n flagsToString,\n OPEN_MODE,\n STATUS_CODE,\n stringToFlags,\n} = require('./protocol/SFTP.js');\n\nmodule.exports = {\n AgentProtocol,\n BaseAgent,\n createAgent,\n Client: require('./client.js'),\n CygwinAgent,\n HTTPAgent,\n HTTPSAgent,\n OpenSSHAgent,\n PageantAgent,\n Server: require('./server.js'),\n utils: {\n parseKey,\n ...require('./keygen.js'),\n sftp: {\n flagsToString,\n OPEN_MODE,\n STATUS_CODE,\n stringToFlags,\n },\n },\n};\n", "import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { config } from './config.js';\nimport { acpRemoteListFilesTool, handleAcpRemoteListFiles } from './tools/acp-remote-list-files.js';\nimport { acpRemoteExecuteCommandTool, handleAcpRemoteExecuteCommand } from './tools/acp-remote-execute-command.js';\nimport { acpRemoteReadFileTool, handleAcpRemoteReadFile } from './tools/acp-remote-read-file.js';\nimport { acpRemoteWriteFileTool, handleAcpRemoteWriteFile } from './tools/acp-remote-write-file.js';\nimport { ServerConfig } from './types/ssh-config.js';\nimport { SSHConnectionManager } from './utils/ssh-connection.js';\n\n/**\n * Create an MCP server instance for a specific user with SSH configuration\n * This factory function is used by mcp-auth for multi-tenant support\n * \n * @param serverConfig - Configuration including userId and SSH credentials\n * @returns Configured MCP Server instance\n */\nexport async function createServer(serverConfig: ServerConfig): Promise<Server> {\n // Create SSH connection manager\n const sshConnection = new SSHConnectionManager(serverConfig.ssh);\n \n // Connect to remote server\n await sshConnection.connect();\n\n const server = new Server(\n {\n name: 'acp-mcp',\n version: '0.1.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n // Register tools with SSH connection context\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: [acpRemoteListFilesTool, acpRemoteExecuteCommandTool, acpRemoteReadFileTool, acpRemoteWriteFileTool],\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n if (request.params.name === 'acp_remote_list_files') {\n // Pass SSH connection to handler for remote operations\n return await handleAcpRemoteListFiles(request.params.arguments, sshConnection);\n }\n if (request.params.name === 'acp_remote_execute_command') {\n return await handleAcpRemoteExecuteCommand(request.params.arguments, sshConnection);\n }\n if (request.params.name === 'acp_remote_read_file') {\n return await handleAcpRemoteReadFile(request.params.arguments, sshConnection);\n }\n if (request.params.name === 'acp_remote_write_file') {\n return await handleAcpRemoteWriteFile(request.params.arguments, sshConnection);\n }\n throw new Error(`Unknown tool: ${request.params.name}`);\n });\n\n // Handle server shutdown to cleanup SSH connection\n process.on('SIGINT', () => {\n sshConnection.disconnect();\n process.exit(0);\n });\n\n process.on('SIGTERM', () => {\n sshConnection.disconnect();\n process.exit(0);\n });\n\n return server;\n}\n", "import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { SSHConnectionManager } from '../utils/ssh-connection.js';\n\nexport const acpRemoteListFilesTool: Tool = {\n name: 'acp_remote_list_files',\n description: 'List files and directories in a specified path on the remote machine via SSH',\n inputSchema: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n description: 'The directory path to list files from',\n },\n recursive: {\n type: 'boolean',\n description: 'Whether to list files recursively',\n default: false,\n },\n },\n required: ['path'],\n },\n};\n\ninterface ListFilesArgs {\n path: string;\n recursive?: boolean;\n}\n\n/**\n * Handle the acp_remote_list_files tool invocation\n * Lists files and directories at the specified path on the remote machine via SSH\n * \n * @param args - Tool arguments containing path and recursive flag\n * @param sshConnection - SSH connection manager for remote operations\n */\nexport async function handleAcpRemoteListFiles(\n args: any,\n sshConnection: SSHConnectionManager\n): Promise<{ content: Array<{ type: string; text: string }> }> {\n const { path, recursive = false } = args as ListFilesArgs;\n\n try {\n const files = await listRemoteFiles(sshConnection, path, recursive);\n \n return {\n content: [\n {\n type: 'text',\n text: files.join('\\n'),\n },\n ],\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: `Error listing remote files: ${errorMessage}`,\n },\n ],\n };\n }\n}\n\n/**\n * Recursively list files in a remote directory via SSH\n */\nasync function listRemoteFiles(\n ssh: SSHConnectionManager,\n dirPath: string,\n recursive: boolean\n): Promise<string[]> {\n const entries = await ssh.listFiles(dirPath);\n const files: string[] = [];\n\n for (const entry of entries) {\n if (entry.isDirectory) {\n files.push(`${entry.name}/`);\n if (recursive) {\n const fullPath = `${dirPath}/${entry.name}`.replace(/\\/+/g, '/');\n const subFiles = await listRemoteFiles(ssh, fullPath, recursive);\n files.push(...subFiles.map(f => `${entry.name}/${f}`));\n }\n } else {\n files.push(entry.name);\n }\n }\n\n return files.sort();\n}\n", "import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { SSHConnectionManager } from '../utils/ssh-connection.js';\n\nexport const acpRemoteExecuteCommandTool: Tool = {\n name: 'acp_remote_execute_command',\n description: 'Execute a shell command on the remote machine via SSH',\n inputSchema: {\n type: 'object',\n properties: {\n command: {\n type: 'string',\n description: 'Shell command to execute',\n },\n cwd: {\n type: 'string',\n description: 'Working directory for command execution (optional)',\n },\n timeout: {\n type: 'number',\n description: 'Timeout in seconds (default: 30)',\n default: 30,\n },\n },\n required: ['command'],\n },\n};\n\ninterface ExecuteCommandArgs {\n command: string;\n cwd?: string;\n timeout?: number;\n}\n\ninterface ExecuteCommandResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n timedOut: boolean;\n}\n\n/**\n * Handle the acp_remote_execute_command tool invocation\n * Executes a shell command on the remote machine via SSH\n * \n * @param args - Tool arguments containing command, cwd, and timeout\n * @param sshConnection - SSH connection manager for remote operations\n */\nexport async function handleAcpRemoteExecuteCommand(\n args: any,\n sshConnection: SSHConnectionManager\n): Promise<{ content: Array<{ type: string; text: string }> }> {\n const { command, cwd, timeout = 30 } = args as ExecuteCommandArgs;\n\n try {\n // Build command with working directory if specified\n const fullCommand = cwd ? `cd ${cwd} && ${command}` : command;\n \n const result = await sshConnection.execWithTimeout(fullCommand, timeout);\n \n // Format output as JSON for structured response\n const output: ExecuteCommandResult = {\n stdout: result.stdout,\n stderr: result.stderr,\n exitCode: result.exitCode,\n timedOut: result.timedOut,\n };\n \n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(output, null, 2),\n },\n ],\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n stdout: '',\n stderr: errorMessage,\n exitCode: 1,\n timedOut: false,\n }, null, 2),\n },\n ],\n };\n }\n}\n", "import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { SSHConnectionManager } from '../utils/ssh-connection.js';\n\nexport const acpRemoteReadFileTool: Tool = {\n name: 'acp_remote_read_file',\n description: 'Read file contents from the remote machine via SSH',\n inputSchema: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n description: 'Absolute path to file',\n },\n encoding: {\n type: 'string',\n description: 'File encoding (default: utf-8)',\n default: 'utf-8',\n enum: ['utf-8', 'ascii', 'base64'],\n },\n maxSize: {\n type: 'number',\n description: 'Max file size in bytes (default: 1MB)',\n default: 1048576,\n },\n },\n required: ['path'],\n },\n};\n\ninterface ReadFileArgs {\n path: string;\n encoding?: string;\n maxSize?: number;\n}\n\ninterface ReadFileResult {\n content: string;\n size: number;\n encoding: string;\n}\n\n/**\n * Handle the acp_remote_read_file tool invocation\n * Reads file contents from the remote machine via SSH\n * \n * @param args - Tool arguments containing path, encoding, and maxSize\n * @param sshConnection - SSH connection manager for remote operations\n */\nexport async function handleAcpRemoteReadFile(\n args: any,\n sshConnection: SSHConnectionManager\n): Promise<{ content: Array<{ type: string; text: string }> }> {\n const { path, encoding = 'utf-8', maxSize = 1048576 } = args as ReadFileArgs;\n\n try {\n const result = await sshConnection.readFile(path, encoding, maxSize);\n \n const output: ReadFileResult = {\n content: result.content,\n size: result.size,\n encoding: result.encoding,\n };\n \n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(output, null, 2),\n },\n ],\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n error: errorMessage,\n content: '',\n size: 0,\n encoding,\n }, null, 2),\n },\n ],\n };\n }\n}\n", "import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { SSHConnectionManager } from '../utils/ssh-connection.js';\n\nexport const acpRemoteWriteFileTool: Tool = {\n name: 'acp_remote_write_file',\n description: 'Write file contents to the remote machine via SSH',\n inputSchema: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n description: 'Absolute path to file',\n },\n content: {\n type: 'string',\n description: 'File contents to write',\n },\n encoding: {\n type: 'string',\n description: 'File encoding (default: utf-8)',\n default: 'utf-8',\n },\n createDirs: {\n type: 'boolean',\n description: 'Create parent directories if they don\\'t exist (default: false)',\n default: false,\n },\n backup: {\n type: 'boolean',\n description: 'Backup existing file before overwriting (default: false)',\n default: false,\n },\n },\n required: ['path', 'content'],\n },\n};\n\ninterface WriteFileArgs {\n path: string;\n content: string;\n encoding?: string;\n createDirs?: boolean;\n backup?: boolean;\n}\n\ninterface WriteFileResult {\n success: boolean;\n bytesWritten: number;\n backupPath?: string;\n}\n\n/**\n * Handle the acp_remote_write_file tool invocation\n * Writes file contents to the remote machine via SSH\n * \n * @param args - Tool arguments containing path, content, and options\n * @param sshConnection - SSH connection manager for remote operations\n */\nexport async function handleAcpRemoteWriteFile(\n args: any,\n sshConnection: SSHConnectionManager\n): Promise<{ content: Array<{ type: string; text: string }> }> {\n const { path, content, encoding = 'utf-8', createDirs = false, backup = false } = args as WriteFileArgs;\n\n try {\n const result = await sshConnection.writeFile(path, content, {\n encoding,\n createDirs,\n backup,\n });\n \n const output: WriteFileResult = {\n success: result.success,\n bytesWritten: result.bytesWritten,\n backupPath: result.backupPath,\n };\n \n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(output, null, 2),\n },\n ],\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n success: false,\n bytesWritten: 0,\n error: errorMessage,\n }, null, 2),\n },\n ],\n };\n }\n}\n", "import { Client, SFTPWrapper } from 'ssh2';\nimport { SSHConfig } from '../types/ssh-config.js';\n\n/**\n * SSH Connection Manager\n * Manages SSH connections and provides SFTP access for remote file operations\n */\nexport class SSHConnectionManager {\n private client: Client;\n private config: SSHConfig;\n private connected: boolean = false;\n\n constructor(config: SSHConfig) {\n this.config = config;\n this.client = new Client();\n }\n\n /**\n * Connect to the remote SSH server\n */\n async connect(): Promise<void> {\n if (this.connected) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n this.client\n .on('ready', () => {\n this.connected = true;\n resolve();\n })\n .on('error', (err) => {\n reject(err);\n })\n .connect({\n host: this.config.host,\n port: this.config.port || 22,\n username: this.config.username,\n privateKey: this.config.privateKey,\n });\n });\n }\n\n /**\n * Execute a command on the remote server\n */\n async exec(command: string): Promise<string> {\n if (!this.connected) {\n await this.connect();\n }\n\n return new Promise((resolve, reject) => {\n this.client.exec(command, (err, stream) => {\n if (err) {\n reject(err);\n return;\n }\n\n let stdout = '';\n let stderr = '';\n\n stream\n .on('close', (code: number) => {\n if (code !== 0) {\n reject(new Error(`Command failed with code ${code}: ${stderr}`));\n } else {\n resolve(stdout);\n }\n })\n .on('data', (data: Buffer) => {\n stdout += data.toString();\n })\n .stderr.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n });\n });\n }\n\n /**\n * Execute a command on the remote server with timeout support\n */\n async execWithTimeout(\n command: string,\n timeoutSeconds: number = 30\n ): Promise<{ stdout: string; stderr: string; exitCode: number; timedOut: boolean }> {\n if (!this.connected) {\n await this.connect();\n }\n\n const execPromise = new Promise<{ stdout: string; stderr: string; exitCode: number }>((resolve, reject) => {\n this.client.exec(command, (err, stream) => {\n if (err) {\n reject(err);\n return;\n }\n\n let stdout = '';\n let stderr = '';\n\n stream\n .on('close', (code: number) => {\n resolve({ stdout, stderr, exitCode: code });\n })\n .on('data', (data: Buffer) => {\n stdout += data.toString();\n })\n .stderr.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n });\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Command execution timed out'));\n }, timeoutSeconds * 1000);\n });\n\n try {\n const result = await Promise.race([execPromise, timeoutPromise]);\n return { ...result, timedOut: false };\n } catch (error) {\n if (error instanceof Error && error.message === 'Command execution timed out') {\n return {\n stdout: '',\n stderr: 'Command execution timed out',\n exitCode: 124,\n timedOut: true,\n };\n }\n throw error;\n }\n }\n\n /**\n * Get SFTP wrapper for file operations\n */\n async getSFTP(): Promise<SFTPWrapper> {\n if (!this.connected) {\n await this.connect();\n }\n\n return new Promise((resolve, reject) => {\n this.client.sftp((err, sftp) => {\n if (err) {\n reject(err);\n } else {\n resolve(sftp);\n }\n });\n });\n }\n\n /**\n * List files in a directory using SFTP\n */\n async listFiles(path: string): Promise<Array<{ name: string; isDirectory: boolean }>> {\n const sftp = await this.getSFTP();\n\n return new Promise((resolve, reject) => {\n sftp.readdir(path, (err, list) => {\n if (err) {\n reject(err);\n return;\n }\n\n const files = list.map((item) => ({\n name: item.filename,\n isDirectory: item.attrs.isDirectory(),\n }));\n\n resolve(files);\n });\n });\n }\n\n /**\n * Read file contents from remote machine\n */\n async readFile(\n path: string,\n encoding: string = 'utf-8',\n maxSize: number = 1048576\n ): Promise<{ content: string; size: number; encoding: string }> {\n const sftp = await this.getSFTP();\n\n return new Promise((resolve, reject) => {\n // First, get file stats to check size\n sftp.stat(path, (err, stats) => {\n if (err) {\n reject(new Error(`File not found or inaccessible: ${path}`));\n return;\n }\n\n if (stats.size > maxSize) {\n reject(new Error(`File too large: ${stats.size} bytes (max: ${maxSize} bytes)`));\n return;\n }\n\n // Read file contents\n sftp.readFile(path, { encoding: encoding as BufferEncoding }, (err, data) => {\n if (err) {\n reject(new Error(`Failed to read file: ${err.message}`));\n return;\n }\n\n resolve({\n content: data.toString(),\n size: stats.size,\n encoding,\n });\n });\n });\n });\n }\n\n /**\n * Write file contents to remote machine\n */\n async writeFile(\n path: string,\n content: string,\n options: {\n encoding?: string;\n createDirs?: boolean;\n backup?: boolean;\n } = {}\n ): Promise<{ success: boolean; bytesWritten: number; backupPath?: string }> {\n const { encoding = 'utf-8', createDirs = false, backup = false } = options;\n const sftp = await this.getSFTP();\n\n return new Promise((resolve, reject) => {\n const writeOperation = () => {\n // Create backup if requested\n if (backup) {\n const backupPath = `${path}.backup`;\n sftp.rename(path, backupPath, (err) => {\n if (err && err.message !== 'No such file') {\n // Ignore \"no such file\" error (file doesn't exist yet)\n reject(new Error(`Failed to create backup: ${err.message}`));\n return;\n }\n \n // Write file\n performWrite(backupPath);\n });\n } else {\n performWrite();\n }\n };\n\n const performWrite = (backupPath?: string) => {\n const buffer = Buffer.from(content, encoding as BufferEncoding);\n const tempPath = `${path}.tmp`;\n\n // Write to temp file first (atomic write)\n sftp.writeFile(tempPath, buffer, (err) => {\n if (err) {\n reject(new Error(`Failed to write file: ${err.message}`));\n return;\n }\n\n // Rename temp file to target (atomic operation)\n sftp.rename(tempPath, path, (err) => {\n if (err) {\n reject(new Error(`Failed to rename temp file: ${err.message}`));\n return;\n }\n\n resolve({\n success: true,\n bytesWritten: buffer.length,\n backupPath,\n });\n });\n });\n };\n\n // Create parent directories if requested\n if (createDirs) {\n const dirPath = path.substring(0, path.lastIndexOf('/'));\n this.exec(`mkdir -p ${dirPath}`).then(() => {\n writeOperation();\n }).catch(reject);\n } else {\n writeOperation();\n }\n });\n }\n\n /**\n * Disconnect from the SSH server\n */\n disconnect(): void {\n if (this.connected) {\n this.client.end();\n this.connected = false;\n }\n }\n\n /**\n * Check if connected\n */\n isConnected(): boolean {\n return this.connected;\n }\n}\n"],
|
|
5
|
-
"mappings": "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,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI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QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,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,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,QAAU,CAAC;AAAA,QACjD,IAAI,YAAY;AAAA,UACd;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,QAAU,CAAC;AAAA,QACjD,IAAI,YAAY;AAAA,UACd;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,QAAU,CAAC;AAAA,QACjD,IAAI,YAAY;AAAA,UACd;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,QAAU,CAAC;AAAA,MACjD;AACF,WAAK,IAAI,IAAI,YAAY;AAAA,QACvB;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,MAAU,CAAC;AAAA,IAC3B;AAEA,aAAS,EAAE,GAAG,IAAI,GAAG;AACnB,cAAU,EAAE,CAAC,EAAE,GAAG,IAAE,CAAC,CAAC,IACZ,EAAE,CAAC,EAAE,GAAG,IAAE,CAAC,CAAC,IACZ,EAAE,CAAC,EAAE,GAAG,IAAE,CAAC,CAAC,KACZ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAAA,IACtB;AAEA,aAAS,UAAU,WAAW,SAAS,GAAG,IAAI;AAC5C,UAAI,OAAO,QAAW;AACpB,aAAK,IAAI,WAAW,EAAE,MAAM;AAC5B,YAAI,EAAE,eAAe;AACnB,eAAK,GAAG,SAAS,EAAE,UAAU;AAAA,MACjC;AACA,QAAE,CAAC,KAAK,KAAK,EAAE,CAAC;AAChB,eAAS,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC9B,UAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;AACnC,UAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,EAAE,IAAE,CAAC;AAAA,MACvC;AACA,UAAI,IAAI,EAAE,CAAC;AACX,QAAE,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,EAAE;AACvB,QAAE,CAAC,IAAI;AAAA,IACT;AAEA,aAAS,UAAU,WAAW,SAAS,GAAG;AACxC,UAAI,KAAK,IAAI,WAAW,EAAE,MAAM;AAChC,UAAI,EAAE,eAAe;AACnB,aAAK,GAAG,SAAS,EAAE,UAAU;AAC/B,QAAE,CAAC,KAAK,KAAK,EAAE,EAAE;AACjB,eAAS,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG;AAC9B,UAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;AACnC,UAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,EAAE,IAAE,CAAC;AAAA,MACvC;AACA,UAAI,IAAI,EAAE,CAAC;AACX,QAAE,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;AACtB,QAAE,CAAC,IAAI;AAAA,IACT;AAEA,aAAS,YAAY,MAAM,WAAU;AACnC,UAAI,GAAG,OAAO;AACd,WAAK,IAAI,GAAG,IAAI,GAAG,KAAK,SAAS;AAC/B,YAAI,SAAS;AAAW,kBAAQ;AAChC,eAAQ,QAAQ,IAAK,KAAK,KAAK;AAAA,MACjC;AACA,aAAO;AAAA,IACT;AAEA,aAAS,UAAU,eAAe,SAAS,KAAK,UAAU;AACxD,UAAI,IAAI,IAAI,YAAY,CAAC,GAAG,GAAG;AAC/B,UAAI,KAAK,IAAI,WAAW,EAAE,MAAM;AAEhC,WAAK,IAAI,GAAG,QAAQ,GAAG,IAAI,IAAI,KAAK;AAClC,aAAK,EAAE,CAAC,KAAK,YAAY,KAAK,QAAQ;AAAA,MACxC;AACA,cAAQ;AAER,WAAK,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC1B,aAAK,SAAS,GAAG,EAAE;AACnB,aAAK,EAAE,CAAC,IAAM,EAAE,CAAC;AACjB,aAAK,EAAE,IAAE,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB;AAEA,WAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AACtB,aAAK,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAC3B,eAAK,SAAS,GAAG,EAAE;AACnB,eAAK,EAAE,CAAC,EAAE,CAAC,IAAM,EAAE,CAAC;AACpB,eAAK,EAAE,CAAC,EAAE,IAAE,CAAC,IAAI,EAAE,CAAC;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAEA,aAAS,UAAU,cAAc,SAAS,MAAM,WAAW,KAAK,UAAU;AACxE,UAAI,IAAI,IAAI,YAAY,CAAC,GAAG,GAAG;AAE/B,WAAK,IAAI,GAAG,QAAQ,GAAG,IAAI,IAAI,KAAK;AAClC,aAAK,EAAE,CAAC,KAAK,YAAY,KAAK,QAAQ;AAAA,MACxC;AAEA,WAAK,IAAI,GAAG,QAAQ,GAAG,IAAI,IAAI,KAAK,GAAG;AACrC,UAAE,CAAC,KAAK,YAAY,MAAM,SAAS;AACnC,UAAE,CAAC,KAAK,YAAY,MAAM,SAAS;AACnC,aAAK,SAAS,CAAC;AACf,aAAK,EAAE,CAAC,IAAM,EAAE,CAAC;AACjB,aAAK,EAAE,IAAE,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB;AAEA,WAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AACtB,aAAK,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAC3B,YAAE,CAAC,KAAK,YAAY,MAAM,SAAS;AACnC,YAAE,CAAC,KAAK,YAAY,MAAM,SAAS;AACnC,eAAK,SAAS,CAAC;AACf,eAAK,EAAE,CAAC,EAAE,CAAC,IAAM,EAAE,CAAC;AACpB,eAAK,EAAE,CAAC,EAAE,IAAE,CAAC,IAAI,EAAE,CAAC;AAAA,QACtB;AAAA,MACF;AACA,cAAQ;AAAA,IACV;AAEA,aAAS,UAAU,MAAM,SAAS,MAAM,QAAQ;AAC9C,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,aAAK,SAAS,KAAK,SAAS,IAAE,CAAC,CAAC;AAAA,MAClC;AAAA,IACF;AAEA,aAAS,UAAU,MAAM,SAAS,MAAM,QAAQ;AAC9C,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,aAAK,SAAS,KAAK,SAAS,IAAE,CAAC,CAAC;AAAA,MAClC;AAAA,IACF;AAEA,QAAI,gBAAgB;AAApB,QACI,kBAAkB;AAEtB,aAAS,YAAY,UAAU,UAAU,KAAK;AAC5C,UAAI,QAAQ,IAAI,SAAS,GACrB,QAAQ,IAAI,YAAY,aAAa,GAAG,GACxC,aAAa,IAAI,WAAW;AAAA,QAAC;AAAA,QAAG;AAAA,QAAI;AAAA,QAAI;AAAA,QAAG;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAG;AAAA,QAAI;AAAA,QAC5D;AAAA,QAAG;AAAA,QAAG;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAG;AAAA,QAAI;AAAA,QAAG;AAAA,QAAI;AAAA,QAAG;AAAA,QAAI;AAAA,QAAI;AAAA,QAAG;AAAA,QAC9D;AAAA,QAAI;AAAA,QAAI;AAAA,MAAG,CAAC;AAEtB,YAAM,YAAY,UAAU,IAAI,UAAU,EAAE;AAC5C,WAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,cAAM,aAAa,UAAU,EAAE;AAC/B,cAAM,aAAa,UAAU,EAAE;AAAA,MACjC;AAEA,WAAK,IAAI,GAAG,IAAI,eAAe;AAC7B,cAAM,CAAC,IAAI,YAAY,YAAY,WAAW,UAAU;AAC1D,WAAK,IAAI,GAAG,IAAI,IAAI;AAClB,cAAM,IAAI,OAAO,MAAM,aAAa,CAAC;AAEvC,WAAK,IAAI,GAAG,IAAI,eAAe,KAAK;AAClC,YAAI,IAAE,IAAE,CAAC,IAAI,MAAM,CAAC,MAAM;AAC1B,YAAI,IAAE,IAAE,CAAC,IAAI,MAAM,CAAC,MAAM;AAC1B,YAAI,IAAE,IAAE,CAAC,IAAI,MAAM,CAAC,MAAM;AAC1B,YAAI,IAAE,IAAE,CAAC,IAAI,MAAM,CAAC;AAAA,MACtB;AAAA,IACF;AAEA,aAAS,aAAa,MAAM,SAAS,MAAM,SAAS,KAAK,QAAQ,QAAQ;AACvE,UAAI,WAAW,IAAI,WAAW,EAAE,GAC5B,WAAW,IAAI,WAAW,EAAE,GAC5B,MAAM,IAAI,WAAW,eAAe,GACpC,SAAS,IAAI,WAAW,eAAe,GACvC,YAAY,IAAI,WAAW,UAAQ,CAAC,GACpC,GAAG,GAAG,KAAK,QAAQ,MAAM,OACzB,aAAa;AAEjB,UAAI,SAAS;AACX,eAAO;AACT,UAAI,YAAY,KAAK,YAAY,KAAK,WAAW,KAC7C,SAAU,IAAI,aAAa,IAAI,cAAe,UAAW,KAAG;AAC9D,eAAO;AAET,eAAS,KAAK,OAAO,SAAS,IAAI,aAAa,KAAK,IAAI,UAAU;AAClE,YAAM,KAAK,OAAO,SAAS,SAAS,KAAK,MAAM;AAE/C,WAAK,IAAI,GAAG,IAAI,SAAS;AACvB,kBAAU,CAAC,IAAI,KAAK,CAAC;AAEvB,yBAAmB,UAAU,MAAM,OAAO;AAE1C,WAAK,QAAQ,GAAG,SAAS,GAAG,SAAS;AACnC,kBAAU,UAAQ,CAAC,IAAI,UAAU;AACjC,kBAAU,UAAQ,CAAC,IAAI,UAAU;AACjC,kBAAU,UAAQ,CAAC,IAAI,UAAW;AAClC,kBAAU,UAAQ,CAAC,IAAI;AAEvB,2BAAmB,UAAU,WAAW,UAAU,CAAC;AACnD,oBAAY,UAAU,UAAU,MAAM;AACtC,aAAK,IAAI,IAAI,YAAY;AACvB,cAAI,CAAC,IAAI,OAAO,CAAC;AAEnB,aAAK,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC3B,6BAAmB,UAAU,QAAQ,OAAO,UAAU;AACtD,sBAAY,UAAU,UAAU,MAAM;AACtC,eAAK,IAAI,GAAG,IAAI,IAAI,YAAY;AAC9B,gBAAI,CAAC,KAAK,OAAO,CAAC;AAAA,QACtB;AAEA,cAAM,KAAK,IAAI,KAAK,MAAM;AAC1B,aAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACxB,iBAAO,IAAI,UAAU,QAAQ;AAC7B,cAAI,QAAQ;AACV;AACF,cAAI,IAAI,IAAI,IAAI,CAAC;AAAA,QACnB;AACA,kBAAU;AAAA,MACZ;AAEA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA,MACX,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,IACb;AAAA;AAAA;;;AC3iBA;AAAA;AAAA;AAEA,QAAM,SAAS,UAAQ,QAAQ;AAE/B,QAAI;AACJ,QAAI;AACF,gBAAU,UAAQ,cAAc,EAAE;AAAA,IACpC,QAAQ;AAAA,IAAC;AAET,QAAM,EAAE,kBAAkB,aAAa,SAAS,IAAI;AAEpD,QAAM,kBAAkB,MAAM;AAC5B,UAAI,OAAO,OAAO,SAAS,cACpB,OAAO,OAAO,WAAW,YAAY;AAC1C,cAAM,MACJ;AAEF,cAAM,OAAO,OAAO,KAAK,GAAG;AAC5B,YAAI;AACJ,YAAI;AACJ,YAAI;AACF,gBAAM,OAAO,KAAK,MAAM,MAAM,GAAG;AACjC,qBAAW,OAAO,OAAO,MAAM,MAAM,KAAK,GAAG;AAAA,QAC/C,QAAQ;AAAA,QAAC;AACT,eAAQ,OAAO,SAAS,GAAG,KAAK,IAAI,WAAW,MAAM,aAAa;AAAA,MACpE;AAEA,aAAO;AAAA,IACT,GAAG;AAEH,QAAM,sBAAuB,OAAO,OAAO,kBAAkB,cAC7B,OAAO,OAAO,wBAAwB,cACtC,OAAO,OAAO,oBAAoB;AAElE,QAAM,cAAc;AAAA;AAAA,MAElB;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,qBAAqB;AACvB,kBAAY,QAAQ,mBAAmB;AACvC,kBAAY,QAAQ,8BAA8B;AAAA,IACpD;AACA,QAAM,gBAAgB,YAAY,OAAO;AAAA;AAAA,MAEvC;AAAA,MAEA;AAAA;AAAA,MACA;AAAA;AAAA,IACF,CAAC;AAGD,QAAM,0BAA0B;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,IACF;AACA,QAAI;AACF,8BAAwB,QAAQ,aAAa;AAC/C,QAAM,4BAA4B,wBAAwB,OAAO;AAAA,MAC/D;AAAA,IACF,CAAC;AAGD,QAAM,gBAAgB,MAAM;AAC1B,YAAM,UAAU,OAAO,WAAW;AAClC,aAAO,CAAC,SAAS,QAAQ,SAAS,YAAY,IAAI,EAAE,OAAO;AAAA,IAC7D,GAAG;AACH,QAAI,iBAAiB;AAAA;AAAA,MAEnB;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,WAAW,QAAQ,SAAS,CAAC,QAAQ,MAAM,KAAK;AAElD,UAAI;AACF,uBAAe,QAAQ,+BAA+B;AAAA;AAEtD,uBAAe,KAAK,+BAA+B;AAAA,IACvD,WAAW,oBAAoB,WAAW,QAAQ,SAAS,OAAO;AAGhE,qBAAe,OAAO,GAAG,GAAG,+BAA+B;AAAA,IAC7D,OAAO;AACL,qBAAe,KAAK,+BAA+B;AAAA,IACrD;AACA,qBAAiB,eAAe,OAAO,YAAY;AACnD,QAAM,mBAAmB,eAAe,OAAO;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,IACF,EAAE,OAAO,YAAY,CAAC;AAGtB,QAAM,aAAa,MAAM;AACvB,YAAM,SAAS,OAAO,UAAU;AAChC,aAAO,CAAC,SAAS,OAAO,SAAS,SAAS,IAAI,EAAE,OAAO;AAAA,IACzD,GAAG;AACH,QAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,OAAO,SAAS;AAClB,QAAM,gBAAgB,YAAY,OAAO;AAAA,MACvC;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,IACF,EAAE,OAAO,SAAS,CAAC;AAEnB,QAAM,sBAAsB;AAAA,MAC1B;AAAA,MACA;AAAA;AAAA;AAAA;AAAA,MAGA;AAAA;AAAA,IACF;AACA,QAAM,wBAAwB,oBAAoB,OAAO,CACzD,CAAC;AAGD,QAAM,SAAS;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB,wBAAwB,KAAK;AAAA,IAC/B;AAEA,WAAO,UAAU;AAAA,MACf,SAAS;AAAA;AAAA,QAEP,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,OAAO;AAAA,QACP,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,UAAU;AAAA;AAAA;AAAA,QAGV,SAAS;AAAA,QACT,SAAS;AAAA;AAAA,QAGT,YAAY;AAAA,QACZ,aAAa;AAAA,QAEb,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QAEnB,cAAc;AAAA,QACd,eAAe;AAAA;AAAA,QAGf,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,QAClB,iBAAiB;AAAA;AAAA,QAGjB,2BAA2B;AAAA,QAE3B,gBAAgB;AAAA,QAEhB,uBAAuB;AAAA,QACvB,wBAAwB;AAAA;AAAA,QAGxB,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,iBAAiB;AAAA;AAAA,QAGjB,cAAc;AAAA,QACd,2BAA2B;AAAA,QAC3B,sBAAsB;AAAA,QACtB,uBAAuB;AAAA,QACvB,cAAc;AAAA,QACd,uBAAuB;AAAA,QACvB,aAAa;AAAA,QACb,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB,iBAAiB;AAAA;AAAA;AAAA,MAKnB;AAAA,MACA,mBAAmB;AAAA,QACjB,6BAA6B;AAAA,QAC7B,gBAAgB;AAAA,QAChB,qBAAqB;AAAA,QACrB,UAAU;AAAA,QACV,WAAW;AAAA,QACX,mBAAmB;AAAA,QACnB,uBAAuB;AAAA,QACvB,gCAAgC;AAAA,QAChC,yBAAyB;AAAA,QACzB,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,sBAAsB;AAAA,QACtB,uBAAuB;AAAA,QACvB,gCAAgC;AAAA,QAChC,mBAAmB;AAAA,MACrB;AAAA,MACA,uBAAuB;AAAA,MACvB,sBAAsB;AAAA,QACpB,6BAA6B;AAAA,QAC7B,gBAAgB;AAAA,QAChB,sBAAsB;AAAA,QACtB,mBAAmB;AAAA,MACrB;AAAA,MACA,eAAe;AAAA,QACb,YAAY;AAAA;AAAA,QACZ,OAAO;AAAA;AAAA;AAAA;AAAA,QAGP,OAAO;AAAA;AAAA;AAAA,QAEP,QAAQ;AAAA;AAAA,QACR,OAAO;AAAA;AAAA,QACP,MAAM;AAAA;AAAA;AAAA,QAEN,MAAM;AAAA;AAAA;AAAA,QAEN,OAAO;AAAA;AAAA,QACP,QAAQ;AAAA;AAAA,QACR,OAAO;AAAA;AAAA,QACP,OAAO;AAAA;AAAA,QACP,QAAQ;AAAA;AAAA,QACR,UAAU;AAAA;AAAA,QACV,SAAS;AAAA;AAAA,QACT,QAAQ;AAAA;AAAA;AAAA,QAER,QAAQ;AAAA;AAAA,QACR,QAAQ;AAAA;AAAA,QACR,SAAS;AAAA;AAAA;AAAA,QAET,UAAU;AAAA;AAAA,QACV,QAAQ;AAAA;AAAA;AAAA,QAER,QAAQ;AAAA;AAAA,QACR,OAAO;AAAA;AAAA,QACP,QAAQ;AAAA;AAAA,QACR,OAAO;AAAA;AAAA,QACP,OAAO;AAAA;AAAA,QACP,OAAO;AAAA;AAAA,QACP,OAAO;AAAA;AAAA,QACP,MAAM;AAAA;AAAA,QACN,OAAO;AAAA;AAAA,QACP,OAAO;AAAA;AAAA,QACP,SAAS;AAAA;AAAA,QACT,MAAM;AAAA;AAAA,QACN,QAAQ;AAAA;AAAA,QACR,OAAO;AAAA;AAAA;AAAA,QAEP,MAAM;AAAA;AAAA,QACN,OAAO;AAAA;AAAA,QACP,OAAO;AAAA;AAAA,QACP,QAAQ;AAAA;AAAA,QACR,QAAQ;AAAA;AAAA,QACR,QAAQ;AAAA;AAAA,QACR,QAAQ;AAAA;AAAA,QACR,SAAS;AAAA;AAAA,QACT,QAAQ;AAAA;AAAA,QACR,QAAQ;AAAA;AAAA,QACR,OAAO;AAAA;AAAA,QACP,OAAO;AAAA;AAAA,QACP,OAAO;AAAA;AAAA,QACP,OAAO;AAAA;AAAA,QACP,OAAO;AAAA;AAAA;AAAA,QAEP,QAAQ;AAAA;AAAA,QACR,KAAK;AAAA;AAAA,QACL,KAAK;AAAA;AAAA,QACL,QAAQ;AAAA;AAAA,QACR,QAAQ;AAAA;AAAA,QACR,eAAe;AAAA;AAAA,QACf,eAAe;AAAA;AAAA,MACjB;AAAA,MACA,2BAA2B;AAAA,QACzB,QAAQ;AAAA,MACV;AAAA,MAEA,SAAS;AAAA,QACP;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAO;AAAA,QAAO;AAAA,QAAO;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAQ;AAAA,QACpE;AAAA,QAAQ;AAAA,QAAQ;AAAA,MAClB,EAAE,OAAO,CAAC,KAAK,SAAS,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;AAAA,MAEjD;AAAA,MACA,eAAe;AAAA,QACb,CAAE,cAAc,OAAO,SAAU;AAAA,QACjC,CAAE,eAAe,OAAO,eAAgB;AAAA,QACxC,CAAE,aAAa,OAAO,QAAS;AAAA;AAAA,QAC/B,CAAE,uBAAuB,OAAO,aAAc;AAAA,QAC9C,CAAE,kBAAkB,OAAO,sBAAuB;AAAA,MACpD;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,IACF;AAEA,WAAO,QAAQ,6BACb,MAAM,KAAK,OAAO,QAAQ,OAAO,QAAQ,iBAAiB,CAAC,EACrD,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC;AAAA;AAAA;;;ACnWpE;AAAA;AAAA;AAEA,QAAM,MAAM,cAAgB;AAE5B,QAAI;AAEJ,QAAM,aAAa,OAAO,OAAO,OAAO;AACxC,QAAM,iBAAiB,OAAO,eAAe,WAAW,SAAS,EAAE;AAEnE,aAAS,aAAa,KAAK,QAAQ;AACjC,aAAQ,IAAI,QAAQ,IAAI,WACd,IAAI,QAAQ,IAAI,QAChB,IAAI,QAAQ,IAAI,MACjB,IAAI,MAAM;AAAA,IACrB;AAEA,aAAS,WAAW,KAAK,MAAM,UAAU,QAAQ,WAAW;AAC1D,UAAI,CAAC;AACH,oBAAY;AACd,UAAI,SAAS,IAAI;AACf,iBAAS,IAAI;AACf,UAAI,KAAK,SAAS;AAClB,YAAM,WAAY,KAAK,SAAS;AAChC,UAAI,KAAK;AACP,aAAK;AACP,WAAK;AAAA,QAAI,IAAI,WAAW,IAAI,QAAQ,IAAI,aAAa,UAAU,EAAE;AAAA,QACxD;AAAA,MAAS;AAClB,aAAO;AAAA,IACT;AAEA,aAAS,YAAY,KAAK,OAAO,KAAK;AACpC,UAAI,QAAQ;AACV,cAAM,IAAI;AACZ,aAAO,IAAI,WAAW,IAAI,QAAQ,IAAI,aAAa,OAAO,MAAM,KAAK;AAAA,IACvE;AAEA,aAAS,mBAAmB;AAC1B,UAAI,MAAM;AACV,UAAI;AAEJ,YAAMG,QAAO;AAAA,QACX,MAAM,CAAC,KAAK,UAAU;AACpB,mBAAS;AACT,gBAAO,OAAO,UAAU,WAAW,QAAQ;AAAA,QAC7C;AAAA,QACA,KAAK,MAAM;AAAA,QACX,QAAQ,MAAO,SAAS,OAAO,SAAS;AAAA,QACxC,OAAO,MAAO,UAAU,MAAM,OAAO,SAAS,OAAO,SAAS,MAAM;AAAA,QACpE,OAAO,MAAM;AACX,mBAAS;AAAA,QACX;AAAA,QACA,cAAc,MAAM;AAClB,cAAI,CAAC,UAAU,MAAM,KAAK,OAAO;AAC/B;AACF,iBAAQ,OAAO,KAAK,IAAI,WACd,OAAO,KAAK,IAAI,QAChB,OAAO,KAAK,IAAI,MACjB,OAAO,KAAK;AAAA,QACvB;AAAA,QACA,cAAc,CAAC,aAAa;AAC1B,cAAI,CAAC,UAAU,MAAM,KAAK,OAAO;AAC/B;AACF,kBAAQ,UAAU;AAAA,YAChB,KAAK;AACH,qBAAO,OAAO,KAAK,OAAO,SAAS,KAAK,OAAO,CAAC,CAAC,EAAE;AAAA,YACrD,KAAK;AACH,kBAAI,OAAO,GAAG,IAAI;AAChB,uBAAO,OAAO,KAAK,OAAO,SAAS,KAAK,OAAO,CAAC,CAAC,EAAE;AAAA,YAEvD;AACE,qBAAQ,OAAO,KAAK,IAAI,oBACd,OAAO,KAAK,IAAI,kBAChB,OAAO,KAAK,IAAI,gBAChB,OAAO,KAAK,IAAI,aAChB,OAAO,KAAK,IAAI,WAChB,OAAO,KAAK,IAAI,QAChB,OAAO,KAAK,IAAI,MACjB,OAAO,KAAK;AAAA,UACzB;AAAA,QACF;AAAA,QACA,MAAM,CAAC,MAAM;AACX,cAAI,UAAU,IAAI;AAChB,mBAAO;AAAA,QACX;AAAA,QACA,YAAY,MAAM;AAChB,gBAAM,MAAMA,MAAK,aAAa;AAC9B,cAAI,QAAQ;AACV;AACF,iBAAO;AACP,iBAAQ,OAAO,OAAO,SAAS,MAAM;AAAA,QACvC;AAAA,QACA,UAAU,MAAM;AACd,cAAI,UAAU,MAAM,OAAO;AACzB,mBAAO,OAAO,KAAK;AAAA,QACvB;AAAA,QACA,UAAU,MAAM;AACd,cAAI,UAAU,MAAM,OAAO;AACzB,mBAAO,CAAC,CAAC,OAAO,KAAK;AAAA,QACzB;AAAA,QACA,UAAU,MAAM;AACd,gBAAM,OAAOA,MAAK,WAAW,IAAI;AACjC,cAAI,SAAS;AACX;AACF,iBAAQ,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;AAAA,QACpC;AAAA,QACA,YAAY,CAAC,MAAM,WAAW;AAC5B,cAAI,OAAO,SAAS,UAAU;AAC5B,qBAAS;AACT,mBAAO;AAAA,UACT;AAEA,gBAAM,MAAMA,MAAK,aAAa;AAC9B,cAAI,QAAQ;AACV;AAEF,cAAK,OAAO,SAAS,MAAO,OACpB,OAAO,WAAW,YAAY,MAAM,QAAS;AACnD;AAAA,UACF;AAEA,cAAI,MAAM;AACR,gBAAI,OAAO,SAAS,IAAI;AACtB,qBAAO,WAAW,QAAQ,MAAM,KAAK,OAAO,GAAG;AACjD,mBAAO,OAAO,UAAU,KAAK,OAAO,GAAG;AAAA,UACzC;AACA,iBAAO,YAAY,QAAQ,KAAK,OAAO,GAAG;AAAA,QAC5C;AAAA,QACA,SAAS,CAAC,QAAQ;AAChB,cAAI,CAAC;AACH;AACF,cAAI,OAAO,QAAQ;AACjB,mBAAO,YAAY,QAAQ,KAAK,OAAQ,OAAO,SAAS,GAAI;AAC9D,cAAK,OAAO,SAAS,OAAQ;AAC3B,mBAAO,YAAY,QAAQ,KAAK,OAAO,GAAG;AAAA,QAC9C;AAAA,MACF;AAEA,aAAOA;AAAA,IACT;AAEA,aAAS,UAAU,KAAK,OAAO,OAAO;AACpC,YAAM,MAAM,IAAI,MAAM,GAAG;AACzB,UAAI,OAAO,UAAU,WAAW;AAC9B,gBAAQ;AACR,YAAI,QAAQ;AAAA,MACd,OAAO;AACL,YAAI,QAAQ,SAAS;AAAA,MACvB;AACA,UAAI,QAAQ,CAAC,CAAC;AACd,aAAO;AAAA,IACT;AAEA,aAAS,cAAc,KAAK,OAAO,QAAQ;AACzC,UAAI,QAAQ,IAAK,UAAU;AAC3B,UAAI,QAAQ,IAAK,UAAU;AAC3B,UAAI,QAAQ,IAAK,UAAU;AAC3B,UAAI,QAAQ,IAAI;AAChB,aAAO;AAAA,IACT;AAEA,QAAM,mBAAmB,iBAAiB;AAE1C,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,CAAC,KAAK,OAAO,OAAO,QAAQ;AACtC,eAAO,eAAe,KAAK,KAAK,OAAO,OAAO,GAAG;AAAA,MACnD;AAAA,MACA;AAAA,MACA,cAAc,CAAC,UAAU,KAAK,OAAO,WAAW;AAC9C,YAAI;AACJ,YAAI,sBAAsB;AACxB,WAAC,EAAE,kBAAkB,IAAI;AAC3B,YAAI,eAAe,OAAO;AAExB,gBAAM;AACN,cAAI,OAAO,UAAU;AACnB,qBAAS,kBAAkB;AAAA;AAE3B,qBAAS;AAAA,QACb,OAAO;AAEL,gBAAM,UAAU,KAAK,OAAO,IAAI;AAAA,QAClC;AACA,YAAI,OAAO,WAAW;AACpB,mBAAS,kBAAkB;AAC7B,iBAAS,WAAW,MAAM;AAC1B,iBAAS,UAAU;AACnB,iBAAS,SAAS,GAAG;AACrB,eAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAe,CAAC,KAAK,OAAO,WAAW;AACrC,YAAI,QAAQ,IAAI;AAChB,YAAI,QAAQ,IAAK,UAAU;AAC3B,YAAI,QAAQ,IAAK,UAAU;AAC3B,YAAI,QAAQ,IAAK,UAAU;AAC3B,eAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA,cAAc,iBAAiB;AAAA,MAC/B,YAAY,CAAC,QAAQ,OAAO,MAAM,WAAW;AAC3C,YAAI,OAAO,SAAS,UAAU;AAC5B,mBAAS;AACT,iBAAO;AAAA,QACT;AAEA,YAAI,UAAU;AACZ,kBAAQ;AAEV,cAAM,OAAQ,OAAO,SAAS;AAC9B,YAAI,QAAQ,KAAK,SAAS,OAAO,UAAU,OAAO;AAChD;AAEF,cAAM,MAAM,aAAa,QAAQ,KAAK;AACtC,YAAI,OAAQ,IAAI,OAAS,OAAO,WAAW,YAAY,MAAM;AAC3D;AAEF,iBAAS;AACT,cAAM,MAAM,QAAQ;AACpB,eAAO,OAAO;AAEd,YAAI,MAAM;AACR,cAAI,OAAO,SAAS,IAAI;AACtB,mBAAO,WAAW,QAAQ,MAAM,OAAO,GAAG;AAC5C,iBAAO,OAAO,UAAU,OAAO,GAAG;AAAA,QACpC;AACA,eAAO,YAAY,QAAQ,OAAO,GAAG;AAAA,MACvC;AAAA,MACA,cAAc,CAAC,KAAK,SAAS;AAC3B,gBAAQ,MAAM;AAAA,UACZ,KAAK,WAAW;AACd,gBAAI,IAAI,SAAS;AACf,qBAAO;AAET,kBAAM,YAAY,IAAI,IAAI,OAAO;AACjC,sBAAU,cAAc;AACxB,gBAAI,IAAI,IAAI,MAAM,GAAG,EAAE;AACvB,gBAAI,IAAI,IAAI,MAAM,EAAE;AACpB,gBAAI,EAAE,CAAC,IAAI,KAAM;AACf,oBAAM,OAAO,OAAO,YAAY,EAAE;AAClC,mBAAK,CAAC,IAAI;AACV,gBAAE,KAAK,MAAM,CAAC;AACd,kBAAI;AAAA,YACN,WAAW,EAAE,CAAC,MAAM,KAAQ,EAAE,EAAE,CAAC,IAAI,MAAO;AAC1C,kBAAI,EAAE,MAAM,CAAC;AAAA,YACf;AACA,gBAAI,EAAE,CAAC,IAAI,KAAM;AACf,oBAAM,OAAO,OAAO,YAAY,EAAE;AAClC,mBAAK,CAAC,IAAI;AACV,gBAAE,KAAK,MAAM,CAAC;AACd,kBAAI;AAAA,YACN,WAAW,EAAE,CAAC,MAAM,KAAQ,EAAE,EAAE,CAAC,IAAI,MAAO;AAC1C,kBAAI,EAAE,MAAM,CAAC;AAAA,YACf;AACA,sBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,sBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,sBAAU,YAAY;AACtB,mBAAO,UAAU;AAAA,UACnB;AAAA,UACA,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,uBAAuB;AAC1B,6BAAiB,KAAK,KAAK,CAAC;AAC5B,kBAAM,IAAI,iBAAiB,WAAW;AACtC,kBAAM,IAAI,iBAAiB,WAAW;AACtC,6BAAiB,MAAM;AACvB,gBAAI,MAAM,UAAa,MAAM;AAC3B;AAEF,kBAAM,YAAY,IAAI,IAAI,OAAO;AACjC,sBAAU,cAAc;AACxB,sBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,sBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,sBAAU,YAAY;AACtB,mBAAO,UAAU;AAAA,UACnB;AAAA,UACA;AACE,mBAAO;AAAA,QACX;AAAA,MACF;AAAA,MACA,kBAAkB,CAAC,WAAW,YAAY;AACxC,gBAAQ,SAAS;AAAA,UACf,KAAK,WAAW;AACd,gBAAI,UAAU,UAAU;AACtB,qBAAO;AAIT,kBAAM,YAAY,IAAI,IAAI,OAAO,SAAS;AAC1C,sBAAU,aAAa;AACvB,gBAAI,IAAI,UAAU,WAAW,IAAI,SAAS,IAAI;AAC9C,gBAAI,IAAI,UAAU,WAAW,IAAI,SAAS,IAAI;AAC9C,gBAAI,UAAU;AACd,gBAAI,UAAU;AACd,gBAAI,EAAE,SAAS,IAAI;AACjB,oBAAM,OAAO,OAAO,YAAY,EAAE;AAClC,mBAAK,IAAI,GAAG,CAAC;AACb,kBAAI;AACJ,gBAAE,CAAC,IAAI;AAAA,YACT;AACA,gBAAI,EAAE,SAAS,IAAI;AACjB,oBAAM,OAAO,OAAO,YAAY,EAAE;AAClC,mBAAK,IAAI,GAAG,CAAC;AACb,kBAAI;AACJ,gBAAE,CAAC,IAAI;AAAA,YACT;AACA,gBAAI,EAAE,SAAS,MAAM,EAAE,CAAC,MAAM;AAC5B,wBAAU;AACZ,gBAAI,EAAE,SAAS,MAAM,EAAE,CAAC,MAAM;AAC5B,wBAAU;AACZ,kBAAM,SACJ,OAAO,YAAa,EAAE,SAAS,WAAY,EAAE,SAAS,QAAQ;AAChE,uBAAW,GAAG,QAAQ,SAAS,EAAE,QAAQ,CAAC;AAC1C,uBAAW,GAAG,QAAQ,SAAS,EAAE,QAAQ,EAAE,SAAS,OAAO;AAC3D,mBAAO;AAAA,UACT;AAAA,UACA,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,uBAAuB;AAC1B,gBAAI,UAAU,CAAC,MAAM;AACnB,qBAAO;AAET,kBAAM,YAAY,IAAI,IAAI,OAAO,SAAS;AAC1C,sBAAU,aAAa;AACvB,kBAAM,IAAI,UAAU,WAAW,IAAI,SAAS,IAAI;AAChD,kBAAM,IAAI,UAAU,WAAW,IAAI,SAAS,IAAI;AAChD,gBAAI,MAAM,QAAQ,MAAM;AACtB;AACF,kBAAM,SAAS,OAAO,YAAY,IAAI,EAAE,SAAS,IAAI,EAAE,MAAM;AAC7D,0BAAc,QAAQ,EAAE,QAAQ,CAAC;AACjC,mBAAO,IAAI,GAAG,CAAC;AACf,0BAAc,QAAQ,EAAE,QAAQ,IAAI,EAAE,MAAM;AAC5C,mBAAO,IAAI,GAAG,IAAI,IAAI,EAAE,MAAM;AAC9B,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MACA,YAAY,CAAC,OAAO,QAAQ,WAAW;AACrC,YAAI,CAAC,UAAU,MAAM,aAAa,QAAW;AAG3C,cAAI,MAAM,WAAW;AACnB,kBAAM,SAAS,CAAC;AAClB,gBAAM,OAAO,KAAK,MAAM;AACxB,gBAAM,UAAU,MAAM,OAAO,6BAA6B;AAC1D,iBAAO;AAAA,QACT;AACA,cAAM,QAAQ,QAAQ,MAAM;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACnWA;AAAA;AACA,QAAI,iBAAkB,WAAW;AAC/B,UAAI,aAAa,OAAO,aAAa,eAAe,SAAS,gBAAgB,SAAS,cAAc,MAAM;AAC1G,UAAI,OAAO,eAAe;AAAa,qBAAa,cAAc;AAClE,aACF,SAASC,iBAAgB;AACvB,QAAAA,kBAAiBA,mBAAkB,CAAC;AAGtC,YAAI;AAAE,cAAI,IAAE,OAAOA,oBAAmB,cAAcA,kBAAiB,CAAC;AAAG,YAAI,GAAE;AAAE,UAAE,QAAM,IAAI,QAAQ,SAAS,GAAE,GAAE;AAAC,cAAE;AAAE,cAAE;AAAA,QAAC,CAAC;AAAE,YAAI,IAAE,CAAC,GAAE;AAAE,aAAI,KAAK;AAAE,YAAE,eAAe,CAAC,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC;AAAG,YAAI,IAAE,aAAW,OAAO,QAAO,IAAE,eAAa,OAAO,eAAc,IAAE,aAAW,OAAO,WAAS,aAAW,OAAO,QAAQ,YAAU,aAAW,OAAO,QAAQ,SAAS,MAAK,IAAE,IAAG,GAAE,GAAE,GAAE,GAAE;AAC7W,YAAG;AAAE,cAAE,IAAE,UAAQ,MAAM,EAAE,QAAQ,CAAC,IAAE,MAAI,YAAU,KAAI,IAAE,SAAS,GAAE,GAAE;AAAC,gBAAI,IAAE,EAAE,CAAC;AAAE,gBAAG;AAAE,qBAAO,IAAE,IAAE,EAAE,SAAS;AAAE,kBAAI,IAAE,UAAQ,IAAI;AAAG,kBAAI,IAAE,UAAQ,MAAM;AAAG,gBAAE,EAAE,UAAU,CAAC;AAAE,mBAAO,EAAE,aAAa,GAAE,IAAE,OAAK,MAAM;AAAA,UAAC,GAAE,IAAE,SAAS,GAAE;AAAC,gBAAE,EAAE,GAAE,IAAE;AAAE,cAAE,WAAS,IAAE,IAAI,WAAW,CAAC;AAAG,mBAAO,EAAE,MAAM;AAAE,mBAAO;AAAA,UAAC,GAAE,IAAE,SAAS,GAAE,GAAE,GAAE;AAAC,gBAAI,IAAE,EAAE,CAAC;AAAE,iBAAG,EAAE,CAAC;AAAE,kBAAI,IAAE,UAAQ,IAAI;AAAG,kBAAI,IAAE,UAAQ,MAAM;AAAG,gBAAE,EAAE,UAAU,CAAC;AAAE,cAAE,SAAS,GAAE,SAAS,GAAE,GAAE;AAAC,kBAAE,EAAE,CAAC,IAAE,EAAE,EAAE,MAAM;AAAA,YAAC,CAAC;AAAA,UAAC,GAAE,IAAE,QAAQ,KAAK,UAAQ,QAAQ,KAAK,CAAC,EAAE,QAAQ,OAAM,GAAG,GAAE,QAAQ,KAAK,MAAM,CAAC,GACvgB,EAAE,UAAQ,WAAU;AAAC,mBAAM;AAAA,UAA4B;AAAA,iBAAU,KAAG;AAAE,cAAE,IAAE,KAAK,SAAS,OAAK,gBAAc,OAAO,YAAU,SAAS,kBAAgB,IAAE,SAAS,cAAc,MAAK,eAAa,IAAE,aAAY,MAAI,EAAE,QAAQ,OAAO,IAAE,IAAE,EAAE,OAAO,GAAE,EAAE,YAAY,GAAG,IAAE,CAAC,IAAE,IAAE,IAAG,IAAE,SAAS,GAAE;AAAC,gBAAG;AAAC,kBAAI,IAAE,IAAI;AAAe,gBAAE,KAAK,OAAM,GAAE,KAAE;AAAE,gBAAE,KAAK,IAAI;AAAE,qBAAO,EAAE;AAAA,YAAY,SAAO,GAAE;AAAC,kBAAG,IAAE,EAAE,CAAC,GAAE;AAAC,oBAAE,CAAC;AAAE,yBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,sBAAI,IAAE,EAAE,CAAC;AAAE,wBAAI,MAAI,MAAI,OAAO,OAAG,oBAAkB,IAAE,OAAK,OAAO,aAAa,CAAC,IAAE,kBACpf,IAAE,oBAAoB,GAAE,KAAG;AAAK,oBAAE,KAAK,OAAO,aAAa,CAAC,CAAC;AAAA,gBAAC;AAAC,uBAAO,EAAE,KAAK,EAAE;AAAA,cAAC;AAAC,oBAAM;AAAA,YAAE;AAAA,UAAC,GAAE,MAAI,IAAE,SAAS,GAAE;AAAC,gBAAG;AAAC,kBAAI,IAAE,IAAI;AAAe,gBAAE,KAAK,OAAM,GAAE,KAAE;AAAE,gBAAE,eAAa;AAAc,gBAAE,KAAK,IAAI;AAAE,qBAAO,IAAI,WAAW,EAAE,QAAQ;AAAA,YAAC,SAAO,GAAE;AAAC,kBAAG,IAAE,EAAE,CAAC;AAAE,uBAAO;AAAE,oBAAM;AAAA,YAAE;AAAA,UAAC,IAAG,IAAE,SAAS,GAAE,GAAE,GAAE;AAAC,gBAAI,IAAE,IAAI;AAAe,cAAE,KAAK,OAAM,GAAE,IAAE;AAAE,cAAE,eAAa;AAAc,cAAE,SAAO,WAAU;AAAC,kBAAG,OAAK,EAAE,UAAQ,KAAG,EAAE,UAAQ,EAAE;AAAS,kBAAE,EAAE,QAAQ;AAAA,mBAAM;AAAC,oBAAI,IAAE,EAAE,CAAC;AAAE,oBAAE,EAAE,EAAE,MAAM,IAAE,EAAE;AAAA,cAAC;AAAA,YAAC;AAAE,cAAE,UAAQ;AAAE,cAAE,KAAK,IAAI;AAAA,UAAC;AACrf,UAAE,SAAO,QAAQ,IAAI,KAAK,OAAO;AAAE,YAAI,IAAE,EAAE,YAAU,QAAQ,KAAK,KAAK,OAAO;AAAE,aAAI,KAAK;AAAE,YAAE,eAAe,CAAC,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC;AAAG,YAAE;AAAK,YAAI;AAAE,UAAE,eAAa,IAAE,EAAE;AAAY,YAAI,gBAAc,EAAE,iBAAe;AAAG,qBAAW,OAAO,eAAa,EAAE,iCAAiC;AAAE,YAAI,GAAE,IAAE;AAAG,iBAAS,OAAO,GAAE,GAAE;AAAC,eAAG,EAAE,uBAAqB,CAAC;AAAA,QAAC;AAAC,iBAAS,EAAE,GAAE;AAAC,cAAI,IAAE,EAAE,MAAI,CAAC;AAAE,iBAAO,GAAE,kCAAgC,IAAE,4BAA4B;AAAE,iBAAO;AAAA,QAAC;AAC7b,iBAAS,GAAG,GAAE,GAAE,GAAE,GAAE;AAAC,cAAI,IAAE,EAAC,QAAO,SAAS,GAAE;AAAC,gBAAI,IAAE;AAAE,gBAAG,SAAO,KAAG,WAAS,KAAG,MAAI,GAAE;AAAC,kBAAI,KAAG,EAAE,UAAQ,KAAG;AAAE,kBAAE,EAAE,CAAC;AAAE,kBAAI,IAAE,GAAE,IAAE;AAAE,kBAAG,IAAE,GAAE;AAAC,oBAAE,IAAE,IAAE;AAAE,yBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,sBAAI,IAAE,EAAE,WAAW,CAAC;AAAE,sBAAG,SAAO,KAAG,SAAO,GAAE;AAAC,wBAAI,KAAG,EAAE,WAAW,EAAE,CAAC;AAAE,wBAAE,UAAQ,IAAE,SAAO,MAAI,KAAG;AAAA,kBAAI;AAAC,sBAAG,OAAK,GAAE;AAAC,wBAAG,KAAG;AAAE;AAAM,sBAAE,GAAG,IAAE;AAAA,kBAAC,OAAK;AAAC,wBAAG,QAAM,GAAE;AAAC,0BAAG,IAAE,KAAG;AAAE;AAAM,wBAAE,GAAG,IAAE,MAAI,KAAG;AAAA,oBAAC,OAAK;AAAC,0BAAG,SAAO,GAAE;AAAC,4BAAG,IAAE,KAAG;AAAE;AAAM,0BAAE,GAAG,IAAE,MAAI,KAAG;AAAA,sBAAE,OAAK;AAAC,4BAAG,IAAE,KAAG;AAAE;AAAM,0BAAE,GAAG,IAAE,MAAI,KAAG;AAAG,0BAAE,GAAG,IAAE,MAAI,KAAG,KAAG;AAAA,sBAAE;AAAC,wBAAE,GAAG,IAAE,MAAI,KAAG,IAAE;AAAA,oBAAE;AAAC,sBAAE,GAAG,IAAE,MAAI,IAAE;AAAA,kBAAE;AAAA,gBAAC;AAAC,kBAAE,CAAC,IACxf;AAAA,cAAC;AAAA,YAAC;AAAC,mBAAO;AAAA,UAAC,GAAE,OAAM,SAAS,GAAE;AAAC,gBAAI,IAAE,EAAE,EAAE,MAAM;AAAE,cAAE,IAAI,GAAE,CAAC;AAAE,mBAAO;AAAA,UAAC,EAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,CAAC;AAAE,cAAE;AAAE,cAAG;AAAE,qBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,kBAAI,KAAG,EAAE,EAAE,CAAC,CAAC;AAAE,oBAAI,MAAI,MAAI,IAAE,GAAG,IAAG,EAAE,CAAC,IAAE,GAAG,EAAE,CAAC,CAAC,KAAG,EAAE,CAAC,IAAE,EAAE,CAAC;AAAA,YAAC;AAAC,cAAE,EAAE,MAAM,MAAK,CAAC;AAAE,cAAE,SAAS,GAAE;AAAC,gBAAG,aAAW;AAAE,kBAAG,GAAE;AAAC,yBAAQ,IAAE,GAAE,IAAE,IAAE,KAAI,IAAE,GAAE,EAAE,CAAC,KAAG,EAAE,KAAG;AAAI,oBAAE;AAAE,oBAAG,KAAG,IAAE,KAAG,EAAE,YAAU;AAAG,sBAAE,GAAG,OAAO,EAAE,SAAS,GAAE,CAAC,CAAC;AAAA,qBAAM;AAAC,uBAAI,IAAE,IAAG,IAAE,KAAG;AAAC,wBAAI,IAAE,EAAE,GAAG;AAAE,wBAAG,IAAE,KAAI;AAAC,0BAAI,IAAE,EAAE,GAAG,IAAE;AAAG,0BAAG,QAAM,IAAE;AAAK,6BAAG,OAAO,cAAc,IAAE,OAAK,IAAE,CAAC;AAAA,2BAAM;AAAC,4BAAI,IAAE,EAAE,GAAG,IAAE;AAAG,4BAAE,QAAM,IAAE,QAAM,IAAE,OAAK,KAAG,KAAG,IAAE,KAAG,IAAE,MACpf,KAAG,KAAG,KAAG,KAAG,IAAE,EAAE,GAAG,IAAE;AAAG,gCAAM,IAAE,KAAG,OAAO,aAAa,CAAC,KAAG,KAAG,OAAM,KAAG,OAAO,aAAa,QAAM,KAAG,IAAG,QAAM,IAAE,IAAI;AAAA,sBAAE;AAAA,oBAAC;AAAM,2BAAG,OAAO,aAAa,CAAC;AAAA,kBAAC;AAAC,sBAAE;AAAA,gBAAC;AAAA,cAAC;AAAM,oBAAE;AAAA;AAAQ,kBAAE,cAAY,IAAE,CAAC,CAAC,IAAE;AAAE,mBAAO;AAAA,UAAC,EAAE,CAAC;AAAE,gBAAI,KAAG,GAAG,CAAC;AAAE,iBAAO;AAAA,QAAC;AAAC,YAAI,KAAG,gBAAc,OAAO,cAAY,IAAI,YAAY,MAAM,IAAE,QAAO,IAAG,GAAE;AAC/S,iBAAS,KAAI;AAAC,cAAI,IAAE,EAAE;AAAO,eAAG;AAAE,YAAE,QAAM,IAAE,IAAI,UAAU,CAAC;AAAE,YAAE,SAAO,IAAI,WAAW,CAAC;AAAE,YAAE,SAAO,IAAI,WAAW,CAAC;AAAE,YAAE,SAAO,IAAE,IAAI,WAAW,CAAC;AAAE,YAAE,UAAQ,IAAI,YAAY,CAAC;AAAE,YAAE,UAAQ,IAAI,YAAY,CAAC;AAAE,YAAE,UAAQ,IAAI,aAAa,CAAC;AAAE,YAAE,UAAQ,IAAI,aAAa,CAAC;AAAA,QAAC;AAAC,YAAI,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC;AAAE,iBAAS,KAAI;AAAC,cAAI,IAAE,EAAE,OAAO,MAAM;AAAE,aAAG,QAAQ,CAAC;AAAA,QAAC;AAAC,YAAI,IAAE,GAAE,IAAE,MAAK,IAAE;AAAK,UAAE,kBAAgB,CAAC;AAAE,UAAE,kBAAgB,CAAC;AAC/Y,iBAAS,EAAE,GAAE;AAAC,cAAG,EAAE;AAAQ,cAAE,QAAQ,CAAC;AAAE,YAAE,CAAC;AAAE,cAAE;AAAG,cAAE,IAAI,YAAY,aAAa,WAAS,IAAE,8CAA8C;AAAE,YAAE,CAAC;AAAE,gBAAM;AAAA,QAAE;AAAC,YAAI,IAAE,yCAAwC;AAAE,YAAE;AAAwka,YAAG,CAAC,EAAE,WAAW,CAAC,GAAE;AAAC,cAAI,KAAG;AAAE,cAAE,EAAE,aAAW,EAAE,WAAW,IAAG,CAAC,IAAE,IAAE;AAAA,QAAE;AAAC,iBAAS,KAAI;AAAC,cAAI,IAAE;AAAE,cAAG;AAAC,gBAAG,KAAG,KAAG;AAAE,qBAAO,IAAI,WAAW,CAAC;AAAE,gBAAI,IAAE,EAAE,CAAC;AAAE,gBAAG;AAAE,qBAAO;AAAE,gBAAG;AAAE,qBAAO,EAAE,CAAC;AAAE,kBAAK;AAAA,UAAkD,SAAO,GAAE;AAAC,cAAE,CAAC;AAAA,UAAC;AAAA,QAAC;AACvgb,iBAAS,KAAI;AAAC,cAAG,CAAC,MAAI,KAAG,IAAG;AAAC,gBAAG,eAAa,OAAO,SAAO,CAAC,EAAE,WAAW,SAAS;AAAE,qBAAO,MAAM,GAAE,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,oBAAG,CAAC,EAAE;AAAG,wBAAK,yCAAuC,IAAE;AAAI,uBAAO,EAAE,YAAY;AAAA,cAAC,CAAC,EAAE,MAAM,WAAU;AAAC,uBAAO,GAAG;AAAA,cAAC,CAAC;AAAE,gBAAG;AAAE,qBAAO,IAAI,QAAQ,SAAS,GAAE,GAAE;AAAC,kBAAE,GAAE,SAAS,GAAE;AAAC,oBAAE,IAAI,WAAW,CAAC,CAAC;AAAA,gBAAC,GAAE,CAAC;AAAA,cAAC,CAAC;AAAA,UAAC;AAAC,iBAAO,QAAQ,QAAQ,EAAE,KAAK,WAAU;AAAC,mBAAO,GAAG;AAAA,UAAC,CAAC;AAAA,QAAC;AAC3Y,iBAAS,EAAE,GAAE;AAAC,iBAAK,IAAE,EAAE,UAAQ;AAAC,gBAAI,IAAE,EAAE,MAAM;AAAE,gBAAG,cAAY,OAAO;AAAE,gBAAE,CAAC;AAAA,iBAAM;AAAC,kBAAI,IAAE,EAAE;AAAE,2BAAW,OAAO,IAAE,WAAS,EAAE,IAAE,EAAE,IAAI,CAAC,EAAE,IAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAE,EAAE,WAAS,EAAE,IAAE,OAAK,EAAE,CAAC;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAChL,YAAI,KAAG,OAAG,KAAG,eAAa,OAAO,OAAK,OAAK,SAAS,GAAE;AAAC,cAAI,IAAE,IAAG,IAAE;AAAE,cAAE,EAAE,QAAQ,sBAAqB,EAAE;AAAE,aAAE;AAAC,gBAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,gBAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,gBAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,gBAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,gBAAE,KAClf,IAAE,KAAG;AAAE,iBAAG,IAAE,OAAK,IAAE,KAAG;AAAE,gBAAI,KAAG,IAAE,MAAI,IAAE;AAAE,iBAAG,OAAO,aAAa,CAAC;AAAE,mBAAK,MAAI,KAAG,OAAO,aAAa,CAAC;AAAG,mBAAK,MAAI,KAAG,OAAO,aAAa,CAAC;AAAA,UAAE,SAAO,IAAE,EAAE;AAAQ,iBAAO;AAAA,QAAC;AACrK,iBAAS,EAAE,GAAE;AAAC,cAAG,EAAE,WAAW,CAAC,GAAE;AAAC,gBAAE,EAAE,MAAM,EAAE,MAAM;AAAE,gBAAG,cAAY,OAAO,KAAG,GAAE;AAAC,kBAAI,IAAE,OAAO,KAAK,GAAE,QAAQ;AAAE,kBAAE,IAAI,WAAW,EAAE,QAAO,EAAE,YAAW,EAAE,UAAU;AAAA,YAAC;AAAM,kBAAG;AAAC,oBAAI,IAAE,GAAG,CAAC,GAAE,IAAE,IAAI,WAAW,EAAE,MAAM;AAAE,qBAAI,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,oBAAE,CAAC,IAAE,EAAE,WAAW,CAAC;AAAE,oBAAE;AAAA,cAAC,SAAO,GAAE;AAAC,sBAAM,MAAM,2CAA2C;AAAA,cAAE;AAAC,mBAAO;AAAA,UAAC;AAAA,QAAC;AACjV,YAAI,KAAG,EAAC,GAAE,SAAS,GAAE;AAAC,cAAI,IAAE,EAAE;AAAO,iBAAK;AAAE,cAAG,aAAW;AAAE,mBAAM;AAAG,mBAAQ,IAAE,GAAE,KAAG,GAAE,KAAG,GAAE;AAAC,gBAAI,IAAE,KAAG,IAAE,MAAG;AAAG,gBAAE,KAAK,IAAI,GAAE,IAAE,SAAS;AAAE,gBAAE,KAAK,IAAI,GAAE,CAAC;AAAE,gBAAE,IAAE,UAAQ,KAAG,QAAM,IAAE;AAAO,eAAE;AAAC,kBAAG;AAAC,kBAAE,KAAK,KAAK,IAAI,YAAW,CAAC,IAAE,GAAG,aAAW,UAAQ,EAAE;AAAE,mBAAG;AAAE,oBAAI,IAAE;AAAE,sBAAM;AAAA,cAAC,SAAO,GAAE;AAAA,cAAC;AAAC,kBAAE;AAAA,YAAM;AAAC,gBAAG;AAAE,qBAAM;AAAA,UAAE;AAAC,iBAAM;AAAA,QAAE,EAAC;AACnT,SAAC,WAAU;AAAC,mBAAS,EAAE,GAAE;AAAC,cAAE,MAAI,EAAE;AAAQ,gBAAE,EAAE,IAAI;AAAE,eAAG;AAAE,gBAAE,EAAE,IAAI;AAAE,eAAG,QAAQ,EAAE,IAAI,CAAC;AAAE;AAAI,cAAE,0BAAwB,EAAE,uBAAuB,CAAC;AAAE,iBAAG,MAAI,SAAO,MAAI,cAAc,CAAC,GAAE,IAAE,OAAM,MAAI,IAAE,GAAE,IAAE,MAAK,EAAE;AAAA,UAAG;AAAC,mBAAS,EAAE,GAAE;AAAC,cAAE,EAAE,QAAQ;AAAA,UAAC;AAAC,mBAAS,EAAE,GAAE;AAAC,mBAAO,GAAG,EAAE,KAAK,SAAS,GAAE;AAAC,qBAAO,YAAY,YAAY,GAAE,CAAC;AAAA,YAAC,CAAC,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,gBAAE,4CAA0C,CAAC;AAAE,gBAAE,CAAC;AAAA,YAAC,CAAC;AAAA,UAAC;AAAC,cAAI,IAAE,EAAC,GAAE,GAAE;AAAE;AAAI,YAAE,0BAAwB,EAAE,uBAAuB,CAAC;AAAE,cAAG,EAAE;AAAgB,gBAAG;AAAC,qBAAO,EAAE;AAAA,gBAAgB;AAAA,gBAChgB;AAAA,cAAC;AAAA,YAAC,SAAO,GAAE;AAAC,qBAAO,EAAE,wDAAsD,CAAC,GAAE;AAAA,YAAE;AAAC,WAAC,WAAU;AAAC,mBAAO,KAAG,eAAa,OAAO,YAAY,wBAAsB,EAAE,WAAW,CAAC,KAAG,EAAE,WAAW,SAAS,KAAG,eAAa,OAAO,QAAM,EAAE,CAAC,IAAE,MAAM,GAAE,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,qBAAO,YAAY,qBAAqB,GAAE,CAAC,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,kBAAE,oCAAkC,CAAC;AAAE,kBAAE,2CAA2C;AAAE,uBAAO,EAAE,CAAC;AAAA,cAAC,CAAC;AAAA,YAAC,CAAC;AAAA,UAAC,GAAG,EAAE,MAAM,CAAC;AAAE,iBAAM,CAAC;AAAA,QAAC,GAAG;AAC1d,UAAE,qBAAmB,WAAU;AAAC,kBAAO,EAAE,qBAAmB,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,QAAC;AAAE,UAAE,iBAAe,WAAU;AAAC,kBAAO,EAAE,iBAAe,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,QAAC;AAAE,YAAI,KAAG,EAAE,YAAU,WAAU;AAAC,kBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,QAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,kBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,QAAC,GAAE,IAAE,EAAE,aAAW,WAAU;AAAC,kBAAO,IAAE,EAAE,aAAW,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,QAAC;AAAE,UAAE,UAAQ,WAAU;AAAC,kBAAO,EAAE,UAAQ,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,QAAC;AAC9e,UAAE,QAAM,WAAU;AAAC,kBAAO,EAAE,QAAM,EAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,QAAC;AAAE,UAAE,QAAM,SAAS,GAAE,GAAE,GAAE,GAAE;AAAC,cAAE,KAAG,CAAC;AAAE,cAAI,IAAE,EAAE,MAAM,SAAS,GAAE;AAAC,mBAAM,aAAW;AAAA,UAAC,CAAC;AAAE,iBAAM,aAAW,KAAG,KAAG,CAAC,IAAE,EAAE,CAAC,IAAE,WAAU;AAAC,mBAAO,GAAG,GAAE,GAAE,GAAE,SAAS;AAAA,UAAC;AAAA,QAAC;AAAE,YAAI;AAAE,YAAE,SAAS,KAAI;AAAC,eAAG,EAAE;AAAE,gBAAI,IAAE;AAAA,QAAG;AAChQ,iBAAS,IAAG;AAAC,mBAAS,IAAG;AAAC,gBAAG,CAAC,MAAI,IAAE,MAAG,EAAE,YAAU,MAAG,CAAC,IAAG;AAAC,gBAAE,EAAE;AAAE,gBAAE,CAAC;AAAE,kBAAG,EAAE;AAAqB,kBAAE,qBAAqB;AAAE,kBAAG,EAAE;AAAQ,qBAAI,cAAY,OAAO,EAAE,YAAU,EAAE,UAAQ,CAAC,EAAE,OAAO,IAAG,EAAE,QAAQ,UAAQ;AAAC,sBAAI,IAAE,EAAE,QAAQ,MAAM;AAAE,qBAAG,QAAQ,CAAC;AAAA,gBAAC;AAAC,gBAAE,EAAE;AAAA,YAAC;AAAA,UAAC;AAAC,cAAG,EAAE,IAAE,IAAG;AAAC,gBAAG,EAAE;AAAO,mBAAI,cAAY,OAAO,EAAE,WAAS,EAAE,SAAO,CAAC,EAAE,MAAM,IAAG,EAAE,OAAO;AAAQ,mBAAG;AAAE,cAAE,EAAE;AAAE,gBAAE,MAAI,EAAE,aAAW,EAAE,UAAU,YAAY,GAAE,WAAW,WAAU;AAAC,yBAAW,WAAU;AAAC,kBAAE,UAAU,EAAE;AAAA,cAAC,GAAE,CAAC;AAAE,gBAAE;AAAA,YAAC,GAAE,CAAC,KAAG,EAAE;AAAA,UAAE;AAAA,QAAC;AAAC,UAAE,MAAI;AAC5e,YAAG,EAAE;AAAQ,eAAI,cAAY,OAAO,EAAE,YAAU,EAAE,UAAQ,CAAC,EAAE,OAAO,IAAG,IAAE,EAAE,QAAQ;AAAQ,cAAE,QAAQ,IAAI,EAAE;AAAE,UAAE;AAG7G,eAAOA,gBAAe;AAAA,MACxB;AAAA,IAEA,EAAG;AACH,QAAI,OAAO,YAAY,YAAY,OAAO,WAAW;AACnD,aAAO,UAAU;AAAA,aACV,OAAO,WAAW,cAAc,OAAO,KAAK;AACnD,aAAO,CAAC,GAAG,WAAW;AAAE,eAAO;AAAA,MAAgB,CAAC;AAAA,aACzC,OAAO,YAAY;AAC1B,cAAQ,gBAAgB,IAAI;AAAA;AAAA;;;AC1C9B;AAAA;AAAA;AAQA,QAAM;AAAA,MACJ;AAAA,MAAgB;AAAA,MAAkB;AAAA,MAAY;AAAA,MAAgB;AAAA,IAChE,IAAI,UAAQ,QAAQ;AAEpB,QAAM,EAAE,cAAc,cAAc,IAAI;AAExC,QAAM,aAAa,OAAO,OAAO,OAAO;AACxC,QAAM,YAAY,KAAK,KAAK;AAC5B,QAAM,eAAe,OAAO,MAAM,CAAC;AACnC,QAAM,UAAU,OAAO,MAAM,CAAC;AAC9B,QAAM,gBAAgB,oBAAI,IAAI;AAC9B,QAAM,kBAAkB;AAExB,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACF,gBAAU,UAAQ,uCAAuC;AACzD,OAAC;AAAA,QAAE;AAAA,QAAc;AAAA,QAAkB;AAAA,QAChC;AAAA,QAAgB;AAAA,QAAoB;AAAA,MAAgB,IAAI;AAAA,IAC7D,QAAQ;AAAA,IAAC;AAET,QAAM,gBAAgB,KAAK;AAC3B,QAAM,eAAe,MAAM;AACzB,eAAS,KAAK,SAAS,UAAU,QAAQ,OAAO,SAAS,YAAY,OAAO;AAC1E,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAQ,UAAU,KAAM,QAAQ,gBACtB,QACA;AAAA,UACV;AAAA,UACA;AAAA,UACA,QAAQ,CAAC,EAAE,QAAQ;AAAA,QACrB;AAAA,MACF;AAEA,aAAO;AAAA,QACL,iCACE,KAAK,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,aAAa;AAAA,QAEjD,cAAc,KAAK,eAAe,IAAI,IAAI,IAAI,IAAI,GAAG,aAAa;AAAA,QAClE,cAAc,KAAK,eAAe,IAAI,IAAI,IAAI,IAAI,GAAG,aAAa;AAAA,QAClE,0BACE,KAAK,eAAe,IAAI,IAAI,IAAI,IAAI,GAAG,aAAa;AAAA,QACtD,0BACE,KAAK,eAAe,IAAI,IAAI,IAAI,IAAI,GAAG,aAAa;AAAA,QAEtD,cAAc,KAAK,eAAe,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC;AAAA,QACpD,cAAc,KAAK,eAAe,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC;AAAA,QACpD,cAAc,KAAK,eAAe,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC;AAAA,QACpD,+BAA+B,KAAK,eAAe,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC;AAAA,QACrE,YAAY,KAAK,gBAAgB,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AAAA,QAClD,gBAAgB,KAAK,UAAU,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AAAA,QAChD,YAAY,KAAK,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AAAA,QAC9C,eAAe,KAAK,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AAAA,QAEjD,cAAc,KAAK,eAAe,IAAI,IAAI,IAAI,GAAG,GAAG,aAAa;AAAA,QACjE,cAAc,KAAK,eAAe,IAAI,IAAI,IAAI,GAAG,GAAG,aAAa;AAAA,QACjE,cAAc,KAAK,eAAe,IAAI,IAAI,IAAI,GAAG,GAAG,aAAa;AAAA,QACjE,YAAY,KAAK,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,aAAa;AAAA,QAC1D,gBAAgB,KAAK,UAAU,GAAG,IAAI,GAAG,GAAG,GAAG,aAAa;AAAA,QAC5D,eAAe,KAAK,aAAa,GAAG,IAAI,GAAG,GAAG,GAAG,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAS9D,WAAW,KAAK,OAAO,GAAG,IAAI,GAAG,GAAG,MAAM,aAAa;AAAA,QACvD,cAAc,KAAK,OAAO,GAAG,IAAI,GAAG,GAAG,MAAM,aAAa;AAAA,QAC1D,cAAc,KAAK,OAAO,GAAG,IAAI,GAAG,GAAG,MAAM,aAAa;AAAA,QAC1D,cAAc,KAAK,OAAO,GAAG,IAAI,GAAG,GAAG,MAAM,aAAa;AAAA,MAC5D;AAAA,IACF,GAAG;AAEH,QAAM,YAAY,MAAM;AACtB,eAAS,KAAK,SAAS,KAAK,WAAW,OAAO;AAC5C,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,YAAY,KAAK,OAAO,IAAI,IAAI,KAAK;AAAA,QACrC,eAAe,KAAK,OAAO,IAAI,IAAI,KAAK;AAAA,QACxC,kBAAkB,KAAK,aAAa,IAAI,IAAI,KAAK;AAAA,QACjD,aAAa,KAAK,QAAQ,IAAI,IAAI,KAAK;AAAA,QACvC,6BAA6B,KAAK,QAAQ,IAAI,IAAI,IAAI;AAAA,QACtD,gBAAgB,KAAK,QAAQ,IAAI,IAAI,KAAK;AAAA,QAC1C,iBAAiB,KAAK,UAAU,IAAI,IAAI,KAAK;AAAA,QAC7C,iCAAiC,KAAK,UAAU,IAAI,IAAI,IAAI;AAAA,QAC5D,oBAAoB,KAAK,UAAU,IAAI,IAAI,KAAK;AAAA,QAChD,iBAAiB,KAAK,UAAU,IAAI,IAAI,KAAK;AAAA,QAC7C,iCAAiC,KAAK,UAAU,IAAI,IAAI,IAAI;AAAA,QAC5D,oBAAoB,KAAK,UAAU,IAAI,IAAI,KAAK;AAAA,MAClD;AAAA,IACF,GAAG;AAIH,QAAM,aAAN,MAAiB;AAAA,MACf,YAAY,OAAO,SAAS;AAC1B,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,OAAO;AACL,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,YAAY,YAAY;AACtB,YAAI,SAAS,IAAI,IAAI;AACrB,YAAI,SAAS,KAAK,SAAU,IAAI;AAChC,YAAI,SAAS;AACX,oBAAU;AACZ,kBAAU;AAEV,cAAM,SAAS,OAAO,YAAY,MAAM;AAExC,sBAAc,QAAQ,SAAS,GAAG,CAAC;AACnC,eAAO,CAAC,IAAI;AAEZ,uBAAe,QAAQ,IAAI,YAAY,MAAM;AAE7C,eAAO;AAAA,MACT;AAAA,MACA,QAAQ,QAAQ;AAGd,YAAI,KAAK;AACP;AAEF,aAAK,SAAS,MAAM;AAEpB,aAAK,WAAY,KAAK,WAAW,MAAO;AAAA,MAC1C;AAAA,IACF;AAGA,QAAM,iBAAiB,OAAO,MAAM,EAAE;AACtC,QAAM,uBAAuB,OAAO,MAAM,EAAE;AAC5C,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAM,yBAAN,MAA6B;AAAA,MAC3B,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,WAAW,IAAI;AACpB,aAAK,WAAW,IAAI;AACpB,aAAK,cAAc,IAAI,UAAU,MAAM,GAAG,EAAE;AAC5C,aAAK,gBAAgB,IAAI,UAAU,MAAM,EAAE;AAC3C,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,OAAO;AACL,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,YAAY,YAAY;AACtB,YAAI,SAAS,IAAI,IAAI;AACrB,YAAI,SAAS,KAAM,SAAS,IAAM,IAAI;AACtC,YAAI,SAAS;AACX,oBAAU;AACZ,kBAAU;AAEV,cAAM,SAAS,OAAO,YAAY,MAAM;AAExC,sBAAc,QAAQ,SAAS,GAAG,CAAC;AACnC,eAAO,CAAC,IAAI;AAEZ,uBAAe,QAAQ,IAAI,YAAY,MAAM;AAE7C,eAAO;AAAA,MACT;AAAA,MACA,QAAQ,QAAQ;AAGd,YAAI,KAAK;AACP;AAGF,6BAAqB,CAAC,IAAI;AAC1B,sBAAc,sBAAsB,KAAK,UAAU,EAAE;AACrD,cAAM,UACJ,eAAe,YAAY,KAAK,aAAa,oBAAoB,EAChE,OAAO,cAAc;AAGxB,cAAM,YACJ,eAAe,YAAY,KAAK,eAAe,oBAAoB,EAClE,OAAO,OAAO,MAAM,GAAG,CAAC,CAAC;AAC5B,aAAK,SAAS,SAAS;AAGvB,6BAAqB,CAAC,IAAI;AAC1B,cAAM,aACJ,eAAe,YAAY,KAAK,aAAa,oBAAoB,EAChE,OAAO,OAAO,MAAM,CAAC,CAAC;AACzB,aAAK,SAAS,UAAU;AAGxB;AAAA,UAAc;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV;AAAA,UACA,WAAW;AAAA,UACX;AAAA,QAAO;AACrB,cAAM,MAAM,OAAO,YAAY,EAAE;AACjC,YAAI;AAAA,UACF,IAAI;AAAA,YAAW,qBAAqB,OAAO;AAAA,YAC5B;AAAA,YACA;AAAA,UAAE;AAAA,UACjB;AAAA,QACF;AACA,aAAK,SAAS,GAAG;AAEjB,aAAK,WAAY,KAAK,WAAW,MAAO;AAAA,MAC1C;AAAA,IACF;AAEA,QAAM,0BAAN,MAA8B;AAAA,MAC5B,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,WAAW,IAAI;AACpB,aAAK,WAAW,IAAI;AACpB,aAAK,YAAY,IAAI,iBAAiB,IAAI,SAAS;AACnD,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,OAAO;AACL,aAAK,QAAQ;AACb,aAAK,UAAU,KAAK;AAAA,MACtB;AAAA,MACA,YAAY,YAAY;AACtB,YAAI,SAAS,IAAI,IAAI;AACrB,YAAI,SAAS,KAAM,SAAS,IAAM,IAAI;AACtC,YAAI,SAAS;AACX,oBAAU;AACZ,kBAAU;AAEV,cAAM,SAAS,OAAO;AAAA,UAAY,SAAS;AAAA;AAAA,QAAW;AAEtD,sBAAc,QAAQ,SAAS,GAAG,CAAC;AACnC,eAAO,CAAC,IAAI;AAEZ,uBAAe,QAAQ,IAAI,YAAY,MAAM;AAE7C,eAAO;AAAA,MACT;AAAA,MACA,QAAQ,QAAQ;AAGd,YAAI,KAAK;AACP;AAGF,aAAK,UAAU,QAAQ,QAAQ,KAAK,QAAQ;AAE5C,aAAK,SAAS,MAAM;AAEpB,aAAK,WAAY,KAAK,WAAW,MAAO;AAAA,MAC1C;AAAA,IACF;AAGA,QAAM,qBAAN,MAAyB;AAAA,MACvB,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,WAAW,IAAI;AACpB,aAAK,WAAW,IAAI;AACpB,aAAK,cAAc,IAAI,WAAW;AAClC,aAAK,UAAU,IAAI;AACnB,aAAK,SAAS,IAAI;AAClB,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,OAAO;AACL,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,YAAY,YAAY;AACtB,YAAI,SAAS,IAAI,IAAI;AACrB,YAAI,SAAS,MAAO,SAAS,IAAM,KAAK;AACxC,YAAI,SAAS;AACX,oBAAU;AACZ,kBAAU;AAEV,cAAM,SAAS,OAAO,YAAY,MAAM;AAExC,sBAAc,QAAQ,SAAS,GAAG,CAAC;AACnC,eAAO,CAAC,IAAI;AAEZ,uBAAe,QAAQ,IAAI,YAAY,MAAM;AAE7C,eAAO;AAAA,MACT;AAAA,MACA,QAAQ,QAAQ;AAGd,YAAI,KAAK;AACP;AAEF,cAAM,SAAS,eAAe,KAAK,aAAa,KAAK,SAAS,KAAK,MAAM;AACzE,eAAO,eAAe,KAAK;AAE3B,cAAM,UAAU,OAAO,MAAM,GAAG,CAAC;AACjC,eAAO,OAAO,OAAO;AACrB,aAAK,SAAS,OAAO;AAGrB,cAAM,YAAY,OAAO,OAAO,OAAO,MAAM,CAAC,CAAC;AAC/C,aAAK,SAAS,SAAS;AACvB,cAAM,QAAQ,OAAO,MAAM;AAE3B,YAAI,MAAM;AACR,eAAK,SAAS,KAAK;AAGrB,cAAM,MAAM,OAAO,WAAW;AAC9B,aAAK,SAAS,GAAG;AAGjB,oBAAY,KAAK,MAAM;AAEvB,aAAK,WAAY,KAAK,WAAW,MAAO;AAAA,MAC1C;AAAA,IACF;AAEA,QAAM,sBAAN,MAA0B;AAAA,MACxB,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,WAAW,IAAI;AACpB,aAAK,WAAW,IAAI;AACpB,aAAK,YAAY,IAAI;AAAA,UAAa,IAAI,WAAW;AAAA,UACf,IAAI;AAAA,UACJ,IAAI;AAAA,QAAQ;AAC9C,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,OAAO;AACL,aAAK,QAAQ;AACb,aAAK,UAAU,KAAK;AAAA,MACtB;AAAA,MACA,YAAY,YAAY;AACtB,YAAI,SAAS,IAAI,IAAI;AACrB,YAAI,SAAS,MAAO,SAAS,IAAM,KAAK;AACxC,YAAI,SAAS;AACX,oBAAU;AACZ,kBAAU;AAEV,cAAM,SAAS,OAAO;AAAA,UAAY,SAAS;AAAA;AAAA,QAAe;AAE1D,sBAAc,QAAQ,SAAS,GAAG,CAAC;AACnC,eAAO,CAAC,IAAI;AAEZ,uBAAe,QAAQ,IAAI,YAAY,MAAM;AAE7C,eAAO;AAAA,MACT;AAAA,MACA,QAAQ,QAAQ;AAGd,YAAI,KAAK;AACP;AAGF,aAAK,UAAU,QAAQ,MAAM;AAE7B,aAAK,SAAS,MAAM;AAEpB,aAAK,WAAY,KAAK,WAAW,MAAO;AAAA,MAC1C;AAAA,IACF;AAGA,QAAM,sBAAN,MAA0B;AAAA,MACxB,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,WAAW,IAAI;AACpB,aAAK,WAAW,IAAI;AACpB,aAAK,eAAe,IAAI,WAAW;AACnC,aAAK,kBAAkB;AAAA,UAAe,IAAI,WAAW;AAAA,UACf,IAAI;AAAA,UACJ,IAAI;AAAA,QAAQ;AAClD,aAAK,cAAc,IAAI,QAAQ;AAC/B,aAAK,UAAU,IAAI;AACnB,aAAK,gBAAgB,IAAI,QAAQ;AACjC,aAAK,UAAU,IAAI,QAAQ;AAC3B,aAAK,UAAW,KAAK,UAAU,IAAI;AACnC,aAAK,QAAQ;AAEb,cAAM,aAAa,IAAI,WAAW;AAClC,YAAI,YAAY;AACd,cAAI,UAAU,cAAc,IAAI,UAAU;AAC1C,cAAI,YAAY,QAAW;AACzB,sBAAU,OAAO,MAAM,UAAU;AACjC,0BAAc,IAAI,YAAY,OAAO;AAAA,UACvC;AACA,eAAK,gBAAgB,OAAO,OAAO;AAAA,QACrC;AAAA,MACF;AAAA,MACA,OAAO;AACL,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,YAAY,YAAY;AACtB,cAAM,WAAW,KAAK;AAEtB,YAAI,SAAS,IAAI,IAAI;AACrB,YAAI,SAAS,YAAa,SAAS,KAAK,UAAY,WAAW;AAC/D,YAAI,SAAS;AACX,oBAAU;AACZ,kBAAU;AAEV,cAAM,SAAS,OAAO,YAAY,MAAM;AAExC,sBAAc,QAAQ,SAAS,GAAG,CAAC;AACnC,eAAO,CAAC,IAAI;AAEZ,uBAAe,QAAQ,IAAI,YAAY,MAAM;AAE7C,eAAO;AAAA,MACT;AAAA,MACA,QAAQ,QAAQ;AAGd,YAAI,KAAK;AACP;AAEF,YAAI;AACJ,YAAI,KAAK,SAAS;AAEhB,gBAAM,WAAW,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,CAAC;AACnE,gBAAM,YAAY,KAAK,gBAAgB;AAAA,YACrC,IAAI;AAAA,cAAW,OAAO;AAAA,cACP,OAAO,aAAa;AAAA,cACpB,OAAO,SAAS;AAAA,YAAC;AAAA,UAClC;AAEA,eAAK,SAAS,QAAQ;AACtB,eAAK,SAAS,SAAS;AAIvB,gBAAM,WAAW,KAAK,aAAa,KAAK,OAAO;AAC/C,wBAAc,SAAS,KAAK,UAAU,CAAC;AACvC,cAAI,OAAO,OAAO;AAClB,cAAI,OAAO,QAAQ;AACnB,cAAI,OAAO,SAAS;AAAA,QACtB,OAAO;AAEL,gBAAM,YAAY,KAAK,gBAAgB,OAAO,MAAM;AACpD,eAAK,SAAS,SAAS;AAIvB,gBAAM,WAAW,KAAK,aAAa,KAAK,OAAO;AAC/C,wBAAc,SAAS,KAAK,UAAU,CAAC;AACvC,cAAI,OAAO,OAAO;AAClB,cAAI,OAAO,MAAM;AAAA,QACnB;AAEA,YAAI,SAAS,IAAI,OAAO;AACxB,YAAI,OAAO,SAAS,KAAK;AACvB,mBAAS,OAAO,MAAM,GAAG,KAAK,aAAa;AAC7C,aAAK,SAAS,MAAM;AAEpB,aAAK,WAAY,KAAK,WAAW,MAAO;AAAA,MAC1C;AAAA,IACF;AAEA,QAAM,uBAAN,MAA2B;AAAA,MACzB,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,WAAW,IAAI;AACpB,aAAK,WAAW,IAAI;AACpB,aAAK,eAAe,IAAI,WAAW;AACnC,aAAK,UAAU,IAAI,QAAQ;AAC3B,aAAK,gBAAgB,IAAI,QAAQ;AACjC,aAAK,UAAW,IAAI,QAAQ,QAAQ,IAAI;AACxC,aAAK,YAAY,IAAI;AAAA,UAAc,IAAI,WAAW;AAAA,UACf,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI,QAAQ;AAAA,UACZ,IAAI;AAAA,UACJ,IAAI,QAAQ;AAAA,QAAK;AACpD,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,OAAO;AACL,aAAK,QAAQ;AACb,aAAK,UAAU,KAAK;AAAA,MACtB;AAAA,MACA,YAAY,YAAY;AACtB,cAAM,WAAW,KAAK;AAEtB,YAAI,SAAS,IAAI,IAAI;AACrB,YAAI,SAAS,YAAa,SAAS,KAAK,UAAY,WAAW;AAC/D,YAAI,SAAS;AACX,oBAAU;AACZ,kBAAU;AAEV,cAAM,SAAS,OAAO,YAAY,SAAS,KAAK,OAAO;AAEvD,sBAAc,QAAQ,SAAS,GAAG,CAAC;AACnC,eAAO,CAAC,IAAI;AAEZ,uBAAe,QAAQ,IAAI,YAAY,MAAM;AAE7C,eAAO;AAAA,MACT;AAAA,MACA,QAAQ,QAAQ;AAGd,YAAI,KAAK;AACP;AAGF,aAAK,UAAU,QAAQ,QAAQ,KAAK,QAAQ;AAE5C,YAAI,KAAK,gBAAgB,KAAK,SAAS;AACrC,mBAAS,IAAI;AAAA,YAAW,OAAO;AAAA,YACP,OAAO;AAAA,YACN,OAAO,UACH,KAAK,UAAU,KAAK;AAAA,UAAe;AAAA,QAClE;AACA,aAAK,SAAS,MAAM;AAEpB,aAAK,WAAY,KAAK,WAAW,MAAO;AAAA,MAC1C;AAAA,IACF;AAGA,QAAM,eAAN,MAAmB;AAAA,MACjB,YAAY,OAAO,WAAW;AAC5B,aAAK,UAAU;AACf,aAAK,aAAa;AAClB,aAAK,OAAO;AACZ,aAAK,YAAY;AACjB,aAAK,UAAU;AACf,aAAK,aAAa;AAAA,MACpB;AAAA,MACA,OAAO;AAAA,MAAC;AAAA,MACR,QAAQ,MAAM,GAAG,SAAS;AACxB,eAAO,IAAI,SAAS;AAElB,cAAI,KAAK,YAAY,GAAG;AACtB,gBAAI,KAAK,KAAK,IAAI,IAAI,KAAK,WAAW,UAAU,CAAC;AAEjD,iBAAK,aAAa;AAClB,mBAAO;AACL,mBAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,GAAG;AAEzC,gBAAI,KAAK,YAAY;AACnB;AAEF,gBAAI,KAAK,OAAO,mBACT,KAAK,OAAO,MACX,IAAI,KAAK,OAAO,OAAO,GAAG;AAChC,oBAAM,IAAI,MAAM,mBAAmB;AAAA,YACrC;AACA,gBAAI,KAAK;AACP;AAAA,UACJ;AAGA,cAAI,KAAK,aAAa,KAAK,MAAM;AAC/B,kBAAM,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,YAAY,UAAU,CAAC;AAC5D,gBAAI;AACJ,gBAAI,MAAM,KAAK,OAAO;AACpB,sBAAQ,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA;AAE3D,sBAAQ;AACV,gBAAI,OAAO,KAAK,MAAM;AACpB,mBAAK,UAAU;AAAA,YACjB,OAAO;AACL,kBAAI,CAAC,KAAK;AACR,qBAAK,UAAU,OAAO,YAAY,KAAK,IAAI;AAC7C,mBAAK,QAAQ,IAAI,OAAO,KAAK,UAAU;AAAA,YACzC;AACA,iBAAK;AACL,iBAAK,cAAc;AACnB,gBAAI,KAAK,aAAa,KAAK;AACzB;AAAA,UACJ;AAEA,gBAAM,UAAW,CAAC,KAAK,UACJ,eACA,IAAI;AAAA,YAAW,KAAK,QAAQ;AAAA,YACb,KAAK,QAAQ,aAAa;AAAA,YAC1B,KAAK,QAAQ,SACT,KAAK,QAAQ,CAAC,IAAI;AAAA,UAAC;AAGzD,eAAK,UAAW,KAAK,UAAU,MAAO;AACtC,eAAK,OAAO;AACZ,eAAK,YAAY;AACjB,eAAK,UAAU;AACf,eAAK,aAAa;AAElB;AACE,kBAAM,MAAM,KAAK,WAAW,OAAO;AACnC,gBAAI,QAAQ;AACV,qBAAQ,QAAQ,QAAQ,IAAI;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAM,2BAAN,MAA+B;AAAA,MAC7B,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,UAAU,IAAI;AACnB,aAAK,aAAa,IAAI;AACtB,aAAK,cAAc,IAAI,YAAY,MAAM,GAAG,EAAE;AAC9C,aAAK,gBAAgB,IAAI,YAAY,MAAM,EAAE;AAC7C,aAAK,OAAO;AACZ,aAAK,UAAU,OAAO,MAAM,CAAC;AAC7B,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,OAAO,OAAO,YAAY,EAAE;AACjC,aAAK,WAAW,OAAO,YAAY,EAAE;AACrC,aAAK,UAAU;AAAA,MACjB;AAAA,MACA,OAAO;AAAA,MAAC;AAAA,MACR,QAAQ,MAAM,GAAG,SAAS;AAGxB,eAAO,IAAI,SAAS;AAElB,cAAI,KAAK,UAAU,GAAG;AACpB,gBAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,UAAU,CAAC;AAC/C,mBAAO;AACL,mBAAK,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG;AACzC,gBAAI,KAAK,UAAU;AACjB;AAEF,iCAAqB,CAAC,IAAI;AAC1B,0BAAc,sBAAsB,KAAK,SAAS,EAAE;AAEpD,kBAAM,cACJ,iBAAiB,YAAY,KAAK,eAAe,oBAAoB,EACpE,OAAO,KAAK,OAAO;AACtB,iBAAK,OAAO,aAAa,aAAa,CAAC;AAEvC,gBAAI,KAAK,OAAO,mBACT,KAAK,OAAO,MACX,KAAK,OAAO,OAAO,GAAG;AAC5B,oBAAM,IAAI,MAAM,mBAAmB;AAAA,YACrC;AAAA,UACF;AAGA,cAAI,KAAK,UAAU,KAAK,MAAM;AAC5B,gBAAI,KAAK;AACP;AACF,kBAAM,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,SAAS,UAAU,CAAC;AACzD,gBAAI;AACJ,gBAAI,MAAM,KAAK,OAAO;AACpB,0BAAY,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA;AAE/D,0BAAY;AACd,gBAAI,OAAO,KAAK,MAAM;AACpB,mBAAK,UAAU;AAAA,YACjB,OAAO;AACL,kBAAI,CAAC,KAAK;AACR,qBAAK,UAAU,OAAO,YAAY,KAAK,IAAI;AAC7C,mBAAK,QAAQ,IAAI,WAAW,KAAK,OAAO;AAAA,YAC1C;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU,KAAK,QAAQ,KAAK;AACnC;AAAA,UACJ;AAGA;AACE,kBAAM,KAAK,KAAK,IAAI,KAAK,KAAK,SAAS,UAAU,CAAC;AAElD,gBAAI,MAAM,KAAK,OAAO,SAAS;AAC7B,mBAAK,KAAK;AAAA,gBACR,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA,gBACnD,KAAK;AAAA,cACP;AAAA,YACF,OAAO;AACL,mBAAK,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,YAClC;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU;AACjB;AAAA,UACJ;AAGA,+BAAqB,CAAC,IAAI;AAC1B,wBAAc,sBAAsB,KAAK,SAAS,EAAE;AACpD,gBAAM,UACJ,eAAe,YAAY,KAAK,aAAa,oBAAoB,EAChE,OAAO,cAAc;AAGxB;AAAA,YAAc;AAAA,YACA,KAAK;AAAA,YACL;AAAA,YACA,KAAK;AAAA,YACL,KAAK,QAAQ;AAAA,YACb;AAAA,UAAO;AAErB,eAAK,SAAS;AAAA,YACZ,IAAI;AAAA,cAAW,qBAAqB,OAAO;AAAA,cAC5B;AAAA,cACA;AAAA,YAAE;AAAA,YACjB;AAAA,UACF;AACA,cAAI,CAAC,gBAAgB,KAAK,UAAU,KAAK,IAAI;AAC3C,kBAAM,IAAI,MAAM,aAAa;AAG/B,+BAAqB,CAAC,IAAI;AAC1B,gBAAM,SACJ,iBAAiB,YAAY,KAAK,aAAa,oBAAoB,EAClE,OAAO,KAAK,OAAO;AAEtB,gBAAM,UAAU,IAAI;AAAA,YAAW,OAAO;AAAA,YACP,OAAO,aAAa;AAAA,YACpB,OAAO,SAAS,OAAO,CAAC,IAAI;AAAA,UAAC;AAG5D,eAAK,UAAW,KAAK,UAAU,MAAO;AACtC,eAAK,OAAO;AACZ,eAAK,UAAU;AACf,eAAK,UAAU;AACf,eAAK,UAAU;AACf,eAAK,UAAU;AAEf;AACE,kBAAM,MAAM,KAAK,WAAW,OAAO;AACnC,gBAAI,QAAQ;AACV,qBAAQ,QAAQ,QAAQ,IAAI;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAM,4BAAN,MAAgC;AAAA,MAC9B,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,UAAU,IAAI;AACnB,aAAK,aAAa,IAAI;AACtB,aAAK,YAAY,IAAI,mBAAmB,IAAI,WAAW;AACvD,aAAK,OAAO;AACZ,aAAK,UAAU,OAAO,MAAM,CAAC;AAC7B,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,OAAO,OAAO,YAAY,EAAE;AACjC,aAAK,UAAU;AAAA,MACjB;AAAA,MACA,OAAO;AACL,aAAK,UAAU,KAAK;AAAA,MACtB;AAAA,MACA,QAAQ,MAAM,GAAG,SAAS;AAGxB,eAAO,IAAI,SAAS;AAElB,cAAI,KAAK,UAAU,GAAG;AACpB,gBAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,UAAU,CAAC;AAC/C,mBAAO;AACL,mBAAK,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG;AACzC,gBAAI,KAAK,UAAU;AACjB;AAEF,iBAAK,OAAO,KAAK,UAAU,WAAW,KAAK,SAAS,KAAK,OAAO;AAEhE,gBAAI,KAAK,OAAO,mBACT,KAAK,OAAO,MACX,KAAK,OAAO,OAAO,GAAG;AAC5B,oBAAM,IAAI,MAAM,mBAAmB;AAAA,YACrC;AAEA,gBAAI,KAAK;AACP;AAAA,UACJ;AAGA,cAAI,KAAK,UAAU,KAAK,MAAM;AAC5B,kBAAM,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,SAAS,UAAU,CAAC;AACzD,gBAAI;AACJ,gBAAI,MAAM,KAAK,OAAO;AACpB,0BAAY,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA;AAE/D,0BAAY;AACd,gBAAI,OAAO,KAAK,MAAM;AACpB,mBAAK,UAAU;AAAA,YACjB,OAAO;AACL,kBAAI,CAAC,KAAK;AACR,qBAAK,UAAU,OAAO,YAAY,KAAK,IAAI;AAC7C,mBAAK,QAAQ,IAAI,WAAW,KAAK,OAAO;AAAA,YAC1C;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU,KAAK,QAAQ,KAAK;AACnC;AAAA,UACJ;AAGA;AACE,kBAAM,KAAK,KAAK,IAAI,KAAK,KAAK,SAAS,UAAU,CAAC;AAElD,gBAAI,MAAM,KAAK,OAAO,SAAS;AAC7B,mBAAK,KAAK;AAAA,gBACR,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA,gBACnD,KAAK;AAAA,cACP;AAAA,YACF,OAAO;AACL,mBAAK,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,YAClC;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU;AACjB;AAAA,UACJ;AAEA,eAAK,UAAU,QAAQ,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO;AAE5D,gBAAM,UAAU,IAAI;AAAA,YAAW,KAAK,QAAQ;AAAA,YACb,KAAK,QAAQ,aAAa;AAAA,YAC1B,KAAK,QAAQ,SAAS,KAAK,QAAQ,CAAC,IAAI;AAAA,UAAC;AAGxE,eAAK,UAAW,KAAK,UAAU,MAAO;AACtC,eAAK,OAAO;AACZ,eAAK,UAAU;AACf,eAAK,UAAU;AACf,eAAK,UAAU;AACf,eAAK,UAAU;AAEf;AACE,kBAAM,MAAM,KAAK,WAAW,OAAO;AACnC,gBAAI,QAAQ;AACV,qBAAQ,QAAQ,QAAQ,IAAI;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAM,uBAAN,MAA2B;AAAA,MACzB,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,UAAU,IAAI;AACnB,aAAK,aAAa,IAAI;AACtB,aAAK,oBAAoB;AACzB,aAAK,mBAAmB,IAAI,aAAa;AACzC,aAAK,eAAe,IAAI;AACxB,aAAK,cAAc,IAAI;AACvB,aAAK,OAAO;AACZ,aAAK,YAAY;AACjB,aAAK,UAAU;AACf,aAAK,aAAa;AAClB,aAAK,UAAU;AACf,aAAK,OAAO,OAAO,YAAY,EAAE;AACjC,aAAK,UAAU;AAAA,MACjB;AAAA,MACA,OAAO;AAAA,MAAC;AAAA,MACR,QAAQ,MAAM,GAAG,SAAS;AAGxB,eAAO,IAAI,SAAS;AAElB,cAAI,KAAK,YAAY,GAAG;AACtB,gBAAI,KAAK,KAAK,IAAI,IAAI,KAAK,WAAW,UAAU,CAAC;AACjD,iBAAK,aAAa;AAClB,mBAAO;AACL,mBAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,GAAG;AACzC,gBAAI,KAAK,YAAY;AACnB;AAEF,gBAAK,KAAK,OAAO,KAAM,mBAChB,KAAK,OAAO,OACX,KAAK,OAAO,QAAQ,GAAG;AAC7B,oBAAM,IAAI,MAAM,mBAAmB;AAAA,YACrC;AAEA,iBAAK,oBAAoB;AAAA,cACvB,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,YACP;AACA,iBAAK,kBAAkB,eAAe,KAAK;AAC3C,iBAAK,kBAAkB,OAAO,WAAW,KAAK,IAAI,CAAC;AAAA,UACrD;AAGA,cAAI,KAAK,UAAU,KAAK,MAAM;AAC5B,gBAAI,KAAK;AACP;AACF,kBAAM,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,SAAS,UAAU,CAAC;AACzD,gBAAI;AACJ,gBAAI,MAAM,KAAK,OAAO,SAAS;AAC7B,0BAAY,KAAK,kBAAkB;AAAA,gBACjC,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA,cACrD;AAAA,YACF,OAAO;AACL,0BAAY,KAAK,kBAAkB,OAAO,IAAI;AAAA,YAChD;AACA,gBAAI,UAAU,QAAQ;AACpB,kBAAI,OAAO,KAAK,MAAM;AACpB,qBAAK,UAAU;AAAA,cACjB,OAAO;AACL,oBAAI,CAAC,KAAK;AACR,uBAAK,UAAU,OAAO,YAAY,KAAK,IAAI;AAC7C,qBAAK,QAAQ,IAAI,WAAW,KAAK,UAAU;AAAA,cAC7C;AACA,mBAAK,cAAc,UAAU;AAAA,YAC/B;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU,KAAK,QAAQ,KAAK;AACnC;AAAA,UACJ;AAGA;AACE,kBAAM,KAAK,KAAK,IAAI,KAAK,KAAK,SAAS,UAAU,CAAC;AAClD,gBAAI,MAAM,KAAK,OAAO,SAAS;AAC7B,mBAAK,KAAK;AAAA,gBACR,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA,gBACnD,KAAK;AAAA,cACP;AAAA,YACF,OAAO;AACL,mBAAK,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,YAClC;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU;AACjB;AAAA,UACJ;AAEA;AAEE,iBAAK,kBAAkB,WAAW,KAAK,IAAI;AAE3C,kBAAM,YAAY,KAAK,kBAAkB,MAAM;AAM/C,gBAAI,UAAU,QAAQ;AACpB,kBAAI,KAAK;AACP,qBAAK,QAAQ,IAAI,WAAW,KAAK,UAAU;AAAA;AAE3C,qBAAK,UAAU;AAAA,YACnB;AAAA,UACF;AAEA,gBAAM,UAAW,CAAC,KAAK,UACJ,eACA,IAAI;AAAA,YAAW,KAAK,QAAQ;AAAA,YACb,KAAK,QAAQ,aAAa;AAAA,YAC1B,KAAK,QAAQ,SACT,KAAK,QAAQ,CAAC,IAAI;AAAA,UAAC;AAGzD,eAAK,UAAW,KAAK,UAAU,MAAO;AACtC,sBAAY,KAAK,WAAW;AAC5B,eAAK,OAAO;AACZ,eAAK,YAAY;AACjB,eAAK,UAAU;AACf,eAAK,aAAa;AAClB,eAAK,UAAU;AACf,eAAK,UAAU;AAEf;AACE,kBAAM,MAAM,KAAK,WAAW,OAAO;AACnC,gBAAI,QAAQ;AACV,qBAAQ,QAAQ,QAAQ,IAAI;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAM,wBAAN,MAA4B;AAAA,MAC1B,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,UAAU,IAAI;AACnB,aAAK,aAAa,IAAI;AACtB,aAAK,YAAY,IAAI;AAAA,UAAe,IAAI,aAAa;AAAA,UACjB,IAAI;AAAA,UACJ,IAAI;AAAA,QAAU;AAClD,aAAK,OAAO;AACZ,aAAK,YAAY;AACjB,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,OAAO,OAAO,YAAY,EAAE;AACjC,aAAK,UAAU;AAAA,MACjB;AAAA,MACA,OAAO;AAAA,MAAC;AAAA,MACR,QAAQ,MAAM,GAAG,SAAS;AAGxB,eAAO,IAAI,SAAS;AAElB,cAAI,KAAK,YAAY,GAAG;AACtB,gBAAI,KAAK,KAAK,IAAI,IAAI,KAAK,WAAW,UAAU,CAAC;AACjD,iBAAK,aAAa;AAClB,mBAAO;AACL,mBAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,GAAG;AACzC,gBAAI,KAAK,YAAY;AACnB;AAEF,gBAAK,KAAK,OAAO,KAAM,mBAChB,KAAK,OAAO,OACX,KAAK,OAAO,QAAQ,GAAG;AAC7B,oBAAM,IAAI,MAAM,sBAAsB,KAAK,IAAI,EAAE;AAAA,YACnD;AAAA,UACF;AAGA,cAAI,KAAK,UAAU,KAAK,MAAM;AAC5B,gBAAI,KAAK;AACP;AACF,kBAAM,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,SAAS,UAAU,CAAC;AACzD,gBAAI;AACJ,gBAAI,MAAM,KAAK,OAAO;AACpB,0BAAY,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA;AAE/D,0BAAY;AACd,gBAAI,OAAO,KAAK,MAAM;AACpB,mBAAK,UAAU;AAAA,YACjB,OAAO;AACL,kBAAI,CAAC,KAAK;AACR,qBAAK,UAAU,OAAO,YAAY,KAAK,IAAI;AAC7C,mBAAK,QAAQ,IAAI,WAAW,KAAK,OAAO;AAAA,YAC1C;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU,KAAK,QAAQ,KAAK;AACnC;AAAA,UACJ;AAGA;AACE,kBAAM,KAAK,KAAK,IAAI,KAAK,KAAK,SAAS,UAAU,CAAC;AAClD,gBAAI,MAAM,KAAK,OAAO,SAAS;AAC7B,mBAAK,KAAK;AAAA,gBACR,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA,gBACnD,KAAK;AAAA,cACP;AAAA,YACF,OAAO;AACL,mBAAK,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,YAClC;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU;AACjB;AAAA,UACJ;AAEA,eAAK,UAAU,QAAQ,KAAK,SAAS,KAAK,MAAM,KAAK,IAAI;AAEzD,gBAAM,UAAU,IAAI;AAAA,YAAW,KAAK,QAAQ;AAAA,YACb,KAAK,QAAQ,aAAa;AAAA,YAC1B,KAAK,QAAQ,SAAS,KAAK,QAAQ,CAAC,IAAI;AAAA,UAAC;AAGxE,eAAK,UAAW,KAAK,UAAU,MAAO;AACtC,eAAK,OAAO;AACZ,eAAK,YAAY;AACjB,eAAK,UAAU;AACf,eAAK,UAAU;AACf,eAAK,UAAU;AAEf;AACE,kBAAM,MAAM,KAAK,WAAW,OAAO;AACnC,gBAAI,QAAQ;AACV,qBAAQ,QAAQ,QAAQ,IAAI;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAKA,QAAM,wBAAN,MAA4B;AAAA,MAC1B,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,UAAU,IAAI;AACnB,aAAK,aAAa,IAAI;AACtB,aAAK,oBAAoB;AAAA,UAAiB,IAAI,aAAa;AAAA,UACjB,IAAI;AAAA,UACJ,IAAI;AAAA,QAAU;AACxD,aAAK,kBAAkB,eAAe,KAAK;AAC3C,aAAK,SAAS,OAAO;AAAA,UACnB,IAAI,QAAQ,QAAQ,IAAI,IAAI,aAAa;AAAA,QAC3C;AACA,aAAK,aAAa,IAAI,aAAa;AACnC,aAAK,YAAY;AACjB,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,aAAa;AAClB,aAAK,UAAU;AACf,aAAK,OAAO,OAAO,YAAY,IAAI,QAAQ,SAAS;AACpD,aAAK,UAAU;AACf,aAAK,cAAc,IAAI,QAAQ;AAC/B,aAAK,UAAU,IAAI;AACnB,aAAK,gBAAgB,IAAI,QAAQ;AACjC,aAAK,UAAU,IAAI,QAAQ;AAC3B,aAAK,eAAe;AAEpB,cAAM,aAAa,IAAI,aAAa;AACpC,YAAI,YAAY;AACd,cAAI,UAAU,cAAc,IAAI,UAAU;AAC1C,cAAI,YAAY,QAAW;AACzB,sBAAU,OAAO,MAAM,UAAU;AACjC,0BAAc,IAAI,YAAY,OAAO;AAAA,UACvC;AACA,eAAK,kBAAkB,OAAO,OAAO;AAAA,QACvC;AAAA,MACF;AAAA,MACA,OAAO;AAAA,MAAC;AAAA,MACR,QAAQ,MAAM,GAAG,SAAS;AAGxB,eAAO,IAAI,SAAS;AAElB,cAAI,KAAK,YAAY,KAAK,OAAO,QAAQ;AACvC,kBAAM,KAAK,KAAK,IAAI,KAAK,OAAO,SAAS,KAAK,WAAW,UAAU,CAAC;AACpE,gBAAI,MAAM,KAAK,OAAO,WAAW,KAAK,KAAK,QAAQ;AACjD,mBAAK,OAAO;AAAA,gBACV,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA,gBACnD,KAAK;AAAA,cACP;AAAA,YACF,OAAO;AACL,mBAAK,OAAO,IAAI,MAAM,KAAK,SAAS;AAAA,YACtC;AAEA,iBAAK;AACL,iBAAK,aAAa;AAClB,gBAAI,KAAK,YAAY,KAAK,OAAO;AAC/B;AAEF,gBAAI;AACJ,gBAAI;AACJ,gBAAI,KAAK,SAAS;AAChB,mBAAK,OAAO,OAAO,aAAa,KAAK,QAAQ,CAAC;AAAA,YAChD,OAAO;AAEL,0BAAY,KAAK,kBAAkB,OAAO,KAAK,MAAM;AACrD,mBAAK,OAAO,aAAa,WAAW,CAAC;AACrC,qBAAO,IAAI,KAAK,OAAO,KAAK;AAAA,YAC9B;AAEA,gBAAI,KAAK,OAAO,mBACT,KAAK,OAAO,MACX,OAAQ,KAAK,aAAa,OAAQ,GAAG;AAC3C,oBAAM,IAAI,MAAM,mBAAmB;AAAA,YACrC;AAGA,iBAAK,eAAe,WAAW,KAAK,aAAa,KAAK,OAAO;AAE7D,0BAAc,SAAS,KAAK,SAAS,CAAC;AACtC,iBAAK,aAAa,OAAO,OAAO;AAChC,gBAAI,KAAK,SAAS;AAChB,mBAAK,aAAa,OAAO,KAAK,MAAM;AAAA,YACtC,OAAO;AACL,mBAAK,aAAa,OAAO,IAAI;AAAA,gBAAW,UAAU;AAAA,gBACV,UAAU;AAAA,gBACV;AAAA,cAAC,CAAC;AAC1C,mBAAK,UAAU,UAAU,SAAS;AAClC,mBAAK,aAAa,KAAK;AACvB,mBAAK,UAAU,OAAO,YAAY,KAAK,IAAI;AAC3C,mBAAK,QAAQ;AAAA,gBACX,IAAI;AAAA,kBAAW,UAAU;AAAA,kBACV,UAAU,aAAa;AAAA,kBACvB,KAAK;AAAA,gBAAU;AAAA,gBAC9B;AAAA,cACF;AAAA,YACF;AAEA,gBAAI,KAAK;AACP;AAAA,UACJ;AAGA,cAAI,KAAK,UAAU,KAAK,MAAM;AAC5B,kBAAM,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,SAAS,UAAU,CAAC;AACzD,gBAAI;AACJ,gBAAI,MAAM,KAAK,OAAO;AACpB,0BAAY,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA;AAE/D,0BAAY;AACd,gBAAI,KAAK;AACP,mBAAK,aAAa,OAAO,SAAS;AACpC,kBAAM,YAAY,KAAK,kBAAkB,OAAO,SAAS;AACzD,gBAAI,UAAU,QAAQ;AACpB,kBAAI,OAAO,KAAK,MAAM;AACpB,qBAAK,UAAU;AAAA,cACjB,OAAO;AACL,oBAAI,CAAC,KAAK;AACR,uBAAK,UAAU,OAAO,YAAY,KAAK,IAAI;AAC7C,qBAAK,QAAQ,IAAI,WAAW,KAAK,UAAU;AAAA,cAC7C;AACA,mBAAK,cAAc,UAAU;AAAA,YAC/B;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU,KAAK,QAAQ,KAAK;AACnC;AAAA,UACJ;AAGA;AACE,kBAAM,KAAK,KAAK,IAAI,KAAK,gBAAgB,KAAK,SAAS,UAAU,CAAC;AAClE,gBAAI,MAAM,KAAK,OAAO,SAAS;AAC7B,mBAAK,KAAK;AAAA,gBACR,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA,gBACnD,KAAK;AAAA,cACP;AAAA,YACF,OAAO;AACL,mBAAK,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,YAClC;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU,KAAK;AACtB;AAAA,UACJ;AAGA,cAAI,CAAC,KAAK;AACR,iBAAK,aAAa,OAAO,KAAK,OAAO;AACvC,cAAI,aAAa,KAAK,aAAa,OAAO;AAC1C,cAAI,KAAK,gBAAgB,WAAW,QAAQ;AAC1C,yBAAa,IAAI;AAAA,cAAW,WAAW;AAAA,cACX,WAAW;AAAA,cACX,KAAK;AAAA,YAAa;AAAA,UAChD;AACA,cAAI,CAAC,iBAAiB,YAAY,KAAK,IAAI;AACzC,kBAAM,IAAI,MAAM,aAAa;AAE/B,gBAAM,UAAU,IAAI;AAAA,YAAW,KAAK,QAAQ;AAAA,YACb,KAAK,QAAQ,aAAa;AAAA,YAC1B,KAAK,QAAQ,SAAS,KAAK,QAAQ,CAAC,IAAI;AAAA,UAAC;AAGxE,eAAK,UAAW,KAAK,UAAU,MAAO;AACtC,eAAK,YAAY;AACjB,eAAK,OAAO;AACZ,eAAK,UAAU;AACf,eAAK,aAAa;AAClB,eAAK,UAAU;AACf,eAAK,UAAU;AACf,eAAK,eAAe;AAEpB;AACE,kBAAM,MAAM,KAAK,WAAW,OAAO;AACnC,gBAAI,QAAQ;AACV,qBAAQ,QAAQ,QAAQ,IAAI;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAM,yBAAN,MAA6B;AAAA,MAC3B,YAAY,QAAQ;AAClB,cAAM,MAAM,OAAO;AACnB,aAAK,UAAU,IAAI;AACnB,aAAK,aAAa,IAAI;AACtB,aAAK,YAAY,IAAI;AAAA,UAAgB,IAAI,aAAa;AAAA,UACjB,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI,QAAQ;AAAA,UACZ,IAAI;AAAA,UACJ,IAAI,QAAQ;AAAA,UACZ,IAAI,QAAQ;AAAA,QAAS;AAC1D,aAAK,SAAS,OAAO;AAAA,UACnB,IAAI,QAAQ,SAAS,IAAI,aAAa,SACpC,IACA,IAAI,aAAa;AAAA,QACrB;AACA,aAAK,YAAY;AACjB,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,OAAO,OAAO,YAAY,IAAI,QAAQ,SAAS;AACpD,aAAK,UAAU;AACf,aAAK,gBAAgB,IAAI,QAAQ;AACjC,aAAK,UAAU,IAAI,QAAQ;AAAA,MAC7B;AAAA,MACA,OAAO;AACL,aAAK,UAAU,KAAK;AAAA,MACtB;AAAA,MACA,QAAQ,MAAM,GAAG,SAAS;AAGxB,eAAO,IAAI,SAAS;AAElB,cAAI,KAAK,YAAY,KAAK,OAAO,QAAQ;AACvC,kBAAM,KAAK,KAAK,IAAI,KAAK,OAAO,SAAS,KAAK,WAAW,UAAU,CAAC;AACpE,gBAAI,MAAM,KAAK,OAAO,WAAW,KAAK,KAAK,QAAQ;AACjD,mBAAK,OAAO;AAAA,gBACV,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA,gBACnD,KAAK;AAAA,cACP;AAAA,YACF,OAAO;AACL,mBAAK,OAAO,IAAI,MAAM,KAAK,SAAS;AAAA,YACtC;AAEA,iBAAK;AACL,iBAAK,aAAa;AAClB,gBAAI,KAAK,YAAY,KAAK,OAAO;AAC/B;AAEF,gBAAI;AACJ,gBAAI,KAAK,SAAS;AAChB,mBAAK,OAAO,OAAO,aAAa,KAAK,QAAQ,CAAC;AAAA,YAChD,OAAO;AAEL,mBAAK,UAAU,aAAa,KAAK,MAAM;AACvC,mBAAK,OAAO,aAAa,KAAK,QAAQ,CAAC;AACvC,qBAAO,IAAI,KAAK,OAAO,KAAK,OAAO;AAAA,YACrC;AAEA,gBAAI,KAAK,OAAO,mBACT,KAAK,OAAO,MACX,OAAQ,KAAK,OAAO,SAAS,OAAQ,GAAG;AAC9C,oBAAM,IAAI,MAAM,mBAAmB;AAAA,YACrC;AAEA,gBAAI,CAAC,KAAK,SAAS;AACjB,mBAAK,UAAW,KAAK,OAAO,SAAS;AACrC,kBAAI,KAAK,SAAS;AAChB,qBAAK,UAAU,OAAO,YAAY,KAAK,IAAI;AAC3C,qBAAK,QAAQ;AAAA,kBACX,IAAI;AAAA,oBAAW,KAAK,OAAO;AAAA,oBACZ,KAAK,OAAO,aAAa;AAAA,oBACzB,KAAK;AAAA,kBAAO;AAAA,kBAC3B;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAEA,gBAAI,KAAK;AACP;AAAA,UACJ;AAGA,cAAI,KAAK,UAAU,KAAK,MAAM;AAC5B,kBAAM,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,SAAS,UAAU,CAAC;AACzD,gBAAI;AACJ,gBAAI,MAAM,KAAK,OAAO;AACpB,0BAAY,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA;AAE/D,0BAAY;AACd,gBAAI,OAAO,KAAK,MAAM;AACpB,mBAAK,UAAU;AAAA,YACjB,OAAO;AACL,kBAAI,CAAC,KAAK;AACR,qBAAK,UAAU,OAAO,YAAY,KAAK,IAAI;AAC7C,mBAAK,QAAQ,IAAI,WAAW,KAAK,OAAO;AAAA,YAC1C;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU,KAAK,QAAQ,KAAK;AACnC;AAAA,UACJ;AAGA;AACE,kBAAM,KAAK,KAAK,IAAI,KAAK,gBAAgB,KAAK,SAAS,UAAU,CAAC;AAClE,gBAAI,MAAM,KAAK,OAAO,SAAS;AAC7B,mBAAK,KAAK;AAAA,gBACR,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA,gBACnD,KAAK;AAAA,cACP;AAAA,YACF,OAAO;AACL,mBAAK,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,YAClC;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU,KAAK;AACtB;AAAA,UACJ;AAGA,eAAK,UAAU;AAAA,YAAQ,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UAAI;AAEhC,gBAAM,UAAU,IAAI;AAAA,YAAW,KAAK,QAAQ;AAAA,YACb,KAAK,QAAQ,aAAa;AAAA,YAC1B,KAAK,QAAQ,SAAS,KAAK,QAAQ,CAAC,IAAI;AAAA,UAAC;AAGxE,eAAK,UAAW,KAAK,UAAU,MAAO;AACtC,eAAK,YAAY;AACjB,eAAK,OAAO;AACZ,eAAK,UAAU;AACf,eAAK,UAAU;AACf,eAAK,UAAU;AACf,eAAK,eAAe;AAEpB;AACE,kBAAM,MAAM,KAAK,WAAW,OAAO;AACnC,gBAAI,QAAQ;AACV,qBAAQ,QAAQ,QAAQ,IAAI;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,aAAS,YAAY,IAAI;AAEvB,QAAE,GAAG,EAAE,MAAM,KACV,EAAE,GAAG,EAAE,MAAM,KACb,EAAE,GAAG,CAAC,MAAM,KACZ,EAAE,GAAG,CAAC,MAAM,KACZ,EAAE,GAAG,CAAC,MAAM,KACZ,EAAE,GAAG,CAAC,MAAM,KACZ,EAAE,GAAG,CAAC,MAAM,KACZ,EAAE,GAAG,CAAC,MAAM;AAAA,IACjB;AAEA,QAAM,cAAc,MAAM;AACxB,YAAM,MAAM,OAAO,MAAM,CAAC;AAC1B,aAAO,CAAC,MAAM;AACZ,YAAI,CAAC,IAAK,MAAM;AAChB,YAAI,CAAC,IAAK,MAAM;AAChB,YAAI,CAAC,IAAK,MAAM;AAChB,YAAI,CAAC,IAAI;AACT,eAAO;AAAA,MACT;AAAA,IACF,GAAG;AAEH,aAAS,iBAAiB,GAAG,GAAG;AAC9B,UAAI,EAAE,WAAW,EAAE,QAAQ;AACzB,wBAAgB,GAAG,CAAC;AACpB,eAAO;AAAA,MACT;AACA,aAAO,gBAAgB,GAAG,CAAC;AAAA,IAC7B;AAEA,aAAS,aAAa,QAAQ;AAC5B,UAAI,OAAO,WAAW,YAAY,WAAW;AAC3C,cAAM,IAAI,MAAM,gBAAgB;AAElC,UAAI,OAAO,OAAO,aAAa,YAAY,OAAO,aAAa;AAC7D,cAAM,IAAI,MAAM,kBAAkB;AAEpC,YAAM,WAAW,OAAO;AAExB,UAAI,OAAO,SAAS,YAAY;AAC9B,cAAM,IAAI,MAAM,0BAA0B;AAE5C,UAAI,OAAO,SAAS,eAAe,YAAY,SAAS,eAAe;AACrE,cAAM,IAAI,MAAM,6BAA6B;AAE/C,UAAI,CAAC,OAAO,SAAS,SAAS,SAAS,KAChC,SAAS,UAAU,WAAW,SAAS,WAAW,QAAQ;AAC/D,cAAM,IAAI,MAAM,4BAA4B;AAAA,MAC9C;AAEA,UAAI,SAAS,WAAW,UAChB,CAAC,OAAO,SAAS,SAAS,QAAQ,KAC/B,SAAS,SAAS,WAAW,SAAS,WAAW,QAAQ;AAClE,cAAM,IAAI,MAAM,2BAA2B;AAAA,MAC7C;AAEA,UAAI,OAAO,SAAS,UAAU,YACvB,SAAS,QAAQ,KACjB,SAAS,QAAQ,WAAW;AACjC,cAAM,IAAI,MAAM,wBAAwB;AAAA,MAC1C;AAEA,YAAM,cAAc,CAAC,CAAC,SAAS;AAE/B,cAAQ,SAAS,WAAW,SAAS;AAAA,QACnC,KAAK;AAAA,QACL,KAAK;AACH,iBAAQ,gBAAgB,CAAC,cACf,IAAI,oBAAoB,MAAM,IAC9B,IAAI,mBAAmB,MAAM;AAAA,QACzC,KAAK;AACH,iBAAQ,oBAAoB,CAAC,cACnB,IAAI,wBAAwB,MAAM,IAClC,IAAI,uBAAuB,MAAM;AAAA,QAC7C,SAAS;AACP,cAAI,OAAO,SAAS,YAAY,YAAY,SAAS,YAAY;AAC/D,kBAAM,IAAI,MAAM,0BAA0B;AAC5C,cAAI,CAAC,OAAO,SAAS,SAAS,MAAM,KAC7B,SAAS,OAAO,WAAW,SAAS,QAAQ,KAAK;AACtD,kBAAM,IAAI,MAAM,yBAAyB;AAAA,UAC3C;AACA,iBAAQ,iBAAiB,CAAC,cAChB,IAAI,qBAAqB,MAAM,IAC/B,IAAI,oBAAoB,MAAM;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AAEA,aAAS,eAAe,QAAQ;AAC9B,UAAI,OAAO,WAAW,YAAY,WAAW;AAC3C,cAAM,IAAI,MAAM,gBAAgB;AAElC,UAAI,OAAO,OAAO,YAAY,YAAY,OAAO,YAAY;AAC3D,cAAM,IAAI,MAAM,iBAAiB;AAEnC,YAAM,UAAU,OAAO;AAEvB,UAAI,OAAO,QAAQ,cAAc;AAC/B,cAAM,IAAI,MAAM,2BAA2B;AAE7C,UAAI,OAAO,QAAQ,iBAAiB,YAC7B,QAAQ,iBAAiB,MAAM;AACpC,cAAM,IAAI,MAAM,8BAA8B;AAAA,MAChD;AAEA,UAAI,CAAC,OAAO,SAAS,QAAQ,WAAW,KACjC,QAAQ,YAAY,WAAW,QAAQ,aAAa,QAAQ;AACjE,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AAEA,UAAI,QAAQ,aAAa,UACjB,CAAC,OAAO,SAAS,QAAQ,UAAU,KAChC,QAAQ,WAAW,WAAW,QAAQ,aAAa,QAAQ;AACpE,cAAM,IAAI,MAAM,4BAA4B;AAAA,MAC9C;AAEA,UAAI,OAAO,QAAQ,UAAU,YACtB,QAAQ,QAAQ,KAChB,QAAQ,QAAQ,WAAW;AAChC,cAAM,IAAI,MAAM,uBAAuB;AAAA,MACzC;AAEA,YAAM,cAAc,CAAC,CAAC,QAAQ;AAE9B,cAAQ,QAAQ,aAAa,SAAS;AAAA,QACpC,KAAK;AAAA,QACL,KAAK;AACH,iBAAQ,kBAAkB,CAAC,cACjB,IAAI,sBAAsB,MAAM,IAChC,IAAI,qBAAqB,MAAM;AAAA,QAC3C,KAAK;AACH,iBAAQ,sBAAsB,CAAC,cACrB,IAAI,0BAA0B,MAAM,IACpC,IAAI,yBAAyB,MAAM;AAAA,QAC/C,SAAS;AACP,cAAI,OAAO,QAAQ,YAAY,YAAY,QAAQ,YAAY;AAC7D,kBAAM,IAAI,MAAM,yBAAyB;AAC3C,cAAI,CAAC,OAAO,SAAS,QAAQ,MAAM,KAC5B,QAAQ,OAAO,WAAW,QAAQ,QAAQ,KAAK;AACpD,kBAAM,IAAI,MAAM,wBAAwB;AAAA,UAC1C;AACA,iBAAQ,mBAAmB,CAAC,cAClB,IAAI,uBAAuB,MAAM,IACjC,IAAI,sBAAsB,MAAM;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAEA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA,kBAAkB,CAAC,CAAC;AAAA,MACpB,OAAO,MAAM;AAEX,eAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,cAAI;AACF,mCAAuB,MAAM,mBAAgC;AAC7D,qCAAyB,qBAAqB,QAAQ,EAAE;AACxD,4BAAgB,qBAAqB;AAAA,cACnC;AAAA,cACA;AAAA,cACA,CAAC,UAAU,SAAS,UAAU,SAAS,UAAU,OAAO;AAAA,YAC1D;AAAA,UACF,SAAS,IAAI;AACX,mBAAO,OAAO,EAAE;AAAA,UAClB;AACA,kBAAQ;AAAA,QACV,CAAC;AAAA,MACH,GAAG;AAAA,MAEH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;ACjkDA;AAAA;AAAA;AAMA,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,QAAQ;AAAA,IACV,IAAI,UAAQ,QAAQ;AACpB,QAAM,0BAA0B,WAAW;AAE3C,QAAM,EAAE,IAAI,IAAI;AAChB,QAAM,eAAe,uBAAwB;AAE7C,QAAM,EAAE,YAAY,IAAI;AACxB,QAAM,EAAE,gBAAgB,iBAAiB,IAAI;AAC7C,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,QAAM,gBAAgB,OAAO,gBAAgB;AAC7C,QAAM,eAAe,OAAO,iBAAiB;AAC7C,QAAM,cAAc,OAAO,gBAAgB;AAC3C,QAAM,cAAc,OAAO,gBAAgB;AAC3C,QAAM,gBAAgB,OAAO,eAAe;AAG5C,QAAM,sBAAsB,uBAAO,OAAO,IAAI;AAC9C;AACE,YAAM,OAAO,OAAO,KAAK,WAAW;AACpC,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,cAAM,aAAa,YAAY,KAAK,CAAC,CAAC,EAAE;AACxC,YAAI,CAAC,cAAc,oBAAoB,UAAU;AAC/C;AACF,4BAAoB,UAAU,IAAI,YAAY,KAAK,CAAC,CAAC;AAAA,MACvD;AAAA,IACF;AAEA,QAAM,kBAAkB,iBAAiB;AAEzC,aAAS,QAAQ,MAAM,MAAM;AAC3B,aAAO,KAAK,YAAY,GAAG,KAAK,MAAM;AACtC,UAAI,YAAY,KAAK,QAAQ,UAAU,MAAM;AAC7C,UAAI,KAAK,SAAS;AAChB,qBAAa;AACf,aAAO,cAAc,IAAI;AAAA,EAAc,SAAS,YAAY,IAAI;AAAA,IAClE;AAEA,aAAS,eAAe,MAAM,MAAM;AAClC,YAAM,SAAS,OAAO,YAAY,KAAK,SAAS,KAAK,MAAM;AAC3D,aAAO,IAAI,MAAM,CAAC;AAClB,aAAO,IAAI,MAAM,KAAK,MAAM;AAC5B,aAAO;AAAA,IACT;AAEA,aAAS,WAAW,KAAK,SAAS;AAChC,YAAM,SAAS,IAAI;AACnB,UAAI,MAAO,IAAI,QAAQ;AACvB,eAAS,IAAI,GAAG,IAAI,SAAS,EAAE,GAAG;AAChC,cAAM,OAAQ,SAAS;AACvB,YAAI,OAAO,UAAU,OAAO;AAC1B,iBAAO;AACT,cAAM,MAAM,aAAa,KAAK,GAAG;AACjC,YAAI,OAAO,IAAI;AACb,iBAAO;AACT,eAAO,IAAI;AAAA,MACb;AACA,UAAI,OAAO;AACX,aAAO;AAAA,IACT;AAEA,aAAS,iBAAiB,GAAG,GAAG;AAC9B,YAAM,YAAY,IAAI,IAAI,OAAO;AACjC,gBAAU,cAAc;AAEtB,gBAAU,cAAc;AACtB,gBAAU,SAAS,sBAAsB;AAEzC,gBAAU,UAAU;AACtB,gBAAU,YAAY;AAGtB,gBAAU,cAAc,IAAI,SAAS;AACnC,gBAAU,UAAU,CAAI;AACxB,gBAAU,cAAc;AACtB,gBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,gBAAU,YAAY,GAAG,IAAI,OAAO;AACtC,gBAAU,YAAY;AACxB,gBAAU,YAAY;AACxB,gBAAU,YAAY;AACtB,aAAO,QAAQ,UAAU,UAAU,MAAM;AAAA,IAC3C;AAEA,aAAS,iBAAiB,GAAG,GAAG;AAC9B,YAAM,YAAY,OAAO,YAAY,IAAI,IAAI,IAAI,EAAE,SAAS,IAAI,EAAE,MAAM;AAExE,oBAAc,WAAW,GAAG,CAAC;AAC7B,gBAAU,UAAU,WAAW,GAAG,CAAC;AAEnC,UAAI,IAAI,IAAI;AACZ,oBAAc,WAAW,EAAE,QAAQ,CAAC;AACpC,gBAAU,IAAI,GAAG,KAAK,CAAC;AAEvB,oBAAc,WAAW,EAAE,QAAQ,KAAK,EAAE,MAAM;AAChD,gBAAU,IAAI,GAAG,IAAI,CAAC;AAEtB,aAAO;AAAA,IACT;AAEA,QAAM,oBAAqB,uBAAM;AAC/B,eAAS,cAAc,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,MAAM,MAAM;AACtD,cAAM,YAAY,IAAI,IAAI,OAAO;AACjC,kBAAU,cAAc;AACtB,kBAAU,SAAS,GAAM,IAAI,OAAO;AACpC,kBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,kBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,kBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,kBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,kBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,kBAAU,YAAY,MAAM,IAAI,OAAO;AACvC,kBAAU,YAAY,MAAM,IAAI,OAAO;AACvC,kBAAU,YAAY,MAAM,IAAI,OAAO;AACzC,kBAAU,YAAY;AACtB,eAAO,UAAU;AAAA,MACnB;AAEA,eAAS,iBAAiB,KAAK;AAC7B,eAAO,OAAO,KAAK,IAAI,SAAS,GAAG,IAAI,MAAM,CAAC,EAAE;AAAA,MAClD;AAEA,eAAS,eAAe,IAAI;AAC1B,YAAI,MAAM,GAAG,SAAS,EAAE;AACxB,aAAK,IAAI,SAAS,OAAO,GAAG;AAC1B,gBAAM,IAAI,GAAG;AAAA,QACf,OAAO;AACL,gBAAM,SAAS,IAAI,WAAW,CAAC;AAG/B,cAAI,WAAW,MACR,WAAW,MACV,UAAU,MAAe,UAAU,KAAe;AACxD,kBAAM,KAAK,GAAG;AAAA,UAChB;AAAA,QACF;AACA,eAAO,OAAO,KAAK,KAAK,KAAK;AAAA,MAC/B;AAEA,aAAO,SAASC,mBAAkB,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG;AACrD,cAAM,OAAO,iBAAiB,CAAC;AAC/B,cAAM,OAAO,eAAe,QAAQ,iBAAiB,CAAC,IAAI,GAAG;AAC7D,cAAM,OAAO,eAAe,QAAQ,iBAAiB,CAAC,IAAI,GAAG;AAC7D,eAAO;AAAA,UAAQ;AAAA,UACA,cAAc,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,MAAM,IAAI;AAAA,QAAC;AAAA,MAC/D;AAAA,IACF,GAAG;AAEH,aAAS,iBAAiB,GAAG,GAAG,GAAG,GAAG;AACpC,YAAM,YAAY,IAAI,IAAI,OAAO;AACjC,gBAAU,cAAc;AAEtB,gBAAU,cAAc;AACtB,gBAAU,SAAS,mBAAmB;AAEtC,gBAAU,cAAc;AACtB,gBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,gBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,gBAAU,YAAY,GAAG,IAAI,OAAO;AACtC,gBAAU,YAAY;AACxB,gBAAU,YAAY;AAGtB,gBAAU,cAAc,IAAI,SAAS;AACnC,gBAAU,UAAU,CAAI;AACxB,gBAAU,YAAY,GAAG,IAAI,OAAO;AACtC,gBAAU,YAAY;AACxB,gBAAU,YAAY;AACtB,aAAO,QAAQ,UAAU,UAAU,MAAM;AAAA,IAC3C;AAEA,aAAS,iBAAiB,GAAG,GAAG,GAAG,GAAG;AACpC,YAAM,YAAY,OAAO;AAAA,QACvB,IAAI,IAAI,IAAI,EAAE,SAAS,IAAI,EAAE,SAAS,IAAI,EAAE,SAAS,IAAI,EAAE;AAAA,MAC7D;AAEA,oBAAc,WAAW,GAAG,CAAC;AAC7B,gBAAU,UAAU,WAAW,GAAG,CAAC;AAEnC,UAAI,IAAI,IAAI;AACZ,oBAAc,WAAW,EAAE,QAAQ,CAAC;AACpC,gBAAU,IAAI,GAAG,KAAK,CAAC;AAEvB,oBAAc,WAAW,EAAE,QAAQ,KAAK,EAAE,MAAM;AAChD,gBAAU,IAAI,GAAG,KAAK,CAAC;AAEvB,oBAAc,WAAW,EAAE,QAAQ,KAAK,EAAE,MAAM;AAChD,gBAAU,IAAI,GAAG,KAAK,CAAC;AAEvB,oBAAc,WAAW,EAAE,QAAQ,KAAK,EAAE,MAAM;AAChD,gBAAU,IAAI,GAAG,IAAI,CAAC;AAEtB,aAAO;AAAA,IACT;AAEA,aAAS,kBAAkB,GAAG,GAAG,GAAG,GAAG,GAAG;AACxC,YAAM,YAAY,IAAI,IAAI,OAAO;AACjC,gBAAU,cAAc;AACtB,gBAAU,SAAS,GAAM,IAAI,OAAO;AACpC,gBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,gBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,gBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,gBAAU,YAAY,GAAG,IAAI,OAAO;AACpC,gBAAU,YAAY,GAAG,IAAI,OAAO;AACtC,gBAAU,YAAY;AACtB,aAAO,QAAQ,eAAe,UAAU,MAAM;AAAA,IAChD;AAEA,aAAS,gBAAgB,KAAK;AAC5B,YAAM,YAAY,IAAI,IAAI,OAAO;AACjC,gBAAU,cAAc;AAEtB,gBAAU,cAAc;AACtB,gBAAU,SAAS,aAAa;AAClC,gBAAU,YAAY;AAGtB,gBAAU,cAAc,IAAI,SAAS;AACnC,gBAAU,UAAU,CAAI;AAExB,gBAAU,QAAQ,IAAI,MAAM;AAC5B,gBAAU,KAAK,IAAI,KAAK,UAAU,OAAO;AACzC,gBAAU,WAAW,IAAI;AAC3B,gBAAU,YAAY;AACxB,gBAAU,YAAY;AACtB,aAAO,QAAQ,UAAU,UAAU,MAAM;AAAA,IAC3C;AAEA,aAAS,gBAAgB,KAAK;AAC5B,YAAM,YAAY,OAAO,YAAY,IAAI,KAAK,IAAI,IAAI,MAAM;AAE5D,oBAAc,WAAW,IAAI,CAAC;AAC9B,gBAAU,UAAU,eAAe,GAAG,EAAE;AAExC,oBAAc,WAAW,IAAI,QAAQ,EAAE;AACvC,gBAAU,IAAI,KAAK,EAAE;AAErB,aAAO;AAAA,IACT;AAEA,aAAS,iBAAiB,MAAM;AAC9B,YAAM,YAAY,IAAI,IAAI,OAAO;AACjC,gBAAU,cAAc;AAEtB,gBAAU,SAAS,GAAM,IAAI,OAAO;AAGpC,gBAAU,cAAc;AACtB,gBAAU,SAAS,aAAa;AAClC,gBAAU,YAAY;AAGtB,gBAAU,cAAc,IAAI,WAAW;AACrC,gBAAU,YAAY,MAAM,IAAI,WAAW;AAC7C,gBAAU,YAAY;AACxB,gBAAU,YAAY;AACtB,aAAO,QAAQ,WAAW,UAAU,MAAM;AAAA,IAC5C;AAEA,aAAS,mBAAmB,KAAK,GAAG;AAClC,YAAM,YAAY,IAAI,IAAI,OAAO;AACjC,gBAAU,cAAc;AAEtB,gBAAU,cAAc;AACtB,gBAAU,SAAS,mBAAmB;AAEtC,gBAAU,SAAS,GAAG;AACxB,gBAAU,YAAY;AAGtB,gBAAU,cAAc,IAAI,SAAS;AACnC,gBAAU,UAAU,CAAI;AAExB,gBAAU,QAAQ,EAAE,MAAM;AAC1B,gBAAU,KAAK,IAAI,GAAG,UAAU,OAAO;AACvC,gBAAU,WAAW,EAAE;AAEzB,gBAAU,YAAY;AACxB,gBAAU,YAAY;AACtB,aAAO,QAAQ,UAAU,UAAU,MAAM;AAAA,IAC3C;AAEA,aAAS,mBAAmB,KAAK,GAAG;AAClC,UAAI;AACJ,cAAQ,KAAK;AAAA,QACX,KAAK;AAEH,sBAAY;AACZ;AAAA,QACF,KAAK;AAEH,sBAAY;AACZ;AAAA,QACF,KAAK;AAEH,sBAAY;AACZ;AAAA,QACF;AACE;AAAA,MACJ;AAEA,YAAM,YAAY,OAAO,YAAY,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,MAAM;AAElE,oBAAc,WAAW,IAAI,CAAC;AAC9B,gBAAU,UAAU,cAAc,SAAS,IAAI,GAAG,EAAE;AAEpD,oBAAc,WAAW,GAAG,EAAE;AAC9B,gBAAU,UAAU,WAAW,IAAI,CAAC;AAEpC,oBAAc,WAAW,EAAE,QAAQ,EAAE;AACrC,gBAAU,IAAI,GAAG,EAAE;AAEnB,aAAO;AAAA,IACT;AAEA,aAAS,oBAAoB,KAAK,KAAK,MAAM;AAC3C,YAAM,YAAY,IAAI,IAAI,OAAO;AACjC,gBAAU,cAAc;AAEtB,gBAAU,SAAS,GAAM,IAAI,OAAO;AAEpC,gBAAU,YAAY,MAAM,IAAI,WAAW;AAE3C,gBAAU,cAAc,GAAI;AAC1B,gBAAU,SAAS,GAAG;AACxB,gBAAU,YAAY;AAEtB,gBAAU,cAAc,GAAI;AAC1B,gBAAU,cAAc,IAAI,SAAS;AACnC,gBAAU,UAAU,CAAI;AAExB,gBAAU,QAAQ,IAAI,MAAM;AAC5B,gBAAU,KAAK,IAAI,KAAK,UAAU,OAAO;AACzC,gBAAU,WAAW,IAAI;AAE3B,gBAAU,YAAY;AACxB,gBAAU,YAAY;AACxB,gBAAU,YAAY;AACtB,aAAO,QAAQ,cAAc,UAAU,MAAM;AAAA,IAC/C;AAEA,aAAS,2BAA2B,WAAW,MAAM;AACnD,YAAM,WAAW,WAAW,SAAS;AACrC,eAAS,cAAc,IAAI;AAC3B,aAAO,SAAS,aAAa;AAAA,IAC/B;AAEA,QAAM,UAAU;AAAA,MACd,OAAO,MAAM;AACX,YAAI,OAAO,UAAU,YAAY;AAC/B,iBAAO,SAAS,KAAK,MAAM,MAAM;AAC/B,kBAAM,MAAM,KAAK,YAAY;AAC7B,gBAAI,QAAQ;AACV,qBAAO,IAAI,MAAM,0BAA0B;AAC7C,gBAAI,CAAC,QAAQ,OAAO,SAAS;AAC3B,qBAAO,KAAK,aAAa;AAC3B,gBAAI;AACF,qBAAO,MAAM,MAAM,MAAM,GAAG;AAAA,YAC9B,SAAS,IAAI;AACX,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AACA,eAAO,SAAS,KAAK,MAAM,MAAM;AAC/B,gBAAM,MAAM,KAAK,YAAY;AAC7B,cAAI,QAAQ;AACV,mBAAO,IAAI,MAAM,0BAA0B;AAC7C,cAAI,CAAC,QAAQ,OAAO,SAAS;AAC3B,mBAAO,KAAK,aAAa;AAC3B,gBAAM,YAAY,WAAW,IAAI;AACjC,oBAAU,OAAO,IAAI;AACrB,cAAI;AACF,mBAAO,UAAU,KAAK,GAAG;AAAA,UAC3B,SAAS,IAAI;AACX,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF,GAAG;AAAA,MACH,SAAS,MAAM;AACb,YAAI,OAAO,YAAY,YAAY;AACjC,iBAAO,SAAS,OAAO,MAAM,WAAW,MAAM;AAC5C,kBAAM,MAAM,KAAK,WAAW;AAC5B,gBAAI,QAAQ;AACV,qBAAO,IAAI,MAAM,yBAAyB;AAC5C,gBAAI,CAAC,QAAQ,OAAO,SAAS;AAC3B,qBAAO,KAAK,aAAa;AAC3B,gBAAI;AACF,qBAAO,QAAQ,MAAM,MAAM,KAAK,SAAS;AAAA,YAC3C,SAAS,IAAI;AACX,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AACA,eAAO,SAAS,OAAO,MAAM,WAAW,MAAM;AAC5C,gBAAM,MAAM,KAAK,WAAW;AAC5B,cAAI,QAAQ;AACV,mBAAO,IAAI,MAAM,yBAAyB;AAC5C,cAAI,CAAC,QAAQ,OAAO,SAAS;AAC3B,mBAAO,KAAK,aAAa;AAC3B,gBAAM,WAAW,aAAa,IAAI;AAClC,mBAAS,OAAO,IAAI;AACpB,cAAI;AACF,mBAAO,SAAS,OAAO,KAAK,SAAS;AAAA,UACvC,SAAS,IAAI;AACX,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF,GAAG;AAAA,MACH,cAAc,SAAS,eAAe;AACpC,eAAQ,KAAK,YAAY,MAAM;AAAA,MACjC;AAAA,MACA,eAAe,SAAS,gBAAgB;AACtC,eAAO,KAAK,YAAY;AAAA,MAC1B;AAAA,MACA,cAAc,SAAS,eAAe;AACpC,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA,MACA,cAAc,SAAS,eAAe;AACpC,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA,MACA,QAAQ,SAAS,OAAO,KAAK;AAC3B,cAAM,SAAS,SAAS,GAAG;AAC3B,YAAI,kBAAkB;AACpB,iBAAO;AACT,eACE,KAAK,SAAS,OAAO,QAClB,KAAK,YAAY,MAAM,OAAO,YAAY,KAC1C,KAAK,WAAW,MAAM,OAAO,WAAW,KACxC,KAAK,WAAW,EAAE,OAAO,OAAO,WAAW,CAAC;AAAA,MAEnD;AAAA,IACF;AAGA,aAAS,gBAAgB,MAAM,SAAS,SAAS,QAAQ,QAAQ,MACxC,WAAW;AAClC,WAAK,OAAO;AACZ,WAAK,UAAU;AACf,WAAK,YAAY,IAAI;AACrB,WAAK,WAAW,IAAI;AACpB,WAAK,WAAW,IAAI;AACpB,WAAK,aAAa,IAAI;AACtB,WAAK,aAAa,IAAI;AAAA,IACxB;AACA,oBAAgB,YAAY;AAC5B;AA6IE,UAAS,uBAAT,SAA8B,MAAM,OAAO,WAAW;AACpD,cAAM,OAAO,CAAC;AAiBd,YAAI,KAAK,SAAS;AAChB,iBAAO,IAAI,MAAM,+BAA+B;AAClD,cAAM,SAAS,aAAa,MAAM,CAAC;AACnC,cAAM,SAAS,aAAa,MAAM,CAAC;AACnC,YAAI,WAAW,QAAQ;AACrB,cAAI,WAAW;AACb,mBAAO,IAAI;AAAA,cACT;AAAA,YACF;AAAA,UACF;AACA,iBAAO,IAAI,MAAM,oCAAoC;AAAA,QACvD;AACA,aAAK,OAAO;AACZ,YAAI;AACJ,YAAI;AACJ,aAAK,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AAC1B,cAAI;AACJ,cAAI;AACJ,cAAI;AACJ,cAAI;AAMJ,gBAAM,OAAO,WAAW,MAAM,KAAK,MAAM,IAAI;AAC7C,cAAI,SAAS;AACX,mBAAO,IAAI,MAAM,+BAA+B;AAElD,kBAAQ,MAAM;AAAA,YACZ,KAAK,WAAW;AASd,oBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,OAAO,WAAW,MAAM,KAAK,IAAI;AACvC,kBAAI,SAAS;AACX,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,+BAA+B;AAElD,uBAAS,iBAAiB,GAAG,CAAC;AAC9B,uBAAS,iBAAiB,GAAG,CAAC;AAC9B,wBAAU,kBAAkB,GAAG,GAAG,GAAG,MAAM,GAAG,CAAC;AAC/C,qBAAO;AACP;AAAA,YACF;AAAA,YACA,KAAK,WAAW;AAQd,oBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,+BAA+B;AAElD,uBAAS,iBAAiB,GAAG,GAAG,GAAG,CAAC;AACpC,uBAAS,iBAAiB,GAAG,GAAG,GAAG,CAAC;AACpC,wBAAU,kBAAkB,GAAG,GAAG,GAAG,GAAG,CAAC;AACzC,qBAAO;AACP;AAAA,YACF;AAAA,YACA,KAAK,eAAe;AAClB,kBAAI,CAAC;AACH,uBAAO,IAAI,MAAM,yCAAyC,IAAI,EAAE;AAKlE,oBAAM,QAAQ,WAAW,MAAM,KAAK,IAAI;AACxC,kBAAI,UAAU,UAAa,MAAM,WAAW;AAC1C,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,SAAS,WAAW,MAAM,KAAK,IAAI;AACzC,kBAAI,WAAW,UAAa,OAAO,WAAW;AAC5C,uBAAO,IAAI,MAAM,+BAA+B;AAElD,uBAAS,gBAAgB,KAAK;AAC9B,uBAAS,gBAAgB,KAAK;AAC9B,wBAAU,iBAAiB,YAAY,QAAQ,GAAG,EAAE,CAAC;AACrD,qBAAO;AACP;AAAA,YACF;AAAA,YACA,KAAK;AACH,qBAAO;AACP,oBAAM;AAAA,YAER,KAAK;AACH,kBAAI,SAAS,QAAW;AACtB,uBAAO;AACP,sBAAM;AAAA,cACR;AAAA,YAEF,KAAK,uBAAuB;AAC1B,kBAAI,SAAS,QAAW;AACtB,uBAAO;AACP,sBAAM;AAAA,cACR;AAOA,kBAAI,CAAC,WAAW,MAAM,CAAC;AACrB,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,QAAQ,WAAW,MAAM,KAAK,IAAI;AACxC,kBAAI,UAAU;AACZ,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,SAAS,WAAW,MAAM,KAAK,IAAI;AACzC,kBAAI,WAAW;AACb,uBAAO,IAAI,MAAM,+BAA+B;AAElD,uBAAS,mBAAmB,KAAK,KAAK;AACtC,uBAAS,mBAAmB,KAAK,KAAK;AACtC,wBAAU,oBAAoB,KAAK,OAAO,MAAM;AAChD;AAAA,YACF;AAAA,YACA;AACE,qBAAO,IAAI,MAAM,yCAAyC,IAAI,EAAE;AAAA,UACpE;AAEA,gBAAM,cAAc,WAAW,MAAM,KAAK,MAAM,IAAI;AACpD,cAAI,gBAAgB;AAClB,mBAAO,IAAI,MAAM,+BAA+B;AAElD,eAAK;AAAA,YACH,IAAI;AAAA,cAAgB;AAAA,cAAM;AAAA,cAAa;AAAA,cAAS;AAAA,cAAQ;AAAA,cAAQ;AAAA,cAC5C;AAAA,YAAS;AAAA,UAC/B;AAAA,QACF;AACA,YAAI,MAAM;AACV,aAAK,IAAI,KAAK,MAAM,IAAI,KAAK,QAAQ,EAAE,GAAG;AACxC,cAAI,KAAK,CAAC,MAAO,EAAE,MAAM;AACvB,mBAAO,IAAI,MAAM,+BAA+B;AAAA,QACpD;AAEA,eAAO;AAAA,MACT;AAvUA,YAAM,SAAS;AACf,sBAAgB,QAAQ,CAAC,KAAK,eAAe;AAC3C,cAAM,IAAI,OAAO,KAAK,GAAG;AACzB,YAAI,MAAM;AACR,iBAAO;AACT,YAAI;AACJ,cAAM,OAAO,OAAO,KAAK,EAAE,CAAC,GAAG,QAAQ;AACvC,YAAI,KAAK,SAAS;AAChB,iBAAO,IAAI,MAAM,+BAA+B;AAClD,cAAM,QAAQ,KAAK,UAAU,GAAG,EAAE;AAClC,YAAI,UAAU;AACZ,iBAAO,IAAI,MAAM,kCAAkC,KAAK,EAAE;AAE5D,cAAM,aAAa,WAAW,MAAM,IAAI,IAAI;AAC5C,YAAI,eAAe;AACjB,iBAAO,IAAI,MAAM,+BAA+B;AAClD,YAAI,eAAe,UAAU,iBAAiB,QAAQ,UAAU,MAAM;AACpE,iBAAO,IAAI,MAAM,uCAAuC,UAAU,EAAE;AAEtE,cAAM,UAAU,WAAW,MAAM,KAAK,MAAM,IAAI;AAChD,YAAI,YAAY;AACd,iBAAO,IAAI,MAAM,+BAA+B;AAClD,YAAI,YAAY,QAAQ;AACtB,cAAI,eAAe;AACjB,mBAAO,IAAI,MAAM,+BAA+B;AAClD,cAAI,YAAY;AACd,mBAAO,IAAI,MAAM,yCAAyC,OAAO,EAAE;AACrE,cAAI,CAAC,YAAY;AACf,mBAAO,IAAI;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF,WAAW,eAAe,QAAQ;AAChC,iBAAO,IAAI,MAAM,+BAA+B;AAAA,QAClD;AAEA,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI,eAAe;AACjB,oBAAU,YAAY,UAAU;AAClC,cAAM,aAAa,WAAW,MAAM,KAAK,IAAI;AAC7C,YAAI,eAAe;AACjB,iBAAO,IAAI,MAAM,+BAA+B;AAClD,YAAI,WAAW,QAAQ;AACrB,kBAAQ,SAAS;AAAA,YACf,KAAK;AACH,qBAAO,IAAI,MAAM,+BAA+B;AAAA,YAClD,KAAK,UAAU;AAKb,oBAAM,OAAO,WAAW,YAAY,CAAC;AACrC,kBAAI,SAAS,UAAa,WAAW,OAAO,IAAI,WAAW;AACzD,uBAAO,IAAI,MAAM,+BAA+B;AAClD,oBAAM,SAAS,aAAa,YAAY,WAAW,IAAI;AACvD,oBAAM,MAAM,OAAO,YAAY,QAAQ,SAAS,QAAQ,KAAK;AAC7D,oBAAM,IAAI;AAAA,gBAAa;AAAA,gBACA,WAAW;AAAA,gBACX;AAAA,gBACA,KAAK;AAAA,gBACL;AAAA,gBACA,IAAI;AAAA,gBACJ;AAAA,cAAM;AAC7B,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,+CAA+C;AAClE,0BAAY,YAAY,KAAK,GAAG,QAAQ,MAAM;AAC9C,yBAAW,YAAY,KAAK,QAAQ,QAAQ,IAAI,MAAM;AACtD;AAAA,YACF;AAAA,UACF;AAAA,QACF,WAAW,YAAY,QAAQ;AAC7B,iBAAO,IAAI,MAAM,+BAA+B;AAAA,QAClD;AAEA,YAAI,KAAK,OAAO,KAAK,KAAK;AACxB,iBAAO,IAAI,MAAM,+BAA+B;AAClD,cAAM,WAAW,aAAa,MAAM,KAAK,IAAI;AAC7C,aAAK,QAAQ;AAEb,YAAI,WAAW,GAAG;AAIhB,mBAAS,IAAI,GAAG,IAAI,UAAU,EAAE,GAAG;AACjC,kBAAM,UAAU,WAAW,MAAM,KAAK,IAAI;AAC1C,gBAAI,YAAY;AACd,qBAAO,IAAI,MAAM,+BAA+B;AAClD,kBAAM,OAAO,WAAW,SAAS,GAAG,IAAI;AACxC,gBAAI,SAAS;AACX,qBAAO,IAAI,MAAM,+BAA+B;AAAA,UACpD;AAEA,cAAI,WAAW,WAAW,MAAM,KAAK,IAAI;AACzC,cAAI,aAAa;AACf,mBAAO,IAAI,MAAM,+BAA+B;AAElD,cAAI,cAAc,QAAW;AAE3B,gBAAI,SAAS,SAAS,QAAQ,YACtB,SAAS,SAAS,QAAQ,aAAc,GAAG;AACjD,qBAAO,IAAI,MAAM,+BAA+B;AAAA,YAClD;AACA,gBAAI;AACF,oBAAM,UAAU,EAAE,eAAe,QAAQ,QAAQ;AACjD,oBAAM,WAAW;AAAA,gBAAiB,QAAQ;AAAA,gBACR;AAAA,gBACA;AAAA,gBACA;AAAA,cAAO;AACzC,uBAAS,eAAe,KAAK;AAC7B,kBAAI,QAAQ,UAAU,GAAG;AACvB,oBAAI,KAAK,SAAS,KAAK,OAAO,QAAQ;AACpC,yBAAO,IAAI,MAAM,+BAA+B;AAClD,yBAAS;AAAA,kBACP,YAAY,MAAM,KAAK,MAAM,KAAK,QAAQ,QAAQ,OAAO;AAAA,gBAC3D;AAAA,cACF;AACA,yBAAW;AAAA,gBAAe,SAAS,OAAO,QAAQ;AAAA,gBACxB,SAAS,MAAM;AAAA,cAAC;AAAA,YAC5C,SAAS,IAAI;AACX,qBAAO;AAAA,YACT;AAAA,UACF;AAGA,cAAI,KAAK,SAAS,KAAK;AACrB,mBAAO,IAAI,MAAM,+BAA+B;AAElD,gBAAM,qBAAqB,UAAU,UAAU,cAAc,MAAS;AAAA,QACxE,OAAO;AACL,gBAAM,CAAC;AAAA,QACT;AACA,YAAI,eAAe;AACjB,iBAAO;AAGT,eAAO,IAAI,CAAC;AAAA,MACd;AAAA,IA8LF;AAGA,aAAS,oBAAoB,MAAM,SAAS,SAAS,QAAQ,QAAQ,MACxC,WAAW;AACtC,WAAK,OAAO;AACZ,WAAK,UAAU;AACf,WAAK,YAAY,IAAI;AACrB,WAAK,WAAW,IAAI;AACpB,WAAK,WAAW,IAAI;AACpB,WAAK,aAAa,IAAI;AACtB,WAAK,aAAa,IAAI;AAAA,IACxB;AACA,wBAAoB,YAAY;AAChC;AACE,YAAM,SAAS;AACf,0BAAoB,QAAQ,CAAC,KAAK,eAAe;AAC/C,cAAM,IAAI,OAAO,KAAK,GAAG;AACzB,YAAI,MAAM;AACR,iBAAO;AACT,YAAI,WAAW,OAAO,KAAK,EAAE,CAAC,GAAG,QAAQ;AACzC,YAAI,UAAU,EAAE,CAAC;AACjB,YAAI,YAAY;AAChB,YAAI,YAAY,QAAW;AAEzB,oBAAU,QAAQ,MAAM,UAAU;AAClC,mBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,kBAAM,SAAS,QAAQ,CAAC;AACxB,gBAAI,SAAS,OAAO,QAAQ,GAAG;AAC/B,gBAAI,OAAO,MAAM,GAAG,MAAM,MAAM,YAAY;AAC1C,oBAAM,MAAM,OAAO,MAAM,SAAS,CAAC;AACnC,uBAAS,IAAI,QAAQ,GAAG;AACxB,kBAAI,WAAW;AACb;AACF,oBAAM,aAAa,IAAI,MAAM,GAAG,MAAM,EAAE,YAAY;AACpD,kBAAI,wBAAwB,QAAQ,UAAU,MAAM,IAAI;AACtD,uBAAO,IAAI;AAAA,kBACT,WAAW,UAAU;AAAA,gBAEvB;AAAA,cACF;AACA,oBAAM,UAAU,oBAAoB,UAAU;AAC9C,kBAAI,CAAC,SAAS;AACZ,uBAAO,IAAI;AAAA,kBACT,WAAW,UAAU;AAAA,gBAEvB;AAAA,cACF;AACA,oBAAM,WAAW,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC,GAAG,KAAK;AACzD,kBAAI,SAAS,WAAW,QAAQ;AAC9B,uBAAO,IAAI,MAAM,yCAAyC;AAC5D,kBAAI,CAAC,YAAY;AACf,uBAAO,IAAI;AAAA,kBACT;AAAA,gBACF;AAAA,cACF;AACA,oBAAM,UAAU,YAAY,UAAU,GAAG,CAAC;AAC1C,kBAAI,YAAY,WAAW,KAAK,EACb,OAAO,UAAU,EACjB,OAAO,OAAO,EACd,OAAO;AAC1B,qBAAO,UAAU,SAAS,QAAQ,QAAQ;AACxC,4BAAY;AAAA,kBACV;AAAA,kBACA,WAAW,KAAK,EACb,OAAO,SAAS,EAChB,OAAO,UAAU,EACjB,OAAO,OAAO,EACd,OAAO;AAAA,gBACZ;AAAA,cACF;AACA,kBAAI,UAAU,SAAS,QAAQ;AAC7B,4BAAY,YAAY,WAAW,GAAG,QAAQ,MAAM;AACtD,kBAAI;AACF,sBAAM,WAAW,iBAAiB,YAAY,WAAW,QAAQ;AACjE,yBAAS,eAAe,KAAK;AAC7B,2BAAW;AAAA,kBAAe,SAAS,OAAO,QAAQ;AAAA,kBACxB,SAAS,MAAM;AAAA,gBAAC;AAC1C,4BAAY;AAAA,cACd,SAAS,IAAI;AACX,uBAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI,SAAS;AACb,YAAI;AACF,oBAAU;AACZ,gBAAQ,EAAE,CAAC,GAAG;AAAA,UACZ,KAAK;AACH,mBAAO;AACP,sBAAU,QAAQ,eAAe,QAAQ;AACzC,gBAAI;AACF,uBAAS,IAAI,IAAI,OAAO,QAAQ;AAChC,qBAAO,aAAa;AACpB,qBAAO,QAAQ;AACf,oBAAM,IAAI,OAAO,WAAW,IAAI,SAAS,IAAI;AAC7C,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,MAAM;AACzB,oBAAM,IAAI,OAAO,WAAW,IAAI,SAAS,IAAI;AAC7C,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,MAAM;AACzB,uBAAS,iBAAiB,GAAG,CAAC;AAC9B,uBAAS,iBAAiB,GAAG,CAAC;AAAA,YAChC,QAAQ;AACN,qBAAO,IAAI,MAAM,MAAM;AAAA,YACzB;AACA,mBAAO;AACP;AAAA,UACF,KAAK;AACH,mBAAO;AACP,sBAAU,QAAQ,eAAe,QAAQ;AACzC,gBAAI;AACF,uBAAS,IAAI,IAAI,OAAO,QAAQ;AAChC,qBAAO,aAAa;AACpB,qBAAO,QAAQ;AACf,oBAAM,IAAI,OAAO,WAAW,IAAI,SAAS,IAAI;AAC7C,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,MAAM;AACzB,oBAAM,IAAI,OAAO,WAAW,IAAI,SAAS,IAAI;AAC7C,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,MAAM;AACzB,oBAAM,IAAI,OAAO,WAAW,IAAI,SAAS,IAAI;AAC7C,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,MAAM;AACzB,oBAAM,IAAI,OAAO,WAAW,IAAI,SAAS,IAAI;AAC7C,kBAAI,MAAM;AACR,uBAAO,IAAI,MAAM,MAAM;AACzB,uBAAS,iBAAiB,GAAG,GAAG,GAAG,CAAC;AACpC,uBAAS,iBAAiB,GAAG,GAAG,GAAG,CAAC;AAAA,YACtC,QAAQ;AACN,qBAAO,IAAI,MAAM,MAAM;AAAA,YACzB;AACA,mBAAO;AACP;AAAA,UACF,KAAK,MAAM;AACT,gBAAI;AACJ,gBAAI;AACJ,gBAAI;AACJ,gBAAI;AACF,uBAAS,IAAI,IAAI,OAAO,QAAQ;AAChC,qBAAO,aAAa;AACpB,qBAAO,QAAQ;AACf,uBAAS,OAAO,WAAW,IAAI,aAAa,IAAI;AAChD,qBAAO,SAAS;AAChB,oBAAM,SAAS,OAAO,WAAW;AACjC,kBAAI,WAAW,MAAM;AACnB,uBAAO,UAAU;AACjB,wBAAQ,OAAO,QAAQ;AACvB,oBAAI,UAAU;AACZ,yBAAO,IAAI,MAAM,MAAM;AACzB,wBAAQ,OAAO;AAAA,kBACb,KAAK;AAEH,gCAAY;AACZ,2BAAO;AACP,2BAAO;AACP;AAAA,kBACF,KAAK;AAEH,gCAAY;AACZ,2BAAO;AACP,2BAAO;AACP;AAAA,kBACF,KAAK;AAEH,gCAAY;AACZ,2BAAO;AACP,2BAAO;AACP;AAAA,kBACF;AACE,2BAAO,IAAI,MAAM,mCAAmC,KAAK,EAAE;AAAA,gBAC/D;AAAA,cACF,OAAO;AACL,uBAAO,IAAI,MAAM,MAAM;AAAA,cACzB;AAAA,YACF,QAAQ;AACN,qBAAO,IAAI,MAAM,MAAM;AAAA,YACzB;AACA,sBAAU,QAAQ,cAAc,QAAQ;AACxC,kBAAM,UAAU,2BAA2B,WAAW,MAAM;AAC5D,qBAAS,mBAAmB,OAAO,OAAO;AAC1C,qBAAS,mBAAmB,OAAO,OAAO;AAC1C;AAAA,UACF;AAAA,QACF;AAEA,eAAO,IAAI;AAAA,UAAoB;AAAA,UAAM;AAAA,UAAI;AAAA,UAAS;AAAA,UAAQ;AAAA,UAAQ;AAAA,UACnC;AAAA,QAAS;AAAA,MAC1C;AAAA,IACF;AAGA,aAAS,YAAY,MAAM,SAAS,SAAS,QAAQ,QAAQ,MAAM,WAAW;AAC5E,WAAK,OAAO;AACZ,WAAK,UAAU;AACf,WAAK,YAAY,IAAI;AACrB,WAAK,WAAW,IAAI;AACpB,WAAK,WAAW,IAAI;AACpB,WAAK,aAAa,IAAI;AACtB,WAAK,aAAa,IAAI;AAAA,IACxB;AACA,gBAAY,YAAY;AACxB;AACE,YAAM,mBAAmB,OAAO,MAAM,CAAC;AACvC,YAAM,SAAS,OAAO,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC3E,YAAM,UAAU,OAAO,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACxC,YAAM,UAAU,OAAO,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACxC,YAAM,SAAS;AACf,kBAAY,QAAQ,CAAC,KAAK,eAAe;AACvC,cAAM,IAAI,OAAO,KAAK,GAAG;AACzB,YAAI,MAAM;AACR,iBAAO;AA6BT,cAAM,aAAa,EAAE,CAAC;AACtB,cAAM,YAAa,eAAe;AAClC,YAAI,aAAa,CAAC,YAAY;AAC5B,iBAAO,IAAI;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAEA,YAAI,WAAW,OAAO,KAAK,EAAE,CAAC,GAAG,QAAQ;AAEzC,YAAI,WAAW;AACb,gBAAM,UAAU,YAAY,UAAU;AACtC,cAAI,YAAY;AAAA,YACd,WAAW,MAAM,EAAE,OAAO,OAAO,EAAE,OAAO,UAAU,EAAE,OAAO;AAAA,YAC7D,WAAW,MAAM,EAAE,OAAO,OAAO,EAAE,OAAO,UAAU,EAAE,OAAO;AAAA,UAC/D;AACA,cAAI,UAAU,SAAS,QAAQ;AAC7B,wBAAY,YAAY,WAAW,GAAG,QAAQ,MAAM;AACtD,cAAI;AACF,kBAAM,WAAW,iBAAiB,QAAQ,SAAS,WAAW,MAAM;AACpE,qBAAS,eAAe,KAAK;AAC7B,uBAAW;AAAA,cAAe,SAAS,OAAO,QAAQ;AAAA,cACxB,SAAS,MAAM;AAAA,YAAC;AAAA,UAC5C,SAAS,IAAI;AACX,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,cAAM,OAAO,EAAE,CAAC;AAChB,cAAM,UAAU,EAAE,CAAC;AACnB,cAAM,UAAU,OAAO,KAAK,EAAE,CAAC,GAAG,QAAQ;AAE1C,cAAM,MAAM,EAAE,CAAC;AACf,cAAM,UAAU,KAAK;AACrB,cAAM,gBAAgB,WAAW;AACjC,cAAM,aAAa,OAAO,WAAW,OAAO;AAC5C,cAAM,SAAS,QAAQ;AACvB,cAAM,UAAU,SAAS;AACzB,cAAM,UAAU,OAAO,YAAY,IAAI,UACF,IAAI,gBACJ,IAAI,aACJ,IAAI,SACJ,IAAI,OAAO;AAChD,YAAI,IAAI;AAER,sBAAc,SAAS,SAAS,CAAC;AACjC,gBAAQ,UAAU,MAAM,KAAK,GAAG,OAAO;AACvC,sBAAc,SAAS,eAAe,KAAK,OAAO;AAClD,gBAAQ,UAAU,YAAY,KAAK,GAAG,aAAa;AACnD,sBAAc,SAAS,YAAY,KAAK,aAAa;AACrD,gBAAQ,UAAU,SAAS,KAAK,GAAG,UAAU;AAC7C,sBAAc,SAAS,QAAQ,KAAK,UAAU;AAC9C,gBAAQ,IAAI,SAAS,KAAK,CAAC;AAC3B,sBAAc,SAAS,SAAS,KAAK,MAAM;AAC3C,gBAAQ,IAAI,UAAU,IAAI,CAAC;AAE3B,YAAI,CAAC;AACH,uBAAa;AAEf,cAAM,UAAU;AAAA,UACd;AAAA,UACC,WAAW,MAAM,EACd,OAAO,gCAAgC,EACvC,OAAO,UAAU,EACjB,OAAO;AAAA,QACb,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK;AAE9B,YAAI,YAAY,KAAK;AACnB,cAAI,WAAW;AACb,mBAAO,IAAI;AAAA,cACT;AAAA,YACF;AAAA,UACF;AACA,iBAAO,IAAI,MAAM,wCAAwC;AAAA,QAC3D;AAEA,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,gBAAQ,OAAO;AACf,mBAAW,SAAS,CAAC;AACrB,gBAAQ,MAAM;AAAA,UACZ,KAAK,WAAW;AACd,kBAAM,IAAI,WAAW,SAAS,QAAQ,IAAI;AAC1C,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,0BAA0B;AAC7C,kBAAM,IAAI,WAAW,SAAS,QAAQ,IAAI;AAC1C,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,0BAA0B;AAC7C,kBAAM,IAAI,WAAW,UAAU,CAAC;AAChC,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,2BAA2B;AAC9C,kBAAMC,KAAI,WAAW,UAAU,SAAS,IAAI;AAC5C,gBAAIA,OAAM;AACR,qBAAO,IAAI,MAAM,2BAA2B;AAC9C,kBAAM,IAAI,WAAW,UAAU,SAAS,IAAI;AAC5C,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,2BAA2B;AAC9C,kBAAM,OAAO,WAAW,UAAU,SAAS,IAAI;AAC/C,gBAAI,SAAS;AACX,qBAAO,IAAI,MAAM,2BAA2B;AAC9C,qBAAS,iBAAiB,GAAG,CAAC;AAC9B,qBAAS,iBAAiB,GAAG,CAAC;AAC9B,sBAAU,kBAAkB,GAAG,GAAG,GAAG,MAAMA,IAAG,CAAC;AAC/C;AAAA,UACF;AAAA,UACA,KAAK,WAAW;AACd,kBAAMA,KAAI,WAAW,SAAS,QAAQ,IAAI;AAC1C,gBAAIA,OAAM;AACR,qBAAO,IAAI,MAAM,0BAA0B;AAC7C,kBAAM,IAAI,WAAW,SAAS,QAAQ,IAAI;AAC1C,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,0BAA0B;AAC7C,kBAAM,IAAI,WAAW,SAAS,QAAQ,IAAI;AAC1C,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,0BAA0B;AAC7C,kBAAM,IAAI,WAAW,SAAS,QAAQ,IAAI;AAC1C,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,0BAA0B;AAC7C,kBAAM,IAAI,WAAW,UAAU,CAAC;AAChC,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,2BAA2B;AAE9C,qBAAS,iBAAiBA,IAAG,GAAG,GAAG,CAAC;AACpC,qBAAS,iBAAiBA,IAAG,GAAG,GAAG,CAAC;AACpC,sBAAU,kBAAkBA,IAAG,GAAG,GAAG,GAAG,CAAC;AACzC;AAAA,UACF;AAAA,QACF;AAEA,eAAO,IAAI;AAAA,UAAY;AAAA,UAAM;AAAA,UAAS;AAAA,UAAS;AAAA,UAAQ;AAAA,UAAQ;AAAA,UACxC;AAAA,QAAS;AAAA,MAClC;AAAA,IACF;AAGA,aAAS,eAAe,MAAM,SAAS,QAAQ,QAAQ,MAAM;AAC3D,WAAK,OAAO;AACZ,WAAK,UAAU;AACf,WAAK,YAAY,IAAI;AACrB,WAAK,WAAW,IAAI;AACpB,WAAK,WAAW,IAAI;AACpB,WAAK,aAAa,IAAI;AACtB,WAAK,aAAa,IAAI;AAAA,IACxB;AACA,mBAAe,YAAY;AAC3B;AACE,UAAI;AACJ,UAAI;AACF,iBAAS;AAAA;AAET,iBAAS;AACX,qBAAe,QAAQ,CAAC,QAAQ;AAC9B,cAAM,IAAI,OAAO,KAAK,GAAG;AACzB,YAAI,MAAM;AACR,iBAAO;AAMT,cAAM,WAAW,EAAE,CAAC;AACpB,cAAM,WAAW,EAAE,CAAC;AACpB,cAAM,OAAO,OAAO,KAAK,EAAE,CAAC,GAAG,QAAQ;AACvC,cAAM,UAAW,EAAE,CAAC,KAAK;AAEzB,cAAM,OAAO,WAAW,MAAM,KAAK,MAAM,IAAI;AAC7C,YAAI,SAAS,UAAa,KAAK,QAAQ,QAAQ,MAAM;AACnD,iBAAO,IAAI,MAAM,8BAA8B;AAEjD,eAAO,SAAS,MAAM,UAAU,SAAS,QAAQ;AAAA,MACnD;AAAA,IACF;AAGA,aAAS,eAAe,MAAM,SAAS,QAAQ,QAAQ,MAAM;AAC3D,WAAK,OAAO;AACZ,WAAK,UAAU;AACf,WAAK,YAAY,IAAI;AACrB,WAAK,WAAW,IAAI;AACpB,WAAK,WAAW,IAAI;AACpB,WAAK,aAAa,IAAI;AACtB,WAAK,aAAa,IAAI;AAAA,IACxB;AACA,mBAAe,YAAY;AAC3B;AACE,YAAM,SAAS;AACf,YAAM,UAAU;AAChB,YAAM,YAAY;AAClB,YAAM,iBAAiB;AACvB,qBAAe,QAAQ,CAAC,QAAQ;AAC9B,YAAI,IAAI,OAAO,KAAK,GAAG;AACvB,YAAI,MAAM;AACR,iBAAO;AAET,cAAM,OAAO,EAAE,CAAC;AAChB,YAAI,YAAY;AAChB,YAAI,UAAU;AAEd,eAAO,IAAI,UAAU,KAAK,IAAI,GAAG;AAC/B,gBAAM,aAAa,EAAE,CAAC;AACtB,gBAAM,cAAc,EAAE,CAAC,EAAE,QAAQ,gBAAgB,EAAE;AACnD,cAAI,YAAY,SAAS,MAAM;AAC7B,sBAAU,YAAY;AACtB,mBAAO,IAAI,MAAM,8BAA8B;AAAA,UACjD;AAEA,sBAAY,UAAU;AAEtB,cAAI,WAAW,YAAY,MAAM,WAAW;AAC1C,sBAAU;AACV,gBAAI,QAAQ,SAAS,KACd,QAAQ,WAAW,CAAC,MAAM,MAC1B,QAAQ,WAAW,QAAQ,SAAS,CAAC,MAAM,IAAa;AAC7D,wBAAU,QAAQ,MAAM,GAAG,EAAE;AAAA,YAC/B;AAAA,UACF;AAAA,QACF;AAEA,YAAI,OAAO,KAAK,MAAM,SAAS;AAC/B,YAAI,CAAC,QAAQ,KAAK,IAAI;AACpB,iBAAO,IAAI,MAAM,8BAA8B;AAEjD,eAAO,OAAO,KAAK,MAAM,QAAQ;AAEjC,cAAM,OAAO,WAAW,MAAM,GAAG,IAAI;AACrC,YAAI,SAAS;AACX,iBAAO,IAAI,MAAM,8BAA8B;AAEjD,YAAI,SAAS;AACb,YAAI,SAAS;AACb,gBAAQ,MAAM;AAAA,UACZ,KAAK,WAAW;AACd,kBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,8BAA8B;AACjD,kBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,8BAA8B;AACjD,qBAAS,iBAAiB,GAAG,CAAC;AAC9B,qBAAS,iBAAiB,GAAG,CAAC;AAC9B;AAAA,UACF;AAAA,UACA,KAAK,WAAW;AACd,kBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,8BAA8B;AACjD,kBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,8BAA8B;AACjD,kBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,8BAA8B;AACjD,kBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,8BAA8B;AACjD,qBAAS,iBAAiB,GAAG,GAAG,GAAG,CAAC;AACpC,qBAAS,iBAAiB,GAAG,GAAG,GAAG,CAAC;AACpC;AAAA,UACF;AAAA,UACA;AACE,mBAAO,IAAI,MAAM,8BAA8B;AAAA,QACnD;AAEA,eAAO,IAAI,eAAe,MAAM,SAAS,QAAQ,QAAQ,MAAM;AAAA,MACjE;AAAA,IACF;AAGA,aAAS,SAAS,MAAM,UAAU,SAAS,UAAU;AACnD,UAAI,CAAC,mBAAmB,QAAQ;AAC9B,eAAO,IAAI,MAAM,wCAAwC,QAAQ,EAAE;AAErE,UAAI;AACJ,UAAI;AACJ,UAAI,SAAS;AACb,UAAI,SAAS;AAEb,cAAQ,UAAU;AAAA,QAChB,KAAK,WAAW;AACd,gBAAM,IAAI,WAAW,MAAM,KAAK,QAAQ,CAAC;AACzC,cAAI,MAAM;AACR,mBAAO,IAAI,MAAM,8BAA8B;AACjD,gBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,cAAI,MAAM;AACR,mBAAO,IAAI,MAAM,8BAA8B;AACjD,mBAAS,iBAAiB,GAAG,CAAC;AAC9B,mBAAS,iBAAiB,GAAG,CAAC;AAC9B,iBAAO;AACP;AAAA,QACF;AAAA,QACA,KAAK,WAAW;AACd,gBAAM,IAAI,WAAW,MAAM,KAAK,QAAQ,CAAC;AACzC,cAAI,MAAM;AACR,mBAAO,IAAI,MAAM,8BAA8B;AACjD,gBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,cAAI,MAAM;AACR,mBAAO,IAAI,MAAM,8BAA8B;AACjD,gBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,cAAI,MAAM;AACR,mBAAO,IAAI,MAAM,8BAA8B;AACjD,gBAAM,IAAI,WAAW,MAAM,KAAK,IAAI;AACpC,cAAI,MAAM;AACR,mBAAO,IAAI,MAAM,8BAA8B;AACjD,mBAAS,iBAAiB,GAAG,GAAG,GAAG,CAAC;AACpC,mBAAS,iBAAiB,GAAG,GAAG,GAAG,CAAC;AACpC,iBAAO;AACP;AAAA,QACF;AAAA,QACA,KAAK,eAAe;AAClB,gBAAM,QAAQ,WAAW,MAAM,KAAK,QAAQ,CAAC;AAC7C,cAAI,UAAU,UAAa,MAAM,WAAW;AAC1C,mBAAO,IAAI,MAAM,8BAA8B;AACjD,mBAAS,gBAAgB,KAAK;AAC9B,mBAAS,gBAAgB,KAAK;AAC9B,iBAAO;AACP;AAAA,QACF;AAAA,QACA,KAAK;AACH,iBAAO;AACP,gBAAM;AAAA,QAER,KAAK;AACH,cAAI,SAAS,QAAW;AACtB,mBAAO;AACP,kBAAM;AAAA,UACR;AAAA,QAEF,KAAK,uBAAuB;AAC1B,cAAI,SAAS,QAAW;AACtB,mBAAO;AACP,kBAAM;AAAA,UACR;AAEA,cAAI,CAAC,WAAW,MAAM,CAAC;AACrB,mBAAO,IAAI,MAAM,8BAA8B;AACjD,gBAAM,QAAQ,WAAW,MAAM,KAAK,QAAQ,CAAC;AAC7C,cAAI,UAAU;AACZ,mBAAO,IAAI,MAAM,8BAA8B;AACjD,mBAAS,mBAAmB,KAAK,KAAK;AACtC,mBAAS,mBAAmB,KAAK,KAAK;AACtC;AAAA,QACF;AAAA,QACA;AACE,iBAAO,IAAI,MAAM,wCAAwC,QAAQ,EAAE;AAAA,MACvE;AAEA,aAAO,IAAI,eAAe,UAAU,SAAS,QAAQ,QAAQ,IAAI;AAAA,IACnE;AAEA,aAAS,mBAAmB,MAAM;AAChC,cAAQ,MAAM;AAAA,QACZ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,cAAI;AACF,mBAAO;AAAA,QAEX;AACE,iBAAO;AAAA,MACX;AAAA,IACF;AAEA,aAAS,YAAY,KAAK;AACxB,UAAI,CAAC;AACH,eAAO;AACT,aAAQ,OAAO,IAAI,aAAa,MAAM;AAAA,IACxC;AAEA,aAAS,SAAS,MAAM,YAAY;AAClC,UAAI,YAAY,IAAI;AAClB,eAAO;AAET,UAAI;AACJ,UAAI,OAAO,SAAS,IAAI,GAAG;AACzB,qBAAa;AACb,eAAO,KAAK,UAAU,GAAG,KAAK,MAAM,EAAE,KAAK;AAAA,MAC7C,WAAW,OAAO,SAAS,UAAU;AACnC,eAAO,KAAK,KAAK;AAAA,MACnB,OAAO;AACL,eAAO,IAAI,MAAM,qCAAqC;AAAA,MACxD;AAGA,UAAI,cAAc,QAAW;AAC3B,YAAI,OAAO,eAAe;AACxB,uBAAa,OAAO,KAAK,UAAU;AAAA,iBAC5B,CAAC,OAAO,SAAS,UAAU;AAClC,iBAAO,IAAI,MAAM,qDAAqD;AAAA,MAC1E;AAEA,UAAI;AAKJ,WAAK,MAAM,gBAAgB,MAAM,MAAM,UAAU,OAAO;AACtD,eAAO;AACT,WAAK,MAAM,oBAAoB,MAAM,MAAM,UAAU,OAAO;AAC1D,eAAO;AACT,WAAK,MAAM,YAAY,MAAM,MAAM,UAAU,OAAO;AAClD,eAAO;AAGT,WAAK,MAAM,eAAe,MAAM,IAAI,OAAO;AACzC,eAAO;AACT,WAAK,MAAM,eAAe,MAAM,IAAI,OAAO;AACzC,eAAO;AAGT,UAAI,YAAY;AACd,wBAAgB,KAAK,YAAY,CAAC;AAClC,cAAM,OAAO,gBAAgB,WAAW,IAAI;AAC5C,YAAI,SAAS,QAAW;AACtB,iBAAO,gBAAgB,QAAQ;AAC/B,cAAI,SAAS,QAAW;AACtB,kBAAM,SAAS,MAAM,MAAM,IAAI,IAAI;AAGnC,gBAAI,eAAe;AACjB,oBAAM;AAAA,UACV;AAAA,QACF;AACA,wBAAgB,MAAM;AAAA,MACxB;AAEA,UAAI;AACF,eAAO;AAET,aAAO,IAAI,MAAM,wBAAwB;AAAA,IAC3C;AAEA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA,aAAa,CAAC,MAAM,SAAS,SAAS,MAAM,MAAM,IAAI,IAAI;AAAA,MAC1D;AAAA,IACF;AAAA;AAAA;;;AC38CA;AAAA;AAAA;AAEA,QAAM,EAAE,OAAO,IAAI,UAAQ,KAAK;AAChC,QAAM,EAAE,OAAO,IAAI,UAAQ,QAAQ;AACnC,QAAM,EAAE,QAAQ,IAAI,UAAQ,MAAM;AAClC,QAAM,EAAE,SAAS,IAAI,UAAQ,IAAI;AACjC,QAAM,EAAE,UAAU,MAAM,IAAI,UAAQ,eAAe;AAEnD,QAAM,EAAE,aAAa,SAAS,IAAI;AAElC,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,aAAS,KAAK,IAAI;AAChB,UAAI,SAAS;AACb,aAAO,IAAI,SAAS;AAClB,YAAI;AACF;AACF,iBAAS;AACT,WAAG,GAAG,IAAI;AAAA,MACZ;AAAA,IACF;AAEA,aAAS,OAAO,MAAM,MAAM;AAC1B,YAAM,WAAW,OAAO,YAAY,KAAK,SAAS,KAAK,MAAM;AAC7D,WAAK,KAAK,UAAU,CAAC;AACrB,WAAK,KAAK,UAAU,KAAK,MAAM;AAC/B,aAAO;AAAA,IACT;AAEA,aAAS,OAAO;AAAA,IAAC;AAEjB,QAAM,YAAY,OAAO,MAAM,CAAC;AAEhC,QAAM,eAAe,iBAAiB;AAEtC,QAAM,YAAN,MAAgB;AAAA,MACd,cAAc,IAAI;AAChB,WAAG,IAAI,MAAM,wCAAwC,CAAC;AAAA,MACxD;AAAA,MACA,KAAK,QAAQ,MAAM,SAAS,IAAI;AAC9B,YAAI,OAAO,YAAY;AACrB,eAAK;AACP,WAAG,IAAI,MAAM,+BAA+B,CAAC;AAAA,MAC/C;AAAA,IACF;AAEA,QAAM,eAAN,cAA2B,UAAU;AAAA,MACnC,YAAY,YAAY;AACtB,cAAM;AACN,aAAK,aAAa;AAAA,MACpB;AAAA,MAEA,UAAU,IAAI;AACZ,aAAK,KAAK,EAAE;AACZ,cAAM,OAAO,IAAI,OAAO;AACxB,aAAK,GAAG,WAAW,MAAM;AACvB,aAAG,MAAM,IAAI;AAAA,QACf,CAAC;AACD,aAAK,GAAG,SAAS,MAAM,EAClB,GAAG,OAAO,MAAM,EAChB,GAAG,SAAS,MAAM;AACvB,aAAK,QAAQ,KAAK,UAAU;AAE5B,iBAAS,SAAS;AAChB,cAAI;AACF,iBAAK,QAAQ;AAAA,UACf,QAAQ;AAAA,UAAC;AAET,aAAG,IAAI,MAAM,4BAA4B,CAAC;AAAA,QAC5C;AAAA,MACF;AAAA,MAEA,cAAc,IAAI;AAChB,aAAK,KAAK,EAAE;AACZ,aAAK,UAAU,CAAC,KAAK,WAAW;AAC9B,mBAAS,OAAOC,MAAK;AACnB,gBAAI,QAAQ;AACV,kBAAI;AACF,uBAAO,QAAQ;AAAA,cACjB,QAAQ;AAAA,cAAC;AAAA,YACX;AACA,gBAAI,CAACA;AACH,cAAAA,OAAM,IAAI,MAAM,0CAA0C;AAC5D,eAAGA,IAAG;AAAA,UACR;AAEA,cAAI;AACF,mBAAO,OAAO,GAAG;AAEnB,gBAAM,WAAW,IAAI,cAAc,IAAI;AACvC,mBAAS,GAAG,SAAS,MAAM;AAC3B,mBAAS,KAAK,MAAM,EAAE,KAAK,QAAQ;AAEnC,iBAAO,GAAG,SAAS,MAAM,EAClB,GAAG,OAAO,MAAM,EAChB,GAAG,SAAS,MAAM;AAEzB,mBAAS,cAAc,CAACA,MAAK,SAAS;AACpC,gBAAIA;AACF,qBAAO,OAAOA,IAAG;AACnB,gBAAI;AACF,qBAAO,QAAQ;AAAA,YACjB,QAAQ;AAAA,YAAC;AACT,eAAG,MAAM,IAAI;AAAA,UACf,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,MAEA,KAAK,QAAQ,MAAM,SAAS,IAAI;AAC9B,YAAI,OAAO,YAAY,YAAY;AACjC,eAAK;AACL,oBAAU;AAAA,QACZ,WAAW,OAAO,YAAY,YAAY,YAAY,MAAM;AAC1D,oBAAU;AAAA,QACZ;AAEA,aAAK,KAAK,EAAE;AACZ,aAAK,UAAU,CAAC,KAAK,WAAW;AAC9B,mBAAS,OAAOA,MAAK;AACnB,gBAAI,QAAQ;AACV,kBAAI;AACF,uBAAO,QAAQ;AAAA,cACjB,QAAQ;AAAA,cAAC;AAAA,YACX;AACA,gBAAI,CAACA;AACH,cAAAA,OAAM,IAAI,MAAM,gCAAgC;AAClD,eAAGA,IAAG;AAAA,UACR;AAEA,cAAI;AACF,mBAAO,OAAO,GAAG;AAEnB,gBAAM,WAAW,IAAI,cAAc,IAAI;AACvC,mBAAS,GAAG,SAAS,MAAM;AAC3B,mBAAS,KAAK,MAAM,EAAE,KAAK,QAAQ;AAEnC,iBAAO,GAAG,SAAS,MAAM,EAClB,GAAG,OAAO,MAAM,EAChB,GAAG,SAAS,MAAM;AAEzB,mBAAS,KAAK,QAAQ,MAAM,SAAS,CAACA,MAAK,QAAQ;AACjD,gBAAIA;AACF,qBAAO,OAAOA,IAAG;AAEnB,gBAAI;AACF,qBAAO,QAAQ;AAAA,YACjB,QAAQ;AAAA,YAAC;AAET,eAAG,MAAM,GAAG;AAAA,UACd,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAM,gBAAgB,MAAM;AAC1B,YAAM,kBAAkB;AACxB,YAAM,sBAAsB;AAC5B,YAAM,gBAAgB;AACtB,YAAM,mBAAmB;AACzB,YAAM,oBAAoB;AAC1B,YAAM,iBAAiB;AAEvB,YAAM,UAAU,QAAQ,WAAW,MAAM,iBAAiB;AAC1D,YAAM,QAAQ;AAAA,QACZ,CAAC,eAAe,GAAG,IAAI,MAAM,8BAA8B;AAAA,QAC3D,CAAC,mBAAmB,GAAG,IAAI,MAAM,wBAAwB;AAAA,QACzD,CAAC,aAAa,GAAG,IAAI,MAAM,qCAAqC;AAAA,QAChE,CAAC,gBAAgB,GAAG,IAAI,MAAM,yCAAyC;AAAA,QACvE,CAAC,iBAAiB,GAAG,IAAI,MAAM,0CAA0C;AAAA,QACzE,CAAC,cAAc,GACb,IAAI,MAAM,+CAA+C;AAAA,MAC7D;AAEA,eAAS,QAAQ,QAAQ;AACvB,eAAO,SAAS;AAChB,YAAI,OAAO,MAAM;AACf,iBAAO,KAAK,KAAK;AACjB,iBAAO,OAAO;AAAA,QAChB;AAAA,MACF;AAAA,MAEA,MAAM,sBAAsB,OAAO;AAAA,QACjC,cAAc;AACZ,gBAAM;AACN,eAAK,OAAO;AACZ,eAAK,SAAS;AAAA,QAChB;AAAA,QACA,MAAM,GAAG;AAAA,QAAC;AAAA,QACV,OAAO,MAAM,UAAU,IAAI;AACzB,cAAI,KAAK,WAAW,MAAM;AACxB,iBAAK,SAAS;AAAA,UAChB,OAAO;AACL,kBAAM,YAAY,OAAO,YAAY,KAAK,OAAO,SAAS,KAAK,MAAM;AACrE,iBAAK,OAAO,KAAK,WAAW,CAAC;AAC7B,iBAAK,KAAK,WAAW,KAAK,OAAO,MAAM;AACvC,iBAAK,SAAS;AAAA,UAChB;AAEA,cAAI,KAAK,OAAO,SAAS;AACvB,mBAAO,GAAG;AAEZ,gBAAM,MAAM,aAAa,KAAK,QAAQ,CAAC;AAEvC,cAAK,KAAK,OAAO,SAAS,IAAK;AAC7B,mBAAO,GAAG;AAEZ,iBAAO,KAAK,OAAO,MAAM,GAAG,IAAI,GAAG;AACnC,cAAI,KAAK,OAAO,SAAU,IAAI;AAC5B,mBAAO,GAAG,IAAI,MAAM,oCAAoC,CAAC;AAC3D,eAAK,SAAS;AAEd,cAAI;AACJ,gBAAM,OAAO,KAAK,OAAO,MAAM,SAAS,CAAE,KAAK,MAAO,CAAC;AACvD,eAAK,OAAO,GAAG,QAAQ,CAACC,UAAS;AAC/B,iBAAK,KAAKA,KAAI;AAAA,UAChB,CAAC;AACD,eAAK,GAAG,SAAS,CAAC,QAAQ;AACxB,oBAAQ;AACR,eAAG,KAAK;AAAA,UACV,CAAC;AACD,eAAK,GAAG,SAAS,CAAC,SAAS;AACzB,iBAAK,OAAO;AACZ,gBAAI,CAAC,OAAO;AACV,kBAAI,QAAQ,MAAM,IAAI;AACpB,uBAAO,GAAG,KAAK;AACjB,iBAAG;AAAA,YACL;AAAA,UACF,CAAC;AACD,eAAK,MAAM,IAAI,IAAI;AAAA,QACrB;AAAA,QACA,OAAO,IAAI;AACT,kBAAQ,IAAI;AACZ,aAAG;AAAA,QACL;AAAA,QACA,SAAS,KAAK,IAAI;AAChB,kBAAQ,IAAI;AACZ,aAAG;AAAA,QACL;AAAA,MACF;AAEA,aAAO,MAAM,qBAAqB,aAAa;AAAA,QAC7C,UAAU,IAAI;AACZ,aAAG,MAAM,IAAI,cAAc,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,GAAG;AAEH,QAAM,cAAe,uBAAM;AACzB,YAAM,iBAAiB;AAEvB,aAAO,MAAM,oBAAoB,aAAa;AAAA,QAC5C,UAAU,IAAI;AACZ,eAAK,KAAK,EAAE;AAiBZ,cAAI,aAAa,KAAK;AACtB,cAAI,eAAe;AACnB,mBAAS,YAAY,SAAS,cAAc,KAAK,MAAM;AACrD,gBAAI,KAAK;AACP,kBAAI;AACF,uBAAO,GAAG,IAAI,MAAM,iCAAiC,CAAC;AAIxD,uBAAS,WAAW,CAAC,MAAM,UAAU,GAAG,CAACD,MAAK,QAAQ,WAAW;AAC/D,oBAAIA,QAAO,OAAO,WAAW;AAC3B,yBAAO,GAAG,IAAI,MAAM,iCAAiC,CAAC;AAExD,+BAAe;AACf,6BAAa,OAAO,SAAS,EAAE,QAAQ,WAAW,EAAE;AACpD,yBAAS,YAAY,aAAa;AAAA,cACpC,CAAC;AACD;AAAA,YACF;AAEA,kBAAM,IAAI,eAAe,KAAK,KAAK,SAAS,OAAO,CAAC;AACpD,gBAAI,CAAC;AACH,qBAAO,GAAG,IAAI,MAAM,mCAAmC,CAAC;AAE1D,gBAAI;AACJ,gBAAI,KAAK;AACT,gBAAI,aAAa;AACjB,kBAAM,QAAQ,CAAC;AACf,gBAAI;AAKJ,gBAAI,WAAW,OAAO,MAAM,EAAE;AAG9B,kBAAM,OAAO,SAAS,EAAE,CAAC,GAAG,EAAE;AAC9B,kBAAM,SAAS,EAAE,CAAC,EAAE,QAAQ,MAAM,EAAE;AACpC,kBAAM,YAAY,OAAO,YAAY,EAAE;AACvC,qBAAS,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG,KAAK;AACvC,wBAAU,CAAC,IAAI,SAAS,OAAO,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE;AAGxD,qBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,4BAAc,WAAW,aAAa,WAAW,CAAC,GAAG,CAAC;AAExD,uBAAW;AAEX,qBAAS,aAAa;AACpB,mBAAK;AACL,sBAAQ;AACR,mBAAK,MAAM,SAAS;AAAA,YACtB;AAEA,qBAAS,QAAQC,OAAM;AACrB,oBAAMA,MAAK;AAEX,kBAAI,UAAU,UAAU;AAGtB,oBAAI,OAAO,IAAI;AACb,uBAAK;AACL,0BAAQ;AACR,uBAAK,MAAM,QAAQ;AAAA,gBACrB;AACA;AAAA,cACF;AAEA,kBAAI,UAAU,SAAS;AAGrB,oBAAI,CAAC;AACH,wBAAM,KAAKA,KAAI;AAEjB,oBAAI,OAAO,IAAI;AACb,uBAAK,eAAe,WAAW,UAAU;AACzC,uBAAK,eAAe,QAAQ,OAAO;AACnC,uBAAK,eAAe,SAAS,MAAM;AACnC,uBAAK,eAAe,OAAO,MAAM;AACjC,uBAAK,eAAe,SAAS,MAAM;AAEnC,sBAAI;AACF,2BAAO,GAAG,MAAM,IAAI;AAEtB,+BAAa;AACb,6BAAW,OAAO,OAAO,KAAK;AAC9B,gCAAc,UAAU,QAAQ,KAAK,CAAC;AACtC,uBAAK,GAAG,SAAS,MAAM;AAAA,kBAAC,CAAC;AACzB,uBAAK,QAAQ;AAEb,6BAAW;AAAA,gBACb;AAAA,cACF;AAAA,YACF;AAEA,qBAAS,SAAS;AAChB,iBAAG,IAAI,MAAM,iDAAiD,CAAC;AAAA,YACjE;AAEA,qBAAS,aAAa;AACpB,qBAAO,IAAI,OAAO;AAClB,mBAAK,GAAG,WAAW,UAAU;AAC7B,mBAAK,GAAG,QAAQ,OAAO;AACvB,mBAAK,GAAG,SAAS,MAAM;AACvB,mBAAK,GAAG,OAAO,MAAM;AACrB,mBAAK,GAAG,SAAS,MAAM;AACvB,mBAAK,QAAQ,IAAI;AAAA,YACnB;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,GAAG;AAIH,QAAM,qBAAqB;AAC3B,aAAS,YAAY,MAAM;AACzB,UAAI,QAAQ,aAAa,WAAW,CAAC,mBAAmB,KAAK,IAAI,GAAG;AAClE,eAAQ,SAAS,YACP,IAAI,aAAa,IACjB,IAAI,YAAY,IAAI;AAAA,MAChC;AACA,aAAO,IAAI,aAAa,IAAI;AAAA,IAC9B;AAEA,QAAM,iBAAiB,MAAM;AAE3B,YAAM,gCAAgC;AACtC,YAAM,0BAA0B;AAYhC,YAAM,oBAAoB;AAE1B,YAAM,8BAA8B;AACpC,YAAM,0BAA0B;AAOhC,YAAM,yBAA0B,KAAK;AACrC,YAAM,yBAA0B,KAAK;AAErC,YAAM,cAAc;AACpB,YAAM,cAAc;AAIpB,eAAS,iBAAiB,UAAU;AAClC,YAAI;AACJ,eAAO,SAAS,QAAQ,EAAE,QAAQ;AAChC,gBAAM,eAAe,SAAS,QAAQ,EAAE,CAAC,EAAE,QAAQ;AACnD,cAAI,iBAAiB;AACnB;AAEF,mBAAS,QAAQ,EAAE,MAAM;AACzB,gBAAM,SAAS,KAAK,YAAY;AAAA,QAClC;AACA,eAAO;AAAA,MACT;AAEA,YAAM,WAAW,OAAO,sBAAsB;AAC9C,YAAM,WAAW,OAAO,0BAA0B;AAClD,YAAM,UAAU,OAAO,yBAAyB;AAAA,MAChD,MAAM,oBAAoB;AAAA,QACxB,YAAY,MAAM,KAAK;AACrB,eAAK,QAAQ,IAAI;AACjB,eAAK,QAAQ,IAAI;AACjB,eAAK,OAAO,IAAI;AAAA,QAClB;AAAA,QACA,eAAe;AACb,iBAAQ,KAAK,QAAQ,MAAM;AAAA,QAC7B;AAAA,QACA,UAAU;AACR,iBAAO,KAAK,QAAQ;AAAA,QACtB;AAAA,QACA,aAAa;AACX,iBAAO,KAAK,OAAO;AAAA,QACrB;AAAA,MACF;AACA,eAAS,QAAQ,UAAU,KAAK,MAAM;AACpC,YAAI,QAAQ,IAAI;AAChB,eAAO,iBAAiB,QAAQ;AAAA,MAClC;AAEA,eAAS,QAAQ,UAAU;AACzB,iBAAS,UAAU,IAAI;AACvB,YAAI,SAAS,QAAQ,MAAM,aAAa;AACtC,gBAAM,OAAO,SAAS,QAAQ;AAC9B,cAAI,QAAQ,KAAK,QAAQ;AACvB,qBAAS,QAAQ,IAAI,CAAC;AACtB,uBAAW,OAAO;AAChB,kBAAI,GAAG,IAAI,MAAM,sBAAsB,CAAC;AAAA,UAC5C;AAAA,QACF;AAGA,YAAI;AACF,mBAAS,IAAI;AAAA,QACf,QAAQ;AAAA,QAAC;AACT,qBAAa,MAAM;AACjB,cAAI,CAAC,SAAS,SAAS;AACrB,qBAAS,KAAK,KAAK;AACrB,cAAI,CAAC,SAAS,UAAU;AACtB,qBAAS,KAAK,OAAO;AAAA,QACzB,CAAC;AAAA,MACH;AAEA,eAAS,UAAU;AACjB,aAAK,UAAU,IAAI;AAAA,MACrB;AAEA,eAAS,QAAQ;AACf,aAAK,SAAS,IAAI;AAAA,MACpB;AAEA,YAAM,WAAW,OAAO,UAAU;AAClC,YAAM,WAAW,OAAO,qBAAqB;AAC7C,YAAM,aAAa,OAAO,uBAAuB;AACjD,YAAM,aAAa,OAAO,uCAAuC;AACjE,YAAM,aAAa,OAAO,uBAAuB;AACjD,YAAM,YAAY,OAAO,sBAAsB;AAG/C,aAAO,MAAM,sBAAsB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAkBxC,YAAY,UAAU;AACpB,gBAAM,EAAE,aAAa,MAAM,WAAW,MAAM,CAAC;AAC7C,eAAK,QAAQ,IAAK,WAAW,cAAc;AAC3C,eAAK,QAAQ,IAAI,CAAC;AAClB,eAAK,UAAU,IAAI;AACnB,eAAK,UAAU,IAAI;AACnB,eAAK,KAAK,OAAO,KAAK;AACtB,eAAK,KAAK,SAAS,OAAO;AAAA,QAC5B;AAAA,QAEA,MAAM,GAAG;AAAA,QAAC;AAAA,QAEV,OAAO,MAAM,UAAU,IAAI;AAOzB,cAAI,KAAK,UAAU,MAAM;AACvB,iBAAK,UAAU,IAAI;AAAA;AAEnB,iBAAK,UAAU,IAAI,OAAO,KAAK,UAAU,GAAG,IAAI;AAElD,cAAI,SAAS,KAAK,UAAU;AAC5B,cAAI,YAAY,OAAO;AAEvB,cAAI,IAAI;AACR,iBAAO,IAAI,WAAW;AAEpB,gBAAI,YAAY;AACd;AAEF,gBAAI,KAAK,UAAU,MAAM;AACvB,mBAAK,UAAU,IAAI,aAAa,QAAQ,CAAC;AAG3C,gBAAI,YAAa,IAAI,KAAK,UAAU;AAClC;AAEF,kBAAM,UAAU,OAAO,KAAK,CAAC;AAC7B,cAAE;AAEF,gBAAI,KAAK,QAAQ,MAAM,aAAa;AAClC,kBAAI,KAAK,QAAQ,EAAE,WAAW;AAC5B,uBAAO,GAAG,IAAI,MAAM,yCAAyC,CAAC;AAEhE,oBAAM,MAAM,KAAK,QAAQ,EAAE,MAAM;AAEjC,sBAAQ,SAAS;AAAA,gBACf,KAAK;AACH,sBAAI,GAAG,IAAI,MAAM,8BAA8B,CAAC;AAChD;AAAA,gBACF,KAAK,6BAA6B;AAChC,sBAAI,IAAI,SAAS;AACf,2BAAO,GAAG,IAAI,MAAM,yCAAyC,CAAC;AAWhE,+BAAa,KAAK,QAAQ,CAAC;AAE3B,wBAAM,UAAU,aAAa,aAAa;AAE1C,sBAAI,YAAY,QAAW;AACzB,iCAAa,MAAM;AACnB,2BAAO,GAAG,IAAI,MAAM,0BAA0B,CAAC;AAAA,kBACjD;AAEA,wBAAM,OAAO,CAAC;AACd,2BAAS,IAAI,GAAG,IAAI,SAAS,EAAE,GAAG;AAChC,wBAAI,SAAS,aAAa,WAAW;AACrC,wBAAI,WAAW,QAAW;AACxB,mCAAa,MAAM;AACnB,6BAAO,GAAG,IAAI,MAAM,0BAA0B,CAAC;AAAA,oBACjD;AAEA,0BAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,wBAAI,YAAY,QAAW;AACzB,mCAAa,MAAM;AACnB,6BAAO,GAAG,IAAI,MAAM,0BAA0B,CAAC;AAAA,oBACjD;AAEA,6BAAS,SAAS,MAAM;AAIxB,wBAAI,kBAAkB;AACpB;AAEF,2BAAO,UAAU,OAAO,WAAW;AAEnC,yBAAK,KAAK,MAAM;AAAA,kBAClB;AACA,sBAAI,aAAa,IAAI;AACrB,+BAAa,MAAM;AAEnB,sBAAI,GAAG,MAAM,IAAI;AACjB;AAAA,gBACF;AAAA,gBACA,KAAK,yBAAyB;AAC5B,sBAAI,IAAI,SAAS;AACf,2BAAO,GAAG,IAAI,MAAM,yCAAyC,CAAC;AAOhE,+BAAa,KAAK,QAAQ,CAAC;AAC3B,sBAAI,YAAY,aAAa,WAAW;AACxC,sBAAI,aAAa,IAAI;AACrB,+BAAa,MAAM;AAEnB,sBAAI,cAAc;AAChB,2BAAO,GAAG,IAAI,MAAM,0BAA0B,CAAC;AASjD,+BAAa,KAAK,WAAW,CAAC;AAC9B,+BAAa,WAAW,IAAI;AAC5B,8BAAY,aAAa,WAAW;AACpC,+BAAa,MAAM;AAEnB,sBAAI,cAAc;AAChB,2BAAO,GAAG,IAAI,MAAM,oCAAoC,CAAC;AAE3D,sBAAI,GAAG,MAAM,SAAS;AACtB;AAAA,gBACF;AAAA,gBACA;AACE,yBAAO;AAAA,oBACL,IAAI,MAAM,+CAA+C;AAAA,kBAC3D;AAAA,cACJ;AAAA,YACF,OAAO;AACL,sBAAQ,SAAS;AAAA,gBACf,KAAK,+BAA+B;AAClC,wBAAM,MAAM,IAAI,oBAAoB,OAAO;AAC3C,uBAAK,QAAQ,EAAE,KAAK,GAAG;AAIvB,uBAAK,KAAK,cAAc,GAAG;AAC3B;AAAA,gBACF;AAAA,gBACA,KAAK,yBAAyB;AAO5B,+BAAa,KAAK,QAAQ,CAAC;AAC3B,sBAAI,SAAS,aAAa,WAAW;AACrC,wBAAMA,QAAO,aAAa,WAAW;AACrC,wBAAM,WAAW,aAAa,aAAa;AAC3C,sBAAI,aAAa,IAAI;AACrB,+BAAa,MAAM;AACnB,sBAAI,aAAa,QAAW;AAC1B,0BAAMC,OAAM,IAAI,oBAAoB,OAAO;AAC3C,yBAAK,QAAQ,EAAE,KAAKA,IAAG;AACvB,2BAAO,KAAK,aAAaA,IAAG;AAAA,kBAC9B;AAEA,2BAAS,SAAS,MAAM;AACxB,sBAAI,kBAAkB,OAAO;AAC3B,0BAAMA,OAAM,IAAI,oBAAoB,OAAO;AAC3C,yBAAK,QAAQ,EAAE,KAAKA,IAAG;AACvB,2BAAO,KAAK,aAAaA,IAAG;AAAA,kBAC9B;AAEA,wBAAM,QAAQ;AAAA,oBACZ,MAAM;AAAA,kBACR;AACA,sBAAI;AACJ,sBAAI,OAAO,SAAS,WAAW;AAC7B,wBAAI,WAAW,wBAAwB;AACrC,4BAAM;AACN,4BAAM,OAAO;AAAA,oBACf,WAAW,WAAW,wBAAwB;AAC5C,4BAAM;AACN,4BAAM,OAAO;AAAA,oBACf;AAAA,kBACF;AACA,sBAAI,QAAQ;AACV,0BAAM,OAAO;AAEf,wBAAM,MAAM,IAAI,oBAAoB,SAAS,GAAG;AAChD,uBAAK,QAAQ,EAAE,KAAK,GAAG;AAEvB,uBAAK,KAAK,QAAQ,KAAK,QAAQD,OAAM,KAAK;AAC1C;AAAA,gBACF;AAAA,gBACA,SAAS;AACP,wBAAM,MAAM,IAAI,oBAAoB,OAAO;AAC3C,uBAAK,QAAQ,EAAE,KAAK,GAAG;AACvB,uBAAK,aAAa,GAAG;AAAA,gBACvB;AAAA,cACF;AAAA,YACF;AAGA,iBAAK,UAAU,IAAI;AACnB,gBAAI,MAAM,WAAW;AAEnB,mBAAK,UAAU,IAAI;AACnB;AAAA,YACF,OAAO;AACL,mBAAK,UAAU,IAAI,SAAS,OAAO,MAAM,CAAC;AAC1C,0BAAY,OAAO;AACnB,kBAAI;AAAA,YACN;AAAA,UACF;AAEA,aAAG;AAAA,QACL;AAAA,QAEA,SAAS,KAAK,IAAI;AAChB,kBAAQ,IAAI;AACZ,aAAG;AAAA,QACL;AAAA,QAEA,OAAO,IAAI;AACT,kBAAQ,IAAI;AACZ,aAAG;AAAA,QACL;AAAA;AAAA,QAGA,KAAK,QAAQ,MAAM,SAAS,IAAI;AAC9B,cAAI,KAAK,QAAQ,MAAM;AACrB,kBAAM,IAAI,MAAM,4CAA4C;AAE9D,cAAI,OAAO,YAAY,YAAY;AACjC,iBAAK;AACL,sBAAU;AAAA,UACZ,WAAW,OAAO,YAAY,YAAY,YAAY,MAAM;AAC1D,sBAAU;AAAA,UACZ;AAEA,cAAI,QAAQ;AAEZ,mBAAS,SAAS,MAAM;AACxB,cAAI,kBAAkB;AACpB,kBAAM,IAAI,MAAM,6BAA6B;AAE/C,cAAI,OAAO,SAAS,aAAa,SAAS;AACxC,oBAAQ,QAAQ,MAAM;AAAA,cACpB,KAAK;AACH,wBAAQ;AACR;AAAA,cACF,KAAK;AACH,wBAAQ;AACR;AAAA,YACJ;AAAA,UACF;AACA,mBAAS,OAAO,aAAa;AAQ7B,gBAAM,OAAO;AACb,gBAAM,SAAS,OAAO;AACtB,gBAAM,UAAU,KAAK;AACrB,cAAI,IAAI;AACR,gBAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,SAAS,IAAI,UAAU,CAAC;AAEnE,wBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AAEpC,cAAI,KAAK,CAAC,IAAI;AAEd,wBAAc,KAAK,QAAQ,EAAE,CAAC;AAC9B,iBAAO,KAAK,KAAK,KAAK,CAAC;AAEvB,wBAAc,KAAK,SAAS,KAAK,MAAM;AACvC,eAAK,KAAK,KAAK,KAAK,CAAC;AAErB,wBAAc,KAAK,OAAO,KAAK,OAAO;AAEtC,cAAI,OAAO,OAAO;AAChB,iBAAK;AAEP,eAAK,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;AAEhC,iBAAO,KAAK,KAAK,GAAG;AAAA,QACtB;AAAA,QACA,cAAc,IAAI;AAChB,cAAI,KAAK,QAAQ,MAAM;AACrB,kBAAM,IAAI,MAAM,4CAA4C;AAK9D,gBAAM,OAAO;AAEb,cAAI,IAAI;AACR,gBAAM,MAAM,OAAO,YAAY,IAAI,CAAC;AAEpC,wBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AAEpC,cAAI,KAAK,CAAC,IAAI;AAEd,cAAI,OAAO,OAAO;AAChB,iBAAK;AAEP,eAAK,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;AAEhC,iBAAO,KAAK,KAAK,GAAG;AAAA,QACtB;AAAA;AAAA,QAGA,aAAa,KAAK;AAChB,cAAI,KAAK,QAAQ,MAAM;AACrB,kBAAM,IAAI,MAAM,4CAA4C;AAE9D,cAAI,EAAE,eAAe;AACnB,kBAAM,IAAI,MAAM,wBAAwB;AAE1C,cAAI,IAAI,aAAa;AACnB,mBAAO;AAET,cAAI,IAAI;AACR,gBAAM,MAAM,OAAO,YAAY,IAAI,CAAC;AAEpC,wBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AAEpC,cAAI,KAAK,CAAC,IAAI;AAEd,iBAAO,QAAQ,MAAM,KAAK,GAAG;AAAA,QAC/B;AAAA,QACA,mBAAmB,KAAK,MAAM;AAC5B,cAAI,KAAK,QAAQ,MAAM;AACrB,kBAAM,IAAI,MAAM,4CAA4C;AAE9D,cAAI,EAAE,eAAe;AACnB,kBAAM,IAAI,MAAM,wBAAwB;AAE1C,cAAI,IAAI,aAAa;AACnB,mBAAO;AAWT,cAAI,IAAI,QAAQ,MAAM;AACpB,kBAAM,IAAI,MAAM,6BAA6B;AAE/C,cAAI,CAAC,MAAM,QAAQ,IAAI;AACrB,kBAAM,IAAI,MAAM,gCAAgC;AAElD,cAAI,eAAe;AAEnB,gBAAM,UAAU,CAAC;AACjB,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,kBAAM,QAAQ,KAAK,CAAC;AACpB,gBAAI,OAAO,UAAU,YAAY,UAAU;AACzC,oBAAM,IAAI,MAAM,sBAAsB,KAAK,EAAE;AAE/C,gBAAI;AACJ,gBAAI;AACJ,gBAAI,YAAY,KAAK,GAAG;AACtB,uBAAS;AAAA,YACX,WAAW,YAAY,MAAM,MAAM,GAAG;AACpC,uBAAS,MAAM;AAAA,YACjB,OAAO;AACL,kBAAI,OAAO,MAAM,WAAW,YAAY,MAAM,WAAW;AACvD;AACF,eAAC,EAAE,QAAQ,QAAQ,IAAI,MAAM;AAC7B,uBAAS,SAAS,MAAM;AACxB,kBAAI,kBAAkB;AACpB;AAAA,YACJ;AACA,sBAAU,OAAO,WAAW;AAC5B,qBAAS,OAAO,aAAa;AAE7B,4BAAgB,IAAI,OAAO;AAE3B,gBAAI,WAAW,OAAO,YAAY;AAChC,wBAAU,OAAO,KAAK,OAAO;AAAA,qBACtB,CAAC,OAAO,SAAS,OAAO;AAC/B,wBAAU;AAEZ,4BAAgB,IAAI,QAAQ;AAE5B,oBAAQ,KAAK,EAAE,QAAQ,QAAQ,CAAC;AAAA,UAClC;AAEA,cAAI,IAAI;AACR,gBAAM,MAAM,OAAO,YAAY,IAAI,IAAI,YAAY;AAEnD,wBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AAEpC,cAAI,KAAK,CAAC,IAAI;AAEd,wBAAc,KAAK,QAAQ,QAAQ,EAAE,CAAC;AACtC,eAAK;AACL,mBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,kBAAM,EAAE,QAAQ,QAAQ,IAAI,QAAQ,CAAC;AAErC,0BAAc,KAAK,OAAO,QAAQ,CAAC;AACnC,mBAAO,KAAK,KAAK,KAAK,CAAC;AAEvB,0BAAc,KAAK,QAAQ,QAAQ,KAAK,OAAO,MAAM;AACrD,iBAAK;AACL,gBAAI,QAAQ,QAAQ;AAClB,sBAAQ,KAAK,KAAK,CAAC;AACnB,mBAAK,QAAQ;AAAA,YACf;AAAA,UACF;AAEA,iBAAO,QAAQ,MAAM,KAAK,GAAG;AAAA,QAC/B;AAAA,QACA,UAAU,KAAK,WAAW;AACxB,cAAI,KAAK,QAAQ,MAAM;AACrB,kBAAM,IAAI,MAAM,4CAA4C;AAE9D,cAAI,EAAE,eAAe;AACnB,kBAAM,IAAI,MAAM,wBAAwB;AAE1C,cAAI,IAAI,aAAa;AACnB,mBAAO;AAOT,cAAI,IAAI,QAAQ,MAAM;AACpB,kBAAM,IAAI,MAAM,6BAA6B;AAE/C,cAAI,CAAC,OAAO,SAAS,SAAS;AAC5B,kBAAM,IAAI,MAAM,qCAAqC;AAEvD,cAAI,UAAU,WAAW;AACvB,kBAAM,IAAI,MAAM,sCAAsC;AAYxD,cAAI,IAAI;AACR,gBAAM,YAAY,IAAI,WAAW;AACjC,gBAAM,eAAe,OAAO,WAAW,SAAS;AAChD,gBAAM,MAAM,OAAO;AAAA,YACjB,IAAI,IAAI,IAAI,IAAI,eAAe,IAAI,UAAU;AAAA,UAC/C;AAEA,wBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AAEpC,cAAI,KAAK,CAAC,IAAI;AAEd,wBAAc,KAAK,IAAI,eAAe,IAAI,UAAU,QAAQ,EAAE,CAAC;AAC/D,wBAAc,KAAK,cAAc,KAAK,CAAC;AACvC,cAAI,UAAU,WAAW,KAAK,GAAG,YAAY;AAC7C,wBAAc,KAAK,UAAU,QAAQ,KAAK,YAAY;AACtD,oBAAU,KAAK,KAAK,KAAK,CAAC;AAE1B,iBAAO,QAAQ,MAAM,KAAK,GAAG;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,GAAG;AAEH,QAAM,YAAY,OAAO,OAAO;AAChC,QAAM,iBAAiB,OAAO,YAAY;AAC1C,QAAM,qBAAqB,OAAO,kBAAkB;AACpD,QAAM,gBAAgB,OAAO,sBAAsB;AACnD,QAAM,eAAN,MAAmB;AAAA,MACjB,YAAY,OAAO;AACjB,YAAI,OAAO,UAAU;AACnB,kBAAQ,YAAY,KAAK;AAAA,iBAClB,CAAC,QAAQ,KAAK;AACrB,gBAAM,IAAI,MAAM,wBAAwB;AAC1C,aAAK,SAAS,IAAI;AAClB,aAAK,cAAc,IAAI;AACvB,aAAK,kBAAkB,IAAI;AAC3B,aAAK,aAAa,IAAI;AAAA,MACxB;AAAA,MACA,KAAK,IAAI;AACP,YAAI,OAAO,OAAO;AAChB,eAAK;AAEP,YAAI,KAAK,cAAc,MAAM,MAAM;AACjC,cAAI,KAAK,aAAa,MAAM,MAAM;AAChC,iBAAK,aAAa,IAAI,CAAC,EAAE;AAEzB,kBAAM,QAAQ,IAAI,SAAS;AACzB,sBAAQ,SAAS,MAAM;AACrB,sBAAM,MAAM,KAAK,aAAa;AAC9B,qBAAK,aAAa,IAAI;AACtB,2BAAWE,OAAM;AACf,kBAAAA,IAAG,GAAG,IAAI;AAAA,cACd,CAAC;AAAA,YACH;AAEA,iBAAK,SAAS,EAAE,cAAc,KAAK,CAAC,KAAK,SAAS;AAChD,kBAAI;AACF,uBAAO,MAAM,GAAG;AAElB,kBAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,uBAAO,MAAM,IAAI;AAAA,kBACf;AAAA,gBACF,CAAC;AAAA,cACH;AAEA,oBAAM,UAAU,CAAC;AACjB,uBAAS,OAAO,MAAM;AACpB,sBAAM,SAAS,GAAG;AAClB,oBAAI,eAAe,OAAO;AAExB;AAAA,gBACF;AACA,wBAAQ,KAAK,GAAG;AAAA,cAClB;AAEA,mBAAK,cAAc,IAAI;AACvB,mBAAK,kBAAkB,IAAI;AAC3B,oBAAM;AAAA,YACR,CAAC,CAAC;AAAA,UACJ,OAAO;AACL,iBAAK,aAAa,EAAE,KAAK,EAAE;AAAA,UAC7B;AAAA,QACF,OAAO;AACL,kBAAQ,SAAS,EAAE;AAAA,QACrB;AAAA,MACF;AAAA,MACA,UAAU;AACR,YAAI,KAAK,cAAc,MAAM,QACtB,EAAE,KAAK,kBAAkB,KAAK,KAAK,cAAc,EAAE,QAAQ;AAChE,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,cAAc,EAAE,KAAK,kBAAkB,CAAC;AAAA,MACtD;AAAA,MACA,aAAa;AACX,YAAI,KAAK,cAAc,MAAM,QACtB,KAAK,kBAAkB,KAAK,KAAK,cAAc,EAAE,QAAQ;AAC9D,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,cAAc,EAAE,KAAK,kBAAkB,CAAC;AAAA,MACtD;AAAA,MACA,MAAM;AACJ,YAAI,KAAK,cAAc,MAAM,QACtB,KAAK,kBAAkB,KAAK,KAAK,cAAc,EAAE,QAAQ;AAC9D,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,kBAAkB;AAAA,MAChC;AAAA,MACA,QAAQ;AACN,aAAK,kBAAkB,IAAI;AAAA,MAC7B;AAAA,MAEA,QAAQ,MAAM;AACZ,aAAK,SAAS,EAAE,KAAK,GAAG,IAAI;AAAA,MAC9B;AAAA,IACF;AAEA,aAAS,QAAQ,KAAK;AACpB,aAAQ,eAAe;AAAA,IACzB;AAEA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;AClmCA;AAAA;AAAA;AAEA,QAAM,EAAE,WAAW,IAAI,UAAQ,QAAQ;AACvC,QAAM;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,IAAI,UAAQ,MAAM;AAClB,QAAM,aAAa,cAAc,EAAE,QAAQ;AAE3C,aAAS,kBAAkB;AACzB,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACvC;AAEA,aAAS,YAAY,SAAS,OAAO,MAAM;AACzC,YAAMC,QAAO,KAAK;AAIlB,YAAM,QAAQ,IAAI,MAAM,OAAO;AAC/B,YAAM,QAAQ;AACd,YAAM,OAAO;AACb,MAAAA,MAAK,OAAO;AAAA,IACd;AAEA,aAAS,OAAO,QAAQ;AAEtB,UAAI,CAAC,OAAO;AACV;AAEF,aAAO,QAAQ,MAAM;AACrB,aAAO,UAAU;AAAA,IACnB;AAEA,QAAM,OAAN,MAAW;AAAA,MACT,YAAY,MAAM;AAChB,cAAM,aAAa;AACnB,cAAM,QAAQ;AACd,cAAM,WAAW;AACjB,cAAM,WAAW;AACjB,cAAM,aAAa;AAEnB,aAAK,OAAO;AACZ,aAAK,cAAc,IAAI,YAAY,CAAC;AACpC,aAAK,aAAa;AAClB,aAAK,mBAAmB;AACxB,aAAK,aAAa,OAAO,YAAY,KAAK,UAAU;AACpD,aAAK,aAAa;AAElB,aAAK,UAAU,IAAI,WAAW,IAAI;AAClC,aAAK,QAAQ,SAAS;AACtB,aAAK,QAAQ,UAAU;AACvB,aAAK,QAAQ;AAAA,UAAK;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,KAAK;AAAA,UACL;AAAA,UACA;AAAA,QAAU;AAAA,MAC9B;AAAA,MAEA,UAAU,OAAO,WAAW;AAC1B,cAAM,SAAS,KAAK;AACpB,YAAI,CAAC;AACH,gBAAM,IAAI,MAAM,uBAAuB;AAEzC,YAAI,gBAAgB,MAAM;AAC1B,YAAI,iBAAiB,KAAK,aAAa,KAAK;AAC5C,YAAI,QAAQ;AACZ,YAAI;AACJ,YAAI;AAEJ,YAAI;AACJ,YAAI,QAAQ;AACZ,cAAM,QAAQ,KAAK;AACnB,YAAI,SAAS,KAAK;AAClB,YAAI,SAAS,KAAK;AAClB,cAAM,YAAY,KAAK;AAEvB,eAAO,MAAM;AACX,iBAAO;AAAA,YAAU;AAAA,YACA;AAAA;AAAA,YACA;AAAA;AAAA,YACA;AAAA;AAAA,YACA;AAAA;AAAA,YACA;AAAA;AAAA,YACA;AAAA,UAAc;AAC/B,cAAI,KAAK;AACP,kBAAM,KAAK;AAEb,0BAAgB,MAAM,CAAC;AACvB,yBAAe,MAAM,CAAC;AAEtB,gBAAM,UAAU,gBAAgB;AAChC,gBAAM,OAAO,iBAAiB;AAE9B,cAAI,OAAO,GAAG;AACZ,kBAAM,MAAO,WAAW,KAAK,SAAS,OAAO,SAC9B,SACA,OAAO,MAAM,QAAQ,SAAS,IAAI;AACjD,sBAAU;AACV,gBAAI,CAAC;AACH,wBAAU;AAAA,qBACH,QAAQ,SAAS;AACxB,wBAAU,CAAC,SAAS,GAAG;AAAA;AAEvB,sBAAQ,KAAK,GAAG;AAClB,qBAAS,IAAI;AAEb,gBAAI,QAAQ,KAAK,kBAAkB;AACjC,qBAAO,IAAI;AACX,oBAAM,IAAI;AAAA,gBACR,qCAAqC,KAAK,gBAAgB;AAAA,cAC5D;AAAA,YACF;AAAA,UACF,WAAW,SAAS,GAAG;AACrB,kBAAM,IAAI,MAAM,yBAAyB;AAAA,UAC3C;AAGA,cAAI,kBAAkB,KAAK,UAAU,WAAW;AAC9C,6BAAiB;AACjB,qBAAS;AACT,qBAAS,OAAO,YAAY,SAAS;AAAA,UACvC;AAEA,cAAI,kBAAkB,GAAG;AAKvB,qBAAS;AACT,4BAAgB;AAAA,UAClB,OAAO;AACL;AAAA,UACF;AAAA,QACF;AAEA,aAAK,aAAa;AAClB,aAAK,aAAa;AAElB,YAAI,UAAU;AACZ,oBAAU,OAAO,MAAM,CAAC;AAE1B,YAAI,WAAW;AACb,kBAAQ,WAAW;AACnB,iBAAO;AAAA,QACT;AAEA,YAAI,QAAQ,SAAS;AACnB,iBAAO;AAET,cAAM,SAAS,OAAO,YAAY,KAAK;AACvC,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AAC9C,gBAAM,MAAM,QAAQ,CAAC;AACrB,iBAAO,IAAI,KAAK,CAAC;AACjB,eAAK,IAAI;AAAA,QACX;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAM,mBAAN,MAAuB;AAAA,MACrB,YAAY,UAAU;AACpB,aAAK,aAAa;AAClB,aAAK,gBAAgB;AACrB,aAAK,YAAY;AACjB,aAAK,QAAQ,IAAI,KAAK,OAAO;AAAA,MAC/B;AAAA,MAEA,UAAU;AACR,YAAI,KAAK;AACP,iBAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MAEA,MAAM,aAAa,OAAO;AACxB,eAAO,OAAO,YAAY,WAAW;AAAA,MACvC;AAAA,MAEA,SAAS,SAAS,OAAO;AACvB,YAAI,KAAK,UAAU,aAAa,UAAa,OAAO;AAClD,gBAAM,SAAS,KAAK,MAAM,UAAU,SAAS,IAAI;AACjD,gBAAM,SAAS,KAAK,UAAU,QAAQ,YAAY,OAAO,QAAQ;AACjE,cAAI,OAAO,SAAS,QAAW;AAC7B,mBAAO,IAAI,QAAQ,CAAC;AAAA,UACtB,OAAO;AACL,qBAAS,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,QAAQ,EAAE,GAAG;AAC7C,oBAAM,QAAQ,OAAO,CAAC;AACtB,qBAAO,IAAI,OAAO,CAAC;AACnB,mBAAK,MAAM;AAAA,YACb;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAM,eAAN,MAAmB;AAAA,MACjB,YAAY,UAAU;AACpB,aAAK,aAAa;AAClB,aAAK,gBAAgB;AACrB,aAAK,YAAY;AAAA,MACnB;AAAA,MAEA,UAAU;AAAA,MAAC;AAAA,MAEX,MAAM,aAAa,OAAO;AACxB,YAAI,KAAK,UAAU,aAAa,UAAa;AAC3C,iBAAO,KAAK,UAAU,QAAQ,YAAY,WAAW;AACvD,eAAO,OAAO,YAAY,WAAW;AAAA,MACvC;AAAA,MAEA,SAAS,QAAQ,OAAO;AACtB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAM,mBAAN,MAAuB;AAAA,MACrB,cAAc;AACZ,aAAK,QAAQ,IAAI,KAAK,OAAO;AAAA,MAC/B;AAAA,MAEA,UAAU;AACR,YAAI,KAAK;AACP,iBAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MAEA,KAAK,MAAM;AACT,eAAO,KAAK,MAAM,UAAU,MAAM,KAAK;AAAA,MACzC;AAAA,IACF;AAEA,QAAM,eAAN,MAAmB;AAAA,MACjB,UAAU;AAAA,MAAC;AAAA,MAEX,KAAK,MAAM;AACT,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;AC9PA;AAAA;AAAA;AAEA,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,QAAM;AAAA,MACJ;AAAA,IACF,IAAI;AAEJ,QAAM,yBACJ,MAAM,KAAK,OAAO,QAAQ,aAAa,CAAC,EAClC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC;AAEpE,WAAO,UAAU;AAAA;AAAA,MAEf,CAAC,QAAQ,UAAU,GAAG,CAACC,OAAM,YAAY;AAOvC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,SAAS,aAAa,aAAa;AACzC,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,cAAM,OAAO,aAAa,WAAW;AACrC,qBAAa,MAAM;AAEnB,YAAI,SAAS,QAAW;AACtB,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK;AAAA,UAClB,iCAAiC,MAAM,MAAM,IAAI;AAAA,QACnD;AAEA,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,QAAQ,IAAI;AAAA,MACvC;AAAA,MACA,CAAC,QAAQ,MAAM,GAAG,CAACA,OAAM,YAAY;AAKnC,QAAAA,MAAK,UAAUA,MAAK,OAAO,0BAA0B;AAAA,MACvD;AAAA,MACA,CAAC,QAAQ,aAAa,GAAG,CAACA,OAAM,YAAY;AAK1C,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AACxC,qBAAa,MAAM;AAEnB,YAAI,UAAU,QAAW;AACvB,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UACAA,MAAK,OAAO,0CAA0C,KAAK,GAAG;AAAA,MACrE;AAAA,MACA,CAAC,QAAQ,KAAK,GAAG,CAACA,OAAM,YAAY;AAOlC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,UAAU,aAAa,SAAS;AACtC,cAAM,MAAM,aAAa,WAAW,IAAI;AACxC,cAAM,OAAO,aAAa,WAAW;AACrC,qBAAa,MAAM;AAEnB,YAAI,SAAS,QAAW;AACtB,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK,OAAO,yBAAyB;AAEpD,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,SAAS,GAAG;AAAA,MACvC;AAAA,MACA,CAAC,QAAQ,eAAe,GAAG,CAACA,OAAM,YAAY;AAK5C,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,qBAAa,MAAM;AAEnB,YAAI,SAAS,QAAW;AACtB,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK,OAAO,sCAAsC,IAAI,GAAG;AAExE,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,IAAI;AAAA,MAC/B;AAAA,MACA,CAAC,QAAQ,cAAc,GAAG,CAACA,OAAM,YAAY;AAM3C,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,qBAAa,MAAM;AAEnB,YAAI,SAAS,QAAW;AACtB,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK,OAAO,qCAAqC,IAAI,GAAG;AAEvE,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,IAAI;AAAA,MAC/B;AAAA,MACA,CAAC,QAAQ,QAAQ,GAAG,CAACA,OAAM,YAAY;AAQrC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,UAAU,aAAa,aAAa;AAC1C,YAAI;AACJ,YAAI,YAAY,QAAW;AACzB,iBAAO,CAAC;AACR,mBAAS,IAAI,GAAG,IAAI,SAAS,EAAE,GAAG;AAChC,kBAAM,OAAO,aAAa,WAAW,IAAI;AACzC,kBAAM,OAAO,aAAa,WAAW;AACrC,gBAAI,SAAS,QAAW;AACtB,sBAAQ,MAAM;AAAA,gBACZ,KAAK,mBAAmB;AACtB,wBAAM,OAAO,KAAK,YAAY,GAAG,KAAK,MAAM,EAAE,MAAM,GAAG;AACvD,uBAAK,KAAK,EAAE,MAAM,KAAK,CAAC;AACxB;AAAA,gBACF;AAAA,gBACA;AACE;AAAA,cACJ;AAAA,YACF;AAEA,mBAAO;AACP;AAAA,UACF;AAAA,QACF;AACA,qBAAa,MAAM;AAEnB,YAAI,SAAS;AACX,iBAAO,aAAaA,OAAM,oCAAoC;AAEhE,QAAAA,MAAK,UAAUA,MAAK,OAAO,4BAA4B;AAEvD,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,IAAI;AAAA,MAC/B;AAAA;AAAA,MAGA,CAAC,QAAQ,gBAAgB,GAAG,CAACA,OAAM,YAAY;AAQ7C,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,cAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,cAAM,SAAS,aAAa,WAAW,IAAI;AAC3C,YAAI;AACJ,YAAI;AACJ,gBAAQ,QAAQ;AAAA,UACd,KAAK;AACH,yBAAa;AACb;AAAA,UACF,KAAK,YAAY;AAMf,kBAAM,WAAW,aAAa,SAAS;AACvC,gBAAI,aAAa,QAAW;AAC1B,2BAAa,aAAa,WAAW,IAAI;AACzC,kBAAI,eAAe,UAAa,UAAU;AACxC,sBAAM,cAAc,aAAa,WAAW,IAAI;AAChD,oBAAI,gBAAgB;AAClB,+BAAa,EAAE,aAAa,YAAY,YAAY;AAAA;AAEpD,+BAAa;AAAA,cACjB;AAAA,YACF;AACA;AAAA,UACF;AAAA,UACA,KAAK,aAAa;AAOhB,kBAAM,SAAS,aAAa,SAAS;AACrC,gBAAI,WAAW,QAAW;AACxB,oBAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,kBAAI,cAAc;AAClB,oBAAM,MAAM,aAAa,WAAW;AAEpC,kBAAI;AACJ,sBAAQ,SAAS;AAAA,gBACf,KAAK;AACH,gCAAc;AACd,6BAAW;AACX;AAAA,gBACF,KAAK;AACH,gCAAc;AACd,6BAAW;AACX;AAAA,cACJ;AAEA,kBAAI,QAAQ;AACV,sBAAM,UAAU,aAAa,IAAI;AACjC,oBAAI,YAAY,aAAa,WAAW;AACxC,oBAAI,cAAc,QAAW;AAC3B,sBAAI,UAAU,SAAU,IAAI,QAAQ,SAAS,KACtC,UAAU,UAAU,GAAG,IAAI,QAAQ,MAAM,MAAM,SAAS;AAE7D,gCAAY,YAAY,WAAW,IAAI,QAAQ,SAAS,CAAC;AAAA,kBAC3D;AAEA,8BAAY,aAAa,WAAW,WAAW;AAC/C,sBAAI,WAAW;AACb,0BAAM,YAAYA,MAAK,KAAK;AAC5B,0BAAM,OAAO,OAAO,YAAY,IAAI,UAAU,SAAS,OAAO;AAC9D,kCAAc,MAAM,UAAU,QAAQ,CAAC;AACvC,yBAAK,IAAI,WAAW,CAAC;AACrB,yBAAK;AAAA,sBACH,IAAI,WAAW,QAAQ,QAAQ,QAAQ,YAAY,OAAO;AAAA,sBAC1D,IAAI,UAAU;AAAA,oBAChB;AACA,iCAAa;AAAA,sBACX,SAAS;AAAA,sBACT;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,OAAO;AACL,6BAAa,EAAE,SAAS,aAAa,KAAK,SAAS;AACnD,6BAAa;AAAA,cACf;AAAA,YACF;AACA;AAAA,UACF;AAAA,UACA,KAAK,aAAa;AAShB,kBAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,gBAAI,cAAc;AAClB,kBAAM,MAAM,aAAa,WAAW;AACpC,kBAAM,gBAAgB,aAAa,WAAW,IAAI;AAClD,kBAAM,gBAAgB,aAAa,WAAW,IAAI;AAElD,gBAAI;AACJ,oBAAQ,SAAS;AAAA,cACf,KAAK;AACH,8BAAc;AACd,2BAAW;AACX;AAAA,cACF,KAAK;AACH,8BAAc;AACd,2BAAW;AACX;AAAA,YACJ;AAEA,kBAAM,UAAU,aAAa,IAAI;AACjC,gBAAI,YAAY,aAAa,WAAW;AACxC,gBAAI,cAAc,QAAW;AAC3B,kBAAI,UAAU,SAAU,IAAI,QAAQ,SAAS,KACtC,UAAU,UAAU,GAAG,IAAI,QAAQ,MAAM,MAAM,SAAS;AAE7D,4BAAY,YAAY,WAAW,IAAI,QAAQ,SAAS,CAAC;AAAA,cAC3D;AAEA,0BAAY,aAAa,WAAW,WAAW;AAC/C,kBAAI,cAAc,QAAW;AAC3B,sBAAM,YAAYA,MAAK,KAAK;AAC5B,sBAAM,OAAO,OAAO,YAAY,IAAI,UAAU,SAAS,OAAO;AAC9D,8BAAc,MAAM,UAAU,QAAQ,CAAC;AACvC,qBAAK,IAAI,WAAW,CAAC;AACrB,qBAAK;AAAA,kBACH,IAAI,WAAW,QAAQ,QAAQ,QAAQ,YAAY,OAAO;AAAA,kBAC1D,IAAI,UAAU;AAAA,gBAChB;AACA,6BAAa;AAAA,kBACX,SAAS;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AACA;AAAA,UACF;AAAA,UACA,KAAK;AAMH,yBAAa,WAAW;AAExB,yBAAa,aAAa,SAAS;AACnC;AAAA,UACF;AACE,gBAAI,WAAW;AACb,2BAAa,aAAa,QAAQ;AAAA,QACxC;AACA,qBAAa,MAAM;AAEnB,YAAI,eAAe,QAAW;AAC5B,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,YAAI,eAAe;AACjB,uBAAa;AAEf,QAAAA,MAAK,YAAY,KAAK,MAAM;AAE5B,QAAAA,MAAK,UACAA,MAAK,OAAO,uCAAuC,UAAU,GAAG;AAErE,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,MAAM,SAAS,QAAQ,UAAU;AAAA,MAC5D;AAAA,MACA,CAAC,QAAQ,gBAAgB,GAAG,CAACA,OAAM,YAAY;AAO7C,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,cAAc,aAAa,SAAS;AAC1C,cAAM,iBAAiB,aAAa,SAAS;AAC7C,qBAAa,MAAM;AAEnB,YAAI,mBAAmB,QAAW;AAChC,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UACAA,MAAK,OAAO,uCAAuC,WAAW,GAAG;AAEtE,QAAAA,MAAK,YAAY,MAAM;AACvB,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,aAAa,cAAc;AAAA,MACtD;AAAA,MACA,CAAC,QAAQ,gBAAgB,GAAG,CAACA,OAAM,YAAY;AAK7C,QAAAA,MAAK,UAAUA,MAAK,OAAO,oCAAoC;AAE/D,QAAAA,MAAK,YAAY,MAAM;AACvB,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,KAAI;AAAA,MACzB;AAAA,MACA,CAAC,QAAQ,eAAe,GAAG,CAACA,OAAM,YAAY;AAO5C,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,MAAM,aAAa,WAAW,IAAI;AACxC,cAAM,OAAO,aAAa,WAAW;AACrC,qBAAa,MAAM;AAEnB,YAAI,SAAS,QAAW;AACtB,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK,OAAO,mCAAmC;AAE9D,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,GAAG;AAAA,MAC9B;AAAA;AAAA,MAGA,IAAI,CAACA,OAAM,YAAY;AACrB,YAAI,CAACA,MAAK,YAAY,QAAQ;AAC5B,UAAAA,MAAK,UACAA,MAAK,OAAO,gDAAgD;AACjE;AAAA,QACF;AAEA,gBAAQA,MAAK,YAAY,CAAC,GAAG;AAAA,UAC3B,KAAK,YAAY;AAOf,yBAAa,KAAK,SAAS,CAAC;AAC5B,kBAAM,SAAS,aAAa,WAAW,IAAI;AAC3C,kBAAM,OAAO,aAAa,WAAW;AACrC,yBAAa,MAAM;AAEnB,gBAAI,SAAS,QAAW;AACtB,qBAAO;AAAA,gBACLA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAEA,YAAAA,MAAK,UACAA,MAAK,OAAO,6CAA6C;AAE9D,kBAAM,UAAUA,MAAK,UAAU;AAC/B,uBAAW,QAAQA,OAAM,MAAM;AAC/B;AAAA,UACF;AAAA,UACA,KAAK,aAAa;AAOhB,yBAAa,KAAK,SAAS,CAAC;AAC5B,kBAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,kBAAM,MAAM,aAAa,WAAW;AACpC,yBAAa,MAAM;AAEnB,gBAAI,QAAQ,QAAW;AACrB,qBAAO;AAAA,gBACLA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAEA,YAAAA,MAAK,UAAUA,MAAK,OAAO,kCAAkC;AAE7D,YAAAA,MAAK,YAAY,MAAM;AACvB,kBAAM,UAAUA,MAAK,UAAU;AAC/B,uBAAW,QAAQA,OAAM,SAAS,GAAG;AACrC;AAAA,UACF;AAAA,UACA,KAAK,wBAAwB;AAc3B,yBAAa,KAAK,SAAS,CAAC;AAC5B,kBAAM,OAAO,aAAa,WAAW,IAAI;AACzC,kBAAM,eAAe,aAAa,WAAW,IAAI;AACjD,yBAAa,WAAW;AACxB,kBAAM,aAAa,aAAa,aAAa;AAC7C,gBAAI;AACJ,gBAAI,eAAe,QAAW;AAC5B,wBAAU,IAAI,MAAM,UAAU;AAC9B,kBAAI;AACJ,mBAAK,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AAC/B,sBAAM,SAAS,aAAa,WAAW,IAAI;AAC3C,sBAAM,OAAO,aAAa,SAAS;AACnC,oBAAI,SAAS;AACX;AACF,wBAAQ,CAAC,IAAI,EAAE,QAAQ,KAAK;AAAA,cAC9B;AACA,kBAAI,MAAM;AACR,0BAAU;AAAA,YACd;AACA,yBAAa,MAAM;AAEnB,gBAAI,YAAY,QAAW;AACzB,qBAAO;AAAA,gBACLA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAEA,YAAAA,MAAK,UAAUA,MAAK,OAAO,yCAAyC;AAEpE,kBAAM,UAAUA,MAAK,UAAU;AAC/B,uBAAW,QAAQA,OAAM,MAAM,cAAc,OAAO;AACpD;AAAA,UACF;AAAA,UACA;AACE,YAAAA,MAAK,UACAA,MAAK,OAAO,8CAA8C;AAAA,QACnE;AAAA,MACF;AAAA,MACA,IAAI,CAACA,OAAM,YAAY;AACrB,YAAI,CAACA,MAAK,YAAY,QAAQ;AAC5B,UAAAA,MAAK,UACAA,MAAK,OAAO,gDAAgD;AACjE;AAAA,QACF;AAQA,YAAIA,MAAK,YAAY,CAAC,MAAM,wBAAwB;AAClD,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AACA,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,eAAe,aAAa,aAAa;AAC/C,YAAI;AACJ,YAAI,iBAAiB,QAAW;AAC9B,sBAAY,IAAI,MAAM,YAAY;AAClC,cAAI;AACJ,eAAK,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACjC,kBAAM,WAAW,aAAa,WAAW,IAAI;AAC7C,gBAAI,aAAa;AACf;AACF,sBAAU,CAAC,IAAI;AAAA,UACjB;AACA,cAAI,MAAM;AACR,wBAAY;AAAA,QAChB;AACA,qBAAa,MAAM;AAEnB,YAAI,cAAc,QAAW;AAC3B,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK,OAAO,0CAA0C;AAErE,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,SAAS;AAAA,MACpC;AAAA;AAAA,MAGA,CAAC,QAAQ,cAAc,GAAG,CAACA,OAAM,YAAY;AAO3C,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,cAAM,YAAY,aAAa,SAAS;AACxC,YAAI;AACJ,YAAI,cAAc,QAAW;AAC3B,kBAAQ,MAAM;AAAA,YACZ,KAAK;AAAA,YACL,KAAK,wBAAwB;AAK3B,oBAAM,WAAW,aAAa,WAAW,IAAI;AAC7C,oBAAM,WAAW,aAAa,aAAa;AAC3C,kBAAI,aAAa;AACf,uBAAO,EAAE,UAAU,SAAS;AAC9B;AAAA,YACF;AAAA,YACA,KAAK;AAAA,YACL,KAAK,0CAA0C;AAI7C,oBAAM,aAAa,aAAa,WAAW,IAAI;AAC/C,kBAAI,eAAe;AACjB,uBAAO,EAAE,WAAW;AACtB;AAAA,YACF;AAAA,YACA,KAAK;AACH,qBAAO;AACP;AAAA,YACF,KAAK,2BAA2B;AAC9B,qBAAO,CAAC;AACR,qBAAO,aAAa,MAAM,IAAI,GAAG;AAC/B,sBAAM,SAAS,aAAa,WAAW;AACvC,oBAAI,WAAW,QAAW;AACxB,yBAAO;AACP;AAAA,gBACF;AACA,sBAAM,MAAM,SAAS,MAAM;AAC3B,oBAAI,EAAE,eAAe;AACnB,uBAAK,KAAK,GAAG;AAAA,cACjB;AACA;AAAA,YACF;AAAA,YACA;AACE,qBAAO,aAAa,QAAQ;AAAA,UAChC;AAAA,QACF;AACA,qBAAa,MAAM;AAEnB,YAAI,SAAS,QAAW;AACtB,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK,OAAO,4BAA4B,IAAI,GAAG;AAE9D,cAAM,UAAUA,MAAK,UAAU;AAC/B,YAAI;AACF,kBAAQA,OAAM,MAAM,WAAW,IAAI;AAAA;AAEnC,UAAAA,MAAK,eAAe;AAAA,MACxB;AAAA,MACA,CAAC,QAAQ,eAAe,GAAG,CAACA,OAAM,YAAY;AAK5C,cAAM,OAAQ,QAAQ,SAAS,IAAI,YAAY,SAAS,CAAC,IAAI;AAE7D,QAAAA,MAAK,UAAUA,MAAK,OAAO,0BAA0B;AAErD,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,IAAI;AAAA,MAC/B;AAAA,MACA,CAAC,QAAQ,eAAe,GAAG,CAACA,OAAM,YAAY;AAI5C,QAAAA,MAAK,UAAUA,MAAK,OAAO,mCAAmC;AAE9D,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,KAAI;AAAA,MACzB;AAAA;AAAA,MAGA,CAAC,QAAQ,YAAY,GAAG,CAACA,OAAM,YAAY;AASzC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,cAAM,SAAS,aAAa,aAAa;AACzC,cAAMC,UAAS,aAAa,aAAa;AACzC,cAAM,aAAa,aAAa,aAAa;AAC7C,YAAI;AAEJ,gBAAQ,MAAM;AAAA,UACZ,KAAK;AAAA,UACL,KAAK,gBAAgB;AAOnB,kBAAM,SAAS,aAAa,WAAW,IAAI;AAC3C,kBAAM,WAAW,aAAa,aAAa;AAC3C,kBAAM,QAAQ,aAAa,WAAW,IAAI;AAC1C,kBAAM,UAAU,aAAa,aAAa;AAC1C,gBAAI,YAAY,QAAW;AACzB,4BAAc;AAAA,gBACZ;AAAA,gBACA;AAAA,gBACA,QAAAA;AAAA,gBACA;AAAA,gBACA,MAAM,EAAE,QAAQ,UAAU,OAAO,QAAQ;AAAA,cAC3C;AAAA,YACF;AACA;AAAA,UACF;AAAA,UACA,KAAK;AAAA,UACL,KAAK,kCAAkC;AAQrC,kBAAM,aAAa,aAAa,WAAW,IAAI;AAC/C,gBAAI,eAAe,QAAW;AAC5B,4BAAc;AAAA,gBACZ;AAAA,gBACA;AAAA,gBACA,QAAAA;AAAA,gBACA;AAAA,gBACA,MAAM,EAAE,WAAW;AAAA,cACrB;AAAA,YACF;AACA;AAAA,UACF;AAAA,UACA,KAAK,OAAO;AAKV,kBAAM,QAAQ,aAAa,WAAW,IAAI;AAC1C,kBAAM,UAAU,aAAa,aAAa;AAC1C,gBAAI,YAAY,QAAW;AACzB,4BAAc;AAAA,gBACZ;AAAA,gBACA;AAAA,gBACA,QAAAA;AAAA,gBACA;AAAA,gBACA,MAAM,EAAE,OAAO,QAAQ;AAAA,cACzB;AAAA,YACF;AACA;AAAA,UACF;AAAA,UACA;AAIE,0BAAc;AAAA,cACZ;AAAA,cACA;AAAA,cACA,QAAAA;AAAA,cACA;AAAA,cACA,MAAM,CAAC;AAAA,YACT;AAAA,QACJ;AACA,qBAAa,MAAM;AAEnB,YAAI,gBAAgB,QAAW;AAC7B,iBAAO;AAAA,YACLD;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK,OAAO,4BAA4B,MAAM,KAAK,IAAI,GAAG;AAEzE,cAAM,UAAUA,MAAK,UAAU;AAC/B,YAAI,SAAS;AACX,kBAAQA,OAAM,WAAW;AAAA,QAC3B,OAAO;AACL,UAAAA,MAAK;AAAA,YACH,YAAY;AAAA,YACZ,qBAAqB;AAAA,YACrB;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,yBAAyB,GAAG,CAACA,OAAM,YAAY;AAYtD,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,YAAY,aAAa,aAAa;AAC5C,cAAM,SAAS,aAAa,aAAa;AACzC,cAAMC,UAAS,aAAa,aAAa;AACzC,cAAM,aAAa,aAAa,aAAa;AAC7C,cAAM,OAAQ,aAAa,MAAM,IAAI,aAAa,QAAQ,IAAI;AAC9D,qBAAa,MAAM;AAEnB,YAAI,eAAe,QAAW;AAC5B,iBAAO;AAAA,YACLD;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK;AAAA,UAClB,yCAAyC,SAAS,OAAO,MAAM;AAAA,QACjE;AAEA,cAAM,UAAUA,MAAK,UAAU;AAC/B,YAAI;AACF,kBAAQA,OAAM,EAAE,WAAW,QAAQ,QAAAC,SAAQ,YAAY,KAAK,CAAC;AAAA,MACjE;AAAA,MACA,CAAC,QAAQ,oBAAoB,GAAG,CAACD,OAAM,YAAY;AAQjD,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,YAAY,aAAa,aAAa;AAC5C,cAAM,SAAS,aAAa,aAAa;AACzC,cAAM,cAAc,aAAa,WAAW,IAAI;AAChD,cAAM,OAAO,aAAa,WAAW;AACrC,qBAAa,MAAM;AAEnB,YAAI,SAAS,QAAW;AACtB,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UACAA,MAAK,OAAO,oCAAoC,SAAS,GAAG;AAEjE,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,WAAW,QAAQ,WAAW;AAAA,MACzD;AAAA,MACA,CAAC,QAAQ,qBAAqB,GAAG,CAACA,OAAM,YAAY;AAMlD,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,YAAY,aAAa,aAAa;AAC5C,cAAM,aAAa,aAAa,aAAa;AAC7C,qBAAa,MAAM;AAEnB,YAAI,eAAe,QAAW;AAC5B,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK;AAAA,UAClB,qCAAqC,SAAS,KAAK,UAAU;AAAA,QAC/D;AAEA,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,WAAW,UAAU;AAAA,MAChD;AAAA,MACA,CAAC,QAAQ,YAAY,GAAG,CAACA,OAAM,YAAY;AAMzC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,YAAY,aAAa,aAAa;AAC5C,cAAM,OAAO,aAAa,WAAW;AACrC,qBAAa,MAAM;AAEnB,YAAI,SAAS,QAAW;AACtB,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UACAA,MAAK,OAAO,4BAA4B,SAAS,KAAK,KAAK,MAAM,GAAG;AAEzE,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,WAAW,IAAI;AAAA,MAC1C;AAAA,MACA,CAAC,QAAQ,qBAAqB,GAAG,CAACA,OAAM,YAAY;AAOlD,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,YAAY,aAAa,aAAa;AAC5C,cAAM,OAAO,aAAa,aAAa;AACvC,cAAM,OAAO,aAAa,WAAW;AACrC,qBAAa,MAAM;AAEnB,YAAI,SAAS,QAAW;AACtB,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK;AAAA,UAClB,qCAAqC,SAAS,KAAK,KAAK,MAAM;AAAA,QAChE;AAEA,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,WAAW,MAAM,IAAI;AAAA,MAChD;AAAA,MACA,CAAC,QAAQ,WAAW,GAAG,CAACA,OAAM,YAAY;AAKxC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,YAAY,aAAa,aAAa;AAC5C,qBAAa,MAAM;AAEnB,YAAI,cAAc,QAAW;AAC3B,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK,OAAO,2BAA2B,SAAS,GAAG;AAElE,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,SAAS;AAAA,MACpC;AAAA,MACA,CAAC,QAAQ,aAAa,GAAG,CAACA,OAAM,YAAY;AAK1C,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,YAAY,aAAa,aAAa;AAC5C,qBAAa,MAAM;AAEnB,YAAI,cAAc,QAAW;AAC3B,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK,OAAO,6BAA6B,SAAS,GAAG;AAEpE,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,SAAS;AAAA,MACpC;AAAA,MACA,CAAC,QAAQ,eAAe,GAAG,CAACA,OAAM,YAAY;AAQ5C,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,YAAY,aAAa,aAAa;AAC5C,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,cAAM,YAAY,aAAa,SAAS;AACxC,YAAI;AACJ,YAAI,cAAc,QAAW;AAC3B,kBAAQ,MAAM;AAAA,YACZ,KAAK;AAIH,qBAAO,aAAa,aAAa;AACjC,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI,KAAK,IAAI;AAAA,cAC5D;AACA;AAAA,YACF,KAAK,eAAe;AAOlB,kBAAI;AACJ,kBAAI;AACJ,kBAAIA,MAAK,eAAe,OAAO,UAAU;AAKvC,sBAAM,MAAM,aAAa,aAAa;AACtC,wBAAQ,KAAK;AAAA,kBACX,KAAK;AACH,6BAAS;AACT;AAAA,kBACF,KAAK;AACH,6BAAS;AACT;AAAA,kBACF,KAAK;AACH,6BAAS;AACT;AAAA,kBACF,KAAK;AACH,6BAAS;AACT;AAAA,kBACF,KAAK;AACH,6BAAS;AACT;AAAA,kBACF,KAAK;AACH,6BAAS;AACT;AAAA,kBACF,KAAK;AACH,6BAAS;AACT;AAAA,kBACF;AACE,wBAAI,QAAQ,QAAW;AAErB,+BAAS,YAAY,GAAG;AAAA,oBAC1B;AAAA,gBACJ;AACA,6BAAa;AAAA,cACf,OAAO;AACL,yBAAS,aAAa,WAAW,IAAI;AACrC,6BAAa,aAAa,SAAS;AACnC,oBAAI,eAAe;AACjB,2BAAS;AAAA,cACb;AACA,oBAAM,eAAe,aAAa,WAAW,IAAI;AACjD,kBAAI,aAAa,WAAW,MAAM;AAChC,uBAAO,EAAE,QAAQ,YAAY,aAAa;AAC5C,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI,KAAK,MAAM;AAAA,cAC9D;AACA;AAAA,YACF;AAAA,YACA,KAAK,WAAW;AASd,oBAAM,OAAO,aAAa,WAAW,IAAI;AACzC,oBAAM,OAAO,aAAa,aAAa;AACvC,oBAAM,OAAO,aAAa,aAAa;AACvC,oBAAM,QAAQ,aAAa,aAAa;AACxC,oBAAM,SAAS,aAAa,aAAa;AACzC,oBAAM,cAAc,aAAa,WAAW;AAC5C,kBAAI,gBAAgB,QAAW;AAC7B,6BAAa,KAAK,aAAa,CAAC;AAChC,oBAAI,QAAQ,CAAC;AACb,uBAAO,aAAa,MAAM,GAAG;AAC3B,wBAAM,SAAS,aAAa,SAAS;AACrC,sBAAI,WAAW,cAAc;AAC3B;AACF,wBAAM,OAAO,uBAAuB,MAAM;AAC1C,wBAAM,QAAQ,aAAa,aAAa;AACxC,sBAAI,WAAW,UACR,SAAS,UACT,UAAU,QAAW;AAC1B,4BAAQ;AACR;AAAA,kBACF;AACA,wBAAM,IAAI,IAAI;AAAA,gBAChB;AACA,oBAAI,UAAU;AACZ,yBAAO,EAAE,MAAM,MAAM,MAAM,OAAO,QAAQ,MAAM;AAAA,cACpD;AACA,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI;AAAA,cACnD;AACA;AAAA,YACF;AAAA,YACA,KAAK,iBAAiB;AAOpB,oBAAM,OAAO,aAAa,aAAa;AACvC,oBAAM,OAAO,aAAa,aAAa;AACvC,oBAAM,QAAQ,aAAa,aAAa;AACxC,oBAAM,SAAS,aAAa,aAAa;AACzC,kBAAI,WAAW;AACb,uBAAO,EAAE,MAAM,MAAM,OAAO,OAAO;AACrC,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI;AAAA,cACnD;AACA;AAAA,YACF;AAAA,YACA,KAAK,WAAW;AAOd,oBAAM,SAAS,aAAa,SAAS;AACrC,oBAAM,WAAW,aAAa,WAAW,IAAI;AAC7C,oBAAM,SAAS,aAAa,WAAW;AACvC,oBAAM,SAAS,aAAa,aAAa;AACzC,kBAAI,WAAW;AACb,uBAAO,EAAE,QAAQ,UAAU,QAAQ,OAAO;AAC5C,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI;AAAA,cACnD;AACA;AAAA,YACF;AAAA,YACA,KAAK,OAAO;AAKV,oBAAM,OAAO,aAAa,WAAW,IAAI;AACzC,oBAAM,QAAQ,aAAa,WAAW,IAAI;AAC1C,kBAAI,UAAU;AACZ,uBAAO,EAAE,MAAM,MAAM;AACvB,kBAAIA,MAAK,QAAQ;AACf,gBAAAA,MAAK;AAAA,kBACH,+BAA+B,SAAS,KAAK,IAAI,KAC1C,IAAI,IAAI,KAAK;AAAA,gBACtB;AAAA,cACF;AACA;AAAA,YACF;AAAA,YACA,KAAK;AACH,qBAAO;AACP,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI;AAAA,cACnD;AACA;AAAA,YACF,KAAK;AAIH,qBAAO,aAAa,WAAW,IAAI;AACnC,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI,KAAK,IAAI;AAAA,cAC5D;AACA;AAAA,YACF,KAAK;AAIH,qBAAO,aAAa,WAAW,IAAI;AACnC,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI,KAAK,IAAI;AAAA,cAC5D;AACA;AAAA,YACF,KAAK;AAIH,qBAAO,aAAa,WAAW,IAAI;AACnC,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI,KAAK,IAAI;AAAA,cAC5D;AACA;AAAA,YACF,KAAK;AAIH,qBAAO,aAAa,SAAS;AAC7B,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI,KAAK,IAAI;AAAA,cAC5D;AACA;AAAA,YACF,KAAK;AACH,qBAAO;AACP,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI;AAAA,cACnD;AACA;AAAA,YACF;AACE,qBAAQ,aAAa,MAAM,IAAI,aAAa,QAAQ,IAAI;AACxD,cAAAA,MAAK,UAAUA,MAAK;AAAA,gBAClB,+BAA+B,SAAS,KAAK,IAAI;AAAA,cACnD;AAAA,UACJ;AAAA,QACF;AACA,qBAAa,MAAM;AAEnB,YAAI,SAAS,QAAW;AACtB,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,WAAW,MAAM,WAAW,IAAI;AAAA,MAC3D;AAAA,MACA,CAAC,QAAQ,eAAe,GAAG,CAACA,OAAM,YAAY;AAK5C,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,YAAY,aAAa,aAAa;AAC5C,qBAAa,MAAM;AAEnB,YAAI,cAAc,QAAW;AAC3B,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK,OAAO,+BAA+B,SAAS,GAAG;AAEtE,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,SAAS;AAAA,MACpC;AAAA,MACA,CAAC,QAAQ,eAAe,GAAG,CAACA,OAAM,YAAY;AAK5C,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,YAAY,aAAa,aAAa;AAC5C,qBAAa,MAAM;AAEnB,YAAI,cAAc,QAAW;AAC3B,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,QAAAA,MAAK,UAAUA,MAAK,OAAO,+BAA+B,SAAS,GAAG;AAEtE,cAAM,UAAUA,MAAK,UAAU;AAC/B,mBAAW,QAAQA,OAAM,SAAS;AAAA,MACpC;AAAA,IACF;AAAA;AAAA;;;ACpwCA;AAAA;AAAA;AAEA,QAAM,mBAAmB,IAAI,MAAM,GAAG;AACtC;AAAA,MACE,cAAoB;AAAA,MACpB;AAAA,IACF,EAAE,QAAQ,CAAC,aAAa;AAEtB,eAAS,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACpD,eAAO,CAAC;AACR,YAAI,SAAS,IAAI,KAAK,QAAQ,KAAK,OAAO,iBAAiB;AACzD,2BAAiB,IAAI,IAAI;AAAA,MAC7B;AAAA,IACF,CAAC;AAED,WAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA;AAAA;AAEA,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,UAAQ,QAAQ;AAEpB,QAAM,EAAE,IAAI,IAAI;AAEhB,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM,EAAE,YAAY,IAAI;AACxB,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,QAAI;AAEJ,QAAM,eAAe;AACrB,QAAM,eAAe;AAErB,QAAM,eAAe,OAAO,MAAM,CAAC;AAGnC,aAAS,QAAQE,OAAM;AAkBrB,UAAI;AACJ,UAAIA,MAAK,eAAe,OAAO,WAAW;AACxC,cAAM,QAAQA,MAAK,OAAO,MAAM;AAChC,YAAI,MAAM,MAAM;AAChB,YAAI,QAAQ;AACZ,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AACnC,cAAI,IAAI,CAAC,EAAE,SAAS,gBAAgB,GAAG;AACrC,gBAAI,CAAC,OAAO;AACV,sBAAQ;AAER,oBAAM,IAAI,MAAM;AAAA,YAClB;AACA,gBAAI,OAAO,KAAK,CAAC;AAAA,UACnB;AAAA,QACF;AACA,YAAI,OAAO;AACT,cAAI,MAAM,IAAI,KAAKA,MAAK,OAAO,YAAY,IAAI;AAC/C,gBAAM,YAAY,OAAO,KAAK,IAAI,KAAK,GAAG,CAAC;AAC3C,iBAAQ,MAAM,OAAO,SAAS,UAAU;AAExC,gBAAM,MAAMA,MAAK,OAAO,MAAM;AAC9B,gBAAM,OAAO,IAAI;AAAA,YACf,IAAI;AAAA,YACJ,IAAI,aAAa,IAAI,MAAM,OAAO;AAAA,YAClC,IAAI,UAAU,IAAI,MAAM,OAAO;AAAA,UACjC;AAEA,oBAAU,OAAO,YAAY,GAAG;AAChC,wBAAc,SAAS,UAAU,QAAQ,EAAE;AAC3C,kBAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B,kBAAQ,IAAI,MAAM,KAAK,IAAI,UAAU,MAAM;AAAA,QAC7C;AAAA,MACF;AAEA,UAAI,YAAY,QAAW;AACzB,kBAAU,OAAO,YAAY,IAAI,KAAKA,MAAK,OAAO,YAAY,IAAI,CAAC;AACnE,QAAAA,MAAK,OAAO,UAAU,SAAS,EAAE;AAAA,MACnC;AAEA,MAAAA,MAAK,UAAUA,MAAK,OAAO,2BAA2B;AAEtD,cAAQ,CAAC,IAAI,QAAQ;AACrB,qBAAe,SAAS,GAAG,EAAE;AAG7B,iBAAW,SAAS,GAAG,QAAQ,SAAS,CAAC;AAEzC,MAAAA,MAAK,WAAW;AAIhB,MAAAA,MAAK,UAAU,MAAM,aAAa;AAGlC;AACE,cAAM,IAAIA,MAAK,UAAU,MAAM;AAC/B,cAAM,SAASA,MAAK,UAAU,MAAM,MAAM,QAAQ,QAAQ,IAAI;AAC9D,eAAO,IAAI,SAAS,CAAC;AACrB,QAAAA,MAAK,QAAQ,QAAQA,MAAK,UAAU,MAAM,SAAS,QAAQ,IAAI,CAAC;AAAA,MAClE;AAAA,IACF;AAEA,aAAS,cAAcA,OAAM,SAAS;AAiBpC,YAAM,OAAO;AAAA,QACX,KAAK;AAAA,QACL,eAAe;AAAA,QACf,IAAI;AAAA,UACF,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,UAAU;AAAA,UACV,MAAM;AAAA,QACR;AAAA,QACA,IAAI;AAAA,UACF,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,UAAU;AAAA,UACV,MAAM;AAAA,QACR;AAAA,MACF;AAEA,mBAAa,KAAK,SAAS,EAAE;AAE7B,WAAK,KAAK,MAAM,aAAa,SAAS,OAAO,WACrC,KAAK,gBAAgB,aAAa,SAAS,OAAO,WAClD,KAAK,GAAG,SAAS,aAAa,SAAS,OAAO,WAC9C,KAAK,GAAG,SAAS,aAAa,SAAS,OAAO,WAC9C,KAAK,GAAG,MAAM,aAAa,SAAS,OAAO,WAC3C,KAAK,GAAG,MAAM,aAAa,SAAS,OAAO,WAC3C,KAAK,GAAG,WAAW,aAAa,SAAS,OAAO,WAChD,KAAK,GAAG,WAAW,aAAa,SAAS,OAAO,WAChD,KAAK,GAAG,OAAO,aAAa,SAAS,OAAO,WAC5C,KAAK,GAAG,OAAO,aAAa,SAAS,OAAO,QAAW;AAC7D,qBAAa,MAAM;AACnB,eAAO;AAAA,UACLA;AAAA,UACA;AAAA,UACA;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,MACF;AAEA,YAAM,MAAM,aAAa,IAAI;AAC7B,YAAM,eAAgB,MAAM,QAAQ,UAAU,QAAQ,GAAG,MAAM;AAC/D,mBAAa,MAAM;AAEnB,YAAM,QAAQA,MAAK;AACnB,YAAM,SAAS;AAEf,UAAI,WAAW,MAAM,MAAM,IAAI;AAC/B,UAAIA,MAAK,eAAe,OAAO,WAAW;AACxC,YAAI,QAAQ;AACZ,iBAASC,KAAI,GAAGA,KAAI,SAAS,QAAQ,EAAEA,IAAG;AACxC,cAAI,SAASA,EAAC,EAAE,QAAQ,gBAAgB,MAAM,IAAI;AAChD,gBAAI,CAAC,OAAO;AACV,sBAAQ;AAER,yBAAW,SAAS,MAAM;AAAA,YAC5B;AACA,qBAAS,OAAOA,MAAK,CAAC;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAEA,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,YAAM,QAAQD,MAAK;AAEnB,eAAS,MAAM,gCAAgC;AAG/C,eAAS,MAAM,kCAAkC,QAAQ,EAAE;AAC3D,eAAS,MAAM,mCAAmC,OAAO,GAAG,EAAE;AAC9D,UAAI;AACJ,UAAIA,MAAK,SAAS;AAChB,qBAAa;AACb,qBAAa,OAAO;AACpB,+BAAwB,WAAW,QAAQ,YAAY,MAAM;AAAA,MAC/D,OAAO;AACL,qBAAa,OAAO;AACpB,qBAAa;AACb,+BAAwB,WAAW,QAAQ,YAAY,MAAM;AAAA,MAC/D;AACA,UAAIA,MAAK,gBAAgB,QAAW;AAClC,YAAIA,MAAK,SAAS;AAChB,UAAAA,MAAK,cACF,WAAW,QAAQ,8BAA8B,MAAM;AAAA,QAC5D,OAAO;AACL,UAAAA,MAAK,cACF,WAAW,QAAQ,8BAA8B,MAAM;AAAA,QAC5D;AAGA,YAAIA,MAAK,aAAa;AACpB,mBAAS,MAAM,oCAAoC;AACnD,cAAIA,MAAK,UAAU,YAAY,GAAG;AAChC,gBAAI;AACF,oBAAM,wDAAwD;AAChE,mBAAO;AAAA,cACLA;AAAA,cACA;AAAA,cACA;AAAA,cACA,kBAAkB;AAAA,YACpB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,WAAK,IAAI,GACJ,IAAI,WAAW,UAAU,WAAW,QAAQ,WAAW,CAAC,CAAC,MAAM,IAC/D,EAAE;AAAE;AACT,UAAI,MAAM,WAAW,QAAQ;AAE3B,iBAAS,MAAM,+CAA+C;AAC9D,eAAO;AAAA,UACLA;AAAA,UACA;AAAA,UACA;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,MACF;AACA,WAAK,MAAM,WAAW,CAAC;AACvB,eAAS,MAAM,6BAA6B,WAAW,CAAC,CAAC,EAAE;AAC3D,UAAI,iBAAiB,CAAC,OAAO,IAAI,UAAU,WAAW,CAAC,MAAM,OAAO,IAAI,CAAC,IAAI;AAE3E,QAAAA,MAAK,yBAAyB;AAAA,MAChC;AAIA,YAAM,kBAAkB,MAAM,MAAM,cAAc;AAClD,eAAS,MAAM,uCAAuC,eAAe,EAAE;AACvE,eAAS;AAAA,QACP,wCAAwC,OAAO,aAAa;AAAA,MAC9D;AACA,UAAIA,MAAK,SAAS;AAChB,qBAAa;AACb,qBAAa,OAAO;AAAA,MACtB,OAAO;AACL,qBAAa,OAAO;AACpB,qBAAa;AAAA,MACf;AAEA,WAAK,IAAI,GACJ,IAAI,WAAW,UAAU,WAAW,QAAQ,WAAW,CAAC,CAAC,MAAM,IAC/D,EAAE;AAAE;AACT,UAAI,MAAM,WAAW,QAAQ;AAE3B,iBAAS,MAAM,wCAAwC;AACvD,eAAO;AAAA,UACLA;AAAA,UACA;AAAA,UACA;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,MACF;AACA,WAAK,gBAAgB,WAAW,CAAC;AACjC,eAAS,MAAM,+BAA+B,WAAW,CAAC,CAAC,EAAE;AAI7D,YAAM,gBAAgB,MAAM,MAAM,GAAG,OAAO;AAC5C,eAAS,MAAM,mCAAmC,aAAa,EAAE;AACjE,eAAS,MAAM,oCAAoC,OAAO,GAAG,MAAM,EAAE;AACrE,UAAIA,MAAK,SAAS;AAChB,qBAAa;AACb,qBAAa,OAAO,GAAG;AAAA,MACzB,OAAO;AACL,qBAAa,OAAO,GAAG;AACvB,qBAAa;AAAA,MACf;AAEA,WAAK,IAAI,GACJ,IAAI,WAAW,UAAU,WAAW,QAAQ,WAAW,CAAC,CAAC,MAAM,IAC/D,EAAE;AAAE;AACT,UAAI,MAAM,WAAW,QAAQ;AAE3B,iBAAS,MAAM,oCAAoC;AACnD,eAAO;AAAA,UACLA;AAAA,UACA;AAAA,UACA;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,MACF;AACA,WAAK,GAAG,SAAS,WAAW,CAAC;AAC7B,eAAS,MAAM,2BAA2B,WAAW,CAAC,CAAC,EAAE;AAIzD,YAAM,gBAAgB,MAAM,MAAM,GAAG,OAAO;AAC5C,eAAS,MAAM,mCAAmC,aAAa,EAAE;AACjE,eAAS,MAAM,oCAAoC,OAAO,GAAG,MAAM,EAAE;AACrE,UAAIA,MAAK,SAAS;AAChB,qBAAa;AACb,qBAAa,OAAO,GAAG;AAAA,MACzB,OAAO;AACL,qBAAa,OAAO,GAAG;AACvB,qBAAa;AAAA,MACf;AAEA,WAAK,IAAI,GACJ,IAAI,WAAW,UAAU,WAAW,QAAQ,WAAW,CAAC,CAAC,MAAM,IAC/D,EAAE;AAAE;AACT,UAAI,MAAM,WAAW,QAAQ;AAE3B,iBAAS,MAAM,oCAAoC;AACnD,eAAO;AAAA,UACLA;AAAA,UACA;AAAA,UACA;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,MACF;AACA,WAAK,GAAG,SAAS,WAAW,CAAC;AAC7B,eAAS,MAAM,2BAA2B,WAAW,CAAC,CAAC,EAAE;AAIzD,YAAM,aAAa,MAAM,MAAM,GAAG,IAAI;AACtC,eAAS,MAAM,gCAAgC,UAAU,EAAE;AAC3D,eAAS,MAAM,iCAAiC,OAAO,GAAG,GAAG,EAAE;AAC/D,UAAI,YAAY,KAAK,GAAG,MAAM,EAAE,UAAU,GAAG;AAC3C,aAAK,GAAG,MAAM;AACd,iBAAS,MAAM,iCAAiC;AAAA,MAClD,OAAO;AACL,YAAIA,MAAK,SAAS;AAChB,uBAAa;AACb,uBAAa,OAAO,GAAG;AAAA,QACzB,OAAO;AACL,uBAAa,OAAO,GAAG;AACvB,uBAAa;AAAA,QACf;AAEA,aAAK,IAAI,GACJ,IAAI,WAAW,UAAU,WAAW,QAAQ,WAAW,CAAC,CAAC,MAAM,IAC/D,EAAE;AAAE;AACT,YAAI,MAAM,WAAW,QAAQ;AAE3B,mBAAS,MAAM,iCAAiC;AAChD,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,YACA;AAAA,YACA,kBAAkB;AAAA,UACpB;AAAA,QACF;AACA,aAAK,GAAG,MAAM,WAAW,CAAC;AAC1B,iBAAS,MAAM,wBAAwB,WAAW,CAAC,CAAC,EAAE;AAAA,MACxD;AAIA,YAAM,aAAa,MAAM,MAAM,GAAG,IAAI;AACtC,eAAS,MAAM,gCAAgC,UAAU,EAAE;AAC3D,eAAS,MAAM,iCAAiC,OAAO,GAAG,GAAG,EAAE;AAC/D,UAAI,YAAY,KAAK,GAAG,MAAM,EAAE,UAAU,GAAG;AAC3C,aAAK,GAAG,MAAM;AACd,iBAAS,MAAM,iCAAiC;AAAA,MAClD,OAAO;AACL,YAAIA,MAAK,SAAS;AAChB,uBAAa;AACb,uBAAa,OAAO,GAAG;AAAA,QACzB,OAAO;AACL,uBAAa,OAAO,GAAG;AACvB,uBAAa;AAAA,QACf;AAEA,aAAK,IAAI,GACJ,IAAI,WAAW,UAAU,WAAW,QAAQ,WAAW,CAAC,CAAC,MAAM,IAC/D,EAAE;AAAE;AACT,YAAI,MAAM,WAAW,QAAQ;AAE3B,mBAAS,MAAM,iCAAiC;AAChD,iBAAO;AAAA,YACLA;AAAA,YACA;AAAA,YACA;AAAA,YACA,kBAAkB;AAAA,UACpB;AAAA,QACF;AACA,aAAK,GAAG,MAAM,WAAW,CAAC;AAC1B,iBAAS,MAAM,wBAAwB,WAAW,CAAC,CAAC,EAAE;AAAA,MACxD;AAIA,YAAM,kBAAkB,MAAM,MAAM,GAAG,SAAS;AAChD,eAAS,MAAM,wCAAwC,eAAe,EAAE;AACxE,eAAS,MAAM,yCAAyC,OAAO,GAAG,QAAQ,EAAE;AAC5E,UAAIA,MAAK,SAAS;AAChB,qBAAa;AACb,qBAAa,OAAO,GAAG;AAAA,MACzB,OAAO;AACL,qBAAa,OAAO,GAAG;AACvB,qBAAa;AAAA,MACf;AAEA,WAAK,IAAI,GACJ,IAAI,WAAW,UAAU,WAAW,QAAQ,WAAW,CAAC,CAAC,MAAM,IAC/D,EAAE;AAAE;AACT,UAAI,MAAM,WAAW,QAAQ;AAE3B,iBAAS,MAAM,yCAAyC;AACxD,eAAO;AAAA,UACLA;AAAA,UACA;AAAA,UACA;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,MACF;AACA,WAAK,GAAG,WAAW,WAAW,CAAC;AAC/B,eAAS,MAAM,gCAAgC,WAAW,CAAC,CAAC,EAAE;AAI9D,YAAM,kBAAkB,MAAM,MAAM,GAAG,SAAS;AAChD,eAAS,MAAM,wCAAwC,eAAe,EAAE;AACxE,eAAS,MAAM,yCAAyC,OAAO,GAAG,QAAQ,EAAE;AAC5E,UAAIA,MAAK,SAAS;AAChB,qBAAa;AACb,qBAAa,OAAO,GAAG;AAAA,MACzB,OAAO;AACL,qBAAa,OAAO,GAAG;AACvB,qBAAa;AAAA,MACf;AAEA,WAAK,IAAI,GACJ,IAAI,WAAW,UAAU,WAAW,QAAQ,WAAW,CAAC,CAAC,MAAM,IAC/D,EAAE;AAAE;AACT,UAAI,MAAM,WAAW,QAAQ;AAE3B,iBAAS,MAAM,yCAAyC;AACxD,eAAO;AAAA,UACLA;AAAA,UACA;AAAA,UACA;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,MACF;AACA,WAAK,GAAG,WAAW,WAAW,CAAC;AAC/B,eAAS,MAAM,gCAAgC,WAAW,CAAC,CAAC,EAAE;AAE9D,WAAK,GAAG,OAAO;AACf,WAAK,GAAG,OAAO;AAGf,UAAIA,MAAK,MAAM;AACb,YAAI,CAACA,MAAK,UAAU;AAGlB,kBAAQA,KAAI;AAAA,QACd;AACA,QAAAA,MAAK,UAAU,aAAa,aAAa,KAAKA,OAAM,EAAE,aAAa,MAAM,CAAC;AAAA,MAC5E;AAEA,MAAAA,MAAK,OAAO,kBAAkB,MAAMA,OAAM,OAAO;AACjD,MAAAA,MAAK,KAAK,uBAAuB;AACjC,MAAAA,MAAK,KAAK,MAAM;AAAA,IAClB;AAEA,QAAM,oBAAqB,uBAAM;AAC/B,eAAS,eAAe,KAAK;AAC3B,YAAI,MAAM;AACV,YAAI,SAAS,IAAI;AACjB,eAAO,IAAI,GAAG,MAAM,GAAM;AACxB,YAAE;AACF,YAAE;AAAA,QACJ;AACA,YAAI;AACJ,YAAI,IAAI,GAAG,IAAI,KAAM;AACnB,mBAAS,OAAO,YAAY,IAAI,MAAM;AACtC,iBAAO,CAAC,IAAI;AACZ,cAAI,KAAK,QAAQ,GAAG,GAAG;AACvB,gBAAM;AAAA,QACR,WAAW,WAAW,IAAI,QAAQ;AAChC,mBAAS,OAAO,YAAY,MAAM;AAClC,cAAI,KAAK,QAAQ,GAAG,GAAG;AACvB,gBAAM;AAAA,QACR;AACA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,YAAY;AAAA,QAChB,YAAY,YAAY,UAAU,eAAe;AAC/C,eAAK,YAAY;AAEjB,eAAK,YAAa,SAAS,OAAO,SAAS,KAAK,YAAY;AAC5D,eAAK,aAAa;AAClB,eAAK,uBAAuB;AAC5B,eAAK,QAAQ;AACb,eAAK,UAAU;AACf,eAAK,MAAM;AACX,eAAK,eAAe;AACpB,eAAK,mBAAmB;AACxB,eAAK,YAAY;AACjB,eAAK,gBAAgB;AAGrB,eAAK,WAAW,SAAS;AACzB,eAAK,iBAAiB;AACtB,eAAK,YAAY,SAAS;AAC1B,eAAK,kBAAkB,SAAS;AAChC,eAAK,WAAW;AAChB,eAAK,UAAU;AACf,eAAK,OAAO;AAAA,QACd;AAAA,QACA,OAAO,QAAQ;AACb,cAAI,KAAK;AACP,mBAAO;AACT,eAAK,YAAY;AAEjB,gBAAM,WAAW,KAAK,UAAU;AAChC,gBAAM,aAAa,KAAK;AAExB,gBAAM,SAAS,KAAK,iBAAiB,KAAK,OAAO;AACjD,cAAI,SAAS,KAAK,cAAc,KAAK,OAAO;AAC5C,cAAI,kBAAkB,OAAO;AAC3B,mBAAO,UACL,oCAAoC,KAAK,IAAI,MAAM,OAAO,OAAO;AACnE,mBAAO,QAAQ;AACf,mBAAO;AAAA,cACL,KAAK;AAAA,cACL;AAAA,cACA,kBAAkB;AAAA,YACpB;AAAA,UACF;AAEA,gBAAM,OAAO,WAAW,KAAK,QAAQ;AAErC,qBAAW,MAAO,WAAW,KAAK,kBAAkB,KAAK,SAAU;AAEnE,qBAAW,MAAO,WAAW,KAAK,YAAY,KAAK,eAAgB;AAEnE,qBAAW,MAAO,WAAW,KAAK,iBAAiB,KAAK,QAAS;AAEjE,qBAAW,MAAO,WAAW,KAAK,WAAW,KAAK,cAAe;AAEjE,gBAAM,sBAAuB,WACE,KAAK,SAAS,aAAa,IAC3B,KAAK;AACpC,qBAAW,MAAM,mBAAmB;AAEpC,cAAI,KAAK,SAAS,WAAW;AAE3B,kBAAM,SAAS,KAAK,YAAY;AAChC,kBAAM,MAAM,OAAO,YAAY,CAAC;AAEhC,0BAAc,KAAK,KAAK,UAAU,CAAC;AACnC,iBAAK,OAAO,GAAG;AAEf,0BAAc,KAAK,KAAK,WAAW,CAAC;AACpC,iBAAK,OAAO,GAAG;AAEf,0BAAc,KAAK,KAAK,UAAU,CAAC;AACnC,iBAAK,OAAO,GAAG;AAEf,uBAAW,MAAM,OAAO,KAAK;AAE7B,uBAAW,MAAM,OAAO,SAAS;AAAA,UACnC;AAGA,qBAAW,MAAO,WAAW,SAAS,KAAK,aAAa,CAAE;AAE1D,gBAAM,kBAAmB,WAAW,KAAK,aAAa,IAAI;AAC1D,qBAAW,MAAM,eAAe;AAEhC,qBAAW,MAAM,MAAM;AAGvB,gBAAM,eAAe,KAAK,OAAO;AAEjC,cAAI,CAAC,UAAU;AACb,yBAAa,KAAK,KAAK,MAAM,CAAC;AAC9B,kBAAM,UAAU,aAAa,WAAW,IAAI;AAE5C,gBAAI,CAAC,SAAS;AACZ,qBAAO;AAAA,gBACL,KAAK;AAAA,gBACL;AAAA,gBACA;AAAA,gBACA,kBAAkB;AAAA,cACpB;AAAA,YACF;AAEA,gBAAI,YAAY,WAAW,eAAe;AACxC,qBAAO;AAAA,gBACL,KAAK;AAAA,gBACL,yBAAyB,OAAO,eACf,WAAW,aAAa;AAAA,gBACzC;AAAA,gBACA,kBAAkB;AAAA,cACpB;AAAA,YACF;AAGA,gBAAI,WAAW,aAAa,WAAW;AAEvC,yBAAa,MAAM;AAEnB,gBAAI,aAAa,QAAW;AAC1B,qBAAO;AAAA,gBACL,KAAK;AAAA,gBACL;AAAA,gBACA;AAAA,gBACA,kBAAkB;AAAA,cACpB;AAAA,YACF;AAEA,gBAAI,EAAE,WAAW,aAAa,UAAU,OAAO,IAAI;AACjD,qBAAO;AAAA,gBACL,KAAK;AAAA,gBACL;AAAA,gBACA;AAAA,gBACA,kBAAkB;AAAA,cACpB;AAAA,YACF;AAEA,gBAAI;AACJ;AACE,2BAAa,KAAK,KAAK,UAAU,CAAC;AAClC,oBAAM,OAAO,aAAa,WAAW,IAAI;AACzC,oBAAM,UAAU,KAAK,SAAS,MAAM,aAAa,IAAI,CAAC;AACtD,2BAAa,MAAM;AACnB,8BAAgB,YAAY,SAAS,IAAI;AACzC,kBAAI,yBAAyB,OAAO;AAClC,8BAAc,QAAQ;AACtB,uBAAO;AAAA,kBACL,KAAK;AAAA,kBACL;AAAA,kBACA,kBAAkB;AAAA,gBACpB;AAAA,cACF;AAAA,YACF;AAEA,gBAAI;AAEJ,oBAAQ,KAAK,WAAW,eAAe;AAAA,cACrC,KAAK;AAAgB,2BAAW;AAAU;AAAA,cAC1C,KAAK;AAAgB,2BAAW;AAAU;AAAA,YAC5C;AAEA,iBAAK,UAAU,UACV,KAAK,UAAU,OAAO,yBAAyB;AAEpD,kBAAM,WAAW,cAAc,OAAO,cAAc,UAAU,QAAQ;AACtE,gBAAI,aAAa,MAAM;AACrB,kBAAI,oBAAoB,OAAO;AAC7B,qBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,kBACtC,kCAAkC,SAAS,KAAK;AAAA,gBAClD;AAAA,cACF,OAAO;AACL,qBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,kBACtC;AAAA,gBACF;AAAA,cACF;AACA,qBAAO;AAAA,gBACL,KAAK;AAAA,gBACL;AAAA,gBACA;AAAA,gBACA,kBAAkB;AAAA,cACpB;AAAA,YACF;AACA,iBAAK,UAAU,UAAU,KAAK,UAAU,OAAO,oBAAoB;AAAA,UACrE,OAAO;AAGL,gBAAI;AAEJ,oBAAQ,KAAK,WAAW,eAAe;AAAA,cACrC,KAAK;AAAgB,2BAAW;AAAU;AAAA,cAC1C,KAAK;AAAgB,2BAAW;AAAU;AAAA,YAC5C;AAEA,iBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,cACtC;AAAA,YACF;AAEA,gBAAI,YAAY,KAAK,SAAS,KAAK,cAAc,QAAQ;AACzD,gBAAI,qBAAqB,OAAO;AAC9B,qBAAO;AAAA,gBACL,KAAK;AAAA,gBACL,qDACO,KAAK,SAAS,IAAI,cAAc,UAAU,OAAO;AAAA,gBACxD;AAAA,gBACA,kBAAkB;AAAA,cACpB;AAAA,YACF;AAEA,wBAAY,iBAAiB,WAAW,KAAK,SAAS,IAAI;AAC1D,gBAAI,cAAc,OAAO;AACvB,qBAAO;AAAA,gBACL,KAAK;AAAA,gBACL,qDACO,KAAK,SAAS,IAAI;AAAA,gBACzB;AAAA,gBACA,kBAAkB;AAAA,cACpB;AAAA,YACF;AAWA,kBAAM,UAAU,KAAK,WAAW;AAChC,kBAAM,aAAa,OAAO,WAAW,OAAO;AAC5C,kBAAM,SAAS,IAAI,aAAa,IAAI,UAAU;AAC9C,gBAAI,IAAI,KAAK,UAAU,UAAU,MAAM;AACvC,kBAAM,SAAS,KAAK,UAAU,UAAU,MAAM;AAAA,cAC5C,IACI,IAAI,oBAAoB,SACxB,IAAI,gBAAgB,SACpB,IAAI;AAAA,cACR;AAAA,YACF;AAEA,mBAAO,CAAC,IAAI,QAAQ;AAEpB,0BAAc,QAAQ,oBAAoB,QAAQ,EAAE,CAAC;AACrD,mBAAO,IAAI,qBAAqB,KAAK,CAAC;AAEtC;AAAA,cAAc;AAAA,cACA,gBAAgB;AAAA,cAChB,KAAK,oBAAoB;AAAA,YAAM;AAC7C,mBAAO,IAAI,iBAAiB,KAAK,CAAC;AAElC,0BAAc,QAAQ,QAAQ,KAAK,gBAAgB,MAAM;AAEzD,0BAAc,QAAQ,YAAY,KAAK,CAAC;AACxC,mBAAO,UAAU,SAAS,KAAK,GAAG,UAAU;AAE5C,0BAAc,QAAQ,UAAU,QAAQ,KAAK,UAAU;AACvD,mBAAO,IAAI,WAAW,KAAK,CAAC;AAE5B,gBAAI,KAAK,UAAU,QAAQ;AACzB,kBAAI;AACJ,sBAAQ,KAAK,MAAM;AAAA,gBACjB,KAAK;AACH,yBAAO;AACP;AAAA,gBACF,KAAK;AACH,yBAAO;AACP;AAAA,gBACF;AACE,yBAAO;AAAA,cACX;AACA,mBAAK,UAAU,OAAO,qBAAqB,IAAI,EAAE;AAAA,YACnD;AACA,iBAAK,UAAU,QAAQ;AAAA,cACrB,KAAK,UAAU,UAAU,MAAM,SAAS,QAAQ,IAAI;AAAA,YACtD;AAAA,UACF;AAEA,cAAI,YAAY,CAAC;AACf,2BAAe,IAAI;AAErB,cAAI;AACJ,cAAI;AACJ,gBAAM,oBAAoB,CAAC,YAAY;AACrC,gBAAI,gBAAgB;AAClB,6BAAe,IAAI;AACnB,6BAAe,SAAS,QAAQ,KAAK,UAAU,QAAQ;AACvD,mBAAK,UAAU,QAAQ,KAAK;AAC5B,mBAAK,UAAU,UAAU,aAAa,cAAc;AACpD,mBAAK,UAAU,UAAU,QAAQ;AACjC,+BAAiB;AACjB,wBAAU;AACV,mBAAK,UAAU,qBAAqB,UAAU;AAE9C,qBAAO;AAAA,YACT;AAEA,gBAAI,CAAC,KAAK;AACR,mBAAK,YAAY;AAEnB;AACE,oBAAM,YAAY,OAAO,YAAY,IAAI,OAAO,MAAM;AACtD,4BAAc,WAAW,OAAO,QAAQ,CAAC;AACzC,wBAAU,IAAI,QAAQ,CAAC;AACvB,uBAAS;AAAA,YACX;AAIA,kBAAM,eAAe,YAAY,WAAW,GAAG,MAAM;AACrD,kBAAM,eAAe,YAAY,WAAW,GAAG,MAAM;AAErD,kBAAM,OAAO;AAAA,cAAe,aAAa;AAAA,cACb,KAAK;AAAA,cACL;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL;AAAA,YAAG;AAC/B,kBAAM,OAAO;AAAA,cAAe,aAAa;AAAA,cACb,KAAK;AAAA,cACL;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL;AAAA,YAAG;AAC/B,kBAAM,QAAQ;AAAA,cAAe,aAAa;AAAA,cACb,KAAK;AAAA,cACL;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL;AAAA,YAAG;AAChC,kBAAM,QAAQ;AAAA,cAAe,aAAa;AAAA,cACb,KAAK;AAAA,cACL;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL;AAAA,YAAG;AAChC,gBAAI;AACJ,gBAAI;AACJ,gBAAI,CAAC,aAAa,SAAS;AACzB,0BAAY,SAAS,WAAW,GAAG,GAAG;AACtC,yBAAW;AAAA,gBAAe,UAAU;AAAA,gBACV,KAAK;AAAA,gBACL;AAAA,gBACA;AAAA,gBACA,KAAK;AAAA,gBACL;AAAA,cAAG;AAAA,YAC/B;AACA,gBAAI;AACJ,gBAAI;AACJ,gBAAI,CAAC,aAAa,SAAS;AACzB,0BAAY,SAAS,WAAW,GAAG,GAAG;AACtC,yBAAW;AAAA,gBAAe,UAAU;AAAA,gBACV,KAAK;AAAA,gBACL;AAAA,gBACA;AAAA,gBACA,KAAK;AAAA,gBACL;AAAA,cAAG;AAAA,YAC/B;AAEA,kBAAM,SAAS;AAAA,cACb,SAAS;AAAA,gBACP,WAAW,KAAK,UAAU;AAAA,gBAC1B,OAAO,KAAK,UAAU,UAAU;AAAA,gBAChC,cAAe,CAAC,WAAW,eAAe;AAAA,gBAC1C,YAAa,CAAC,WAAW,OAAO;AAAA,gBAChC,aAAc,CAAC,WAAW,QAAQ;AAAA,gBAClC,SAAU,CAAC,WAAW,YAAY;AAAA,gBAClC,QAAS,CAAC,WAAW,WAAW;AAAA,cAClC;AAAA,cACA,UAAU;AAAA,gBACR,SAAS,KAAK,UAAU;AAAA,gBACxB,OAAO,KAAK,UAAU,QAAQ;AAAA,gBAC9B,YAAa,WAAW,eAAe;AAAA,gBACvC,UAAW,WAAW,OAAO;AAAA,gBAC7B,WAAY,WAAW,QAAQ;AAAA,gBAC/B,SAAU,WAAW,YAAY;AAAA,gBACjC,QAAS,WAAW,WAAW;AAAA,cACjC;AAAA,YACF;AACA,iBAAK,UAAU,UAAU,KAAK;AAC9B,6BAAiB;AACjB,iBAAK,UAAU,YAAY,eAAe,MAAM;AAEhD,kBAAM,KAAK;AAAA,cACT,MAAM;AAAA,cACN,OAAO;AAAA,YACT;AACA,oBAAQ,WAAW,GAAG,UAAU;AAAA,cAC9B,KAAK;AACH,oBAAI;AACF,qBAAG,OAAO,IAAI,iBAAiB;AAAA;AAE/B,qBAAG,QAAQ,IAAI,iBAAiB,KAAK,SAAS;AAChD;AAAA,cACF,KAAK;AAGH,oBAAI,KAAK,UAAU,gBAAgB;AAIjC,sBAAI;AACF,uBAAG,OAAO,IAAI,iBAAiB;AAAA;AAE/B,uBAAG,QAAQ,IAAI,iBAAiB,KAAK,SAAS;AAChD;AAAA,gBACF;AAAA,cAEF;AAGE,oBAAI;AACF,qBAAG,OAAO,IAAI,aAAa;AAAA;AAE3B,qBAAG,QAAQ,IAAI,aAAa,KAAK,SAAS;AAAA,YAChD;AACA,oBAAQ,WAAW,GAAG,UAAU;AAAA,cAC9B,KAAK;AACH,oBAAI;AACF,qBAAG,QAAQ,IAAI,iBAAiB,KAAK,SAAS;AAAA;AAE9C,qBAAG,OAAO,IAAI,iBAAiB;AACjC;AAAA,cACF,KAAK;AAGH,oBAAI,KAAK,UAAU,gBAAgB;AAIjC,sBAAI;AACF,uBAAG,QAAQ,IAAI,iBAAiB,KAAK,SAAS;AAAA;AAE9C,uBAAG,OAAO,IAAI,iBAAiB;AACjC;AAAA,gBACF;AAAA,cAEF;AAGE,oBAAI;AACF,qBAAG,QAAQ,IAAI,aAAa,KAAK,SAAS;AAAA;AAE1C,qBAAG,OAAO,IAAI,aAAa;AAAA,YACjC;AACA,iBAAK,UAAU,UAAU,KAAK,QAAQ;AACtC,iBAAK,UAAU,UAAU,MAAM,QAAQ;AACvC,iBAAK,UAAU,UAAU,OAAO,GAAG;AACnC,sBAAU,GAAG;AAGb,iBAAK,UAAU;AACf,iBAAK,MAAM;AACX,iBAAK,WAAW,KAAK,UAAU,WAAW;AAC1C,iBAAK,iBAAiB;AACtB,iBAAK,YAAY;AACjB,iBAAK,kBAAkB;AACvB,iBAAK,WAAW;AAChB,iBAAK,UAAU;AACf,iBAAK,OAAO;AAEZ,gBAAI,CAAC;AACH,qBAAO,kBAAkB;AAC3B,mBAAO;AAAA,UACT;AAEA,cAAI,YAAY;AACd,iBAAK,SAAS;AAEhB,cAAI,CAAC;AACH,mBAAO,kBAAkB,MAAM;AAAA,QACnC;AAAA,QAEA,QAAQ;AACN,cAAI,CAAC,KAAK,UAAU,SAAS;AAC3B,gBAAI,KAAK,UAAU,QAAQ;AACzB,kBAAI;AACJ,sBAAQ,KAAK,MAAM;AAAA,gBACjB,KAAK;AACH,yBAAO;AACP;AAAA,gBACF;AACE,yBAAO;AAAA,cACX;AACA,mBAAK,UAAU,OAAO,qBAAqB,IAAI,EAAE;AAAA,YACnD;AAEA,kBAAM,SAAS,KAAK,aAAa;AAEjC,gBAAI,IAAI,KAAK,UAAU,UAAU,MAAM;AACvC,kBAAM,SAAS,KAAK,UAAU,UAAU,MAAM;AAAA,cAC5C,IAAI,IAAI,OAAO;AAAA,cACf;AAAA,YACF;AACA,mBAAO,CAAC,IAAI,QAAQ;AACpB,0BAAc,QAAQ,OAAO,QAAQ,EAAE,CAAC;AACxC,mBAAO,IAAI,QAAQ,KAAK,CAAC;AACzB,iBAAK,UAAU,QAAQ;AAAA,cACrB,KAAK,UAAU,UAAU,MAAM,SAAS,QAAQ,IAAI;AAAA,YACtD;AAAA,UACF;AAAA,QACF;AAAA,QACA,eAAe;AACb,eAAK,aAAa;AAElB,gBAAM,MAAM,KAAK;AAEjB,cAAI;AACF,mBAAO,KAAK,iBAAiB,GAAG;AAAA,QACpC;AAAA,QACA,iBAAiB,KAAK;AACpB,cAAI;AACJ,cAAI,MAAM;AACV,cAAI,MAAM,IAAI;AACd,iBAAO,IAAI,GAAG,MAAM,GAAM;AACxB,cAAE;AACF,cAAE;AAAA,UACJ;AAEA,cAAI,IAAI,GAAG,IAAI,KAAM;AACnB,qBAAS,OAAO,YAAY,IAAI,GAAG;AACnC,mBAAO,CAAC,IAAI;AACZ,gBAAI,KAAK,QAAQ,GAAG,GAAG;AACvB,mBAAO;AAAA,UACT;AAEA,cAAI,QAAQ,IAAI,QAAQ;AACtB,qBAAS,OAAO,YAAY,GAAG;AAC/B,gBAAI,KAAK,QAAQ,GAAG,GAAG;AACvB,kBAAM;AAAA,UACR;AACA,iBAAO;AAAA,QACT;AAAA,QACA,cAAc,gBAAgB;AAC5B,eAAK,aAAa;AAElB,cAAI;AACF,mBAAO,eAAe,KAAK,IAAI,cAAc,cAAc,CAAC;AAAA,UAC9D,SAAS,IAAI;AACX,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,MAAM,SAAS;AACb,gBAAM,OAAO,QAAQ,CAAC;AACtB,kBAAQ,KAAK,OAAO;AAAA,YAClB,KAAK;AACH,kBAAI,KAAK,UAAU,SAAS;AAE1B,oBAAI,SAAS,QAAQ,YAAY;AAC/B,yBAAO;AAAA,oBACL,KAAK;AAAA,oBACL,mBAAmB,IAAI,eAAe,QAAQ,UAAU;AAAA,oBACxD;AAAA,oBACA,kBAAkB;AAAA,kBACpB;AAAA,gBACF;AACA,qBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,kBACtC;AAAA,gBACF;AAMA,6BAAa,KAAK,SAAS,CAAC;AAC5B,sBAAM,SAAS,aAAa,WAAW;AACvC,6BAAa,MAAM;AACnB,oBAAI,WAAW,QAAW;AACxB,yBAAO;AAAA,oBACL,KAAK;AAAA,oBACL;AAAA,oBACA;AAAA,oBACA,kBAAkB;AAAA,kBACpB;AAAA,gBACF;AAGA,qBAAK,UAAU;AAEf,oBAAI,UACF,KAAK,UAAU,UAAU,KAAK,WAAW,aAAa;AACxD,oBAAI,MAAM,QAAQ,OAAO;AACvB,4BAAU,QAAQ,CAAC;AACrB,qBAAK,WAAW;AAEhB,qBAAK,OAAO;AAAA,cACd,OAAO;AAEL,oBAAI,SAAS,QAAQ,aAAa;AAChC,yBAAO;AAAA,oBACL,KAAK;AAAA,oBACL,mBAAmB,IAAI,eAAe,QAAQ,WAAW;AAAA,oBACzD;AAAA,oBACA,kBAAkB;AAAA,kBACpB;AAAA,gBACF;AACA,qBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,kBACtC;AAAA,gBACF;AASA,6BAAa,KAAK,SAAS,CAAC;AAC5B,oBAAI;AACJ,oBAAI;AACJ,oBAAI;AACJ,qBAAK,aAAa,aAAa,WAAW,OAAO,WACzC,SAAS,aAAa,WAAW,OAAO,WACxC,MAAM,aAAa,WAAW,OAAO,QAAW;AACtD,+BAAa,MAAM;AACnB,yBAAO;AAAA,oBACL,KAAK;AAAA,oBACL;AAAA,oBACA;AAAA,oBACA,kBAAkB;AAAA,kBACpB;AAAA,gBACF;AACA,6BAAa,MAAM;AAInB,6BAAa,KAAK,YAAY,CAAC;AAC/B,sBAAM,iBAAiB,aAAa,WAAW,IAAI;AACnD,6BAAa,MAAM;AACnB,oBAAI,mBAAmB,QAAW;AAChC,yBAAO;AAAA,oBACL,KAAK;AAAA,oBACL;AAAA,oBACA;AAAA,oBACA,kBAAkB;AAAA,kBACpB;AAAA,gBACF;AACA,oBAAI,mBAAmB,KAAK,WAAW,eAAe;AAEpD,0BAAQ,KAAK,WAAW,eAAe;AAAA,oBACrC,KAAK;AAAA,oBACL,KAAK;AACH,0BAAI,mBAAmB;AACrB;AAAA,oBAEJ;AACE,6BAAO;AAAA,wBACL,KAAK;AAAA,wBACL;AAAA,wBACA;AAAA,wBACA,kBAAkB;AAAA,sBACpB;AAAA,kBACJ;AAAA,gBACF;AAEA,qBAAK,WAAW;AAChB,qBAAK,UAAU;AACf,qBAAK,OAAO;AAEZ,oBAAI,UAAU;AACd,oBAAI;AACJ,oBAAI,KAAK,UAAU,kBAAkB,QAAW;AAC9C,wBAAM;AACN,uBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,oBACtC;AAAA,kBACF;AAAA,gBACF,OAAO;AACL,wBAAM,KAAK,UAAU,cAAc,YAAY,CAAC,cAAc;AAC5D,wBAAI;AACF;AACF,8BAAU;AACV,wBAAI,cAAc,OAAO;AACvB,2BAAK,UAAU,UAAU,KAAK,UAAU;AAAA,wBACtC;AAAA,sBACF;AACA,6BAAO;AAAA,wBACL,KAAK;AAAA,wBACL;AAAA,wBACA;AAAA,wBACA,kBAAkB;AAAA,sBACpB;AAAA,oBACF;AACA,yBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,sBACtC;AAAA,oBACF;AACA,yBAAK,gBAAgB;AACrB,wBAAI,KAAK;AACP,2BAAK,OAAO;AAAA;AAEZ,qCAAe,IAAI;AAAA,kBACvB,CAAC;AAAA,gBACH;AACA,oBAAI,QAAQ,QAAW;AAErB,oBAAE,KAAK;AACP;AAAA,gBACF;AACA,0BAAU;AACV,oBAAI,QAAQ,OAAO;AACjB,uBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,oBACtC;AAAA,kBACF;AACA,yBAAO;AAAA,oBACL,KAAK;AAAA,oBACL;AAAA,oBACA;AAAA,oBACA,kBAAkB;AAAA,kBACpB;AAAA,gBACF;AACA,qBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,kBACtC;AAAA,gBACF;AACA,qBAAK,gBAAgB;AACrB,+BAAe,IAAI;AAAA,cACrB;AACA,gBAAE,KAAK;AACP;AAAA,YACF,KAAK;AACH,kBAAI,SAAS,QAAQ,SAAS;AAC5B,uBAAO;AAAA,kBACL,KAAK;AAAA,kBACL,mBAAmB,IAAI,eAAe,QAAQ,OAAO;AAAA,kBACrD;AAAA,kBACA,kBAAkB;AAAA,gBACpB;AAAA,cACF;AACA,mBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,gBACtC;AAAA,cACF;AACA,mBAAK,mBAAmB;AACxB,kBAAI,KAAK,UAAU;AACjB,qBAAK,UAAU,UAAU,UAAU;AACrC,gBAAE,KAAK;AAEP,qBAAO,KAAK,OAAO,CAAC,KAAK,UAAU,WAAW,CAAC,KAAK,aAAa;AAAA,YACnE;AACE,qBAAO;AAAA,gBACL,KAAK;AAAA,gBACL,8BAA8B,IAAI;AAAA,gBAClC;AAAA,gBACA,kBAAkB;AAAA,cACpB;AAAA,UACJ;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,2BAA2B,YAAY;AAAA,QAC3C,YAAY,aAAa,MAAM;AAC7B,gBAAM,GAAG,IAAI;AAEb,eAAK,OAAO;AACZ,eAAK,WAAW;AAChB,eAAK,QAAQ;AAAA,QACf;AAAA,QACA,eAAe;AACb,cAAI,CAAC,KAAK;AACR,iBAAK,QAAQ,oBAAoB,QAAQ;AAAA,QAC7C;AAAA,QACA,eAAe;AACb,eAAK,aAAa;AAElB,gBAAM,MAAM,KAAK,MAAM,UAAU,OAAO,EAAE,MAAM,QAAQ,QAAQ,MAAM,CAAC;AACvE,iBAAO,IAAI,MAAM,GAAG;AAAA,QACtB;AAAA,QACA,iBAAiB,KAAK;AACpB,cAAI;AACJ,cAAI,MAAM;AACV,cAAI,MAAM,IAAI;AACd,iBAAO,IAAI,GAAG,MAAM,GAAM;AACxB,cAAE;AACF,cAAE;AAAA,UACJ;AAEA,cAAI,IAAI,WAAW;AACjB,mBAAO;AAET,cAAI,QAAQ,IAAI,QAAQ;AACtB,qBAAS,OAAO,YAAY,GAAG;AAC/B,gBAAI,KAAK,QAAQ,GAAG,GAAG;AACvB,kBAAM;AAAA,UACR;AACA,iBAAO;AAAA,QACT;AAAA,QACA,cAAc,gBAAgB;AAC5B,eAAK,aAAa;AAElB,cAAI;AACF,kBAAM,YAAY,IAAI,IAAI,OAAO;AACjC,sBAAU,cAAc;AAEtB,sBAAU,cAAc;AACtB,sBAAU,SAAS,aAAa;AAClC,sBAAU,YAAY;AAGtB,sBAAU,cAAc,IAAI,SAAS;AACnC,sBAAU,UAAU,CAAI;AAExB,sBAAU,QAAQ,eAAe,MAAM;AACvC,2BAAe;AAAA,cAAK,UAAU;AAAA,cACV,UAAU;AAAA,cACV;AAAA,cACA,eAAe;AAAA,YAAM;AACzC,sBAAU,WAAW,eAAe;AACtC,sBAAU,YAAY;AACxB,sBAAU,YAAY;AAEtB,mBAAO,eAAe,cAAc;AAAA,cAClC,YAAY,KAAK,MAAM;AAAA,cACvB,WAAW,gBAAgB;AAAA,gBACzB,KAAK,UAAU;AAAA,gBACf,MAAM;AAAA,gBACN,QAAQ;AAAA,cACV,CAAC;AAAA,YACH,CAAC,CAAC;AAAA,UACJ,SAAS,IAAI;AACX,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,qBAAqB,YAAY;AAAA,QACrC,YAAY,WAAW,aAAa,MAAM;AACxC,gBAAM,GAAG,IAAI;AAEb,eAAK,OAAO;AACZ,eAAK,YAAY;AACjB,eAAK,WAAW;AAAA,QAClB;AAAA,QACA,eAAe;AACb,cAAI,CAAC,KAAK,KAAK;AACb,iBAAK,MAAM,WAAW,KAAK,SAAS;AACpC,iBAAK,UAAU,KAAK,IAAI,aAAa;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,wBAAwB,YAAY;AAAA,QACxC,YAAY,aAAa,MAAM;AAC7B,gBAAM,GAAG,IAAI;AAEb,eAAK,OAAO;AACZ,eAAK,WAAW;AAChB,eAAK,SAAS;AACd,eAAK,aAAa;AAClB,eAAK,WAAW;AAChB,eAAK,YAAY,WAAW,KAAK,UAAU;AAC3C,cAAI,KAAK,UAAU,eAAe,OAAO;AACvC,iBAAK,YAAY,KAAK,IAAI,KAAK,WAAW,IAAI;AAChD,eAAK,WAAW;AAAA,QAClB;AAAA,QACA,QAAQ;AACN,cAAI,KAAK,UAAU;AACjB;AACF,eAAK,UAAU,UAAU,KAAK,UAAU;AAAA,YACtC;AAAA,UACF;AACA,cAAI,IAAI,KAAK,UAAU,UAAU,MAAM;AACvC,gBAAM,SAAS,KAAK,UAAU,UAAU,MAAM;AAAA,YAC5C,IAAI,IAAI,IAAI;AAAA,YACZ;AAAA,UACF;AACA,iBAAO,CAAC,IAAI,QAAQ;AACpB,wBAAc,QAAQ,KAAK,UAAU,EAAE,CAAC;AACxC,wBAAc,QAAQ,KAAK,WAAW,KAAK,CAAC;AAC5C,wBAAc,QAAQ,KAAK,UAAU,KAAK,CAAC;AAC3C,eAAK,UAAU,QAAQ;AAAA,YACrB,KAAK,UAAU,UAAU,MAAM,SAAS,QAAQ,IAAI;AAAA,UACtD;AAAA,QACF;AAAA,QACA,eAAe;AACb,cAAI,CAAC,KAAK,OAAO,KAAK,UAAU,KAAK,YAAY;AAC/C,iBAAK,MAAM,oBAAoB,KAAK,QAAQ,KAAK,UAAU;AAC3D,iBAAK,UAAU,KAAK,IAAI,aAAa;AAAA,UACvC;AAAA,QACF;AAAA,QACA,YAAY,OAAO,WAAW;AAC5B,cAAI,CAAC,OAAO,SAAS,KAAK;AACxB,kBAAM,IAAI,MAAM,qBAAqB;AACvC,cAAI,CAAC,OAAO,SAAS,SAAS;AAC5B,kBAAM,IAAI,MAAM,yBAAyB;AAC3C,eAAK,SAAS;AACd,eAAK,aAAa;AAAA,QACpB;AAAA,QACA,cAAc;AACZ,cAAI,KAAK,KAAK;AACZ,mBAAO;AAAA,cACL,OAAO,eAAe,KAAK,IAAI,SAAS,CAAC;AAAA,cACzC,WAAW,eAAe,KAAK,IAAI,aAAa,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA,MAAM,SAAS;AACb,gBAAM,OAAO,QAAQ,CAAC;AACtB,kBAAQ,KAAK,OAAO;AAAA,YAClB,KAAK,GAAG;AACN,kBAAI,KAAK,UAAU,SAAS;AAC1B,oBAAI,SAAS,QAAQ,mBAAmB;AACtC,yBAAO;AAAA,oBACL,KAAK;AAAA,oBACL,mBAAmB,IAAI,iBACnB,QAAQ;AAAA,oBACZ;AAAA,oBACA,kBAAkB;AAAA,kBACpB;AAAA,gBACF;AAGA,uBAAO;AAAA,kBACL,KAAK;AAAA,kBACL;AAAA,kBACA;AAAA,kBACA,kBAAkB;AAAA,gBACpB;AAAA,cACF;AAEA,kBAAI,SAAS,QAAQ,iBAAiB;AACpC,uBAAO;AAAA,kBACL,KAAK;AAAA,kBACL,mBAAmB,IAAI,eAAe,QAAQ,eAAe;AAAA,kBAC7D;AAAA,kBACA,kBAAkB;AAAA,gBACpB;AAAA,cACF;AAEA,mBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,gBACtC;AAAA,cACF;AAOA,2BAAa,KAAK,SAAS,CAAC;AAC5B,kBAAI;AACJ,kBAAI;AACJ,mBAAK,QAAQ,aAAa,WAAW,OAAO,WACpC,MAAM,aAAa,WAAW,OAAO,QAAW;AACtD,6BAAa,MAAM;AACnB,uBAAO;AAAA,kBACL,KAAK;AAAA,kBACL;AAAA,kBACA;AAAA,kBACA,kBAAkB;AAAA,gBACpB;AAAA,cACF;AACA,2BAAa,MAAM;AAGnB,mBAAK,YAAY,OAAO,GAAG;AAC3B,mBAAK,aAAa;AAClB,oBAAM,SAAS,KAAK,aAAa;AAEjC,mBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,gBACtC;AAAA,cACF;AAEA,kBAAI,IAAI,KAAK,UAAU,UAAU,MAAM;AACvC,oBAAM,SACJ,KAAK,UAAU,UAAU,MAAM,MAAM,IAAI,IAAI,OAAO,QAAQ,IAAI;AAClE,qBAAO,CAAC,IAAI,QAAQ;AACpB,4BAAc,QAAQ,OAAO,QAAQ,EAAE,CAAC;AACxC,qBAAO,IAAI,QAAQ,KAAK,CAAC;AACzB,mBAAK,UAAU,QAAQ;AAAA,gBACrB,KAAK,UAAU,UAAU,MAAM,SAAS,QAAQ,IAAI;AAAA,cACtD;AAEA,gBAAE,KAAK;AACP;AAAA,YACF;AAAA,YACA,KAAK;AACH,kBAAI,KAAK,UAAU,SAAS;AAC1B,oBAAI,SAAS,QAAQ,gBAAgB;AACnC,yBAAO;AAAA,oBACL,KAAK;AAAA,oBACL,mBAAmB,IAAI,eAAe,QAAQ,cAAc;AAAA,oBAC5D;AAAA,oBACA,kBAAkB;AAAA,kBACpB;AAAA,gBACF;AACA,qBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,kBACtC;AAAA,gBACF;AACA,uBAAO;AAAA,kBACL,KAAK;AAAA,kBACL;AAAA,kBACA;AAAA,kBACA,kBAAkB;AAAA,gBACpB;AAAA,cACF,WAAW,SAAS,QAAQ,iBAAiB;AAC3C,uBAAO;AAAA,kBACL,KAAK;AAAA,kBACL,mBAAmB,IAAI,eAAe,QAAQ,eAAe;AAAA,kBAC7D;AAAA,kBACA,kBAAkB;AAAA,gBACpB;AAAA,cACF;AACA,mBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,gBACtC;AAAA,cACF;AACA,mBAAK,QAAQ;AACb,sBAAQ,CAAC,IAAI,QAAQ;AACrB,mBAAK,QAAQ,YAAY,UAAU;AACnC,mBAAK,MAAM,OAAO;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,mBAAmB,YAAY;AAAA,QACnC,YAAY,WAAW,aAAa,MAAM;AACxC,gBAAM,GAAG,IAAI;AAEb,eAAK,OAAO;AACZ,eAAK,YAAY;AACjB,eAAK,WAAW;AAAA,QAClB;AAAA,QACA,QAAQ;AACN,cAAI,CAAC,KAAK,UAAU,SAAS;AAC3B,iBAAK,UAAU,UAAU,KAAK,UAAU;AAAA,cACtC;AAAA,YACF;AACA,kBAAM,SAAS,KAAK,aAAa;AACjC,gBAAI,IAAI,KAAK,UAAU,UAAU,MAAM;AACvC,kBAAM,SACJ,KAAK,UAAU,UAAU,MAAM,MAAM,IAAI,IAAI,OAAO,QAAQ,IAAI;AAClE,mBAAO,CAAC,IAAI,QAAQ;AACpB,0BAAc,QAAQ,OAAO,QAAQ,EAAE,CAAC;AACxC,mBAAO,IAAI,QAAQ,KAAK,CAAC;AACzB,iBAAK,UAAU,QAAQ;AAAA,cACrB,KAAK,UAAU,UAAU,MAAM,SAAS,QAAQ,IAAI;AAAA,YACtD;AAAA,UACF;AAAA,QACF;AAAA,QACA,eAAe;AACb,cAAI,CAAC,KAAK,KAAK;AACb,iBAAK,MAAM,yBAAyB,KAAK,SAAS;AAClD,iBAAK,UAAU,KAAK,IAAI,aAAa;AAAA,UACvC;AAAA,QACF;AAAA,QACA,cAAc;AACZ,cAAI,KAAK,KAAK;AACZ,mBAAO;AAAA,cACL,OAAO,eAAe,KAAK,IAAI,SAAS,CAAC;AAAA,cACzC,WAAW,eAAe,KAAK,IAAI,aAAa,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,aAAO,CAAC,eAAe,SAAS;AAC9B,YAAI,OAAO,eAAe,YAAY,eAAe;AACnD,gBAAM,IAAI,MAAM,6BAA6B;AAC/C,cAAM,UAAU,WAAW;AAC3B,YAAI,OAAO,YAAY,UAAU;AAC/B,iBAAO,CAAC,YAAY,GAAG,IAAI;AAC3B,kBAAQ,SAAS;AAAA,YACf,KAAK;AAAA,YACL,KAAK;AACH,kBAAI,CAAC;AACH;AACF,qBAAO,IAAI,mBAAmB,UAAU,GAAG,IAAI;AAAA,YAEjD,KAAK;AACH,qBAAO,IAAI,aAAa,cAAc,UAAU,GAAG,IAAI;AAAA,YACzD,KAAK;AACH,qBAAO,IAAI,aAAa,aAAa,UAAU,GAAG,IAAI;AAAA,YACxD,KAAK;AACH,qBAAO,IAAI,aAAa,aAAa,UAAU,GAAG,IAAI;AAAA,YAExD,KAAK;AACH,qBAAO,IAAI,WAAW,SAAS,QAAQ,GAAG,IAAI;AAAA,YAChD,KAAK;AACH,qBAAO,IAAI,WAAW,UAAU,QAAQ,GAAG,IAAI;AAAA,YACjD,KAAK;AACH,qBAAO,IAAI,WAAW,UAAU,UAAU,GAAG,IAAI;AAAA,YACnD,KAAK;AACH,qBAAO,IAAI,WAAW,UAAU,UAAU,GAAG,IAAI;AAAA,YACnD,KAAK;AACH,qBAAO,IAAI,WAAW,UAAU,UAAU,GAAG,IAAI;AAAA,YACnD,KAAK;AACH,qBAAO,IAAI,WAAW,UAAU,UAAU,GAAG,IAAI;AAAA,YACnD,KAAK;AACH,qBAAO,IAAI,WAAW,UAAU,UAAU,GAAG,IAAI;AAAA,YAEnD,KAAK;AACH,qBAAO,IAAI,gBAAgB,QAAQ,GAAG,IAAI;AAAA,YAC5C,KAAK;AACH,qBAAO,IAAI,gBAAgB,UAAU,GAAG,IAAI;AAAA,UAChD;AACA,gBAAM,IAAI,MAAM,uCAAuC,OAAO,EAAE;AAAA,QAClE;AACA,cAAM,IAAI,MAAM,8BAA8B,OAAO,EAAE;AAAA,MACzD;AAAA,IACF,GAAG;AAEH,QAAM,UAAW,uBAAM;AACrB,YAAM,qBAAqB;AAAA,QACzB;AAAA,QACA;AAAA,QACA,CAAC,MAAM,QAAS;AAAA,QAChB,CAAC,MAAM,QAAS;AAAA,QAChB,CAAC,MAAM,KAAM;AAAA,QACb,CAAC,MAAM,KAAM;AAAA,QACb,CAAC,MAAM,UAAW;AAAA,QAClB,CAAC,MAAM,UAAW;AAAA,QAClB,CAAC,MAAM,MAAO;AAAA,QACd,CAAC,MAAM,MAAO;AAAA,MAChB;AACA,aAAO,MAAM,QAAQ;AAAA,QACnB,YAAY,KAAK;AACf,cAAI,OAAO,QAAQ,YAAY,QAAQ;AACrC,kBAAM,IAAI,UAAU,4BAA4B;AAElD,gBAAM,QAAQ;AAAA,YACZ,KAAK;AAAA,YACL,eAAe;AAAA,YACf,IAAI;AAAA,cACF,QAAQ;AAAA,cACR,KAAK;AAAA,cACL,UAAU;AAAA,cACV,MAAM;AAAA,YACR;AAAA,YACA,IAAI;AAAA,cACF,QAAQ;AAAA,cACR,KAAK;AAAA,cACL,UAAU;AAAA,cACV,MAAM;AAAA,YACR;AAAA,YAEA,KAAK;AAAA,UACP;AACA,cAAI,YAAY;AAChB,qBAAW,QAAQ,oBAAoB;AACrC,gBAAI;AACJ,gBAAI;AACJ,gBAAI;AACJ,gBAAI;AACJ,gBAAI,OAAO,SAAS,UAAU;AAC5B,qBAAO;AACP,oBAAM,IAAI,IAAI;AACd,qBAAO,MAAM;AAAA,YACf,OAAO;AACL,oBAAM,SAAS,KAAK,CAAC;AACrB,qBAAO,MAAM,MAAM;AACnB,oBAAM,KAAK,CAAC;AACZ,oBAAM,IAAI,MAAM,EAAE,GAAG;AACrB,qBAAO,GAAG,MAAM,IAAI,GAAG;AAAA,YACzB;AACA,kBAAM,QAAQ,EAAE,OAAO,QAAW,QAAQ,OAAU;AACpD,gBAAI,OAAO,SAAS,GAAG,GAAG;AACxB,oBAAM,SAAS,KAAK,KAAK,MAAM,GAAG;AAClC,oBAAM,SAAS;AACf,2BAAa,IAAI,IAAI;AAAA,YACvB,OAAO;AACL,kBAAI,OAAO,QAAQ;AACjB,sBAAM,IAAI,MAAM,GAAG;AACrB,kBAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,sBAAM,QAAQ;AACd,sBAAM,SAAS,OAAO,KAAK,IAAI,KAAK,GAAG,CAAC;AAAA,cAC1C,OAAO;AACL,sBAAM,IAAI,UAAU,aAAa,IAAI,YAAY,OAAO,GAAG,EAAE;AAAA,cAC/D;AACA,2BAAa,IAAI,MAAM,OAAO;AAAA,YAChC;AACA,iBAAK,GAAG,IAAI;AAAA,UACd;AAEA,gBAAM,MAAM,OAAO,YAAY,SAAS;AACxC,gBAAM,MAAM;AAEZ,cAAI,SAAS;AACb,qBAAW,QAAQ,oBAAoB;AACrC,gBAAI;AACJ,gBAAI,OAAO,SAAS;AAClB,qBAAO,MAAM,IAAI,EAAE;AAAA;AAEnB,qBAAO,MAAM,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;AACjC,qBAAS,cAAc,KAAK,KAAK,QAAQ,MAAM;AAC/C,gBAAI,IAAI,MAAM,MAAM;AACpB,sBAAU,KAAK;AAAA,UACjB;AAEA,eAAK,YAAY;AACjB,eAAK,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,KAAK,QAAQ;AACrB,gBAAM,MAAM,KAAK,MAAM;AACvB,cAAI,OAAO,WAAW;AACpB,kBAAM,IAAI,UAAU,yBAAyB,OAAO,MAAM,EAAE;AAC9D,cAAI,IAAI,SAAS,SAAS,IAAI;AAC5B,kBAAM,IAAI,MAAM,iCAAiC;AACnD,cAAI,IAAI,KAAK,MAAM;AACnB,iBAAO,IAAI;AAAA,QACb;AAAA,MACF;AAAA,IACF,GAAG;AAEH,QAAM,cAAc,MAAM;AACxB,YAAM,MAAM,OAAO,YAAY,CAAC;AAChC,aAAO,CAAC,MAAM,QAAQ;AACpB,sBAAc,KAAK,IAAI,QAAQ,CAAC;AAChC,aAAK,OAAO,GAAG;AACf,aAAK,OAAO,GAAG;AAAA,MACjB;AAAA,IACF,GAAG;AAEH,aAAS,eAAe,KAAK,UAAU,QAAQ,cAAc,WAAW,MAAM;AAC5E,UAAI;AACJ,UAAI,KAAK;AACP,YAAI,SAAS,WAAW,QAAQ,EAChB,OAAO,MAAM,EACb,OAAO,YAAY,EACnB,OAAO,IAAI,EACX,OAAO,SAAS,EAChB,OAAO;AACvB,eAAO,OAAO,SAAS,KAAK;AAC1B,gBAAM,QAAQ,WAAW,QAAQ,EAChB,OAAO,MAAM,EACb,OAAO,YAAY,EACnB,OAAO,MAAM,EACb,OAAO;AACxB,gBAAM,WAAW,OAAO,YAAY,OAAO,SAAS,MAAM,MAAM;AAChE,mBAAS,IAAI,QAAQ,CAAC;AACtB,mBAAS,IAAI,OAAO,OAAO,MAAM;AACjC,mBAAS;AAAA,QACX;AACA,YAAI,OAAO,WAAW;AACpB,gBAAM;AAAA;AAEN,gBAAM,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,GAAG;AAAA,MAC9D,OAAO;AACL,cAAM;AAAA,MACR;AACA,aAAO;AAAA,IACT;AAEA,aAAS,aAAa,OAAO,SAAS;AAEpC,UAAI,QAAQ,WAAW,GAAG;AACxB,aAAK,UAAU,KAAK,OAAO,wCAAwC;AACnE;AAAA,MACF;AAEA,UAAI,KAAK,wBAAwB;AAC/B,aAAK,yBAAyB;AAC9B;AAAA,MACF;AAEA,gBAAU,KAAK,UAAU,KAAK,KAAK,OAAO;AAE1C,YAAM,OAAO,QAAQ,CAAC;AAEtB,UAAI,CAAC,KAAK,aAAa;AACrB,gBAAQ,MAAM;AAAA,UACZ,KAAK,QAAQ;AAAA,UACb,KAAK,QAAQ;AAAA,UACb,KAAK,QAAQ;AACX,gBAAI,CAAC;AACH,iCAAmB;AACrB,mBAAO,iBAAiB,IAAI,EAAE,MAAM,OAAO;AAAA,QAC/C;AAAA,MACF;AAEA,cAAQ,MAAM;AAAA,QACZ,KAAK,QAAQ;AACX,cAAI,CAAC;AACH,+BAAmB;AACrB,iBAAO,iBAAiB,IAAI,EAAE,MAAM,OAAO;AAAA,QAC7C,KAAK,QAAQ;AACX,cAAI,CAAC,MAAM,aAAa;AACtB,mBAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA;AAAA,cACA,kBAAkB;AAAA,YACpB;AAAA,UACF;AACA,gBAAM,cAAc;AACpB,iBAAO,cAAc,MAAM,OAAO;AAAA,QACpC;AAGE,cAAI,OAAO,MAAM,OAAO,IAAI;AAC1B,mBAAO;AAAA,cACL;AAAA,cACA,mCAAmC,IAAI;AAAA,cACvC;AAAA,cACA,kBAAkB;AAAA,YACpB;AAAA,UACF;AAAA,MACJ;AAEA,aAAO,KAAK,KAAK,MAAM,OAAO;AAAA,IAChC;AAEA,aAAS,WAAW,KAAK;AACvB,YAAM,WAAW,YAAY,IAAI,GAAG,MAAM;AAC1C,YAAM,WAAW,YAAY,IAAI,GAAG,MAAM;AAG1C,YAAM,OAAO,KAAK;AAAA,QAChB;AAAA,QACC,SAAS,YAAY,iBAAiB,KAAK,SAAS;AAAA,QACrD,SAAS;AAAA,QACT,SAAS;AAAA,QACR,SAAS,YAAY,iBAAiB,KAAK,SAAS;AAAA,QACrD,SAAS;AAAA,QACT,SAAS;AAAA,MACX,IAAI;AACJ,UAAI,QAAQ;AACV,eAAO;AACT,UAAI,QAAQ;AACV,eAAO;AACT,UAAI,QAAQ;AACV,eAAO;AACT,aAAO;AAAA,IACT;AAEA,aAAS,eAAe,KAAK;AAC3B,UAAI,CAAC,IAAI,cAAc;AACrB,YAAI,UAAU,UAAU,IAAI,UAAU;AAAA,UACpC;AAAA,QACF;AACA,cAAM,IAAI,IAAI,UAAU,UAAU,MAAM;AACxC,cAAM,SAAS,IAAI,UAAU,UAAU,MAAM,MAAM,GAAG,IAAI;AAC1D,eAAO,CAAC,IAAI,QAAQ;AACpB,YAAI,UAAU,QAAQ;AAAA,UACpB,IAAI,UAAU,UAAU,MAAM,SAAS,QAAQ,IAAI;AAAA,QACrD;AACA,YAAI,eAAe;AACnB,YAAI,IAAI,UAAU;AAChB,cAAI,UAAU,QAAQ,WAAW;AAAA,MACrC;AAAA,IACF;AAEA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,wBAAwB,IAAI,QAAQ;AAAA,QAClC,KAAK,YAAY,OAAO,CAAC,cAAc,8BAA8B,CAAC;AAAA,QACtE,eAAe;AAAA,QACf,IAAI;AAAA,UACF,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,UAAU;AAAA,UACV,MAAM,CAAC;AAAA,QACT;AAAA,QACA,IAAI;AAAA,UACF,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,UAAU;AAAA,UACV,MAAM,CAAC;AAAA,QACT;AAAA,MACF,CAAC;AAAA,MACD,wBAAwB,IAAI,QAAQ;AAAA,QAClC,KAAK,YAAY,OAAO,CAAC,8BAA8B,CAAC;AAAA,QACxD,eAAe;AAAA,QACf,IAAI;AAAA,UACF,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,UAAU;AAAA,UACV,MAAM,CAAC;AAAA,QACT;AAAA,QACA,IAAI;AAAA,UACF,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,UAAU;AAAA,UACV,MAAM,CAAC;AAAA,QACT;AAAA,MACF,CAAC;AAAA,MACD,UAAU;AAAA,QACR,CAAC,QAAQ,OAAO,GAAG;AAAA,MACrB;AAAA,IACF;AAAA;AAAA;;;ACn3DA;AAAA;AAAA;AAAA,MACE,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,QAAU;AAAA,MACV,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,SAAW;AAAA,QACT,MAAQ;AAAA,MACV;AAAA,MACA,cAAgB;AAAA,QACd,MAAQ;AAAA,QACR,gBAAgB;AAAA,MAClB;AAAA,MACA,iBAAmB;AAAA,QACjB,yBAAyB;AAAA,QACzB,QAAU;AAAA,MACZ;AAAA,MACA,sBAAwB;AAAA,QACtB,gBAAgB;AAAA,QAChB,KAAO;AAAA,MACT;AAAA,MACA,SAAW;AAAA,QACT,SAAW;AAAA,QACX,SAAW;AAAA,QACX,MAAQ;AAAA,QACR,MAAQ;AAAA,QACR,YAAY;AAAA,MACd;AAAA,MACA,UAAY;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAY;AAAA,QACV;AAAA,UACE,MAAQ;AAAA,UACR,KAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ,MAAQ;AAAA,QACR,KAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AChDA;AAAA;AAAA;AAwCA,QAAM,EAAE,QAAQ,IAAI,UAAQ,MAAM;AAElC,QAAM,EAAE,kBAAkB,YAAY,aAAa,IAAI;AACvD,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM;AAAA,MACJ;AAAA,IACF,IAAI;AACJ,QAAM,mBAAmB;AACzB,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,QAAM,aAAa,kBAA8B;AAEjD,QAAM,2BAA2B,IAAI;AAAA,MACnC,OAAO,OAAO,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IACpD;AACA,QAAM,YAAY,OAAO,KAAK,iBAAiB,UAAU,EAAE;AAC3D,QAAM,QAAQ,OAAO,KAAK,GAAG,SAAS;AAAA,CAAM;AAC5C,QAAM,eAAe;AACrB,QAAM,YAAY;AAClB,QAAM,eAAe,OAAO,KAAK;AAAA,MAC/B,QAAQ;AAAA;AAAA,MAER;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MACP;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MACpE;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA;AAAA,MAEzB;AAAA,IACF,CAAC;AACD,QAAM,2BAA2B,OAAO,KAAK,CAAE,cAAc,UAAW,CAAC;AAEzE,aAAS,OAAO;AAAA,IAAC;AAejB,QAAM,WAAN,MAAe;AAAA,MACb,YAAY,QAAQ;AAClB,cAAM,UAAU,OAAO;AACvB,YAAI,OAAO,YAAY;AACrB,gBAAM,IAAI,MAAM,0BAA0B;AAC5C,aAAK,WAAW,CAAC,SAAS;AAAE,kBAAQ,IAAI;AAAA,QAAG;AAE3C,cAAM,UAAU,OAAO;AACvB,YAAI,OAAO,YAAY;AACrB,gBAAM,IAAI,MAAM,0BAA0B;AAC5C,aAAK,WAAW,CAAC,QAAQ;AAAE,kBAAQ,GAAG;AAAA,QAAG;AAEzC,cAAM,QAAQ,OAAO;AACrB,aAAK,SAAU,OAAO,UAAU,aACf,CAAC,QAAQ;AAAE,gBAAM,GAAG;AAAA,QAAG,IACvB;AAEjB,cAAM,WAAW,OAAO;AACxB,aAAK,YAAa,OAAO,aAAa,aAClB,IAAI,SAAS;AAAE,mBAAS,GAAG,IAAI;AAAA,QAAG,IAClC;AAEpB,cAAM,WAAW,OAAO;AACxB,aAAK,YAAa,OAAO,aAAa,aAClB,MAAM;AAAE,mBAAS;AAAA,QAAG,IACpB;AAEpB,YAAI,sBAAsB,OAAO;AACjC,YAAI,OAAO,wBAAwB;AACjC,gCAAsB;AACxB,YAAI;AACJ,aAAK,uBAAuB,IAAI,SAAS;AACvC,eAAK,UAAU,KAAK,OAAO,qBAAqB;AAChD,cAAI,mBAAmB;AACrB,6BAAiB;AAAA;AAEjB,6BAAiB;AAGnB,gBAAM,WAAW,KAAK;AACtB,cAAI,UAAU;AACZ,iBAAK,SAAS;AACd,iBAAK,UAAU,KAAK;AAAA,cAClB,4BAA4B,SAAS,MAAM;AAAA,YAC7C;AACA,qBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,oBAAM,OAAO,SAAS,CAAC;AAIvB,kBAAI,YAAY,KAAK,UAAU,MAAM,SAAS,IAAI;AAClD,kBAAI,cAAc,MAAM;AACtB,sBAAM,SAAS,KAAK,QAAQ,YAAY,KAAK,MAAM;AACnD,uBAAO,IAAI,MAAM,CAAC;AAClB,4BAAY;AAAA,cACd;AAEA,yBAAW,MAAM,SAAS;AAAA,YAC5B;AACA,iBAAK,UAAU,KAAK,OAAO,sCAAsC;AAAA,UACnE;AAEA,cAAI,kBAAkB,KAAK,WAAW,KAAK,KAAK;AAC9C,wBAAY,IAAI;AAElB,8BAAoB,GAAG,IAAI;AAAA,QAC7B;AACA,aAAK,SAAS;AAEd,cAAM,kBAAkB,OAAO;AAC/B,YAAI,OAAO,oBAAoB,YAAY,oBAAoB;AAC7D,eAAK,YAAY;AAAA;AAEjB,eAAK,YAAY,CAAC;AAEpB,aAAK,aAAa,UAAU,KAAK,IAAI;AAErC,aAAK,UAAU,CAAC,CAAC,OAAO;AACxB,aAAK,UAAU;AACf,YAAI;AACJ,YAAI,KAAK,SAAS;AAChB,cAAI,OAAO,OAAO,aAAa,YAAY,OAAO,aAAa;AAC7D,kBAAM,IAAI,MAAM,4BAA4B;AAC9C,eAAK,YAAY,OAAO;AAIxB,cAAI,OAAO,OAAO,aAAa,YAAY,OAAO,SAAS,QAAQ;AACjE,uBAAY,OAAO,SAAS,MAAM,EAAE,MAAM,SAC5B,OAAO,WACP,GAAG,OAAO,QAAQ;AAAA;AAAA,UAClC;AAIA,cAAI,OAAO,OAAO,WAAW,YAAY,OAAO,OAAO,QAAQ;AAC7D,iBAAK,UAAW,OAAO,OAAO,MAAM,EAAE,MAAM,SAC1B,OAAO,SACP,GAAG,OAAO,MAAM;AAAA;AAAA,UACpC;AAAA,QACF,OAAO;AACL,eAAK,YAAY;AAAA,QACnB;AAEA,YAAI,QAAQ,OAAO;AACnB,YAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,kBAAS,KAAK,UAAU,yBAAyB;AAAA,QACnD,WAAW,MAAM,gBAAgB,SAAS;AACxC,cAAI,KAAK,SAAS;AAChB,kBAAM,MAAM,MAAM,IAAI,OAAO,CAAC,8BAA8B,CAAC;AAAA,UAC/D,OAAO;AACL,kBAAM,MAAM,MAAM,IAAI,OAAO;AAAA,cAC3B;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH;AACA,kBAAQ,IAAI,QAAQ,KAAK;AAAA,QAC3B;AACA,aAAK,OAAO;AACZ,aAAK,cAAc;AACnB,aAAK,WAAW;AAChB,aAAK,SAAS;AACd,aAAK,UAAU,IAAI,WAAW,GAAG,KAAK,QAAQ;AAC9C,aAAK,YAAY;AACjB,aAAK,yBAAyB;AAC9B,aAAK,YAAY;AAAA,UACf,MAAM,IAAI,aAAa;AAAA,UACvB,OAAO,IAAI,aAAa,IAAI;AAAA,QAC9B;AACA,aAAK,gBAAiB,CAAC,KAAK,WACF,OAAO,OAAO,iBAAiB,aACjC,OAAO,eACP;AAExB,aAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,cAAc,CAAC;AACpB,aAAK,iBAAiB;AACtB,aAAK,kBAAkB;AACvB,YAAI;AACJ,YAAI,OAAO,OAAO,UAAU,UAAU;AACpC,eAAK,YAAY,OAAO,KAAK,WAAW,OAAO,KAAK,EAAE;AAEtD,sBAAY,OAAO,YAAY,KAAK,UAAU,SAAS,CAAC;AACxD,oBAAU,IAAI,KAAK,WAAW,CAAC;AAC/B,oBAAU,UAAU,SAAS,CAAC,IAAI;AAClC,oBAAU,UAAU,SAAS,CAAC,IAAI;AAAA,QACpC,WAAW,OAAO,SAAS,OAAO,KAAK,GAAG;AACxC,gBAAM,YAAY,OAAO,YAAY,IAAI,OAAO,MAAM,MAAM;AAC5D,oBAAU,YAAY,YAAY,GAAG,CAAC;AACtC,oBAAU,IAAI,OAAO,OAAO,CAAC;AAC7B,eAAK,YAAY;AAEjB,sBAAY,OAAO,YAAY,UAAU,SAAS,CAAC;AACnD,oBAAU,IAAI,WAAW,CAAC;AAC1B,oBAAU,UAAU,SAAS,CAAC,IAAI;AAClC,oBAAU,UAAU,SAAS,CAAC,IAAI;AAAA,QACpC,OAAO;AACL,eAAK,YAAY;AACjB,sBAAY;AAAA,QACd;AACA,aAAK,eAAe;AAEpB,YAAI,KAAK,QAAQ;AACf,cAAI;AACF,iBAAK,OAAO,iCAAiC;AAAA;AAE7C,iBAAK,OAAO,qCAAqC;AAAA,QACrD;AAEA,aAAK,UAAU,KAAK;AAAA,UAClB,gBAAgB,QAAQ,KAAK,UAAU,SAAS,CAAC,CAAC;AAAA,QACpD;AACA,aAAK,QAAQ,MAAM;AACjB,eAAK,QAAQ;AACb,cAAI;AACF,iBAAK,SAAS,QAAQ;AACxB,eAAK,SAAS,SAAS;AAAA,QACzB;AAAA,MACF;AAAA,MACA,UAAU,QAAQ;AAChB,aAAK,UAAU,KAAK,QAAQ;AAC5B,aAAK,UAAU,MAAM,QAAQ;AAC7B,aAAK,WAAW,KAAK,QAAQ,KAAK;AAClC,aAAK,aAAa,KAAK,UAAU,KAAK;AACtC,YAAI,OAAO,WAAW,YAAY,OAAO,WAAW;AAClD,mBAAS;AACX,aAAK,QAAQ,MAAM;AACjB,gBAAM,IAAI,MAAM,2BAA2B,MAAM,EAAE;AAAA,QACrD;AACA,aAAK,WAAW,MAAM;AACpB,gBAAM,IAAI,MAAM,2BAA2B,MAAM,EAAE;AAAA,QACrD;AACA,aAAK,YAAY;AAAA,MACnB;AAAA,MACA,UAAU;AACR,aAAK,aAAa,KAAK,UAAU;AAAA,MACnC;AAAA,MACA,MAAM,OAAO,GAAG,KAAK;AACnB,eAAO,IAAI;AACT,cAAI,KAAK,OAAO,OAAO,GAAG,GAAG;AAAA,MACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,WAAW,QAAQ;AACjB,cAAM,SAAS,IAAI,IAAI,IAAI;AAI3B,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,QAAQ,IAAI;AACtD,cAAM,MAAM,IAAI;AAEhB,YAAI,CAAC,yBAAyB,IAAI,MAAM;AACtC,mBAAS,kBAAkB;AAE7B,eAAO,CAAC,IAAI,QAAQ;AACpB,sBAAc,QAAQ,QAAQ,EAAE,CAAC;AACjC,eAAO,KAAK,GAAG,KAAK,GAAG,GAAG;AAE1B,aAAK,UAAU,KAAK,OAAO,iCAAiC,MAAM,GAAG;AACrE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,QAAQ,IAAI,GAAG,IAAI;AAAA,MACpE;AAAA,MACA,OAAO;AACL,cAAM,IAAI,KAAK,UAAU,MAAM;AAC/B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,aAAa,MAAM;AAE7D,eAAO,IAAI,cAAc,CAAC;AAE1B,aAAK,UAAU,KAAK;AAAA,UAClB;AAAA,QACF;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,QAAQ;AACN,YAAI,KAAK,aAAa,QAAW;AAC/B,eAAK,UAAU,KAAK,OAAO,oCAAoC;AAC/D,eAAK,SAAS,CAAC;AACf,kBAAQ,IAAI;AAAA,QACd,OAAO;AACL,eAAK,UAAU,KAAK,OAAO,2CAA2C;AAAA,QACxE;AAAA,MACF;AAAA;AAAA;AAAA,MAIA,eAAe,MAAM;AACnB,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,YAAI;AACJ,YAAI,OAAO,SAAS,IAAI,GAAG;AACzB,mBAAS,KAAK,UAAU,MAAM,MAAM,IAAI,KAAK,MAAM;AAEnD,iBAAO,CAAC,IAAI,QAAQ;AAEpB,iBAAO,IAAI,MAAM,EAAE,CAAC;AAAA,QACtB,OAAO;AACL,mBAAS,KAAK,UAAU,MAAM,MAAM,CAAC;AAErC,iBAAO,CAAC,IAAI,QAAQ;AAAA,QACtB;AAEA,aAAK,UAAU,KAAK,OAAO,mCAAmC;AAC9D,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,iBAAiB;AACf,cAAM,IAAI,KAAK,UAAU,MAAM;AAC/B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,CAAC;AAE3C,eAAO,CAAC,IAAI,QAAQ;AAEpB,aAAK,UAAU,KAAK,OAAO,mCAAmC;AAC9D,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,eAAe,MAAM;AAGnB,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,CAAC;AAE/C,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,aAAK,UAAU,KAAK,OAAO,wCAAwC,IAAI,GAAG;AAC1E,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,eAAe,MAAM;AAGnB,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,CAAC;AAE/C,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,aAAK,UAAU,KAAK,OAAO,wCAAwC,IAAI,GAAG;AAC1E,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,WAAW,MAAM;AAGf,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,CAAC;AAE/C,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,aAAK,UAAU,KAAK,OAAO,oCAAoC,IAAI,GAAG;AACtE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,aAAa,MAAM;AAGjB,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,CAAC;AAE/C,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,aAAK,UAAU,KAAK,OAAO,sCAAsC,IAAI,GAAG;AACxE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,oBAAoB,MAAM,QAAQ;AAGhC,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,CAAC;AAEnD,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,QAAQ,KAAK,CAAC;AAEpC,aAAK,UAAU,KAAK;AAAA,UAClB,8CAA8C,IAAI,KAAK,MAAM;AAAA,QAC/D;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,YAAY,MAAM,MAAM;AACtB,cAAM,WAAW,OAAO,SAAS,IAAI;AACrC,cAAM,UAAW,WAAW,KAAK,SAAS,OAAO,WAAW,IAAI;AAChE,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,OAAO;AAE7D,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,SAAS,KAAK,CAAC;AAErC,YAAI;AACF,iBAAO,IAAI,MAAM,KAAK,CAAC;AAAA;AAEvB,iBAAO,UAAU,MAAM,KAAK,GAAG,OAAO;AAExC,aAAK,UAAU,KAAK;AAAA,UAClB,qCAAqC,IAAI,KAAK,OAAO;AAAA,QACvD;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,eAAe,MAAM,MAAM,MAAM;AAC/B,cAAM,WAAW,OAAO,SAAS,IAAI;AACrC,cAAM,UAAW,WAAW,KAAK,SAAS,OAAO,WAAW,IAAI;AAChE,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,OAAO;AAEjE,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,MAAM,KAAK,CAAC;AAElC,sBAAc,QAAQ,SAAS,KAAK,CAAC;AAErC,YAAI;AACF,iBAAO,IAAI,MAAM,KAAK,CAAC;AAAA;AAEvB,iBAAO,UAAU,MAAM,KAAK,GAAG,OAAO;AAExC,aAAK,UACA,KAAK,OAAO,8CAA8C,IAAI,GAAG;AACtE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,mBAAmB,QAAQ,OAAO,YAAY,WAAW;AACvD,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC;AAE3D,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,QAAQ,EAAE,CAAC;AAEjC,sBAAc,QAAQ,OAAO,KAAK,CAAC;AAEnC,sBAAc,QAAQ,YAAY,KAAK,CAAC;AAExC,sBAAc,QAAQ,WAAW,KAAK,CAAC;AAEvC,aAAK,UAAU,KAAK;AAAA,UAClB,kDAAkD,MAAM,OAAO,KAAK;AAAA,QACtE;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,gBAAgB,QAAQ,QAAQ,MAAM;AACpC,YAAI,OAAO,SAAS;AAClB,iBAAO;AAET,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,UAAU,CAAC;AAErE,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,QAAQ,EAAE,CAAC;AAEjC,sBAAc,QAAQ,QAAQ,KAAK,CAAC;AAEpC,sBAAc,QAAQ,SAAS,KAAK,CAAC;AAErC,aAAK;AACL,YAAI,SAAS;AACX,iBAAO,UAAU,MAAM,GAAG,OAAO;AACjC,eAAK;AAAA,QACP;AAEA,sBAAc,QAAQ,GAAG,CAAC;AAE1B,aAAK,UACA,KAAK,OAAO,6CAA6C,MAAM,GAAG;AACvE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,QAAQ,MAAM;AACZ,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,OAAO;AAEzD,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,eAAO,UAAU,MAAM,KAAK,GAAG,OAAO;AAEtC,aAAK,UAAU,KAAK,OAAO,sCAAsC,IAAI,GAAG;AACxE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA;AAAA;AAAA,MAIA,aAAa,UAAU,UAAU,aAAa;AAC5C,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,UAAU,OAAO,WAAW,QAAQ;AAC1C,cAAM,UAAU,OAAO,WAAW,QAAQ;AAC1C,cAAM,aAAc,cAAc,OAAO,WAAW,WAAW,IAAI;AACnE,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,UAAU,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,WACtC,cAAc,IAAI,aAAa;AAAA,QACtC;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,eAAO,UAAU,UAAU,KAAK,GAAG,OAAO;AAE1C,sBAAc,QAAQ,IAAI,KAAK,OAAO;AACtC,eAAO,UAAU,kBAAkB,KAAK,GAAG,EAAE;AAE7C,sBAAc,QAAQ,GAAG,KAAK,EAAE;AAChC,eAAO,UAAU,YAAY,KAAK,GAAG,CAAC;AAEtC,eAAO,KAAK,CAAC,IAAK,cAAc,IAAI;AAEpC,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,YAAI,OAAO,SAAS,QAAQ;AAC1B,qBAAW,UAAU,QAAQ,GAAG,SAAS,KAAK,CAAC;AAAA;AAE/C,iBAAO,UAAU,UAAU,KAAK,GAAG,OAAO;AAE5C,YAAI,aAAa;AACf,wBAAc,QAAQ,YAAY,KAAK,OAAO;AAC9C,cAAI,OAAO,SAAS,WAAW;AAC7B,uBAAW,aAAa,QAAQ,GAAG,YAAY,KAAK,CAAC;AAAA;AAErD,mBAAO,UAAU,aAAa,KAAK,GAAG,UAAU;AAClD,eAAK,UAAU,KAAK;AAAA,YAClB;AAAA,UACF;AAAA,QACF,OAAO;AACL,eAAK,UAAU,KAAK;AAAA,YAClB;AAAA,UACF;AAAA,QACF;AAEA,aAAK,YAAY,KAAK,UAAU;AAEhC,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,OAAO,UAAU,QAAQ,SAAS,QAAQ;AACxC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,iBAAS,SAAS,MAAM;AACxB,YAAI,kBAAkB;AACpB,gBAAM,IAAI,MAAM,aAAa;AAE/B,cAAM,UAAU,OAAO;AACvB,iBAAS,OAAO,aAAa;AAE7B,YAAI,OAAO,YAAY,YAAY;AACjC,mBAAS;AACT,oBAAU;AAAA,QACZ;AACA,YAAI,CAAC;AACH,oBAAU;AAEZ,cAAM,UAAU,OAAO,WAAW,QAAQ;AAC1C,cAAM,UAAU,OAAO,WAAW,OAAO;AACzC,cAAM,YAAY,OAAO;AACzB,cAAM,YAAY,KAAK,KAAK;AAC5B,cAAM,SAAS,UAAU;AACzB,cAAM,cACH,SAAS,IAAI,SAAS,KACnB,IAAI,IAAI,UAAU,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,UAAU,IAAI;AAC/D,YAAI;AACJ,YAAI;AACJ,YAAI,QAAQ;AACV,mBAAS,OAAO,YAAY,UAAU;AACtC,cAAI;AACJ,wBAAc,QAAQ,QAAQ,CAAC;AAC/B,iBAAO,IAAI,WAAW,KAAK,CAAC;AAC5B,eAAK;AAAA,QACP,OAAO;AACL,mBAAS,KAAK,UAAU,MAAM,MAAM,UAAU;AAC9C,cAAI,KAAK,UAAU,MAAM;AAAA,QAC3B;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,eAAO,UAAU,UAAU,KAAK,GAAG,OAAO;AAE1C,sBAAc,QAAQ,IAAI,KAAK,OAAO;AACtC,eAAO,UAAU,kBAAkB,KAAK,GAAG,EAAE;AAE7C,sBAAc,QAAQ,GAAG,KAAK,EAAE;AAChC,eAAO,UAAU,aAAa,KAAK,GAAG,CAAC;AAEvC,eAAO,KAAK,CAAC,IAAK,SAAS,IAAI;AAE/B,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,eAAO,UAAU,SAAS,KAAK,GAAG,OAAO;AAEzC,sBAAc,QAAQ,WAAW,KAAK,OAAO;AAC7C,eAAO,IAAI,QAAQ,KAAK,CAAC;AAEzB,YAAI,CAAC,QAAQ;AACX,eAAK,YAAY,KAAK,WAAW;AAEjC,eAAK,UAAU,KAAK;AAAA,YAClB;AAAA,UACF;AACA,qBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AACtD;AAAA,QACF;AAEA,eAAO,QAAQ,CAAC,cAAc;AAC5B,sBAAY,iBAAiB,WAAW,OAAO;AAC/C,cAAI,cAAc;AAChB,kBAAM,IAAI,MAAM,4CAA4C;AAE9D,gBAAM,SAAS,UAAU;AACzB,cAAI,KAAK,UAAU,MAAM;AACzB,mBAAS,KAAK,UAAU,MAAM;AAAA,YAC5B,IAAI,IAAI,UAAU,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,UAAU,IAAI,YAAY,IACjE,IAAI,UAAU,IAAI;AAAA,UACxB;AAIA,iBAAO,CAAC,IAAI,QAAQ;AAEpB,wBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,iBAAO,UAAU,UAAU,KAAK,GAAG,OAAO;AAE1C,wBAAc,QAAQ,IAAI,KAAK,OAAO;AACtC,iBAAO,UAAU,kBAAkB,KAAK,GAAG,EAAE;AAE7C,wBAAc,QAAQ,GAAG,KAAK,EAAE;AAChC,iBAAO,UAAU,aAAa,KAAK,GAAG,CAAC;AAEvC,iBAAO,KAAK,CAAC,IAAI;AAEjB,wBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,iBAAO,UAAU,SAAS,KAAK,GAAG,OAAO;AAEzC,wBAAc,QAAQ,WAAW,KAAK,OAAO;AAC7C,iBAAO,IAAI,QAAQ,KAAK,CAAC;AAEzB,wBAAc,QAAQ,IAAI,UAAU,IAAI,QAAQ,KAAK,SAAS;AAE9D,wBAAc,QAAQ,SAAS,KAAK,CAAC;AACrC,iBAAO,UAAU,SAAS,KAAK,GAAG,OAAO;AAEzC,wBAAc,QAAQ,QAAQ,KAAK,OAAO;AAC1C,iBAAO,IAAI,WAAW,KAAK,CAAC;AAI5B,eAAK,YAAY,KAAK,WAAW;AAEjC,eAAK,UAAU,KAAK;AAAA,YAClB;AAAA,UACF;AACA,qBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,QACxD,CAAC;AAAA,MACH;AAAA,MACA,cAAc,UAAU,QAAQ,UAAU,WAAW,SAAS,QAAQ;AAEpE,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,iBAAS,SAAS,MAAM;AACxB,YAAI,kBAAkB;AACpB,gBAAM,IAAI,MAAM,aAAa;AAE/B,cAAM,UAAU,OAAO;AACvB,iBAAS,OAAO,aAAa;AAE7B,YAAI,OAAO,YAAY,YAAY;AACjC,mBAAS;AACT,oBAAU;AAAA,QACZ;AACA,YAAI,CAAC;AACH,oBAAU;AAEZ,cAAM,UAAU,OAAO,WAAW,QAAQ;AAC1C,cAAM,UAAU,OAAO,WAAW,OAAO;AACzC,cAAM,YAAY,OAAO;AACzB,cAAM,YAAY,KAAK,KAAK;AAC5B,cAAM,SAAS,UAAU;AACzB,cAAM,cAAc,OAAO,WAAW,QAAQ;AAC9C,cAAM,eAAe,OAAO,WAAW,SAAS;AAChD,cAAM,OAAO,OAAO;AAAA,UAClB,IAAI,SAAS,IAAI,IAAI,UAAU,IAAI,KAAK,IAAI,IAAI,IAAI,UAChD,IAAI,YAAY,IAAI,cAAc,IAAI;AAAA,QAC5C;AACA,YAAI,IAAI;AAER,sBAAc,MAAM,QAAQ,CAAC;AAC7B,aAAK,IAAI,WAAW,KAAK,CAAC;AAE1B,aAAK,KAAK,MAAM,IAAI,QAAQ;AAE5B,sBAAc,MAAM,SAAS,EAAE,CAAC;AAChC,aAAK,UAAU,UAAU,KAAK,GAAG,OAAO;AAExC,sBAAc,MAAM,IAAI,KAAK,OAAO;AACpC,aAAK,UAAU,kBAAkB,KAAK,GAAG,EAAE;AAE3C,sBAAc,MAAM,GAAG,KAAK,EAAE;AAC9B,aAAK,UAAU,aAAa,KAAK,GAAG,CAAC;AAErC,sBAAc,MAAM,SAAS,KAAK,CAAC;AACnC,aAAK,UAAU,SAAS,KAAK,GAAG,OAAO;AAEvC,sBAAc,MAAM,WAAW,KAAK,OAAO;AAC3C,aAAK,IAAI,QAAQ,KAAK,CAAC;AAEvB,sBAAc,MAAM,aAAa,KAAK,SAAS;AAC/C,aAAK,UAAU,UAAU,KAAK,GAAG,WAAW;AAE5C,sBAAc,MAAM,cAAc,KAAK,WAAW;AAClD,aAAK,UAAU,WAAW,KAAK,GAAG,YAAY;AAE9C,eAAO,MAAM,CAAC,cAAc;AAC1B,sBAAY,iBAAiB,WAAW,OAAO;AAC/C,cAAI,CAAC;AACH,kBAAM,IAAI,MAAM,4CAA4C;AAE9D,gBAAM,SAAS,UAAU;AACzB,gBAAM,aAAc,KAAK,SAAS,SAAS;AAC3C,cAAI,KAAK,UAAU,MAAM;AACzB,gBAAM,SAAS,KAAK,UAAU,MAAM;AAAA,YAClC,aAAa,IAAI,IAAI,UAAU,IAAI;AAAA,UACrC;AAEA,qBAAW,MAAM,QAAQ,IAAI,QAAQ,KAAK,QAAQ,CAAC;AAEnD,wBAAc,QAAQ,IAAI,UAAU,IAAI,QAAQ,KAAK,UAAU;AAC/D,wBAAc,QAAQ,SAAS,KAAK,CAAC;AACrC,iBAAO,UAAU,SAAS,KAAK,GAAG,OAAO;AACzC,wBAAc,QAAQ,QAAQ,KAAK,OAAO;AAC1C,iBAAO,IAAI,WAAW,KAAK,CAAC;AAE5B,eAAK,YAAY,KAAK,WAAW;AAEjC,eAAK,UAAU,KAAK;AAAA,YAClB;AAAA,UACF;AACA,qBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,QACxD,CAAC;AAAA,MACH;AAAA,MACA,aAAa,UAAU;AACrB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,UAAU,OAAO,WAAW,QAAQ;AAC1C,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,IAAI;AAAA,QAC1C;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,eAAO,UAAU,UAAU,KAAK,GAAG,OAAO;AAE1C,sBAAc,QAAQ,IAAI,KAAK,OAAO;AACtC,eAAO,UAAU,kBAAkB,KAAK,GAAG,EAAE;AAE7C,sBAAc,QAAQ,IAAI,KAAK,EAAE;AACjC,eAAO,UAAU,wBAAwB,KAAK,GAAG,EAAE;AAEnD,sBAAc,QAAQ,GAAG,KAAK,EAAE;AAEhC,sBAAc,QAAQ,GAAG,KAAK,CAAC;AAE/B,aAAK,YAAY,KAAK,sBAAsB;AAE5C,aAAK,UAAU,KAAK;AAAA,UAClB;AAAA,QACF;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,SAAS,UAAU;AACjB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,UAAU,OAAO,WAAW,QAAQ;AAC1C,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,UAAU,IAAI,KAAK,IAAI,CAAC;AAE1E,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,eAAO,UAAU,UAAU,KAAK,GAAG,OAAO;AAE1C,sBAAc,QAAQ,IAAI,KAAK,OAAO;AACtC,eAAO,UAAU,kBAAkB,KAAK,GAAG,EAAE;AAE7C,sBAAc,QAAQ,GAAG,KAAK,EAAE;AAChC,eAAO,UAAU,QAAQ,KAAK,GAAG,CAAC;AAElC,aAAK,YAAY,KAAK,MAAM;AAE5B,aAAK,UAAU,KAAK,OAAO,2CAA2C;AACtE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,YAAY,WAAW;AACrB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,oBAAoB;AACxB,YAAI;AAEJ,YAAI,WAAW;AACb,yBAAe,IAAI,MAAM,UAAU,MAAM;AACzC,mBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,kBAAM,MAAM,OAAO,WAAW,UAAU,CAAC,CAAC;AAC1C,yBAAa,CAAC,IAAI;AAClB,iCAAqB,IAAI;AAAA,UAC3B;AAAA,QACF;AAEA,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,iBAAiB;AAEnE,eAAO,CAAC,IAAI,QAAQ;AAEpB,YAAI,WAAW;AACb,wBAAc,QAAQ,UAAU,QAAQ,EAAE,CAAC;AAC3C,eAAK;AACL,mBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,kBAAM,MAAM,aAAa,CAAC;AAC1B,0BAAc,QAAQ,KAAK,CAAC;AAC5B,iBAAK;AACL,gBAAI,KAAK;AACP,qBAAO,UAAU,UAAU,CAAC,GAAG,GAAG,GAAG;AACrC,mBAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF,OAAO;AACL,wBAAc,QAAQ,GAAG,EAAE,CAAC;AAAA,QAC9B;AAEA,aAAK,UAAU,KAAK,OAAO,0CAA0C;AACrE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA;AAAA;AAAA,MAIA,aAAa,UAAU,UAAU,WAAW;AAC1C,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,UAAU,OAAO,WAAW,QAAQ;AAC1C,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC;AAE1E,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,IAAI,EAAE,CAAC;AAC7B,eAAO,UAAU,iBAAiB,KAAK,GAAG,EAAE;AAE5C,eAAO,KAAK,EAAE,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEvE,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,eAAO,UAAU,UAAU,KAAK,GAAG,OAAO;AAE1C,sBAAc,QAAQ,UAAU,KAAK,OAAO;AAE5C,aAAK,UACA,KAAK,OAAO,kDAAkD;AACnE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,mBAAmB,UAAU,UAAU,WAAW;AAChD,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,UAAU,OAAO,WAAW,QAAQ;AAC1C,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC;AAE1E,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,IAAI,EAAE,CAAC;AAC7B,eAAO,UAAU,wBAAwB,KAAK,GAAG,EAAE;AAEnD,eAAO,KAAK,EAAE,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEvE,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,eAAO,UAAU,UAAU,KAAK,GAAG,OAAO;AAE1C,sBAAc,QAAQ,UAAU,KAAK,OAAO;AAE5C,aAAK,UACA,KAAK,OAAO,yDAAyD;AAC1E,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,2BAA2B,YAAY,WAAW;AAChD,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,gBAAgB,OAAO,WAAW,UAAU;AAClD,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,KAAK,IAAI,IAAI;AAAA,QACvB;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,IAAI,EAAE,CAAC;AAC7B,eAAO,UAAU,mCAAmC,KAAK,GAAG,EAAE;AAE9D,eAAO,KAAK,EAAE,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEvE,sBAAc,QAAQ,eAAe,EAAE,CAAC;AACxC,eAAO,UAAU,YAAY,KAAK,GAAG,aAAa;AAElD,aAAK,UAAU,KAAK;AAAA,UAClB;AAAA,QACF;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,iCAAiC,YAAY,WAAW;AACtD,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,gBAAgB,OAAO,WAAW,UAAU;AAClD,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,KAAK,IAAI,IAAI;AAAA,QACvB;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,IAAI,EAAE,CAAC;AAC7B,eAAO,UAAU,0CAA0C,KAAK,GAAG,EAAE;AAErE,eAAO,KAAK,EAAE,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEvE,sBAAc,QAAQ,eAAe,EAAE,CAAC;AACxC,eAAO,UAAU,YAAY,KAAK,GAAG,aAAa;AAElD,YAAI,KAAK,QAAQ;AACf,eAAK;AAAA,YACH;AAAA,UAEF;AAAA,QACF;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,YAAY,MAAM,YAAY,WAAW,KAAK;AAC5C,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,SAAS,OAAO,WAAW,IAAI,KAAK;AAC1C,cAAM,SAAS,OAAO,WAAW,IAAI,KAAK;AAC1C,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,SAAS;AAAA,QACzD;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,IAAI,EAAE,CAAC;AAC7B,eAAO,UAAU,gBAAgB,KAAK,GAAG,EAAE;AAE3C,sBAAc,QAAQ,MAAM,KAAK,EAAE;AAEnC,sBAAc,QAAQ,YAAY,KAAK,CAAC;AAExC,sBAAc,QAAQ,WAAW,KAAK,CAAC;AAEvC,sBAAc,QAAQ,QAAQ,KAAK,CAAC;AACpC,eAAO,UAAU,IAAI,OAAO,KAAK,GAAG,MAAM;AAE1C,sBAAc,QAAQ,IAAI,SAAS,KAAK,MAAM;AAE9C,sBAAc,QAAQ,QAAQ,KAAK,CAAC;AACpC,eAAO,UAAU,IAAI,OAAO,KAAK,GAAG,MAAM;AAE1C,sBAAc,QAAQ,IAAI,SAAS,KAAK,MAAM;AAE9C,aAAK,UAAU,KAAK;AAAA,UAClB,qCAAqC,IAAI;AAAA,QAC3C;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,0BAA0B,MAAM,YAAY,WAAW,KAAK;AAC1D,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,UAAU,OAAO,WAAW,IAAI,UAAU;AAChD,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,UAAU,IAAI;AAAA,QAC7C;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,IAAI,EAAE,CAAC;AAC7B,eAAO,UAAU,kCAAkC,KAAK,GAAG,EAAE;AAE7D,sBAAc,QAAQ,MAAM,KAAK,EAAE;AAEnC,sBAAc,QAAQ,YAAY,KAAK,CAAC;AAExC,sBAAc,QAAQ,WAAW,KAAK,CAAC;AAEvC,sBAAc,QAAQ,SAAS,KAAK,CAAC;AACrC,eAAO,UAAU,IAAI,YAAY,KAAK,GAAG,OAAO;AAGhD,mBAAW,QAAQ,GAAG,KAAK,SAAS,IAAI,CAAC;AAEzC,YAAI,KAAK,QAAQ;AACf,eAAK;AAAA,YACH,qCACU,IAAI;AAAA,UAChB;AAAA,QACF;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,uBAAuB,WAAW;AAChC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,KAAK,CAAC;AAExD,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,IAAI,EAAE,CAAC;AAC7B,eAAO,UAAU,gCAAgC,KAAK,GAAG,EAAE;AAE3D,eAAO,KAAK,EAAE,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEvE,aAAK,UAAU,KAAK;AAAA,UAClB;AAAA,QACF;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,QAAQ,MAAM,YAAY,WAAW;AACnC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAI5D,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;AAE/D,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,GAAG,EAAE,CAAC;AAC5B,eAAO,UAAU,WAAW,KAAK,GAAG,CAAC;AAErC,sBAAc,QAAQ,MAAM,KAAK,CAAC;AAElC,sBAAc,QAAQ,YAAY,KAAK,CAAC;AAExC,sBAAc,QAAQ,WAAW,KAAK,CAAC;AAEvC,aAAK,UACA,KAAK,OAAO,qCAAqC,IAAI,YAAY;AACtE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,aAAa,MAAM,MAAM,MAAM,QAAQ,OAAO;AAC5C,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAI5D,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI;AAAA,QACnC;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,IAAI,KAAK,CAAC;AAChC,eAAO,UAAU,iBAAiB,KAAK,GAAG,EAAE;AAE5C,eAAO,KAAK,EAAE,IAAI;AAElB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,MAAM,KAAK,CAAC;AAElC,sBAAc,QAAQ,OAAO,KAAK,CAAC;AAEnC,sBAAc,QAAQ,QAAQ,KAAK,CAAC;AAEpC,aAAK,UAAU,KAAK;AAAA,UAClB,wCAAwC,IAAI;AAAA,QAC9C;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,IAAI,MAAM,MAAM,MAAM,QAAQ,OAAO,MAAM,OAAO,WAAW;AAC3D,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAI5D,YAAI,CAAC,QAAQ,CAAC,KAAK;AACjB,iBAAO;AACT,YAAI,SACG,CAAC,OAAO,SAAS,KAAK,KACtB,CAAC,MAAM,QAAQ,KAAK,KACpB,OAAO,UAAU,YACjB,UAAU,MAAM;AACrB,kBAAQ,aAAa,KAAK;AAAA,QAC5B;AACA,YAAI,CAAC,SAAS,CAAC,MAAM;AACnB,kBAAQ;AAEV,cAAM,UAAU,KAAK;AACrB,cAAM,WAAW,MAAM;AACvB,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,QACxD;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,GAAG,KAAK,CAAC;AAC/B,eAAO,UAAU,WAAW,KAAK,GAAG,CAAC;AAErC,eAAO,KAAK,CAAC,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEtE,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,eAAO,UAAU,MAAM,KAAK,GAAG,OAAO;AAEtC,sBAAc,QAAQ,MAAM,KAAK,OAAO;AAExC,sBAAc,QAAQ,MAAM,KAAK,CAAC;AAElC,sBAAc,QAAQ,OAAO,KAAK,CAAC;AAEnC,sBAAc,QAAQ,QAAQ,KAAK,CAAC;AAEpC,sBAAc,QAAQ,UAAU,KAAK,CAAC;AACtC,aAAK;AACL,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,mBAAS,IAAI,GAAG,IAAI,UAAU,EAAE;AAC9B,mBAAO,GAAG,IAAI,MAAM,CAAC;AAAA,QACzB,WAAW,OAAO,SAAS,KAAK,GAAG;AACjC,iBAAO,IAAI,OAAO,CAAC;AAAA,QACrB;AAEA,aAAK,UACA,KAAK,OAAO,wCAAwC,IAAI,YAAY;AACzE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,MAAM,MAAM,WAAW;AACrB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAI5D,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC;AAE3D,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,GAAG,KAAK,CAAC;AAC/B,eAAO,UAAU,SAAS,KAAK,GAAG,CAAC;AAEnC,eAAO,KAAK,CAAC,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEtE,aAAK,UACA,KAAK,OAAO,wCAAwC,IAAI,UAAU;AACvE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,KAAK,MAAM,KAAK,WAAW;AACzB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAI5D,cAAM,QAAQ,OAAO,SAAS,GAAG;AACjC,cAAM,SAAU,QAAQ,IAAI,SAAS,OAAO,WAAW,GAAG;AAC1D,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM;AAExE,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,GAAG,KAAK,CAAC;AAC/B,eAAO,UAAU,QAAQ,KAAK,GAAG,CAAC;AAElC,eAAO,KAAK,CAAC,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEtE,sBAAc,QAAQ,QAAQ,EAAE,CAAC;AACjC,YAAI;AACF,iBAAO,IAAI,KAAK,KAAK,CAAC;AAAA;AAEtB,iBAAO,UAAU,KAAK,KAAK,GAAG,MAAM;AAEtC,aAAK,UAAU,KAAK;AAAA,UAClB,wCAAwC,IAAI,WAAW,GAAG;AAAA,QAC5D;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,OAAO,MAAM,QAAQ;AACnB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAI5D,cAAM,aAAa;AAEnB,iBAAS,OAAO,YAAY;AAC5B,YAAI,OAAO,MAAM,GAAG,CAAC,MAAM;AACzB,mBAAS,OAAO,MAAM,CAAC;AAEzB,YAAI,QAAQ,MAAM,MAAM;AACtB,gBAAM,IAAI,MAAM,mBAAmB,UAAU,EAAE;AAEjD,cAAM,YAAY,OAAO;AACzB,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,QAC1B;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,GAAG,KAAK,CAAC;AAC/B,eAAO,UAAU,UAAU,KAAK,GAAG,CAAC;AAEpC,eAAO,KAAK,CAAC,IAAI;AAEjB,sBAAc,QAAQ,WAAW,EAAE,CAAC;AACpC,eAAO,UAAU,QAAQ,KAAK,GAAG,SAAS;AAE1C,aAAK,UAAU,KAAK;AAAA,UAClB,wCAAwC,IAAI,aAAa,MAAM;AAAA,QACjE;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,IAAI,MAAM,KAAK,KAAK,WAAW;AAC7B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAI5D,cAAM,SAAS,OAAO,WAAW,GAAG;AACpC,cAAM,QAAQ,OAAO,SAAS,GAAG;AACjC,cAAM,SAAU,QAAQ,IAAI,SAAS,OAAO,WAAW,GAAG;AAC1D,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI;AAAA,QACvC;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,GAAG,KAAK,CAAC;AAC/B,eAAO,UAAU,OAAO,KAAK,GAAG,CAAC;AAEjC,eAAO,KAAK,CAAC,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEtE,sBAAc,QAAQ,QAAQ,EAAE,CAAC;AACjC,eAAO,UAAU,KAAK,KAAK,GAAG,MAAM;AAEpC,sBAAc,QAAQ,QAAQ,KAAK,MAAM;AACzC,YAAI;AACF,iBAAO,IAAI,KAAK,KAAK,CAAC;AAAA;AAEtB,iBAAO,UAAU,KAAK,KAAK,GAAG,MAAM;AAEtC,aAAK,UAAU,KAAK;AAAA,UAClB,wCAAwC,IAAI,UAAU,GAAG,IAAI,GAAG;AAAA,QAClE;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,WAAW,MAAM,KAAK,WAAW;AAC/B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAI5D,cAAM,WAAW,IAAI;AACrB,cAAM,SAAS,IAAI;AACnB,cAAM,aAAa,OAAO,SAAS,QAAQ;AAC3C,cAAM,WAAY,aACE,SAAS,SACT,OAAO,WAAW,QAAQ;AAC9C,cAAM,cAAc,OAAO,SAAS,MAAM;AAC1C,cAAM,YAAa,cACE,OAAO,SACP,OAAO,WAAW,MAAM;AAC7C,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,WAAW,IAAI,YAAY;AAAA,QACzD;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,GAAG,KAAK,CAAC;AAC/B,eAAO,UAAU,WAAW,KAAK,GAAG,CAAC;AAErC,eAAO,KAAK,CAAC,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEtE,eAAO,EAAE,CAAC,IAAK,IAAI,SAAS,IAAI;AAEhC,sBAAc,QAAQ,UAAU,EAAE,CAAC;AACnC,YAAI;AACF,iBAAO,IAAI,UAAU,KAAK,CAAC;AAAA;AAE3B,iBAAO,UAAU,UAAU,KAAK,GAAG,QAAQ;AAE7C,sBAAc,QAAQ,WAAW,KAAK,QAAQ;AAC9C,YAAI;AACF,iBAAO,IAAI,QAAQ,KAAK,CAAC;AAAA;AAEzB,iBAAO,YAAY,QAAQ,KAAK,GAAG,SAAS;AAE9C,sBAAc,QAAS,IAAI,UAAU,GAAI,KAAK,SAAS;AAEvD,aAAK,UACA,KAAK,OAAO,wCAAwC,IAAI,YAAY;AACzE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,UAAU,MAAM,MAAM,WAAW;AAC/B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAG5D,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO;AAEzE,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,GAAG,KAAK,CAAC;AAC/B,eAAO,UAAU,aAAa,KAAK,GAAG,CAAC;AAEvC,eAAO,KAAK,CAAC,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEtE,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,eAAO,UAAU,MAAM,KAAK,GAAG,OAAO;AAEtC,aAAK,UAAU,KAAK;AAAA,UAClB,wCAAwC,IAAI,gBAAgB,IAAI;AAAA,QAClE;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,qBAAqB,MAAM,WAAW;AACpC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAI5D,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,KAAK,CAAC;AAE5D,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,IAAI,KAAK,CAAC;AAChC,eAAO,UAAU,8BAA8B,KAAK,GAAG,EAAE;AAEzD,eAAO,KAAK,EAAE,IAAK,cAAc,UAAa,cAAc,OAAO,IAAI;AAEvE,YAAI,KAAK,QAAQ;AACf,eAAK;AAAA,YACH,wCACU,IAAI;AAAA,UAChB;AAAA,QACF;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,sBAAsB,MAAM;AAC1B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,YAAY;AAChB,cAAM,aAAa,CAAC;AACpB,mBAAW,OAAO,MAAM;AACtB,gBAAM,YAAY,IAAI,aAAa;AACnC,uBAAa,IAAI,UAAU;AAC3B,qBAAW,KAAK,SAAS;AAAA,QAC3B;AAEA,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,KAAK,IAAI,SAAS;AAEpE,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,IAAI,EAAE,CAAC;AAC7B,eAAO,UAAU,iCAAiC,KAAK,GAAG,EAAE;AAE5D,eAAO,KAAK,EAAE,IAAI;AAElB,UAAE;AACF,mBAAW,OAAO,YAAY;AAC5B,wBAAc,QAAQ,IAAI,QAAQ,CAAC;AACnC,qBAAW,KAAK,QAAQ,GAAG,IAAI,QAAQ,KAAK,CAAC;AAC7C,eAAK,IAAI;AAAA,QACX;AAEA,YAAI,KAAK,QAAQ;AACf,eAAK;AAAA,YACH;AAAA,UACF;AAAA,QACF;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,cAAc,SAAS;AACrB,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,aAAa,OAAO,WAAW,OAAO;AAC5C,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,UAAU;AAE5D,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,YAAY,EAAE,CAAC;AACrC,eAAO,UAAU,SAAS,KAAK,GAAG,UAAU;AAE5C,aAAK,UAAU,KAAK,OAAO,qCAAqC,OAAO,GAAG;AAC1E,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAEtD,YAAI,KAAK,WAAW,KAAK,WAAW,YAAY,gBAAgB;AAC9D,gBAAM,SAAS,KAAK;AACpB,eAAK,UAAU;AACf,gBAAM,YAAY,OAAO,WAAW,MAAM;AAC1C,cAAI,KAAK,UAAU,MAAM;AACzB,gBAAME,UAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,YAAY,CAAC;AAE/D,UAAAA,QAAO,CAAC,IAAI,QAAQ;AAEpB,wBAAcA,SAAQ,WAAW,EAAE,CAAC;AACpC,UAAAA,QAAO,UAAU,QAAQ,KAAK,GAAG,SAAS;AAE1C,wBAAcA,SAAQ,GAAG,KAAK,SAAS;AAEvC,eAAK,UAAU,KAAK,OAAO,mCAAmC;AAC9D,qBAAW,MAAM,KAAK,UAAU,MAAM,SAASA,OAAM,CAAC;AAAA,QACxD;AAAA,MACF;AAAA;AAAA,MAEA,eAAe,MAAM,YAAY,WAAW,KAAK;AAC/C,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,eAAe,OAAO,WAAW,IAAI,SAAS;AACpD,cAAM,gBAAgB,OAAO,WAAW,IAAI,UAAU;AACtD,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,eAAe,IAAI,IAAI,gBAAgB;AAAA,QACtE;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,IAAI,EAAE,CAAC;AAC7B,eAAO,UAAU,mBAAmB,KAAK,GAAG,EAAE;AAE9C,sBAAc,QAAQ,MAAM,KAAK,EAAE;AAEnC,sBAAc,QAAQ,YAAY,KAAK,CAAC;AAExC,sBAAc,QAAQ,WAAW,KAAK,CAAC;AAEvC,sBAAc,QAAQ,cAAc,KAAK,CAAC;AAC1C,eAAO,UAAU,IAAI,WAAW,KAAK,GAAG,YAAY;AAEpD,sBAAc,QAAQ,IAAI,WAAW,KAAK,YAAY;AAEtD,sBAAc,QAAQ,eAAe,KAAK,CAAC;AAC3C,eAAO,UAAU,IAAI,YAAY,KAAK,GAAG,aAAa;AAEtD,sBAAc,QAAQ,IAAI,YAAY,KAAK,aAAa;AAExD,aAAK,UAAU,KAAK;AAAA,UAClB,qCAAqC,IAAI;AAAA,QAC3C;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,IAAI,MAAM,YAAY,WAAW,KAAK;AACpC,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,UAAU,OAAO,WAAW,IAAI,UAAU;AAChD,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,UAAU;AAAA,QACxC;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,GAAG,EAAE,CAAC;AAC5B,eAAO,UAAU,OAAO,KAAK,GAAG,CAAC;AAEjC,sBAAc,QAAQ,MAAM,KAAK,CAAC;AAElC,sBAAc,QAAQ,YAAY,KAAK,CAAC;AAExC,sBAAc,QAAQ,WAAW,KAAK,CAAC;AAEvC,sBAAc,QAAQ,SAAS,KAAK,CAAC;AACrC,eAAO,UAAU,IAAI,YAAY,KAAK,GAAG,OAAO;AAEhD,sBAAc,QAAQ,IAAI,YAAY,KAAK,OAAO;AAElD,aAAK,UAAU,KAAK;AAAA,UAClB,qCAAqC,IAAI;AAAA,QAC3C;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,kBAAkB,MAAM,YAAY,WAAW;AAC7C,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC;AAEhE,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,IAAI,EAAE,CAAC;AAC7B,eAAO,UAAU,0BAA0B,KAAK,GAAG,EAAE;AAErD,sBAAc,QAAQ,MAAM,KAAK,EAAE;AAEnC,sBAAc,QAAQ,YAAY,KAAK,CAAC;AAExC,sBAAc,QAAQ,WAAW,KAAK,CAAC;AAEvC,aAAK,UAAU,KAAK;AAAA,UAClB,qCAAqC,IAAI;AAAA,QAC3C;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,6BAA6B,MAAM,YAAY,WAAW,KAAK;AAC7D,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,UAAU,OAAO,WAAW,IAAI,UAAU;AAChD,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,UAAU;AAAA,QACzC;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,IAAI,EAAE,CAAC;AAC7B,eAAO,UAAU,qCAAqC,KAAK,GAAG,EAAE;AAEhE,sBAAc,QAAQ,MAAM,KAAK,EAAE;AAEnC,sBAAc,QAAQ,YAAY,KAAK,CAAC;AAExC,sBAAc,QAAQ,WAAW,KAAK,CAAC;AAEvC,sBAAc,QAAQ,SAAS,KAAK,CAAC;AACrC,eAAO,UAAU,IAAI,YAAY,KAAK,GAAG,OAAO;AAEhD,sBAAc,QAAQ,GAAG,KAAK,OAAO;AAErC,YAAI,KAAK,QAAQ;AACf,eAAK;AAAA,YACH,qCACU,IAAI;AAAA,UAChB;AAAA,QACF;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,WAAW,MAAM,QAAQ;AACvB,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAG5D,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;AAEhE,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,IAAI,KAAK,CAAC;AAChC,eAAO,UAAU,eAAe,KAAK,GAAG,EAAE;AAE1C,eAAO,KAAK,EAAE,IAAI;AAElB,sBAAc,QAAQ,QAAQ,EAAE,CAAC;AAEjC,aAAK,UAAU,KAAK;AAAA,UAClB,wCAAwC,IAAI,kBAAkB,MAAM;AAAA,QACtE;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,WAAW,MAAM,MAAM,YAAY,KAAK;AACtC,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAI5D,cAAM,aAAa;AAEnB,YAAI,OAAO,eAAe,YAAY,CAAC;AACrC,gBAAM,IAAI,MAAM,mBAAmB,UAAU,EAAE;AAEjD,YAAI,SAAS,KAAK,YAAY;AAC9B,YAAI,OAAO,MAAM,GAAG,CAAC,MAAM;AACzB,mBAAS,OAAO,MAAM,CAAC;AAEzB,YAAI,QAAQ,MAAM,MAAM;AACtB,gBAAM,IAAI,MAAM,mBAAmB,UAAU,EAAE;AAEjD,cAAM,UAAU,OAAO,WAAW,MAAM;AACxC,cAAM,SAAU,MAAM,OAAO,WAAW,GAAG,IAAI;AAC/C,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,UAAU,IAAI,IAAI,SAAS;AAAA,QACtD;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,MAAM,EAAE,CAAC;AAE/B,sBAAc,QAAQ,IAAI,KAAK,CAAC;AAChC,eAAO,UAAU,eAAe,KAAK,GAAG,EAAE;AAE1C,eAAO,KAAK,EAAE,IAAI;AAElB,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,eAAO,UAAU,QAAQ,KAAK,GAAG,OAAO;AAExC,eAAO,KAAK,OAAO,IAAK,aAAa,IAAI;AAEzC,sBAAc,QAAQ,QAAQ,EAAE,CAAC;AAEjC,aAAK;AACL,YAAI,QAAQ;AACV,iBAAO,UAAU,KAAK,GAAG,MAAM;AAC/B,eAAK;AAAA,QACP;AAEA,sBAAc,QAAQ,GAAG,CAAC;AAE1B,aAAK,UAAU,KAAK;AAAA,UAClB,wCAAwC,IAAI,kBAAkB,IAAI;AAAA,QACpE;AACA,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA;AAAA,MAEA,YAAY,aAAa,WAAW;AAClC,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,KAAK,YAAY,WAAW;AAC9B,gBAAM,IAAI,MAAM,qBAAqB;AAEvC,YAAI;AAEJ,YAAI,OAAO,gBAAgB,WAAW;AACpC,sBAAY;AACZ,wBAAc;AAAA,QAChB;AAEA,YAAI,aAAa;AACf,oBAAU,CAAC;AACX,mBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,EAAE,GAAG;AAC3C,gBAAI,YAAY,CAAC,EAAE,YAAY,MAAM;AACnC;AACF,oBAAQ,KAAK,YAAY,CAAC,CAAC;AAAA,UAC7B;AACA,oBAAU,QAAQ,KAAK,GAAG;AAAA,QAC5B,OAAO;AACL,oBAAU;AAAA,QACZ;AAEA,cAAM,aAAa,QAAQ;AAC3B,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,aAAa,CAAC;AAEhE,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,YAAY,EAAE,CAAC;AACrC,eAAO,UAAU,SAAS,KAAK,GAAG,UAAU;AAE5C,eAAO,KAAK,UAAU,IAAK,cAAc,OAAO,IAAI;AAEpD,aAAK,YAAY,MAAM;AAEvB,aAAK,UAAU,KAAK,OAAO,oCAAoC;AAC/D,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,cAAc;AACZ,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,KAAK,YAAY,WAAW;AAC9B,gBAAM,IAAI,MAAM,qBAAqB;AAEvC,cAAM,IAAI,KAAK,UAAU,MAAM;AAC/B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,CAAC;AAE3C,eAAO,CAAC,IAAI,QAAQ;AAEpB,aAAK,YAAY,MAAM;AACvB,aAAK,iBAAiB;AAEtB,aAAK,UAAU,KAAK,OAAO,oCAAoC;AAC/D,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAEtD,YAAI,KAAK,KAAK,WAAW,GAAG,aAAa;AACvC,eAAK,UAAU,OAAO,IAAI,iBAAiB;AAC7C,YAAI,KAAK,KAAK,WAAW,GAAG,aAAa;AACvC,eAAK,UAAU,QAAQ,IAAI,iBAAiB,IAAI;AAAA,MACpD;AAAA,MACA,SAAS,SAAS,KAAK;AACrB,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,KAAK,YAAY,WAAW,KAAK,KAAK,YAAY,CAAC,MAAM;AAC3D,gBAAM,IAAI,MAAM,kCAAkC;AAIpD,cAAM,aAAa,OAAO,WAAW,OAAO;AAC5C,cAAM,SAAS,IAAI;AACnB,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,aAAa,IAAI,MAAM;AAEzE,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,YAAY,EAAE,CAAC;AACrC,eAAO,UAAU,SAAS,KAAK,GAAG,UAAU;AAE5C,sBAAc,QAAQ,QAAQ,KAAK,UAAU;AAC7C,eAAO,IAAI,KAAK,KAAK,CAAC;AAEtB,aAAK,YAAY,MAAM;AAEvB,aAAK,UAAU,KAAK,OAAO,kCAAkC;AAC7D,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,cAAc,QAAQ;AACpB,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,YAAY,OAAO,WAAW,MAAM;AAC1C,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,IAAI,YAAY,CAAC;AAE/D,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,WAAW,EAAE,CAAC;AACpC,eAAO,UAAU,QAAQ,KAAK,GAAG,SAAS;AAE1C,sBAAc,QAAQ,GAAG,KAAK,SAAS;AAEvC,aAAK,UAAU,KAAK,OAAO,6CAA6C;AACxE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,MACA,YAAY,MAAM,cAAc,SAAS;AACvC,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,aAAa;AACjB,cAAM,UAAU,OAAO,OAAO,WAAW,IAAI,IAAI;AACjD,cAAM,WAAW,eAAe,OAAO,WAAW,YAAY,IAAI;AAElE,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE;AACpC,wBAAc,IAAI,OAAO,WAAW,QAAQ,CAAC,EAAE,MAAM,IAAI;AAE3D,YAAI,IAAI,KAAK,UAAU,MAAM;AAC7B,cAAM,SAAS,KAAK,UAAU,MAAM;AAAA,UAClC,IAAI,IAAI,UAAU,IAAI,WAAW,IAAI,IAAI;AAAA,QAC3C;AAEA,eAAO,CAAC,IAAI,QAAQ;AAEpB,sBAAc,QAAQ,SAAS,EAAE,CAAC;AAClC,aAAK;AACL,YAAI,MAAM;AACR,iBAAO,UAAU,MAAM,GAAG,OAAO;AACjC,eAAK;AAAA,QACP;AAEA,sBAAc,QAAQ,UAAU,CAAC;AACjC,aAAK;AACL,YAAI,cAAc;AAChB,iBAAO,UAAU,cAAc,GAAG,QAAQ;AAC1C,eAAK;AAAA,QACP;AAEA,sBAAc,QAAQ,GAAG,CAAC;AAE1B,sBAAc,QAAQ,QAAQ,QAAQ,KAAK,CAAC;AAC5C,aAAK;AACL,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,gBAAM,SAAS,QAAQ,CAAC;AACxB,gBAAM,YAAY,OAAO,WAAW,OAAO,MAAM;AAEjD,wBAAc,QAAQ,WAAW,CAAC;AAClC,eAAK;AACL,cAAI,WAAW;AACb,mBAAO,UAAU,OAAO,QAAQ,GAAG,SAAS;AAC5C,iBAAK;AAAA,UACP;AACA,iBAAO,GAAG,IAAK,OAAO,OAAO,IAAI;AAAA,QACnC;AAEA,aAAK,UAAU,KAAK,OAAO,yCAAyC;AACpE,mBAAW,MAAM,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,MACxD;AAAA,IACF;AAGA,QAAM,WAAW;AAIjB,aAAS,YAAY,OAAO,GAAG,KAAK;AAClC,UAAI;AACJ,UAAI;AACJ,UAAI,KAAK,SAAS;AAChB,eAAO,OAAO,YAAY,KAAK,QAAQ,UAAU,MAAM,EAAE;AACzD,aAAK,IAAI,KAAK,SAAS,CAAC;AACxB,YAAI,MAAM,GAAG;AACX,eAAK,IAAI,OAAO,KAAK,QAAQ,MAAM;AAAA,QACrC,OAAO;AACL,eAAK;AAAA,YAAI,IAAI;AAAA,cAAW,MAAM;AAAA,cACN,MAAM,aAAa;AAAA,cAClB,MAAM;AAAA,YAAE;AAAA,YACxB,KAAK,QAAQ;AAAA,UAAM;AAAA,QAC9B;AACA,sBAAc,KAAK,QAAQ;AAC3B,YAAI;AAAA,MACN,OAAO;AACL,eAAO;AACP,sBAAc;AAAA,MAChB;AACA,YAAM,KAAK;AACX,UAAI,QAAQ;AACZ,UAAI,MAAM;AACV,UAAI,SAAS;AACb,UAAI,UAAU;AACd,UAAI,QAAQ;AACZ,aAAO,IAAI,KAAK,QAAQ,EAAE,GAAG;AAC3B,cAAM,KAAK,KAAK,CAAC;AAEjB,YAAI,OAAO,IAAe;AACxB,mBAAS;AACT;AAAA,QACF;AAEA,YAAI,OAAO,IAAe;AACxB,cAAI,MAAM,SACH,MAAM,QAAQ,KACd,KAAK,KAAK,MAAM,MAChB,KAAK,QAAQ,CAAC,MAAM,MACpB,KAAK,QAAQ,CAAC,MAAM,MACpB,KAAK,QAAQ,CAAC,MAAM,IAAc;AAEvC,kBAAM,OAAO,KAAK,YAAY,IAAI,MAAM,CAAC;AACzC,kBAAM,WAAY,UAAU,KAAK,OAAO,KAAK,MAAM,QAAQ,EAAE;AAC7D,kBAAM,IAAI,SAAS,KAAK,QAAQ;AAChC,gBAAI,CAAC;AACH,oBAAM,IAAI,MAAM,+BAA+B;AAEjD,kBAAM,SAAS;AAAA,cACb,UAAW,UAAU,KAAK,KAAK,KAAK,MAAM,GAAG,QAAQ,EAAE;AAAA,cACvD;AAAA,cACA,UAAU;AAAA,gBACR,UAAU,EAAE,CAAC;AAAA,gBACb,UAAU,EAAE,CAAC;AAAA,cACf;AAAA,cACA,UAAU,EAAE,CAAC;AAAA,YACf;AAGA,iBAAK,kBAAkB,OAAO,KAAK,QAAQ;AAE3C,iBAAK,UAAU,KAAK,OAAO,iBAAiB,QAAQ,QAAQ,CAAC,EAAE;AAC/D,iBAAK,eAAe,eAAe,MAAM;AAEzC,iBAAK,UAAU;AACf,iBAAK,YACH,IAAI,aAAa,GAAG,aAAa,KAAK,MAAM,EAAE,aAAa,KAAK,CAAC,CAAC;AACpE,iBAAK,SAAS;AAEd,iBAAK,UAAU,MAAM;AACrB,gBAAI,CAAC,KAAK,WAAW;AAEnB,qBAAO;AAAA,YACT;AAEA,oBAAQ,IAAI;AAEZ,mBAAO,IAAI,IAAI;AAAA,UACjB;AAGA,cAAI,KAAK;AACP,kBAAM,IAAI,MAAM,sCAAsC;AAExD,cAAI,EAAE,QAAQ;AACZ,kBAAM,IAAI,MAAM,6BAA6B;AAE/C,mBAAS;AACT,kBAAQ,IAAI;AACZ,oBAAU;AAAA,QACZ,WAAW,QAAQ;AACjB,gBAAM,IAAI,MAAM,kCAAkC;AAAA,QACpD,WAAW,EAAE,WAAW,cAAc;AACpC,gBAAM,IAAI,MAAM,sBAAsB;AAAA,QACxC;AAEA,cAAM;AAAA,MACR;AACA,UAAI,CAAC,KAAK;AACR,aAAK,UAAU,YAAY,MAAM,EAAE;AAErC,aAAO,IAAI;AAAA,IACb;AAEA,aAAS,YAAY,OAAO,GAAG,KAAK;AAClC,aAAO,KAAK,UAAU,QAAQ,OAAO,GAAG,GAAG;AAAA,IAC7C;AAEA,aAAS,UAAU,SAAS;AAG1B,WAAK,UAAU;AAEf,UAAI,QAAQ,WAAW,GAAG;AACxB,aAAK,UAAU,KAAK,OAAO,wCAAwC;AACnE;AAAA,MACF;AAEA,gBAAU,KAAK,UAAU,KAAK,KAAK,OAAO;AAE1C,YAAM,OAAO,QAAQ,CAAC;AACtB,UAAI,SAAS,QAAQ,oBACd,CAAC,KAAK,WACN,CAAC,KAAK,gBAAgB;AAC3B,aAAK,iBAAiB;AACtB,YAAI,KAAK,KAAK,WAAW,GAAG,aAAa;AACvC,eAAK,UAAU,QAAQ,IAAI,iBAAiB,IAAI;AAClD,YAAI,KAAK,KAAK,WAAW,GAAG,aAAa;AACvC,eAAK,UAAU,OAAO,IAAI,iBAAiB;AAAA,MAC/C;AACA,YAAM,UAAU,iBAAiB,IAAI;AACrC,UAAI,YAAY,QAAW;AACzB,aAAK,UAAU,KAAK,OAAO,sCAAsC,IAAI,EAAE;AACvE;AAAA,MACF;AAEA,aAAO,QAAQ,MAAM,OAAO;AAAA,IAC9B;AAEA,aAAS,eAAe,QAAQ;AAC9B,YAAM,WAAW,OAAO,SAAS;AAEjC,UAAI,QAAQ;AAEZ,iBAAW,QAAQ,eAAe;AAChC,YAAI,OAAO,KAAK,CAAC,MAAM,UAAU;AAC/B,cAAI,aAAa,KAAK,CAAC;AACrB,qBAAS,KAAK,CAAC;AAAA,QACnB,WAAW,KAAK,CAAC,EAAE,KAAK,QAAQ,GAAG;AACjC,mBAAS,KAAK,CAAC;AAAA,QACjB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,aAAa,OAAO;AAC3B,YAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,YAAM,QAAQ,OAAO,YAAa,IAAI,KAAK,SAAU,CAAC;AACtD,UAAI,IAAI;AAER,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,cAAM,MAAM,KAAK,CAAC;AAClB,YAAI,QAAQ;AACV;AAEF,cAAM,SAAS,cAAc,GAAG;AAChC,YAAI,WAAW;AACb;AAEF,cAAM,MAAM,MAAM,GAAG;AACrB,YAAI,OAAO,QAAQ,YAAY,SAAS,GAAG,GAAG;AAC5C,gBAAM,GAAG,IAAI;AACb,gBAAM,GAAG,IAAI,QAAQ;AACrB,gBAAM,GAAG,IAAI,QAAQ;AACrB,gBAAM,GAAG,IAAI,QAAQ;AACrB,gBAAM,GAAG,IAAI;AAAA,QACf;AAAA,MACF;AAEA,YAAM,GAAG,IAAI,cAAc;AAE3B,UAAI,IAAI,MAAM;AACZ,eAAO,YAAY,OAAO,GAAG,CAAC;AAEhC,aAAO;AAAA,IACT;AAEA,aAAS,YAAY,OAAO;AAC1B,UAAI,gBACF;AAEF,UAAI;AACF,wBAAgB,eAAe,aAAa;AAC9C,YAAM,UAAU,OAAO,WAAW,aAAa;AAE/C,UAAI,IAAI,MAAM,UAAU,MAAM;AAC9B,YAAM,SAAS,MAAM,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO;AAEvE,aAAO,CAAC,IAAI,QAAQ;AAEpB,oBAAc,QAAQ,GAAG,EAAE,CAAC;AAE5B,oBAAc,QAAQ,IAAI,KAAK,CAAC;AAChC,aAAO,UAAU,mBAAmB,KAAK,GAAG,EAAE;AAE9C,oBAAc,QAAQ,SAAS,KAAK,EAAE;AACtC,aAAO,UAAU,eAAe,KAAK,GAAG,OAAO;AAE/C,YAAM,UAAU,MAAM,OAAO,4BAA4B;AACzD,iBAAW,OAAO,MAAM,UAAU,MAAM,SAAS,MAAM,CAAC;AAAA,IAC1D;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACvlEjB;AAAA;AAAA;AAEA,QAAM,SAAS,UAAQ,QAAQ;AAC/B,QAAM,EAAE,QAAQ,IAAI,UAAQ,MAAM;AAGlC,aAAS,sBAAsB,KAAK;AAClC,UAAI,MAAM;AACV,UAAI,IAAI,IAAI;AACZ,YAAM,QAAQ,IAAI,CAAC,MAAM,MAAM,IAAI;AACnC,aAAO,KAAK,QAAQ,GAAG,KAAK;AAC1B,cAAM,IAAI,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG;AACrC,aAAO,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;AAAA,IACjC;AAEA,aAAS,MAAM,UAAU,OAAO;AAC9B,aAAO,OAAO,UAAU,UAAU,kCAAkC;AACpE,UAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,cAAM,MAAM,SAAS;AACrB,eAAO,MAAM,GAAG,mDAAmD;AACnE,mBAAW,SAAS,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC;AACxC,YAAI,MAAM,GAAG;AACX,iBAAO,UAAU,KAAK,IAAI,SAAS,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,UACrD,SAAS,MAAM,CAAC;AAAA,QAC5B,WAAW,QAAQ,GAAG;AACpB,iBAAO,UAAU,KAAK,IAAI,SAAS,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC;AAAA,QACzD;AACA,eAAO,MAAM,KAAK,IAAI,SAAS,CAAC,CAAC;AAAA,MACnC;AACA,aAAO,MAAM,KAAK,IAAI,OAAO,QAAQ,CAAC;AAAA,IACxC;AAGA,YAAQ,yBAAyB,MAAM,+BAA+B,MAAM;AAAA,MAC1E,YAAY,SAAS;AACnB,cAAM;AACN,cAAM,kBAAkB,MAAM,sBAAsB;AAEpD,cAAM,SAAS;AAKf,aAAK,UAAW,YAAY,SAAY,SAAS,GAAG,OAAO;AAAA,EAAK,MAAM;AAAA,MACxE;AAAA,IACF;AAEA,QAAM,gBAAgB,KAAK;AAC3B,QAAM,oBAAoB,MAAM;AAC9B,UAAI;AACF,eAAO,IAAI,SAAS,kBAAkB,EAAE;AAAA,MAC1C,QAAQ;AAAA,MAAC;AAAA,IACX,GAAG;AACH,YAAQ,mBAAmB,MAAM,yBAAyB,WAAW;AAAA,MACnE,YAAY,KAAK,OAAO,OAAO,uBAAuB;AACpD,cAAM;AACN,cAAM,kBAAkB,MAAM,gBAAgB;AAE9C,eAAO,OAAO,0BAA0B;AACxC,YAAI,MAAO,wBACE,MACA,iBAAiB,GAAG;AACjC,YAAI;AACJ,YAAI,OAAO,UAAU,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,eAAe;AAC9D,qBAAW,sBAAsB,OAAO,KAAK,CAAC;AAAA,QAChD,WAAW,OAAO,UAAU,UAAU;AACpC,qBAAW,OAAO,KAAK;AACvB,cAAI,QAAQ,oBAAoB,QAAQ,CAAC;AACvC,uBAAW,sBAAsB,QAAQ;AAC3C,sBAAY;AAAA,QACd,OAAO;AACL,qBAAW,QAAQ,KAAK;AAAA,QAC1B;AACA,eAAO,eAAe,KAAK,cAAc,QAAQ;AAEjD,aAAK,UAAU;AAAA,MACjB;AAAA,IACF;AAEA,QAAM,uBAAN,MAAM,8BAA6B,UAAU;AAAA,MAC3C,YAAY,MAAM,UAAU,QAAQ;AAClC,cAAM;AACN,cAAM,kBAAkB,MAAM,qBAAoB;AAElD,eAAO,OAAO,SAAS,UAAU,yBAAyB;AAG1D,YAAI;AACJ,YAAI,OAAO,aAAa,YAAY,SAAS,WAAW,MAAM,GAAG;AAC/D,uBAAa;AACb,qBAAW,SAAS,QAAQ,SAAS,EAAE;AAAA,QACzC,OAAO;AACL,uBAAa;AAAA,QACf;AAEA,YAAI;AACJ,YAAI,KAAK,SAAS,WAAW,GAAG;AAE9B,gBAAM,OAAO,IAAI,IAAI,UAAU,IAAI,MAAM,UAAU,MAAM,CAAC;AAAA,QAC5D,OAAO;AACL,gBAAM,OAAQ,KAAK,SAAS,GAAG,IAAI,aAAa;AAChD,gBAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,UAAU,IAAI,MAAM,UAAU,MAAM,CAAC;AAAA,QACtE;AAEA,eAAO,mBAAmB,OAAO,MAAM;AAEvC,aAAK,UAAU;AAAA,MACjB;AAAA,IACF;AACA,YAAQ,uBAAuB;AAE/B,YAAQ,iBAAiB,SAAS,eAAe,OAAO,MAAM;AAC5D,UAAI,OAAO,UAAU;AACnB,cAAM,IAAI,qBAAqB,MAAM,UAAU,KAAK;AAAA,IACxD;AAAA;AAAA;;;AClHA;AAAA;AAAA;AAEA,QAAM,eAAe,UAAQ,QAAQ;AACrC,QAAM,KAAK,UAAQ,IAAI;AACvB,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM;AAAA,MACJ,UAAU;AAAA,MACV,UAAU;AAAA,IACZ,IAAI,UAAQ,QAAQ;AACpB,QAAM,EAAE,UAAU,OAAO,EAAE,OAAO,EAAE,IAAI,UAAQ,MAAM;AAEtD,QAAM,aAAa,OAAO,OAAO,OAAO;AAExC,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,QAAM,OAAO;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,IACZ;AAGA,QAAM,YAAY,OAAO,MAAM,EAAE;AAEjC,QAAM,cAAc;AAAA,MAClB,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,aAAa;AAAA,MACb,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,IAClB;AAEA,QAAM,qBAAqB,IAAI;AAAA,MAC7B,OAAO,OAAO,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAC9C;AAEA,QAAM,kBAAkB;AAAA,MACtB,CAAC,YAAY,EAAE,GAAG;AAAA,MAClB,CAAC,YAAY,GAAG,GAAG;AAAA,MACnB,CAAC,YAAY,YAAY,GAAG;AAAA,MAC5B,CAAC,YAAY,iBAAiB,GAAG;AAAA,MACjC,CAAC,YAAY,OAAO,GAAG;AAAA,MACvB,CAAC,YAAY,WAAW,GAAG;AAAA,MAC3B,CAAC,YAAY,aAAa,GAAG;AAAA,MAC7B,CAAC,YAAY,eAAe,GAAG;AAAA,MAC/B,CAAC,YAAY,cAAc,GAAG;AAAA,IAChC;AAEA,QAAM,UAAU;AAAA,MACd,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAEA,QAAM,WAAW;AAAA,MACf,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,IACZ;AAEA,QAAM,YAAY;AAAA,MAChB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAEA,QAAM,kBAAkB,IAAI;AAC5B,QAAM,YAAY,KAAK,KAAK;AAC5B,QAAM,wBAAwB,OAAO,KAAK;AAAA,MACxC;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MACP,QAAQ;AAAA,MACR;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,IACb,CAAC;AACD,QAAM,wBAAwB,OAAO,KAAK;AAAA,MACxC;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MACP,SAAS;AAAA,MACT;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,IACb,CAAC;AAED,QAAM,aAAa;AACnB,QAAM,sBAAsB,MAAM;AAElC,QAAM,eAAe,iBAAiB;AAEtC,QAAM,aAAa;AAAA,MACjB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,MAAM,CAAC,SAAS;AAAA,MAAC;AAAA,MACjB,MAAM,MAAM;AAAA,MAAC;AAAA,MACb,IAAI,MAAM;AAAA,MAAC;AAAA,MACX,MAAM,MAAM;AAAA,MAAC;AAAA,MACb,KAAK,MAAM;AAAA,MAAC;AAAA,IACd;AAEA,aAAS,OAAO;AAAA,IAAC;AAIjB,QAAM,OAAN,cAAmB,aAAa;AAAA,MAC9B,YAAY,QAAQ,UAAU,KAAK;AACjC,cAAM;AAEN,YAAI,OAAO,QAAQ,YAAY,CAAC;AAC9B,gBAAM,CAAC;AAET,cAAM,iBAAiB,OAAO,UAAU;AAExC,aAAK,SAAS,CAAC,CAAC,IAAI;AACpB,aAAK,SAAU,OAAO,IAAI,UAAU,aAAa,IAAI,QAAQ;AAC7D,aAAK,aAAc,kBAAkB,WAAW,KAAK,cAAc;AAEnE,aAAK,WAAW;AAChB,aAAK,cAAc,CAAC;AACpB,aAAK,SAAS,IAAI;AAClB,aAAK,eAAe;AACpB,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,cAAc;AACnB,aAAK,YAAY,CAAC;AAClB,aAAK,eAAe;AACpB,aAAK,gBAAgB;AACrB,aAAK,eACF,KAAK,aAAa,sBAAsB,QAAS;AACpD,aAAK,gBACF,KAAK,aAAa,sBAAsB,QAAS;AAEpD,aAAK,iBAAiB;AAGtB,aAAK,UAAU;AACf,aAAK,YAAY,OAAO;AACxB,aAAK,aAAa,CAAC;AACnB,aAAK,UAAU;AACf,aAAK,QAAQ;AAAA,UACX,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AACA,aAAK,cAAc;AACnB,aAAK,WAAW;AAChB,aAAK,UAAU,CAAC;AAChB,aAAK,OAAO,SAAS;AACrB,aAAK,UAAU;AACf,aAAK,WAAW,SAAS;AACzB,aAAK,WAAW,SAAS;AACzB,aAAK,SAAS;AACd,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA,MAGA,KAAK,MAAM;AACT,YAAI,SAAS,MAAM;AACjB,0BAAgB,IAAI;AACpB,cAAI,CAAC,KAAK;AACR;AAEF,eAAK,WAAW;AAChB,eAAK,KAAK,KAAK;AACf;AAAA,QACF;AAMA,YAAI,IAAI;AAER,eAAO,IAAI,KAAK,QAAQ;AACtB,cAAI,KAAK,eAAe,GAAG;AACzB,gBAAI,KAAK,KAAK,IAAI,IAAI,KAAK,cAAc,KAAK,SAAS,CAAC;AACxD,iBAAK,gBAAgB;AAErB,mBAAO;AACL,mBAAK,WAAW,KAAK,WAAW,KAAK,KAAK,GAAG;AAE/C,gBAAI,KAAK,eAAe;AACtB;AACF,gBAAI,KAAK,YAAY;AACnB,qBAAO,iBAAiB,MAAM,uBAAuB;AACvD,gBAAI,KAAK,UAAU,KAAK,cAAc;AACpC,oBAAM,MAAM,KAAK;AACjB,qBAAO;AAAA,gBACL;AAAA,gBACA,iBAAiB,KAAK,OAAO,0BAA0B,GAAG;AAAA,cAC5D;AAAA,YACF;AACA,gBAAI,KAAK,KAAK;AACZ;AAAA,UACJ;AACA,cAAI,KAAK,UAAU,KAAK,SAAS;AAC/B,kBAAM,KAAK,KAAK,IAAI,KAAK,UAAU,KAAK,SAAS,KAAK,SAAS,CAAC;AAChE,gBAAI,MAAM,KAAK,OAAO,KAAK,QAAQ;AACjC,kBAAI,OAAO,KAAK,SAAS;AACvB,qBAAK,OAAO,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA,cACjE,OAAO;AACL,oBAAI,CAAC,KAAK;AACR,uBAAK,OAAO,OAAO,YAAY,KAAK,OAAO;AAC7C,qBAAK,KAAK;AAAA,kBACR,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,GAAG,EAAE;AAAA,kBACnD,KAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF,WAAW,OAAO,KAAK,SAAS;AAC9B,mBAAK,OAAO;AAAA,YACd,OAAO;AACL,kBAAI,CAAC,KAAK;AACR,qBAAK,OAAO,OAAO,YAAY,KAAK,OAAO;AAC7C,mBAAK,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,YAClC;AACA,iBAAK;AACL,iBAAK,WAAW;AAChB,gBAAI,KAAK,UAAU,KAAK;AACtB;AAAA,UACJ;AAEA,gBAAM,OAAO,KAAK,KAAK,CAAC;AACxB,gBAAM,UAAU,KAAK;AAGrB,eAAK,UAAU;AACf,eAAK,eAAe;AACpB,eAAK,OAAO;AACZ,eAAK,UAAU;AAEf,gBAAM,UAAW,KAAK,SACH,gBAAgB,IAAI,IACpB,gBAAgB,IAAI;AACvC,cAAI,CAAC;AACH,mBAAO,iBAAiB,MAAM,uBAAuB,IAAI,EAAE;AAE7D,cAAI,KAAK,aAAa,IAAI;AACxB,gBAAI,KAAK,QAAQ;AACf,kBAAI,SAAS,QAAQ;AACnB,uBAAO,iBAAiB,MAAM,6BAA6B,IAAI,EAAE;AAAA,YACrE,WAAW,SAAS,SAAS,SAAS;AACpC,qBAAO,iBAAiB,MAAM,gCAAgC,IAAI,EAAE;AAAA,YACtE;AAAA,UACF;AAEA,cAAI,QAAQ,MAAM,OAAO,MAAM;AAC7B;AAAA,QACJ;AAAA,MACF;AAAA,MAEA,MAAM;AACJ,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,UAAU;AACR,YAAI,KAAK,SAAS,UAAU,UAAU,KAAK,SAAS,UAAU,OAAO;AACnE,eAAK,SAAS,QAAQ;AACtB,eAAK,UAAU,aAAa,KAAK,SAAS,EAAE;AAAA,QAC9C;AAAA,MACF;AAAA,MACA,QAAQ;AACN,aAAK,QAAQ;AACb,YAAI,CAAC,KAAK;AACR,uBAAa,MAAM,qBAAqB;AAAA,MAC5C;AAAA;AAAA;AAAA;AAAA,MAKA,iBAAiB,MAAM,SAAS;AAC9B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,eAAO,IAAI,WAAW,MAAM,MAAM,OAAO;AAAA,MAC3C;AAAA,MACA,kBAAkB,MAAM,SAAS;AAC/B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,eAAO,IAAI,YAAY,MAAM,MAAM,OAAO;AAAA,MAC5C;AAAA,MACA,KAAK,MAAM,QAAQ,OAAO,IAAI;AAC5B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,OAAO,UAAU,YAAY;AAC/B,eAAK;AACL,kBAAQ;AAAA,QACV;AAEA,cAAM,QAAS,OAAO,WAAW,WAAW,SAAS,cAAc,MAAM;AACzE,YAAI,UAAU;AACZ,gBAAM,IAAI,MAAM,yBAAyB,MAAM,EAAE;AAEnD,YAAI,aAAa;AACjB,YAAI,WAAW;AACf,YAAI,OAAO,UAAU,YAAY,OAAO,UAAU;AAChD,kBAAQ,EAAE,MAAM,MAAM;AACxB,YAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,kBAAQ,aAAa,KAAK;AAC1B,uBAAa,MAAM;AACnB,qBAAW,MAAM;AAAA,QACnB;AAQA,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,QAAQ;AAEzE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,SAAS,CAAC;AAC7B,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AACnC,sBAAc,KAAK,OAAO,KAAK,OAAO;AACtC,sBAAc,KAAK,YAAY,KAAK,CAAC;AACrC,YAAI,UAAU;AACZ,eAAK;AAEL,cAAI,aAAa,UAAU;AACzB,gBAAI,IAAI,WAAW,CAAC;AAAA;AAEpB,uBAAW,WAAW,KAAK,GAAG,UAAU,CAAC;AAE3C,eAAK;AAAA,QACP;AACA,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,MAAM,QAAQ,IAAI;AAChB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,CAAC,OAAO,SAAS,MAAM;AACzB,gBAAM,IAAI,MAAM,wBAAwB;AAM1C,cAAM,YAAY,OAAO;AACzB,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,SAAS;AAExD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,WAAW,CAAC;AAC/B,YAAI,IAAI,QAAQ,KAAK,CAAC;AAEtB,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,KAAK,QAAQ,KAAK,KAAK,KAAK,UAAU,IAAI;AACxC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAC5D,YAAI,CAAC,OAAO,SAAS,MAAM;AACzB,gBAAM,IAAI,MAAM,wBAAwB;AAC1C,YAAI,CAAC,OAAO,SAAS,GAAG;AACtB,gBAAM,IAAI,MAAM,wBAAwB;AAC1C,YAAI,OAAO,IAAI;AACb,gBAAM,IAAI,MAAM,yBAAyB;AAC3C,YAAI,MAAM,MAAM,IAAI;AAClB,gBAAM,IAAI,MAAM,8BAA8B;AAChD,YAAI,aAAa;AACf,gBAAM,IAAI,MAAM,qCAAqC;AAEvD,cAAM,MAAM,QAAQ,KAAK,KAAK,KAAK,UAAU,EAAE;AAAA,MACjD;AAAA,MACA,SAAS,QAAQ,KAAK,KAAK,KAAK,UAAU,IAAI;AAE5C,aAAK,KAAK,QAAQ,KAAK,KAAK,KAAK,UAAU,EAAE;AAAA,MAC/C;AAAA,MACA,MAAM,QAAQ,KAAK,KAAK,KAAK,UAAU,IAAI;AACzC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,CAAC,OAAO,SAAS,MAAM;AACzB,gBAAM,IAAI,MAAM,wBAAwB;AAC1C,YAAI,CAAC,OAAO,SAAS,GAAG;AACtB,gBAAM,IAAI,MAAM,wBAAwB;AAC1C,YAAI,MAAM,IAAI;AACZ,gBAAM,IAAI,MAAM,yBAAyB;AAC3C,YAAI,MAAM,MAAM,IAAI;AAClB,gBAAM,IAAI,MAAM,8BAA8B;AAChD,YAAI,aAAa;AACf,gBAAM,IAAI,MAAM,qCAAqC;AAEvD,YAAI,CAAC,KAAK;AACR,gBAAM,QAAQ,SAAS,IAAI,QAAW,CAAC;AACvC;AAAA,QACF;AAEA,cAAM,aAAa,KAAK;AACxB,cAAM,WAAW,KAAK,IAAI,MAAM,YAAY,CAAC;AAC7C,cAAM,eAAe;AAErB,YAAI;AACF,gBAAM;AAQR,cAAM,YAAY,OAAO;AACzB,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI,GAAG;AAEtE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,WAAW,CAAC;AAC/B,YAAI,IAAI,QAAQ,KAAK,CAAC;AACtB,aAAK;AACL,iBAAS,IAAI,GAAG,KAAK,GAAG,EAAE,GAAG;AAC3B,cAAI,IAAI,CAAC,IAAI,WAAW;AACxB,sBAAY;AAAA,QACd;AACA,sBAAc,KAAK,KAAK,KAAK,CAAC;AAC9B,mBAAW,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,CAAC;AAE3C,aAAK,UAAU,KAAK,IAAI;AAAA,UACtB,IAAI,CAAC,QAAQ;AACX,gBAAI,KAAK;AACP,kBAAI,OAAO,OAAO;AAChB,mBAAG,GAAG;AAAA,YACV,WAAW,UAAU;AACnB,mBAAK;AAAA,gBAAM;AAAA,gBACA;AAAA,gBACA,MAAM;AAAA,gBACN;AAAA,gBACA,eAAe;AAAA,gBACf;AAAA,cAAE;AAAA,YACf,WAAW,OAAO,OAAO,YAAY;AACnC,iBAAG,QAAW,MAAM,GAAG;AAAA,YACzB;AAAA,UACF;AAAA,QACF;AAEA,cAAM,SAAS,aAAa,MAAM,GAAG;AACrC,YAAI,KAAK,QAAQ;AACf,gBAAM,MAAO,SAAS,SAAS;AAC/B,eAAK,OAAO,mBAAmB,GAAG,cAAc,KAAK,GAAG;AAAA,QAC1D;AAAA,MACF;AAAA,MACA,UAAU,QAAQ,KAAK,KAAK,KAAK,UAAU,IAAI;AAE7C,aAAK,MAAM,QAAQ,KAAK,KAAK,KAAK,UAAU,EAAE;AAAA,MAChD;AAAA,MACA,QAAQ,YAAY,WAAW,MAAM,IAAI;AACvC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,iBAAS,MAAM,IAAI,YAAY,WAAW,MAAM,EAAE;AAAA,MACpD;AAAA,MACA,QAAQ,WAAW,YAAY,MAAM,IAAI;AACvC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,iBAAS,IAAI,MAAM,WAAW,YAAY,MAAM,EAAE;AAAA,MACpD;AAAA,MACA,SAAS,MAAM,SAAS,WAAW;AACjC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI;AACJ,YAAI,OAAO,cAAc,YAAY;AACnC,qBAAW;AAAA,QACb,WAAW,OAAO,YAAY,YAAY;AACxC,qBAAW;AACX,oBAAU;AAAA,QACZ;AAEA,YAAI,OAAO,YAAY;AACrB,oBAAU,EAAE,UAAU,SAAS,MAAM,IAAI;AAAA,iBAClC,CAAC;AACR,oBAAU,EAAE,UAAU,MAAM,MAAM,IAAI;AAAA,iBAC/B,OAAO,YAAY;AAC1B,gBAAM,IAAI,UAAU,eAAe;AAErC,cAAM,WAAW,QAAQ;AACzB,YAAI,YAAY,CAAC,OAAO,WAAW,QAAQ;AACzC,gBAAM,IAAI,MAAM,qBAAqB,QAAQ,EAAE;AAGjD,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI,MAAM;AACV,YAAI;AAIJ,YAAI,YAAY;AAEhB,cAAM,OAAO,QAAQ,QAAQ;AAE7B,cAAM,OAAO,MAAM;AACjB,cAAI,SAAS,GAAG;AACd,qBAAS,OAAO,YAAY,IAAI;AAChC,iBAAK,KAAK,QAAQ,QAAQ,GAAG,MAAM,WAAW,SAAS;AAAA,UACzD,OAAO;AACL,iBAAK,KAAK,QAAQ,QAAQ,KAAK,OAAO,KAAK,WAAW,SAAS;AAAA,UACjE;AAAA,QACF;AAEA,cAAM,YAAY,CAAC,IAAI,WAAW;AAChC,cAAI;AACJ,cAAI,IAAI;AACN,kBAAO,GAAG,SAAS,YAAY;AAC/B,gBAAI,CAAC,KAAK;AACR,qBAAO,KAAK,MAAM,QAAQ,MAAM;AAC9B,uBAAO,YAAY,SAAS,EAAE;AAAA,cAChC,CAAC;AAAA,YACH;AAAA,UACF,OAAO;AACL,kBAAM;AAAA,UACR;AAEA,cAAI,OAAQ,SAAS,KAAK,WAAW;AACnC,mBAAO,MAAM;AAEf,uBAAa;AACb,iBAAO;AACP,cAAI,SAAS,GAAG;AACd,gBAAI,QAAQ;AACV,oBAAM;AAAA;AAEN,mBAAK;AAAA,UACT,OAAO;AAEL,oBAAQ,KAAK,YAAY,QAAQ,GAAG,MAAM,CAAC;AAC3C,iBAAK;AAAA,UACP;AAAA,QACF;AACA,kBAAU,gBAAgB;AAE1B,cAAM,QAAQ,MAAM;AAClB,eAAK,MAAM,QAAQ,CAAC,OAAO;AACzB,gBAAI,SAAS,GAAG;AAEd,uBAAS,OAAO,OAAO,SAAS,GAAG;AAAA,YACrC,WAAW,MAAM,MAAM;AACrB,uBAAS,YAAY,QAAQ,GAAG,GAAG;AAAA,YACrC;AAEA,gBAAI;AACF,uBAAS,OAAO,SAAS,QAAQ;AACnC,mBAAO,YAAY,SAAS,IAAI,MAAM;AAAA,UACxC,CAAC;AAAA,QACH;AAEA,aAAK,KAAK,MAAM,MAAM,KAAO,CAAC,IAAI,YAAY;AAC5C,cAAI;AACF,mBAAO,YAAY,SAAS,EAAE;AAChC,mBAAS;AAET,gBAAM,UAAU,CAACC,KAAI,OAAO;AAC1B,gBAAIA,KAAI;AAGN,mBAAK,KAAK,MAAM,CAAC,KAAK,QAAQ;AAC5B,oBAAI,KAAK;AACP,yBAAO,KAAK,MAAM,QAAQ,MAAM;AAC9B,gCAAY,SAASA,GAAE;AAAA,kBACzB,CAAC;AAAA,gBACH;AACA,wBAAQ,MAAM,GAAG;AAAA,cACnB,CAAC;AACD;AAAA,YACF;AAEA,mBAAO,GAAG,QAAQ;AAClB,gBAAI,SAAS,GAAG;AAGd,wBAAU,CAAC;AACX,qBAAO,KAAK;AAAA,YACd;AAEA,qBAAS,OAAO,YAAY,IAAI;AAChC,iBAAK;AAAA,UACP;AACA,eAAK,MAAM,QAAQ,OAAO;AAAA,QAC5B,CAAC;AAAA,MACH;AAAA,MACA,UAAU,MAAM,MAAM,SAAS,WAAW;AACxC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI;AACJ,YAAI,OAAO,cAAc,YAAY;AACnC,qBAAW;AAAA,QACb,WAAW,OAAO,YAAY,YAAY;AACxC,qBAAW;AACX,oBAAU;AAAA,QACZ;AAEA,YAAI,OAAO,YAAY;AACrB,oBAAU,EAAE,UAAU,SAAS,MAAM,KAAO,MAAM,IAAI;AAAA,iBAC/C,CAAC;AACR,oBAAU,EAAE,UAAU,QAAQ,MAAM,KAAO,MAAM,IAAI;AAAA,iBAC9C,OAAO,YAAY;AAC1B,gBAAM,IAAI,UAAU,eAAe;AAErC,YAAI,QAAQ,YAAY,CAAC,OAAO,WAAW,QAAQ,QAAQ;AACzD,gBAAM,IAAI,MAAM,qBAAqB,QAAQ,QAAQ,EAAE;AAEzD,cAAM,OAAO,QAAQ,QAAQ;AAC7B,aAAK,KAAK,MAAM,MAAM,QAAQ,MAAM,CAAC,SAAS,WAAW;AACvD,cAAI,SAAS;AACX,wBAAY,SAAS,OAAO;AAAA,UAC9B,OAAO;AACL,kBAAM,SAAU,OAAO,SAAS,IAAI,IAClB,OACA,OAAO,KAAK,KAAK,MAAM,QAAQ,YAAY,MAAM;AACnE,kBAAM,WAAY,IAAI,KAAK,IAAI,IAAI,OAAO;AAK1C,gBAAI,aAAa,MAAM;AACrB,oBAAM,UAAU,CAAC,IAAI,OAAO;AAC1B,oBAAI,IAAI;AAGN,uBAAK,KAAK,MAAM,CAAC,KAAK,QAAQ;AAC5B,wBAAI,KAAK;AACP,6BAAO,KAAK,MAAM,QAAQ,MAAM;AAC9B,oCAAY,SAAS,EAAE;AAAA,sBACzB,CAAC;AAAA,oBACH;AACA,4BAAQ,MAAM,GAAG;AAAA,kBACnB,CAAC;AACD;AAAA,gBACF;AACA,yBAAS,MAAM,QAAQ,QAAQ,GAAG,OAAO,QAAQ,GAAG,MAAM,QAAQ;AAAA,cACpE;AACA,mBAAK,MAAM,QAAQ,OAAO;AAC1B;AAAA,YACF;AACA,qBAAS,MAAM,QAAQ,QAAQ,GAAG,OAAO,QAAQ,UAAU,QAAQ;AAAA,UACrE;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,WAAW,MAAM,MAAM,SAAS,WAAW;AACzC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI;AACJ,YAAI,OAAO,cAAc,YAAY;AACnC,qBAAW;AAAA,QACb,WAAW,OAAO,YAAY,YAAY;AACxC,qBAAW;AACX,oBAAU;AAAA,QACZ;AAEA,YAAI,OAAO,YAAY;AACrB,oBAAU,EAAE,UAAU,SAAS,MAAM,KAAO,MAAM,IAAI;AAAA,iBAC/C,CAAC;AACR,oBAAU,EAAE,UAAU,QAAQ,MAAM,KAAO,MAAM,IAAI;AAAA,iBAC9C,OAAO,YAAY;AAC1B,gBAAM,IAAI,UAAU,eAAe;AAErC,YAAI,CAAC,QAAQ;AACX,oBAAU,OAAO,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO;AAChD,aAAK,UAAU,MAAM,MAAM,SAAS,QAAQ;AAAA,MAC9C;AAAA,MACA,OAAO,MAAM,IAAI;AACf,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,aAAK,KAAK,MAAM,CAAC,QAAQ;AACvB,gBAAM,GAAG,MAAM,QAAQ,IAAI;AAAA,QAC7B,CAAC;AAAA,MACH;AAAA,MACA,OAAO,UAAU,IAAI;AACnB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAM5D,cAAM,WAAW,OAAO,WAAW,QAAQ;AAC3C,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,QAAQ;AAEvD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,UAAU,CAAC;AAC9B,YAAI,UAAU,UAAU,KAAK,GAAG,QAAQ;AAExC,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,OAAO,SAAS,SAAS,IAAI;AAC3B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAO5D,cAAM,SAAS,OAAO,WAAW,OAAO;AACxC,cAAM,SAAS,OAAO,WAAW,OAAO;AACxC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,MAAM;AAElE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,QAAQ,CAAC;AAC5B,YAAI,UAAU,SAAS,KAAK,GAAG,MAAM;AACrC,sBAAc,KAAK,QAAQ,KAAK,MAAM;AACtC,YAAI,UAAU,SAAS,KAAK,GAAG,MAAM;AAErC,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,MAAM,MAAM,OAAO,IAAI;AACrB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,QAAQ;AACZ,YAAI,WAAW;AAEf,YAAI,OAAO,UAAU,YAAY;AAC/B,eAAK;AACL,kBAAQ;AAAA,QACV;AACA,YAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,kBAAQ,aAAa,KAAK;AAC1B,kBAAQ,MAAM;AACd,qBAAW,MAAM;AAAA,QACnB;AAOA,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,UAAU,IAAI,QAAQ;AAErE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,SAAS,CAAC;AAC7B,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AACnC,sBAAc,KAAK,OAAO,KAAK,OAAO;AACtC,YAAI,UAAU;AACZ,eAAK;AAEL,cAAI,aAAa,UAAU;AACzB,gBAAI,IAAI,WAAW,CAAC;AAAA;AAEpB,uBAAW,WAAW,KAAK,GAAG,UAAU,CAAC;AAE3C,eAAK;AAAA,QACP;AAEA,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,MAAM,MAAM,IAAI;AACd,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAM5D,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,OAAO;AAEtD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,SAAS,CAAC;AAC7B,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AAEnC,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,QAAQ,OAAO,MAAM,IAAI;AACvB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,OAAO,SAAS,YAAY;AAC9B,eAAK;AACL,iBAAO,CAAC;AAAA,QACV;AACA,YAAI,OAAO,SAAS,YAAY,SAAS;AACvC,iBAAO,CAAC;AAEV,cAAM,WAAY,QAAQ,KAAK,OAAO,QAAQ;AAE9C,YAAI,CAAC,OAAO,SAAS,KAAK,KAAK,OAAO,UAAU;AAC9C,gBAAM,IAAI,MAAM,kCAAkC;AAEpD,YAAI,OAAO,UAAU,UAAU;AAC7B,gBAAM,UAAU,CAAC;AACjB,cAAI,IAAI;AAER,gBAAM,SAAS,CAAC,KAAK,WAAW;AAC9B,gBAAI;AACF,qBAAO,GAAG,GAAG;AAEf,iBAAK,QAAQ,QAAQ,MAAM,CAACC,MAAK,SAAS;AACxC,oBAAM,MAAOA,QAAOA,KAAI,SAAS,YAAY;AAE7C,kBAAIA,QAAO,CAAC;AACV,uBAAO,KAAK,MAAM,QAAQ,MAAM,GAAGA,IAAG,CAAC;AAEzC,kBAAI,KAAK;AACP,uBAAO,KAAK,MAAM,QAAQ,CAACA,SAAQ;AACjC,sBAAIA;AACF,2BAAO,GAAGA,IAAG;AACf,qBAAG,QAAW,OAAO;AAAA,gBACvB,CAAC;AAAA,cACH;AAEA,uBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG,EAAE;AACtC,wBAAQ,CAAC,IAAI,KAAK,CAAC;AAErB,qBAAO,QAAW,MAAM;AAAA,YAC1B,CAAC;AAAA,UACH;AACA,iBAAO,KAAK,QAAQ,OAAO,MAAM;AAAA,QACnC;AAMA,cAAM,YAAY,MAAM;AACxB,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,SAAS;AAExD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,WAAW,CAAC;AAC/B,YAAI,IAAI,OAAO,KAAK,CAAC;AAErB,aAAK,UAAU,KAAK,IAAI;AAAA,UACtB,IAAK,WACE,CAAC,KAAK,SAAS;AACb,gBAAI,OAAO,OAAO;AAChB;AACF,gBAAI;AACF,qBAAO,GAAG,GAAG;AAEf,qBAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AACzC,kBAAI,KAAK,CAAC,EAAE,aAAa,OAAO,KAAK,CAAC,EAAE,aAAa;AACnD,qBAAK,OAAO,GAAG,CAAC;AAAA,YACpB;AAEA,eAAG,QAAW,IAAI;AAAA,UACpB,IACA;AAAA,QACT;AAEA,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,MAAM,QAAQ,IAAI;AAChB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,CAAC,OAAO,SAAS,MAAM;AACzB,gBAAM,IAAI,MAAM,wBAAwB;AAM1C,cAAM,YAAY,OAAO;AACzB,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,SAAS;AAExD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,WAAW,CAAC;AAC/B,YAAI,IAAI,QAAQ,KAAK,CAAC;AAEtB,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,KAAK,MAAM,IAAI;AACb,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAM5D,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,OAAO;AAEtD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,SAAS,CAAC;AAC7B,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AAEnC,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,MAAM,MAAM,IAAI;AACd,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAM5D,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,OAAO;AAEtD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,SAAS,CAAC;AAC7B,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AAEnC,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,QAAQ,MAAM,IAAI;AAChB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAM5D,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,OAAO;AAEtD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,SAAS,CAAC;AAC7B,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AAEnC,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,QAAQ,MAAM,OAAO,IAAI;AACvB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,QAAQ;AACZ,YAAI,WAAW;AAEf,YAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,kBAAQ,aAAa,KAAK;AAC1B,kBAAQ,MAAM;AACd,qBAAW,MAAM;AAAA,QACnB,WAAW,OAAO,UAAU,YAAY;AACtC,eAAK;AAAA,QACP;AAOA,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,UAAU,IAAI,QAAQ;AAErE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,SAAS,CAAC;AAC7B,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AACnC,sBAAc,KAAK,OAAO,KAAK,OAAO;AACtC,YAAI,UAAU;AACZ,eAAK;AAEL,cAAI,aAAa,UAAU;AACzB,gBAAI,IAAI,WAAW,CAAC;AAAA;AAEpB,uBAAW,WAAW,KAAK,GAAG,UAAU,CAAC;AAE3C,eAAK;AAAA,QACP;AAEA,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,SAAS,QAAQ,OAAO,IAAI;AAC1B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,CAAC,OAAO,SAAS,MAAM;AACzB,gBAAM,IAAI,MAAM,wBAAwB;AAE1C,YAAI,QAAQ;AACZ,YAAI,WAAW;AAEf,YAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,kBAAQ,aAAa,KAAK;AAC1B,kBAAQ,MAAM;AACd,qBAAW,MAAM;AAAA,QACnB,WAAW,OAAO,UAAU,YAAY;AACtC,eAAK;AAAA,QACP;AAOA,cAAM,YAAY,OAAO;AACzB,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,YAAY,IAAI,QAAQ;AAEvE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,WAAW,CAAC;AAC/B,YAAI,IAAI,QAAQ,KAAK,CAAC;AACtB,sBAAc,KAAK,OAAO,KAAK,SAAS;AACxC,YAAI,UAAU;AACZ,eAAK;AAEL,cAAI,aAAa,UAAU;AACzB,gBAAI,IAAI,WAAW,CAAC;AAAA;AAEpB,uBAAW,WAAW,KAAK,GAAG,UAAU,CAAC;AAE3C,eAAK;AAAA,QACP;AAEA,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,QAAQ,QAAQ,OAAO,OAAO,IAAI;AAChC,eAAO,KAAK,SAAS,QAAQ;AAAA,UAC3B,OAAO,gBAAgB,KAAK;AAAA,UAC5B,OAAO,gBAAgB,KAAK;AAAA,QAC9B,GAAG,EAAE;AAAA,MACP;AAAA,MACA,OAAO,MAAM,OAAO,OAAO,IAAI;AAC7B,eAAO,KAAK,QAAQ,MAAM;AAAA,UACxB,OAAO,gBAAgB,KAAK;AAAA,UAC5B,OAAO,gBAAgB,KAAK;AAAA,QAC9B,GAAG,EAAE;AAAA,MACP;AAAA,MACA,OAAO,QAAQ,KAAK,KAAK,IAAI;AAC3B,eAAO,KAAK,SAAS,QAAQ;AAAA,UAC3B;AAAA,UACA;AAAA,QACF,GAAG,EAAE;AAAA,MACP;AAAA,MACA,MAAM,MAAM,KAAK,KAAK,IAAI;AACxB,eAAO,KAAK,QAAQ,MAAM;AAAA,UACxB;AAAA,UACA;AAAA,QACF,GAAG,EAAE;AAAA,MACP;AAAA,MACA,OAAO,QAAQ,MAAM,IAAI;AACvB,eAAO,KAAK,SAAS,QAAQ;AAAA,UAC3B;AAAA,QACF,GAAG,EAAE;AAAA,MACP;AAAA,MACA,MAAM,MAAM,MAAM,IAAI;AACpB,eAAO,KAAK,QAAQ,MAAM;AAAA,UACxB;AAAA,QACF,GAAG,EAAE;AAAA,MACP;AAAA,MACA,SAAS,MAAM,IAAI;AACjB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAM5D,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,OAAO;AAEtD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,SAAS,CAAC;AAC7B,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AAEnC,aAAK,UAAU,KAAK,IAAI;AAAA,UACtB,IAAI,CAAC,KAAK,UAAU;AAClB,gBAAI,OAAO,OAAO;AAChB;AACF,gBAAI;AACF,qBAAO,GAAG,GAAG;AACf,gBAAI,CAAC,SAAS,CAAC,MAAM;AACnB,qBAAO,GAAG,IAAI,MAAM,4BAA4B,CAAC;AACnD,eAAG,QAAW,MAAM,CAAC,EAAE,QAAQ;AAAA,UACjC;AAAA,QACF;AAEA,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,QAAQ,YAAY,UAAU,IAAI;AAChC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAO5D,cAAM,UAAU,OAAO,WAAW,QAAQ;AAC1C,cAAM,YAAY,OAAO,WAAW,UAAU;AAC9C,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,UAAU,IAAI,SAAS;AAEtE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,YAAI,KAAK,YAAY;AAEnB,wBAAc,KAAK,WAAW,CAAC;AAC/B,cAAI,UAAU,YAAY,KAAK,GAAG,SAAS;AAC3C,wBAAc,KAAK,SAAS,KAAK,SAAS;AAC1C,cAAI,UAAU,UAAU,KAAK,GAAG,OAAO;AAAA,QACzC,OAAO;AACL,wBAAc,KAAK,SAAS,CAAC;AAC7B,cAAI,UAAU,UAAU,KAAK,GAAG,OAAO;AACvC,wBAAc,KAAK,WAAW,KAAK,OAAO;AAC1C,cAAI,UAAU,YAAY,KAAK,GAAG,SAAS;AAAA,QAC7C;AAEA,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,SAAS,MAAM,IAAI;AACjB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAM5D,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,OAAO;AAEtD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,SAAS,CAAC;AAC7B,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AAEnC,aAAK,UAAU,KAAK,IAAI;AAAA,UACtB,IAAI,CAAC,KAAK,UAAU;AAClB,gBAAI,OAAO,OAAO;AAChB;AACF,gBAAI;AACF,qBAAO,GAAG,GAAG;AACf,gBAAI,CAAC,SAAS,CAAC,MAAM;AACnB,qBAAO,GAAG,IAAI,MAAM,4BAA4B,CAAC;AACnD,eAAG,QAAW,MAAM,CAAC,EAAE,QAAQ;AAAA,UACjC;AAAA,QACF;AAEA,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA;AAAA,MAEA,mBAAmB,SAAS,SAAS,IAAI;AACvC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,MAAM,KAAK,YAAY,0BAA0B;AACvD,YAAI,CAAC,OAAO,QAAQ;AAClB,gBAAM,IAAI,MAAM,+CAA+C;AAQjE,cAAM,SAAS,OAAO,WAAW,OAAO;AACxC,cAAM,SAAS,OAAO,WAAW,OAAO;AACxC,YAAI,IAAI;AACR,cAAM,MACJ,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,SAAS,IAAI,MAAM;AAEjE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,IAAI,CAAC;AACxB,YAAI,UAAU,4BAA4B,KAAK,GAAG,EAAE;AACpD,sBAAc,KAAK,QAAQ,KAAK,EAAE;AAClC,YAAI,UAAU,SAAS,KAAK,GAAG,MAAM;AACrC,sBAAc,KAAK,QAAQ,KAAK,MAAM;AACtC,YAAI,UAAU,SAAS,KAAK,GAAG,MAAM;AAErC,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,YAAI,KAAK,QAAQ;AACf,gBAAM,QAAS,aAAa,aAAa;AACzC,eAAK,OAAO,mBAAmB,KAAK,2BAA2B;AAAA,QACjE;AAAA,MACF;AAAA,MACA,oBAAoB,MAAM,IAAI;AAC5B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,MAAM,KAAK,YAAY,qBAAqB;AAClD,YAAI,CAAC,OAAO,QAAQ;AAClB,gBAAM,IAAI,MAAM,+CAA+C;AAOjE,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO;AAE/D,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,IAAI,CAAC;AACxB,YAAI,UAAU,uBAAuB,KAAK,GAAG,EAAE;AAC/C,sBAAc,KAAK,SAAS,KAAK,EAAE;AACnC,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AAEnC,aAAK,UAAU,KAAK,IAAI,EAAE,UAAU,uBAAuB,GAAG;AAE9D,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,YAAI,KAAK,QAAQ;AACf,gBAAM,QAAS,aAAa,aAAa;AACzC,eAAK,OAAO,mBAAmB,KAAK,sBAAsB;AAAA,QAC5D;AAAA,MACF;AAAA,MACA,qBAAqB,QAAQ,IAAI;AAC/B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,MAAM,KAAK,YAAY,sBAAsB;AACnD,YAAI,CAAC,OAAO,QAAQ;AAClB,gBAAM,IAAI,MAAM,+CAA+C;AACjE,YAAI,CAAC,OAAO,SAAS,MAAM;AACzB,gBAAM,IAAI,MAAM,wBAAwB;AAO1C,cAAM,YAAY,OAAO;AACzB,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,SAAS;AAEjE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,IAAI,CAAC;AACxB,YAAI,UAAU,wBAAwB,KAAK,GAAG,EAAE;AAChD,sBAAc,KAAK,WAAW,KAAK,EAAE;AACrC,YAAI,IAAI,QAAQ,KAAK,CAAC;AAEtB,aAAK,UAAU,KAAK,IAAI,EAAE,UAAU,wBAAwB,GAAG;AAE/D,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,YAAI,KAAK,QAAQ;AACf,gBAAM,QAAS,aAAa,aAAa;AACzC,eAAK,OAAO,mBAAmB,KAAK,uBAAuB;AAAA,QAC7D;AAAA,MACF;AAAA,MACA,qBAAqB,SAAS,SAAS,IAAI;AACzC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,MAAM,KAAK,YAAY,sBAAsB;AACnD,YAAI,QAAQ;AACV,gBAAM,IAAI,MAAM,+CAA+C;AAQjE,cAAM,SAAS,OAAO,WAAW,OAAO;AACxC,cAAM,SAAS,OAAO,WAAW,OAAO;AACxC,YAAI,IAAI;AACR,cAAM,MACJ,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,SAAS,IAAI,MAAM;AAEjE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,IAAI,CAAC;AACxB,YAAI,UAAU,wBAAwB,KAAK,GAAG,EAAE;AAChD,sBAAc,KAAK,QAAQ,KAAK,EAAE;AAClC,YAAI,UAAU,SAAS,KAAK,GAAG,MAAM;AACrC,sBAAc,KAAK,QAAQ,KAAK,MAAM;AACtC,YAAI,UAAU,SAAS,KAAK,GAAG,MAAM;AAErC,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,YAAI,KAAK,QAAQ;AACf,gBAAM,QAAS,aAAa,aAAa;AACzC,eAAK,OAAO,mBAAmB,KAAK,uBAAuB;AAAA,QAC7D;AAAA,MACF;AAAA,MACA,kBAAkB,QAAQ,IAAI;AAC5B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,MAAM,KAAK,YAAY,mBAAmB;AAChD,YAAI,QAAQ;AACV,gBAAM,IAAI,MAAM,+CAA+C;AACjE,YAAI,CAAC,OAAO,SAAS,MAAM;AACzB,gBAAM,IAAI,MAAM,wBAAwB;AAO1C,cAAM,YAAY,OAAO;AACzB,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,SAAS;AAEjE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,IAAI,CAAC;AACxB,YAAI,UAAU,qBAAqB,KAAK,GAAG,EAAE;AAC7C,sBAAc,KAAK,WAAW,KAAK,EAAE;AACrC,YAAI,IAAI,QAAQ,KAAK,CAAC;AAEtB,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,qBAAqB,MAAM,OAAO,IAAI;AACpC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,MAAM,KAAK,YAAY,sBAAsB;AACnD,YAAI,QAAQ;AACV,gBAAM,IAAI,MAAM,+CAA+C;AAEjE,YAAI,QAAQ;AACZ,YAAI,WAAW;AAEf,YAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,kBAAQ,aAAa,KAAK;AAC1B,kBAAQ,MAAM;AACd,qBAAW,MAAM;AAAA,QACnB,WAAW,OAAO,UAAU,YAAY;AACtC,eAAK;AAAA,QACP;AAQA,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MACJ,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,UAAU,IAAI,QAAQ;AAEpE,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,IAAI,CAAC;AACxB,YAAI,UAAU,wBAAwB,KAAK,GAAG,EAAE;AAEhD,sBAAc,KAAK,SAAS,KAAK,EAAE;AACnC,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AAEnC,sBAAc,KAAK,OAAO,KAAK,OAAO;AACtC,YAAI,UAAU;AACZ,eAAK;AAEL,cAAI,aAAa,UAAU;AACzB,gBAAI,IAAI,WAAW,CAAC;AAAA;AAEpB,uBAAW,WAAW,KAAK,GAAG,UAAU,CAAC;AAE3C,eAAK;AAAA,QACP;AAEA,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,YAAI,KAAK,QAAQ;AACf,gBAAM,SAAU,aAAa,aAAa;AAC1C,eAAK,OAAO,mBAAmB,MAAM,uBAAuB;AAAA,QAC9D;AAAA,MACF;AAAA,MACA,uBAAuB,MAAM,IAAI;AAC/B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,MAAM,KAAK,YAAY,yBAAyB;AACtD,YAAI,QAAQ;AACV,gBAAM,IAAI,MAAM,+CAA+C;AAOjE,cAAM,UAAU,OAAO,WAAW,IAAI;AACtC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO;AAE/D,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,QAAQ;AACjB,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,IAAI,CAAC;AACxB,YAAI,UAAU,2BAA2B,KAAK,GAAG,EAAE;AAEnD,sBAAc,KAAK,SAAS,KAAK,EAAE;AACnC,YAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AAEnC,aAAK,UAAU,KAAK,IAAI;AAAA,UACtB,IAAI,CAAC,KAAK,UAAU;AAClB,gBAAI,OAAO,OAAO;AAChB;AACF,gBAAI;AACF,qBAAO,GAAG,GAAG;AACf,gBAAI,CAAC,SAAS,CAAC,MAAM;AACnB,qBAAO,GAAG,IAAI,MAAM,gCAAgC,CAAC;AACvD,eAAG,QAAW,MAAM,CAAC,EAAE,QAAQ;AAAA,UACjC;AAAA,QACF;AAEA,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,YAAI,KAAK,QAAQ;AACf,gBAAM,SAAU,aAAa,aAAa;AAC1C,eAAK,OAAO,mBAAmB,MAAM,0BAA0B;AAAA,QACjE;AAAA,MACF;AAAA,MACA,cAAc,WAAW,WAAW,KAAK,WAAW,WAAW,IAAI;AACjE,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,MAAM,KAAK,YAAY,WAAW;AACxC,YAAI,QAAQ;AACV,gBAAM,IAAI,MAAM,+CAA+C;AAEjE,YAAI,CAAC,OAAO,SAAS,SAAS;AAC5B,gBAAM,IAAI,MAAM,+BAA+B;AAEjD,YAAI,CAAC,OAAO,SAAS,SAAS;AAC5B,gBAAM,IAAI,MAAM,oCAAoC;AAWtD,YAAI,IAAI;AACR,cAAM,MAAM,OAAO;AAAA,UACjB,IAAI,IACF,IACA,IAAI,IACJ,IAAI,UAAU,SACd,IACA,IACA,IAAI,UAAU,SACd;AAAA,QACJ;AAEA,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,aAAK;AAEL,YAAI,CAAC,IAAI,QAAQ;AACjB,UAAE;AAEF,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAC3B,aAAK;AAEL,sBAAc,KAAK,GAAG,CAAC;AACvB,aAAK;AACL,YAAI,UAAU,aAAa,GAAG,CAAC;AAC/B,aAAK;AAEL,sBAAc,KAAK,UAAU,QAAQ,CAAC;AACtC,aAAK;AACL,YAAI,IAAI,WAAW,CAAC;AACpB,aAAK,UAAU;AAEf,iBAAS,IAAI,GAAG,KAAK,GAAG,EAAE,GAAG;AAC3B,cAAI,IAAI,CAAC,IAAI,YAAY;AACzB,uBAAa;AAAA,QACf;AACA,aAAK;AAEL,iBAAS,IAAI,GAAG,KAAK,GAAG,EAAE,GAAG;AAC3B,cAAI,IAAI,CAAC,IAAI,MAAM;AACnB,iBAAO;AAAA,QACT;AACA,aAAK;AAEL,sBAAc,KAAK,UAAU,QAAQ,CAAC;AACtC,aAAK;AACL,YAAI,IAAI,WAAW,CAAC;AACpB,aAAK,UAAU;AAEf,iBAAS,IAAI,GAAG,KAAK,GAAG,EAAE,GAAG;AAC3B,cAAI,IAAI,CAAC,IAAI,YAAY;AACzB,uBAAa;AAAA,QACf;AAEA,aAAK,UAAU,KAAK,IAAI,EAAE,GAAG;AAE7B,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,YAAI,KAAK,QAAQ;AACf,gBAAM,SAAU,aAAa,aAAa;AAC1C,eAAK,OAAO,mBAAmB,MAAM,YAAY;AAAA,QACnD;AAAA,MACF;AAAA,MACA,aAAa,UAAU,IAAI;AACzB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,MAAM,KAAK,YAAY,gBAAgB;AAC7C,YAAI,QAAQ;AACV,gBAAM,IAAI,MAAM,+CAA+C;AAEjE,YAAI,OAAO,aAAa;AACtB,gBAAM,IAAI,UAAU,0BAA0B;AAOhD,YAAI,IAAI;AACR,cAAM,cAAc,OAAO,WAAW,QAAQ;AAC9C,cAAM,MAAM,OAAO;AAAA,UACjB,IAAI,IACF,IACA,IAAI,KACJ,IAAI;AAAA,QACR;AAEA,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,aAAK;AAEL,YAAI,CAAC,IAAI,QAAQ;AACjB,UAAE;AAEF,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAC3B,aAAK;AAEL,sBAAc,KAAK,IAAI,CAAC;AACxB,aAAK;AACL,YAAI,UAAU,kBAAkB,GAAG,EAAE;AACrC,aAAK;AAEL,sBAAc,KAAK,aAAa,CAAC;AACjC,aAAK;AACL,YAAI,UAAU,UAAU,GAAG,WAAW;AACtC,aAAK;AAEL,aAAK,UAAU,KAAK,IAAI;AAAA,UACtB,IAAI,CAAC,KAAK,UAAU;AAClB,gBAAI,OAAO,OAAO;AAChB;AACF,gBAAI;AACF,qBAAO,GAAG,GAAG;AACf,gBAAI,CAAC,SAAS,CAAC,MAAM;AACnB,qBAAO,GAAG,IAAI,MAAM,iCAAiC,CAAC;AACxD,eAAG,QAAW,MAAM,CAAC,EAAE,QAAQ;AAAA,UACjC;AAAA,QACF;AAEA,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,YAAI,KAAK,QAAQ;AACf,gBAAM,SAAU,aAAa,aAAa;AAC1C,eAAK,OAAO,mBAAmB,MAAM,iBAAiB;AAAA,QACxD;AAAA,MACF;AAAA,MACA,iBAAiB,MAAM,MAAM,IAAI;AAC/B,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,MAAM,KAAK,YAAY,gCAAgC;AAC7D,YAAI,QAAQ;AACV,gBAAM,IAAI,MAAM,+CAA+C;AAEjE,YAAI,CAAC,MAAM,QAAQ,IAAI;AACrB,gBAAM,IAAI,UAAU,sBAAsB;AAC5C,mBAAW,OAAO,MAAM;AACtB,cAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,KAAK,MAAO,KAAK,KAAK;AACxD,kBAAM,IAAI,MAAM,iDAAiD;AAAA,QACrE;AACA,YAAI,CAAC,MAAM,QAAQ,IAAI;AACrB,gBAAM,IAAI,UAAU,sBAAsB;AAC5C,mBAAW,OAAO,MAAM;AACtB,cAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,KAAK,MAAO,KAAK,KAAK;AACxD,kBAAM,IAAI,MAAM,iDAAiD;AAAA,QACrE;AAYA,YAAI,IAAI;AACR,cAAM,MAAM,OAAO;AAAA,UACjB,IAAI,IACF,IACA,IAAI,KACJ,IAAK,IAAI,KAAK,SACd,IAAK,IAAI,KAAK;AAAA,QAClB;AAEA,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,aAAK;AAEL,YAAI,CAAC,IAAI,QAAQ;AACjB,UAAE;AAEF,cAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,sBAAc,KAAK,OAAO,CAAC;AAC3B,aAAK;AAEL,sBAAc,KAAK,IAAI,CAAC;AACxB,aAAK;AACL,YAAI,UAAU,kCAAkC,GAAG,EAAE;AACrD,aAAK;AAEL,sBAAc,KAAK,IAAI,KAAK,QAAQ,CAAC;AACrC,aAAK;AACL,mBAAW,OAAO,MAAM;AACtB,wBAAc,KAAK,KAAK,CAAC;AACzB,eAAK;AAAA,QACP;AAEA,sBAAc,KAAK,IAAI,KAAK,QAAQ,CAAC;AACrC,aAAK;AACL,mBAAW,OAAO,MAAM;AACtB,wBAAc,KAAK,KAAK,CAAC;AACzB,eAAK;AAAA,QACP;AAEA,aAAK,UAAU,KAAK,IAAI,EAAE,UAAU,kCAAkC,GAAG;AAEzE,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,YAAI,KAAK,QAAQ;AACf,gBAAM,SAAU,aAAa,aAAa;AAC1C,eAAK,OAAO,mBAAmB,MAAM,iCAAiC;AAAA,QACxE;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAIA,OAAO,OAAO,QAAQ;AACpB,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,CAAC,OAAO,SAAS,MAAM;AACzB,gBAAM,IAAI,MAAM,wBAAwB;AAE1C,cAAM,YAAY,OAAO;AAEzB,YAAI,YAAY;AACd,gBAAM,IAAI,MAAM,gCAAgC;AAElD,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,SAAS;AAExD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,SAAS;AAClB,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,WAAW,CAAC;AAC/B,YAAI;AACF,cAAI,IAAI,QAAQ,KAAK,CAAC;AAExB,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,OAAO,OAAO,MAAM,SAAS;AAC3B,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,CAAC,mBAAmB,IAAI,IAAI;AAC9B,gBAAM,IAAI,MAAM,oBAAoB,IAAI,EAAE;AAE5C,oBAAY,UAAU;AAEtB,cAAM,SAAS,OAAO,WAAW,OAAO;AACxC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC;AAE7D,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,SAAS;AAClB,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,MAAM,CAAC;AAE1B,sBAAc,KAAK,QAAQ,KAAK,CAAC;AACjC,aAAK;AACL,YAAI,QAAQ;AACV,cAAI,UAAU,SAAS,GAAG,MAAM;AAChC,eAAK;AAAA,QACP;AAEA,sBAAc,KAAK,GAAG,CAAC;AAEvB,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,KAAK,OAAO,MAAM,UAAU;AAC1B,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,cAAM,WAAW,OAAO,SAAS,IAAI;AAErC,YAAI,CAAC,YAAY,OAAO,SAAS;AAC/B,gBAAM,IAAI,MAAM,gCAAgC;AAElD,YAAI;AACJ,YAAI,CAAC,YAAY,CAAC,UAAU;AAC1B,qBAAW;AACX,mBAAS;AAAA,QACX;AAEA,cAAM,UACJ,WACE,KAAK,SACL,OAAO,WAAW,MAAM,QAAQ;AAEpC,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,OAAO;AAEtD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,SAAS;AAClB,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,SAAS,CAAC;AAC7B,YAAI,SAAS;AACX,cAAI;AACF,gBAAI,IAAI,MAAM,KAAK,CAAC;AAAA,mBACb;AACP,gBAAI,UAAU,MAAM,KAAK,GAAG,OAAO;AAAA;AAEnC,gBAAI,MAAM,MAAM,KAAK,GAAG,SAAS,QAAQ;AAAA,QAC7C;AAEA,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,KAAK,OAAO,OAAO;AACjB,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,cAAI,OAAO,UAAU,YAAY,UAAU;AACzC,kBAAM,IAAI,MAAM,iCAAiC;AACnD,kBAAQ,CAAE,KAAM;AAAA,QAClB;AAEA,cAAM,QAAQ,MAAM;AACpB,YAAI,WAAW;AACf,YAAI;AACJ,cAAM,QAAQ,CAAC;AAEf,iBAAS,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AAC9B,gBAAM,OAAO,MAAM,CAAC;AACpB,gBAAM,WACJ,CAAC,QAAQ,CAAC,KAAK,YAAY,OAAO,KAAK,aAAa,WAClD,KACA,KAAK;AAET,sBAAY,IAAI,OAAO,WAAW,QAAQ;AAC1C,gBAAM,WACJ,CAAC,QAAQ,CAAC,KAAK,YAAY,OAAO,KAAK,aAAa,WAClD,KACA,KAAK;AAET,sBAAY,IAAI,OAAO,WAAW,QAAQ;AAE1C,cAAI,OAAO,KAAK,UAAU,YAAY,KAAK,UAAU,MAAM;AACzD,wBAAY,aAAa,KAAK,KAAK;AACnC,wBAAY,IAAI,UAAU;AAE1B,gBAAI,UAAU,IAAI;AAChB,kBAAI;AAEJ,kBAAI,UAAU,OAAO,UAAU,QAAQ;AACrC,wBAAQ,IAAI,WAAW,SAAS;AAAA,cAClC,OAAO;AACL,wBAAQ,IAAI,WAAW,UAAU,EAAE;AACnC,2BAAW,WAAW,OAAO,GAAG,UAAU,IAAI,CAAC;AAAA,cACjD;AAEA,wBAAU,QAAQ;AAAA,YACpB;AAEA,kBAAM,KAAK,SAAS;AAAA,UACtB,OAAO;AACL,wBAAY;AACZ,kBAAM,KAAK,IAAI;AAAA,UACjB;AAAA,QACF;AAEA,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,QAAQ;AAEvD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,SAAS;AAClB,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,OAAO,CAAC;AAE3B,aAAK;AAEL,iBAAS,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AAC9B,gBAAM,OAAO,MAAM,CAAC;AAEpB;AACE,kBAAM,WACJ,CAAC,QAAQ,CAAC,KAAK,YAAY,OAAO,KAAK,aAAa,WAClD,KACA,KAAK;AAET,kBAAM,MAAM,OAAO,WAAW,QAAQ;AACtC,0BAAc,KAAK,KAAK,CAAC;AACzB,iBAAK;AACL,gBAAI,KAAK;AACP,kBAAI,UAAU,UAAU,GAAG,GAAG;AAC9B,mBAAK;AAAA,YACP;AAAA,UACF;AAEA;AACE,kBAAM,WACJ,CAAC,QAAQ,CAAC,KAAK,YAAY,OAAO,KAAK,aAAa,WAClD,KACA,KAAK;AAET,kBAAM,MAAM,OAAO,WAAW,QAAQ;AACtC,0BAAc,KAAK,KAAK,CAAC;AACzB,iBAAK;AACL,gBAAI,KAAK;AACP,kBAAI,UAAU,UAAU,GAAG,GAAG;AAC9B,mBAAK;AAAA,YACP;AAAA,UACF;AAEA,gBAAM,OAAO,MAAM,CAAC;AACpB,cAAI,MAAM;AACR,0BAAc,KAAK,KAAK,OAAO,CAAC;AAChC,iBAAK;AACL,gBAAI,KAAK,SAAS,KAAK,OAAO;AAC5B,kBAAI,IAAI,KAAK,OAAO,CAAC;AACrB,mBAAK,KAAK;AAAA,YACZ;AAAA,UACF,OAAO;AACL,0BAAc,KAAK,GAAG,CAAC;AACvB,iBAAK;AAAA,UACP;AAAA,QACF;AAEA,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,MACA,MAAM,OAAO,OAAO;AAClB,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,OAAO,UAAU,YAAY,UAAU;AACzC,gBAAM,IAAI,MAAM,wBAAwB;AAE1C,gBAAQ,aAAa,KAAK;AAC1B,cAAM,QAAQ,MAAM;AACpB,cAAM,WAAW,MAAM;AACvB,YAAI,IAAI;AACR,cAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,QAAQ;AAEvD,sBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,YAAI,CAAC,IAAI,SAAS;AAClB,sBAAc,KAAK,OAAO,CAAC;AAE3B,sBAAc,KAAK,OAAO,CAAC;AAC3B,YAAI,UAAU;AACZ,eAAK;AAEL,cAAI,aAAa,UAAU;AACzB,gBAAI,IAAI,WAAW,CAAC;AAAA;AAEpB,uBAAW,WAAW,KAAK,GAAG,UAAU,CAAC;AAE3C,eAAK;AAAA,QACP;AAEA,cAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAK,UAAU,KAAK;AAAA,UAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AAEA,aAAS,gBAAgB,MAAM;AAC7B,UAAI;AACF,eAAO,OAAO,YAAY,IAAI;AAAA,MAChC,SAAS,IAAI;AACX,eAAO;AAAA,MACT;AAAA,IACF;AAEA,aAAS,MAAMC,OAAM,QAAQ,KAAK,KAAK,KAAK,UAAU,IAAI,MAAM;AAC9D,YAAM,aAAaA,MAAK;AACxB,YAAM,WAAW,KAAK,IAAI,MAAM,YAAY,CAAC;AAE7C,UAAI;AACF,cAAM;AAQR,YAAM,YAAY,OAAO;AACzB,UAAI,IAAI;AACR,UAAI,MAAM;AACV,YAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,YAAY,IAAI,CAAC;AAEhE,oBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,UAAI,CAAC,IAAI,QAAQ;AACjB,YAAM,QAAQA,MAAK,cAAeA,MAAK,cAAc,IAAK;AAC1D,oBAAc,KAAK,OAAO,CAAC;AAE3B,oBAAc,KAAK,WAAW,CAAC;AAC/B,UAAI,IAAI,QAAQ,KAAK,CAAC;AACtB,WAAK;AACL,eAAS,IAAI,GAAG,KAAK,GAAG,EAAE,GAAG;AAC3B,YAAI,IAAI,CAAC,IAAI,MAAM;AACnB,eAAO;AAAA,MACT;AACA,oBAAc,KAAK,KAAK,KAAK,CAAC;AAE9B,UAAI,OAAO,OAAO;AAChB,aAAK;AAEP,YAAM,MAAO,QAAQ;AAAA,QACnB,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,KAAK;AAAA,QACL,UAAU;AAAA,QACV,IAAI,CAAC,KAAK,MAAM,OAAO;AACrB,gBAAMC,OAAM,IAAI;AAChB,gBAAMC,YAAW,IAAI;AAErB,cAAI,KAAK;AACP,gBAAI,GAAG,iBAAiB,IAAI,SAAS,YAAY;AAC/C,qBAAO,GAAG,GAAG;AAAA,UACjB,WAAW,KAAKD,MAAK;AACnB,mBAAO,GAAG,IAAI,MAAM,mCAAmC,CAAC;AAAA,UAC1D,WAAW,OAAOA,QAAOC,WAAU;AACjC,gBAAI,MAAM;AACV,gBAAI,YAAY;AAChB,gBAAI,OAAO;AACX,kBAAMF,OAAM,QAAQ,KAAK,IAAI,KAAKE,WAAU,IAAI,UAAU,IAAI,GAAG;AACjE;AAAA,UACF;AAEA,eAAM,MAAM;AACZ,cAAI,IAAI,YAAY,KAAK,IAAI,WAAW,IAAI;AAC1C,mBAAO;AAAA;AAEP,mBAAO,YAAY,KAAK,IAAI,SAAS,IAAI,UAAU,IAAI,KAAK,EAAE;AAChE,aAAG,QAAW,IAAI,KAAK,IAAI,MAAM,IAAI,QAAQ;AAAA,QAC/C;AAAA,QACA,QAAQ;AAAA,MACV;AAEA,UAAI,MAAM;AACV,UAAI,WAAW;AAIf,UAAI,SAAS,YAAY,KAAK,KAAK,MAAM,GAAG;AAE5C,MAAAF,MAAK,UAAU,KAAK,IAAI;AAExB,YAAM,aAAa,aAAaA,OAAM,GAAG;AACzC,MAAAA,MAAK,UAAUA,MAAK;AAAA,QAClB,mBAAmB,aAAa,aAAa,SAAS;AAAA,MACxD;AAAA,IACF;AAEA,aAAS,SAAS,KAAK,KAAK,SAAS,SAAS,MAAM,IAAI;AACtD,UAAI,cAAc;AAClB,UAAI,YAAY;AAChB,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,UAAI,OAAO,SAAS,YAAY;AAC9B,aAAK;AAAA,MACP,WAAW,OAAO,SAAS,YAAY,SAAS,MAAM;AACpD,YAAI,OAAO,KAAK,gBAAgB,YACzB,KAAK,cAAc,KACnB,CAAC,MAAM,KAAK,WAAW,GAAG;AAC/B,wBAAc,KAAK;AAAA,QACrB;AACA,YAAI,OAAO,KAAK,cAAc,YACvB,KAAK,YAAY,KACjB,CAAC,MAAM,KAAK,SAAS,GAAG;AAC7B,sBAAY,KAAK;AAAA,QACnB;AACA,YAAI,OAAO,KAAK,aAAa,YACtB,KAAK,WAAW,KAChB,CAAC,MAAM,KAAK,QAAQ,GAAG;AAC5B,qBAAW,KAAK;AAAA,QAClB;AACA,YAAI,OAAO,KAAK,SAAS;AACvB,mBAAS,KAAK;AAEhB,YAAI,OAAO,KAAK,SAAS,YAAY,OAAO,KAAK,SAAS;AACxD,iBAAO,QAAQ,KAAK,IAAI;AAAA,MAC5B;AAGA,UAAI;AACJ,UAAI,OAAO;AACX,UAAI,QAAQ;AACZ,UAAI,WAAW;AACf,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI,UAAU,YAAY;AAE1B,eAAS,QAAQ,KAAK;AACpB,YAAI;AACF;AAEF,mBAAW;AAEX,YAAI,OAAO;AACX,YAAI;AAEJ,YAAI,aAAa,WAAW;AAC1B,oBAAU,MAAM;AACd,gBAAI,EAAE,SAAS;AACb,iBAAG,GAAG;AAAA,UACV;AACA,cAAI,cAAc,QAAQ,MAAM,IAAI,SAAS,UAAU;AACrD,cAAE;AACJ,cAAI,cAAc,QAAQ,MAAM,IAAI,SAAS,UAAU;AACrD,cAAE;AACJ,cAAI,cAAc,QAAQ,MAAM,IAAI,SAAS,UAAU;AACrD,gBAAI,MAAM,WAAW,OAAO;AAC9B,cAAI,cAAc,QAAQ,MAAM,IAAI,SAAS,UAAU;AACrD,gBAAI,MAAM,WAAW,OAAO;AAAA,QAChC,OAAO;AACL,aAAG,GAAG;AAAA,QACR;AAAA,MACF;AAEA,UAAI,KAAK,SAAS,KAAK,CAAC,KAAK,iBAAiB;AAC5C,YAAI;AACF,iBAAO,QAAQ,GAAG;AAEpB,oBAAY;AAEZ,YAAI,aAAa;AACf,cAAI,MAAM,WAAW,OAAO;AAAA;AAE5B,kBAAQ,MAAM,EAAE,MAAM,SAAS,CAAC;AAElC,iBAAS,QAAQD,MAAK,OAAO;AAC3B,cAAIA,MAAK;AACP,gBAAI,QAAQ,IAAI;AAGd,kBAAI,KAAK,SAAS,CAAC,MAAM,WAAW;AAClC,oBAAI;AACF,yBAAO,QAAQA,IAAG;AACpB,wBAAQ,MAAM,MAAM;AAAA,cACtB,CAAC;AACD;AAAA,YACF;AACA,mBAAO,QAAQA,IAAG;AAAA,UACpB;AACA,kBAAQ,MAAM;AAEd,cAAI,KAAK,SAAS,KAAK,CAACA,MAAK,eAAe;AAC1C,gBAAIA;AACF,qBAAO,QAAQA,IAAG;AAEpB,wBAAY;AAEZ,gBAAI,SAAS;AACX,qBAAO,QAAQ;AAGjB,mBAAO,UAAU,OAAO;AACtB,kBAAI,gBAAgB,GAAG;AACrB,0BAAU;AACV;AAAA,cACF;AACA,yBAAW;AACX,gBAAE;AAAA,YACJ;AAEA,sBAAU,gBAAgB,OAAO;AACjC,gBAAI,mBAAmB;AACrB,qBAAO,QAAQ,OAAO;AAExB,gBAAI,SAAS,QAAW;AACtB,kBAAI,OAAO,WAAW,MAAM,SAAS,SAASA,MAAK;AACjD,oBAAIA,MAAK;AAGP,sBAAI,MAAM,SAAS,MAAM,CAAC,SAAS,SAAS,CAAC;AAC7C;AAAA,gBACF;AACA,2BAAW;AAAA,cACb,CAAC;AAAA,YACH,OAAO;AACL,yBAAW;AAAA,YACb;AAEA,qBAAS,OAAOA,MAAK,IAAI,MAAM,QAAQ,SAAS,cAAc;AAC5D,kBAAIA;AACF,uBAAO,QAAQA,IAAG;AAEpB,wBAAU,WAAW;AAErB,kBAAI,MAAM,WAAW,SAAS,SAAS,IAAI,QAAQ,OAAO;AAE1D,uBAAS,QAAQA,MAAK;AACpB,oBAAIA;AACF,yBAAO,QAAQA,IAAG;AAEpB,yBAAS;AACT,0BAAU,OAAO,OAAO,IAAI,KAAK;AAEjC,oBAAI,KAAK;AACP,yBAAO,WAAW,SAAS,SAAS,IAAI,eAAe,EAAE;AAE3D,oBAAI,UAAU,OAAO;AACnB,sBAAI,MAAM,WAAW,CAACA,SAAQ;AAC5B,gCAAY;AACZ,wBAAIA;AACF,6BAAO,QAAQA,IAAG;AACpB,wBAAI,MAAM,WAAW,CAACA,SAAQ;AAC5B,kCAAY;AACZ,0BAAIA;AACF,+BAAO,QAAQA,IAAG;AACpB,yBAAG;AAAA,oBACL,CAAC;AAAA,kBACH,CAAC;AACD;AAAA,gBACF;AAEA,oBAAI,QAAQ;AACV;AAEF,sBAAM,QACH,OAAO,YAAY,QAAQ,QAAQ,OAAO;AAC7C,2BAAW,SAAS,MAAM,KAAK;AAC/B,wBAAQ;AAAA,cACV;AAAA,YACF;AAEA,qBAAS,OAAO,MAAMI,OAAM,OAAO;AACjC,qBAAO,CAACJ,MAAK,IAAI,SAAS;AACxB,uBAAOA,MAAK,IAAI,MAAMI,OAAM,MAAM,KAAK;AAAA,cACzC;AAAA,YACF;AAEA,qBAAS,WAAW,MAAMA,OAAM,OAAO;AACrC,kBAAI;AAAA,gBAAK;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACAA;AAAA,gBACA,OAAO,MAAMA,OAAM,KAAK;AAAA,cAAC;AAAA,YACpC;AAEA,qBAAS,aAAa;AACpB,kBAAI,QAAQ;AACZ,kBAAI,OAAO;AACX,qBAAO,OAAO,SAAS,QAAQ,aAAa;AAC1C,sBAAM,QACH,OAAO,YAAY,QAAQ,QAAQ,OAAO;AAC7C,2BAAW,MAAM,MAAM,KAAK;AAC5B,wBAAQ;AACR,wBAAQ;AACR,kBAAE;AAAA,cACJ;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAEA,aAAS,SAAS,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,WAAW;AAC3E,YAAM,WAAY,OAAO,cAAc,aAAa,YAAY;AAEhE,WAAK;AAAA,QAAM;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,UAAU,YAAY;AAChC,cAAI,UAAU;AACZ,mBAAO,KAAK,MAAM,QAAQ,MAAM;AAC9B,0BAAY,SAAS,QAAQ;AAAA,YAC/B,CAAC;AAAA,UACH;AACA,cAAI,YAAY,QAAQ;AACtB,iBAAK,MAAM,QAAQ,QAAQ;AAAA,UAC7B,OAAO;AACL,sBAAU;AACV,sBAAU;AACV,wBAAY;AACZ,qBAAS,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AAAA,UACnE;AAAA,QACF;AAAA,MAAC;AAAA,IACH;AAEA,QAAM,QAAN,MAAY;AAAA,MACV,YAAY,SAAS;AACnB,aAAK,OAAQ,WAAW,QAAQ;AAChC,aAAK,MAAO,WAAW,QAAQ;AAC/B,aAAK,MAAO,WAAW,QAAQ;AAC/B,aAAK,OAAQ,WAAW,QAAQ;AAChC,aAAK,QAAS,WAAW,QAAQ;AACjC,aAAK,QAAS,WAAW,QAAQ;AACjC,aAAK,WAAY,WAAW,QAAQ;AAAA,MACtC;AAAA,MACA,cAAc;AACZ,gBAAS,KAAK,OAAO,UAAU,YAAY,UAAU;AAAA,MACvD;AAAA,MACA,SAAS;AACP,gBAAS,KAAK,OAAO,UAAU,YAAY,UAAU;AAAA,MACvD;AAAA,MACA,gBAAgB;AACd,gBAAS,KAAK,OAAO,UAAU,YAAY,UAAU;AAAA,MACvD;AAAA,MACA,oBAAoB;AAClB,gBAAS,KAAK,OAAO,UAAU,YAAY,UAAU;AAAA,MACvD;AAAA,MACA,iBAAiB;AACf,gBAAS,KAAK,OAAO,UAAU,YAAY,UAAU;AAAA,MACvD;AAAA,MACA,SAAS;AACP,gBAAS,KAAK,OAAO,UAAU,YAAY,UAAU;AAAA,MACvD;AAAA,MACA,WAAW;AACT,gBAAS,KAAK,OAAO,UAAU,YAAY,UAAU;AAAA,MACvD;AAAA,IACF;AAEA,aAAS,aAAa,OAAO;AAC3B,UAAI,QAAQ;AACZ,UAAI,KAAK;AAET,UAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,YAAI,OAAO,MAAM,SAAS,UAAU;AAClC,mBAAS,KAAK;AACd,gBAAM,MAAM,MAAM;AAElB,oBAAU,IAAI,IAAI,MAAM;AACxB,oBAAU,IAAI,IAAI,MAAM;AACxB,oBAAU,IAAI,IAAI,MAAM;AACxB,oBAAU,IAAI,IAAI,MAAM;AACxB,oBAAU,IAAI,IAAI,MAAM;AACxB,oBAAU,IAAI,IAAI,MAAM;AACxB,oBAAU,IAAI,IAAI,MAAM;AACxB,oBAAU,IAAI,IAAI;AAAA,QACpB;AACA,YAAI,OAAO,MAAM,QAAQ,YAAY,OAAO,MAAM,QAAQ,UAAU;AAClE,mBAAS,KAAK;AACd,gBAAM,MAAM,MAAM;AAClB,gBAAM,MAAM,MAAM;AAElB,oBAAU,IAAI,IAAI,QAAQ;AAC1B,oBAAU,IAAI,IAAI,QAAQ;AAC1B,oBAAU,IAAI,IAAI,QAAQ;AAC1B,oBAAU,IAAI,IAAI;AAClB,oBAAU,IAAI,IAAI,QAAQ;AAC1B,oBAAU,IAAI,IAAI,QAAQ;AAC1B,oBAAU,IAAI,IAAI,QAAQ;AAC1B,oBAAU,IAAI,IAAI;AAAA,QACpB;AACA,YAAI,OAAO,MAAM,SAAS,YAAY,OAAO,MAAM,SAAS,UAAU;AACpE,gBAAM,OAAO,QAAQ,MAAM,IAAI;AAC/B,mBAAS,KAAK;AAEd,oBAAU,IAAI,IAAI,SAAS;AAC3B,oBAAU,IAAI,IAAI,SAAS;AAC3B,oBAAU,IAAI,IAAI,SAAS;AAC3B,oBAAU,IAAI,IAAI;AAAA,QACpB;AACA,aAAK,OAAO,MAAM,UAAU,YAAY,OAAO,MAAM,KAAK,OAClD,OAAO,MAAM,UAAU,YAAY,OAAO,MAAM,KAAK,IAAI;AAC/D,gBAAM,QAAQ,gBAAgB,MAAM,KAAK;AACzC,gBAAM,QAAQ,gBAAgB,MAAM,KAAK;AAEzC,mBAAS,KAAK;AAEd,oBAAU,IAAI,IAAI,UAAU;AAC5B,oBAAU,IAAI,IAAI,UAAU;AAC5B,oBAAU,IAAI,IAAI,UAAU;AAC5B,oBAAU,IAAI,IAAI;AAClB,oBAAU,IAAI,IAAI,UAAU;AAC5B,oBAAU,IAAI,IAAI,UAAU;AAC5B,oBAAU,IAAI,IAAI,UAAU;AAC5B,oBAAU,IAAI,IAAI;AAAA,QACpB;AAAA,MAEF;AAEA,aAAO,EAAE,OAAO,GAAG;AAAA,IACrB;AAEA,aAAS,gBAAgB,MAAM;AAE7B,UAAI,OAAO,SAAS,YAAY,SAAS;AACvC,eAAO;AACT,UAAI,OAAO,IAAI;AACb,eAAO,SAAS,KAAK,QAAQ,IAAI,KAAM,EAAE;AAC3C,YAAM,IAAI,MAAM,sBAAsB,IAAI,EAAE;AAAA,IAC9C;AAEA,aAAS,QAAQ,MAAM;AAErB,UAAI,OAAO,SAAS,YAAY,SAAS;AACvC,eAAO;AACT,UAAI,OAAO,SAAS;AAClB,eAAO,QAAQ,SAAS,MAAM,CAAC,CAAC;AAClC,YAAM,IAAI,MAAM,sBAAsB,IAAI,EAAE;AAAA,IAC9C;AAEA,QAAM,gBAAgB;AAAA,MACpB,KAAK,UAAU;AAAA,MACf,MAAM,UAAU,OAAO,UAAU;AAAA,MACjC,KAAK,UAAU,QAAQ,UAAU,QAAQ,UAAU;AAAA,MACnD,MAAM,UAAU,QAAQ,UAAU,QAAQ,UAAU,QAAQ,UAAU;AAAA,MACtE,MAAM,UAAU,QAAQ,UAAU,QAAQ,UAAU,QAAQ,UAAU;AAAA,MACtE,MAAM,UAAU,QAAQ,UAAU,QAAQ,UAAU,OAAO,UAAU;AAAA,MACrE,OAAO,UAAU,QAAQ,UAAU,QAAQ,UAAU,OAAO,UAAU,QAC7D,UAAU;AAAA,MACnB,OAAO,UAAU,QAAQ,UAAU,QAAQ,UAAU,OAAO,UAAU,QAC7D,UAAU;AAAA,MACnB,KAAK,UAAU,SAAS,UAAU,QAAQ,UAAU;AAAA,MACpD,MAAM,UAAU,SAAS,UAAU,QAAQ,UAAU,QAAQ,UAAU;AAAA,MACvE,MAAM,UAAU,SAAS,UAAU,QAAQ,UAAU,QAAQ,UAAU;AAAA,MACvE,MAAM,UAAU,SAAS,UAAU,QAAQ,UAAU,OAAO,UAAU;AAAA,MACtE,OAAO,UAAU,SAAS,UAAU,QAAQ,UAAU,OAAO,UAAU,QAC9D,UAAU;AAAA,MACnB,OAAO,UAAU,SAAS,UAAU,QAAQ,UAAU,OAAO,UAAU,QAC9D,UAAU;AAAA,IACrB;AAEA,aAAS,cAAc,KAAK;AAC1B,YAAM,QAAQ,cAAc,GAAG;AAC/B,aAAQ,UAAU,SAAY,QAAQ;AAAA,IACxC;AAEA,QAAM,iBAAiB,MAAM;AAC3B,YAAM,oBAAoB,OAAO,KAAK,aAAa;AACnD,aAAO,CAAC,UAAU;AAChB,iBAAS,IAAI,GAAG,IAAI,kBAAkB,QAAQ,EAAE,GAAG;AACjD,gBAAM,MAAM,kBAAkB,CAAC;AAC/B,cAAI,cAAc,GAAG,MAAM;AACzB,mBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACT;AAAA,IACF,GAAG;AAEH,aAAS,UAAU,OAAO;AAexB,YAAM,QAAQ,aAAa,aAAa;AACxC,UAAI,UAAU;AACZ;AAEF,YAAM,QAAQ,IAAI,MAAM;AACxB,UAAI,QAAQ,KAAK,MAAM;AACrB,cAAM,OAAO,aAAa,aAAa,KAAK;AAC5C,YAAI,SAAS;AACX;AACF,cAAM,OAAO;AAAA,MACf;AAEA,UAAI,QAAQ,KAAK,QAAQ;AACvB,cAAM,MAAM,aAAa,aAAa;AACtC,cAAM,MAAM,aAAa,aAAa;AACtC,YAAI,QAAQ;AACV;AACF,cAAM,MAAM;AACZ,cAAM,MAAM;AAAA,MACd;AAEA,UAAI,QAAQ,KAAK,aAAa;AAC5B,cAAM,OAAO,aAAa,aAAa;AACvC,YAAI,SAAS;AACX;AACF,cAAM,OAAO;AAAA,MACf;AAEA,UAAI,QAAQ,KAAK,WAAW;AAC1B,cAAM,QAAQ,aAAa,aAAa;AACxC,cAAM,QAAQ,aAAa,aAAa;AACxC,YAAI,UAAU;AACZ;AACF,cAAM,QAAQ;AACd,cAAM,QAAQ;AAAA,MAChB;AAEA,UAAI,QAAQ,KAAK,UAAU;AACzB,cAAM,QAAQ,aAAa,aAAa;AACxC,YAAI,UAAU;AACZ;AACF,cAAM,WAAW,CAAC;AAClB,iBAAS,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AAC9B,gBAAM,OAAO,aAAa,WAAW,IAAI;AACzC,gBAAM,OAAO,aAAa,WAAW;AACrC,cAAI,SAAS;AACX;AACF,mBAAS,IAAI,IAAI;AAAA,QACnB;AACA,cAAM,WAAW;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,aAAa,MAAM,SAAS;AACnC,YAAM,MAAM,gBAAgB,MAAM,OAAO;AACzC,UAAI,QAAQ,QAAW;AACrB,aAAK,QAAQ,KAAK,GAAG;AACrB,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAEA,aAAS,gBAAgB,MAAM,SAAS;AACtC,YAAM,WAAW,KAAK;AACtB,UAAI,SAAS,UAAU;AACrB;AAEF,UAAI,SAAS,WAAW,GAAG;AACzB,aAAK,cAAc;AACnB,aAAK,WAAW;AAChB,eAAO;AAAA,MACT;AAEA,UAAI;AACJ,YAAM,MAAM,QAAQ;AACpB,UAAI,IAAI;AAER,aAAO,MAAM,IAAI,KAAK,SAAS,SAAS,GAAG;AACzC,cAAM,YAAY,KAAK,IAAI,MAAM,GAAG,SAAS,QAAQ,SAAS,UAAU;AACxE,iBAAS,UAAU;AACnB,YAAI,SAAS,WAAW,GAAG;AACzB,eAAK,cAAc;AACnB,eAAK,WAAW;AAAA,QAClB;AAEA,YAAI,MAAM,KAAK,cAAc,KAAK;AAChC,eAAK,UAAU,YAAY,KAAK,SAAS,IAAI,OAAO;AAAA,QACtD,OAAO;AACL,eAAK,UAAU;AAAA,YAAY,KAAK,SAAS;AAAA,YACd,YAAY,SAAS,GAAG,IAAI,SAAS;AAAA,UAAC;AAAA,QACnE;AAEA,aAAK;AAAA,MACP;AAEA,UAAI,MAAM,IAAI,GAAG;AACf,YAAI,IAAI;AACN,gBAAM,YAAY,SAAS,GAAG,GAAG;AAAA;AAEjC,gBAAM;AAAA,MACV;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,cAAc;AACrB,WAAK,WAAW;AAChB,YAAM,SAAS,KAAK;AACpB,UAAI,IAAI;AACR,aAAO,IAAI,OAAO,QAAQ;AACxB,cAAM,UAAU,OAAO,CAAC;AACxB,cAAM,MAAM,gBAAgB,MAAM,OAAO;AACzC,YAAI,QAAQ,QAAW;AACrB,cAAI,QAAQ;AACV,mBAAO,CAAC,IAAI;AACd,cAAI,IAAI;AACN,iBAAK,UAAU,OAAO,MAAM,CAAC;AAC/B;AAAA,QACF;AACA,UAAE;AAAA,MACJ;AACA,UAAI,IAAI;AACN,aAAK,UAAU,CAAC;AAAA,IACpB;AAEA,aAAS,iBAAiB,MAAM,KAAK,SAAS;AAC5C,YAAM,MAAM,IAAI,MAAM,GAAG;AACzB,UAAI,QAAQ;AACZ,UAAI,CAAC,WAAW,KAAK;AACnB,aAAK,OAAO,kBAAkB,GAAG,EAAE;AACrC,WAAK,KAAK,SAAS,GAAG;AACtB,WAAK,QAAQ;AACb,sBAAgB,IAAI;AACpB,aAAO;AAAA,IACT;AAEA,aAAS,gBAAgB,MAAM;AAC7B,YAAM,OAAO,OAAO,KAAK,KAAK,SAAS;AACvC,UAAI,KAAK,WAAW;AAClB;AAEF,YAAM,OAAO,KAAK;AAClB,WAAK,YAAY,CAAC;AAClB,YAAM,MAAM,IAAI,MAAM,yBAAyB;AAC/C,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,cAAM,MAAM,KAAK,KAAK,CAAC,CAAC;AACxB,YAAI,OAAO,IAAI,OAAO;AACpB,cAAI,GAAG,GAAG;AAAA,MACd;AAAA,IACF;AAEA,aAAS,cAAc,MAAM,IAAI;AAK/B,UAAI,IAAI;AACR,YAAM,MAAM,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,EAAE;AAEjD,oBAAc,KAAK,IAAI,SAAS,GAAG,CAAC;AACpC,UAAI,CAAC,IAAI,QAAQ;AACjB,YAAM,QAAQ,KAAK,cAAe,KAAK,cAAc,IAAK;AAC1D,oBAAc,KAAK,OAAO,CAAC;AAE3B,oBAAc,KAAK,IAAI,CAAC;AACxB,UAAI,UAAU,sBAAsB,KAAK,GAAG,EAAE;AAE9C,WAAK,UAAU,KAAK,IAAI,EAAE,UAAU,sBAAsB,GAAG;AAE7D,YAAM,aAAa,aAAa,MAAM,GAAG;AACzC,UAAI,KAAK,QAAQ;AACf,cAAM,QAAS,aAAa,aAAa;AACzC,aAAK,OAAO,mBAAmB,KAAK,qBAAqB;AAAA,MAC3D;AAAA,IACF;AAEA,QAAM,kBAAkB;AAAA,MACtB,CAAC,SAAS,OAAO,GAAG,CAAC,MAAM,YAAY;AACrC,YAAI,KAAK,aAAa;AACpB,iBAAO,iBAAiB,MAAM,0BAA0B;AAE1D,cAAM,aAAa,CAAC;AAMpB,qBAAa,KAAK,SAAS,CAAC;AAC5B,YAAI,UAAU,aAAa,aAAa;AACxC,eAAO,aAAa,MAAM,GAAG;AAC3B,gBAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,gBAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,cAAI,YAAY,QAAW;AACzB,sBAAU;AACV;AAAA,UACF;AACA,qBAAW,OAAO,IAAI;AAAA,QACxB;AACA,qBAAa,MAAM;AAEnB,YAAI,YAAY;AACd,iBAAO,iBAAiB,MAAM,0BAA0B;AAE1D,YAAI,KAAK,QAAQ;AACf,gBAAM,QAAQ,OAAO,KAAK,UAAU;AACpC,cAAI,MAAM,QAAQ;AAChB,iBAAK;AAAA,cACH,qCAAqC,OAAO,UAAU,KAAK;AAAA,YAC7D;AAAA,UACF,OAAO;AACL,iBAAK,OAAO,qCAAqC,OAAO,GAAG;AAAA,UAC7D;AAAA,QACF;AAEA,aAAK,WAAW;AAChB,aAAK,cAAc;AAEnB,YAAI,WAAW,oBAAoB,MAAM,KAAK;AAC5C,iBAAO,cAAc,MAAM,CAAC,KAAK,WAAW;AAC1C,gBAAI,CAAC,KAAK;AACR,kBAAI,OAAO,YAAY;AACrB,qBAAK,gBAAgB,OAAO;AAC9B,kBAAI,OAAO,aAAa;AACtB,qBAAK,cAAc,OAAO;AAC5B,kBAAI,OAAO,cAAc;AACvB,qBAAK,eAAe,OAAO;AAC7B,mBAAK,iBACH,OAAO,iBAAiB,IAAI,OAAO,iBAAiB;AAAA,YAExD;AACA,iBAAK,KAAK,OAAO;AAAA,UACnB,CAAC;AAAA,QACH;AAEA,aAAK,KAAK,OAAO;AAAA,MACnB;AAAA,MACA,CAAC,SAAS,MAAM,GAAG,CAAC,MAAM,YAAY;AACpC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAMxC,cAAM,YAAY,aAAa,aAAa;AAC5C,cAAM,WAAW,aAAa,WAAW,IAAI;AAC7C,qBAAa,MAAM;AAQnB,YAAI,KAAK,QAAQ;AACf,gBAAM,UAAU,KAAK,UAAU,QAAQ;AACvC,eAAK;AAAA,YACH,sCAAsC,KAAK,KAAK,SAAS,KAAK,OAAO;AAAA,UACvE;AAAA,QACF;AACA,cAAM,MAAM,KAAK,UAAU,KAAK;AAChC,eAAO,KAAK,UAAU,KAAK;AAC3B,YAAI,OAAO,OAAO,IAAI,OAAO,YAAY;AACvC,cAAI,cAAc,YAAY,IAAI;AAChC,gBAAI,GAAG;AACP;AAAA,UACF;AACA,gBAAM,MAAM,IAAI,MAAM,YACG,gBAAgB,SAAS,KACzB,gBAAgB;AACzC,cAAI,OAAO;AACX,cAAI,GAAG,GAAG;AAAA,QACZ;AAAA,MACF;AAAA,MACA,CAAC,SAAS,MAAM,GAAG,CAAC,MAAM,YAAY;AACpC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAIxC,cAAM,SAAS,aAAa,WAAW;AACvC,qBAAa,MAAM;AAEnB,YAAI,WAAW,QAAW;AACxB,cAAI,UAAU;AACZ,mBAAO,KAAK,UAAU,KAAK;AAC7B,iBAAO,iBAAiB,MAAM,yBAAyB;AAAA,QACzD;AAEA,aAAK,UAAU,KAAK,OAAO,sCAAsC,KAAK,GAAG;AAEzE,cAAM,MAAM,KAAK,UAAU,KAAK;AAChC,eAAO,KAAK,UAAU,KAAK;AAC3B,YAAI,OAAO,OAAO,IAAI,OAAO;AAC3B,cAAI,GAAG,QAAW,MAAM;AAAA,MAC5B;AAAA,MACA,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,YAAY;AAClC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AACxC,YAAI;AACJ,YAAI,UAAU,QAAW;AACvB,gBAAM,KAAK,UAAU,KAAK;AAC1B,iBAAO,KAAK,UAAU,KAAK;AAAA,QAC7B;AAIA,YAAI,OAAO,OAAO,IAAI,OAAO,YAAY;AACvC,cAAI,IAAI,QAAQ;AAGd,kBAAM,KAAK,aAAa,WAAW,IAAI,MAAM;AAC7C,yBAAa,MAAM;AAEnB,gBAAI,OAAO,QAAW;AACpB,mBAAK,UAAU,KAAK;AAAA,gBAClB,oCAAoC,KAAK,KAAK,EAAE;AAAA,cAClD;AACA,kBAAI,GAAG,QAAW,IAAI,QAAQ,EAAE;AAChC;AAAA,YACF;AAAA,UACF,OAAO;AACL,kBAAM,OAAO,aAAa,WAAW;AACrC,yBAAa,MAAM;AAEnB,gBAAI,SAAS,QAAW;AACtB,mBAAK,UAAU,KAAK;AAAA,gBAClB,oCAAoC,KAAK,KAAK,KAAK,MAAM;AAAA,cAC3D;AACA,kBAAI,GAAG,QAAW,IAAI;AACtB;AAAA,YACF;AAAA,UACF;AAAA,QACF,OAAO;AACL,gBAAM,KAAK,aAAa,WAAW;AACnC,uBAAa,MAAM;AACnB,cAAI,OAAO,QAAW;AACpB,iBAAK,UAAU,KAAK;AAAA,cAClB,oCAAoC,KAAK,KAAK,EAAE;AAAA,YAClD;AACA;AAAA,UACF;AAAA,QACF;AAEA,eAAO,iBAAiB,MAAM,uBAAuB;AAAA,MACvD;AAAA,MACA,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,YAAY;AAClC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AACxC,YAAI;AACJ,YAAI,UAAU,QAAW;AACvB,gBAAM,KAAK,UAAU,KAAK;AAC1B,iBAAO,KAAK,UAAU,KAAK;AAAA,QAC7B;AAQA,cAAM,QAAQ,aAAa,aAAa;AACxC,YAAI,UAAU,QAAW;AACvB,cAAI,QAAQ,CAAC;AACb,mBAAS,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AAK9B,kBAAM,WAAW,aAAa,WAAW,IAAI;AAI7C,kBAAM,WAAW,aAAa,WAAW,IAAI;AAE7C,kBAAM,QAAQ,UAAU,KAAK,MAAM;AACnC,gBAAI,UAAU,QAAW;AACvB,sBAAQ;AACR;AAAA,YACF;AACA,kBAAM,KAAK,EAAE,UAAU,UAAU,MAAM,CAAC;AAAA,UAC1C;AACA,cAAI,UAAU,QAAW;AACvB,iBAAK,UAAU,KAAK;AAAA,cAClB,oCAAoC,KAAK,KAAK,MAAM,MAAM;AAAA,YAC5D;AACA,yBAAa,MAAM;AACnB,gBAAI,OAAO,OAAO,IAAI,OAAO;AAC3B,kBAAI,GAAG,QAAW,KAAK;AACzB;AAAA,UACF;AAAA,QACF;AAEA,qBAAa,MAAM;AACnB,eAAO,iBAAiB,MAAM,uBAAuB;AAAA,MACvD;AAAA,MACA,CAAC,SAAS,KAAK,GAAG,CAAC,MAAM,YAAY;AACnC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AACxC,YAAI;AACJ,YAAI,UAAU,QAAW;AACvB,gBAAM,KAAK,UAAU,KAAK;AAC1B,iBAAO,KAAK,UAAU,KAAK;AAAA,QAC7B;AAIA,cAAM,QAAQ,UAAU,KAAK,MAAM;AACnC,qBAAa,MAAM;AACnB,YAAI,UAAU,QAAW;AACvB,eAAK,UAAU,KAAK,OAAO,qCAAqC,KAAK,GAAG;AACxE,cAAI,OAAO,OAAO,IAAI,OAAO;AAC3B,gBAAI,GAAG,QAAW,KAAK;AACzB;AAAA,QACF;AAEA,eAAO,iBAAiB,MAAM,wBAAwB;AAAA,MACxD;AAAA,MACA,CAAC,SAAS,QAAQ,GAAG,CAAC,MAAM,YAAY;AACtC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AACxC,YAAI,UAAU,QAAW;AACvB,gBAAM,MAAM,KAAK,UAAU,KAAK;AAChC,cAAI,KAAK;AACP,mBAAO,KAAK,UAAU,KAAK;AAC3B,oBAAQ,IAAI,UAAU;AAAA,cACpB,KAAK;AAAA,cACL,KAAK,wBAAwB;AAc3B,sBAAM,QAAQ,KAAK;AACnB,sBAAM,QAAQ;AAAA,kBACZ,SAAS,aAAa,aAAa,KAAK;AAAA,kBACxC,UAAU,aAAa,aAAa,KAAK;AAAA,kBACzC,UAAU,aAAa,aAAa,KAAK;AAAA,kBACzC,SAAS,aAAa,aAAa,KAAK;AAAA,kBACxC,UAAU,aAAa,aAAa,KAAK;AAAA,kBACzC,SAAS,aAAa,aAAa,KAAK;AAAA,kBACxC,SAAS,aAAa,aAAa,KAAK;AAAA,kBACxC,UAAU,aAAa,aAAa,KAAK;AAAA,kBACzC,OAAO,aAAa,aAAa,KAAK;AAAA,kBACtC,QAAQ,aAAa,aAAa,KAAK;AAAA,kBACvC,WAAW,aAAa,aAAa,KAAK;AAAA,gBAC5C;AACA,oBAAI,MAAM,cAAc;AACtB;AACF,oBAAI,KAAK,QAAQ;AACf,uBAAK;AAAA,oBACH,8CACW,KAAK,KAAK,IAAI,QAAQ;AAAA,kBACnC;AAAA,gBACF;AACA,6BAAa,MAAM;AACnB,oBAAI,OAAO,IAAI,OAAO;AACpB,sBAAI,GAAG,QAAW,KAAK;AACzB;AAAA,cACF;AAAA,cACA,KAAK,sBAAsB;AAOzB,sBAAM,SAAS;AAAA,kBACb,WAAW,aAAa,aAAa;AAAA,kBACrC,YAAY,aAAa,aAAa;AAAA,kBACtC,aAAa,aAAa,aAAa;AAAA,kBACvC,gBAAgB,aAAa,aAAa;AAAA,gBAC5C;AACA,oBAAI,OAAO,mBAAmB;AAC5B;AACF,oBAAI,KAAK,QAAQ;AACf,uBAAK;AAAA,oBACH,8CACW,KAAK,KAAK,IAAI,QAAQ;AAAA,kBACnC;AAAA,gBACF;AACA,6BAAa,MAAM;AACnB,oBAAI,OAAO,IAAI,OAAO;AACpB,sBAAI,GAAG,QAAW,MAAM;AAC1B;AAAA,cACF;AAAA,cACA,KAAK,kCAAkC;AASrC,sBAAM,gBAAgB,aAAa,aAAa;AAChD,oBAAI,kBAAkB;AACpB;AACF,sBAAM,YAAY,IAAI,MAAM,aAAa;AACzC,yBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE;AACtC,4BAAU,CAAC,IAAI,aAAa,WAAW,IAAI;AAE7C,sBAAM,iBAAiB,aAAa,aAAa;AACjD,oBAAI,mBAAmB;AACrB;AACF,sBAAM,aAAa,IAAI,MAAM,cAAc;AAC3C,yBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,EAAE;AACvC,6BAAW,CAAC,IAAI,aAAa,WAAW,IAAI;AAC9C,oBAAI,WAAW,SAAS,KACjB,WAAW,WAAW,SAAS,CAAC,MAAM,QAAW;AACtD;AAAA,gBACF;AAEA,oBAAI,KAAK,QAAQ;AACf,uBAAK;AAAA,oBACH,8CACW,KAAK,KAAK,IAAI,QAAQ;AAAA,kBACnC;AAAA,gBACF;AACA,6BAAa,MAAM;AACnB,oBAAI,OAAO,IAAI,OAAO;AACpB,sBAAI,GAAG,QAAW,WAAW,UAAU;AACzC;AAAA,cACF;AAAA,cACA;AAEE,qBAAK,UAAU,KAAK;AAAA,kBAClB,8CAA8C,KAAK;AAAA,gBACrD;AACA,6BAAa,MAAM;AACnB,oBAAI,OAAO,IAAI,OAAO;AACpB,sBAAI,GAAG;AACT;AAAA,YACJ;AAAA,UACF,OAAO;AACL,iBAAK,UAAU,KAAK;AAAA,cAClB,8CAA8C,KAAK;AAAA,YACrD;AACA,yBAAa,MAAM;AACnB;AAAA,UACF;AAAA,QACF;AAEA,qBAAa,MAAM;AACnB,eAAO,iBAAiB,MAAM,iCAAiC;AAAA,MACjE;AAAA,IACF;AACA,QAAM,kBAAkB;AAAA,MACtB,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,YAAY;AACjC,YAAI,KAAK,aAAa;AACpB,iBAAO,iBAAiB,MAAM,uBAAuB;AAEvD,cAAM,aAAa,CAAC;AAMpB,qBAAa,KAAK,SAAS,CAAC;AAC5B,YAAI,UAAU,aAAa,aAAa;AACxC,eAAO,aAAa,MAAM,GAAG;AAC3B,gBAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,gBAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,cAAI,YAAY,QAAW;AACzB,sBAAU;AACV;AAAA,UACF;AACA,qBAAW,OAAO,IAAI;AAAA,QACxB;AACA,qBAAa,MAAM;AAEnB,YAAI,YAAY;AACd,iBAAO,iBAAiB,MAAM,uBAAuB;AAEvD,YAAI,KAAK,QAAQ;AACf,gBAAM,QAAQ,OAAO,KAAK,UAAU;AACpC,cAAI,MAAM,QAAQ;AAChB,iBAAK;AAAA,cACH,kCAAkC,OAAO,UAAU,KAAK;AAAA,YAC1D;AAAA,UACF,OAAO;AACL,iBAAK,OAAO,kCAAkC,OAAO,GAAG;AAAA,UAC1D;AAAA,QACF;AAEA,qBAAa,MAAM,qBAAqB;AAExC,aAAK,WAAW;AAChB,aAAK,cAAc;AACnB,aAAK,KAAK,OAAO;AAAA,MACnB;AAAA,MACA,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,YAAY;AACjC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAMxC,cAAM,WAAW,aAAa,WAAW,IAAI;AAC7C,cAAM,SAAS,aAAa,aAAa;AACzC,cAAM,QAAQ,UAAU,KAAK,MAAM;AACnC,qBAAa,MAAM;AAEnB,YAAI,UAAU;AACZ,iBAAO,iBAAiB,MAAM,uBAAuB;AAEvD,aAAK,UAAU,KAAK,OAAO,oCAAoC,KAAK,GAAG;AAEvE,YAAI,CAAC,KAAK,KAAK,QAAQ,OAAO,UAAU,QAAQ,KAAK,GAAG;AAEtD,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,YAAY;AAClC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAIxC,cAAM,SAAS,aAAa,WAAW;AACvC,qBAAa,MAAM;AAEnB,YAAI,WAAW,UAAa,OAAO,SAAS;AAC1C,iBAAO,iBAAiB,MAAM,wBAAwB;AAExD,aAAK,UAAU,KAAK,OAAO,qCAAqC,KAAK,GAAG;AAExE,YAAI,CAAC,KAAK,KAAK,SAAS,OAAO,MAAM,GAAG;AAEtC,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,YAAY;AACjC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAMxC,cAAM,SAAS,aAAa,WAAW;AACvC,cAAM,SAAS,aAAa,aAAa,KAAK,MAAM;AACpD,cAAM,MAAM,aAAa,aAAa;AACtC,qBAAa,MAAM;AAEnB,YAAI,QAAQ,UAAa,OAAO,SAAS;AACvC,iBAAO,iBAAiB,MAAM,uBAAuB;AAEvD,aAAK,UAAU,KAAK,OAAO,oCAAoC,KAAK,GAAG;AAEvE,YAAI,CAAC,KAAK,KAAK,QAAQ,OAAO,QAAQ,QAAQ,GAAG,GAAG;AAElD,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,YAAY;AAClC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAMxC,cAAM,SAAS,aAAa,WAAW;AACvC,cAAM,SAAS,aAAa,aAAa,KAAK,MAAM;AACpD,cAAM,OAAO,aAAa,WAAW;AACrC,qBAAa,MAAM;AAEnB,YAAI,SAAS,UAAa,OAAO,SAAS;AACxC,iBAAO,iBAAiB,MAAM,wBAAwB;AAExD,aAAK,UAAU,KAAK,OAAO,qCAAqC,KAAK,GAAG;AAExE,YAAI,CAAC,KAAK,KAAK,SAAS,OAAO,QAAQ,QAAQ,IAAI,GAAG;AAEpD,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,YAAY;AAClC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAIxC,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,qBAAa,MAAM;AAEnB,YAAI,SAAS;AACX,iBAAO,iBAAiB,MAAM,wBAAwB;AAExD,aAAK,UAAU,KAAK,OAAO,qCAAqC,KAAK,GAAG;AAExE,YAAI,CAAC,KAAK,KAAK,SAAS,OAAO,IAAI,GAAG;AAEpC,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,YAAY;AAClC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAIxC,cAAM,SAAS,aAAa,WAAW;AACvC,qBAAa,MAAM;AAEnB,YAAI,WAAW,UAAa,OAAO,SAAS;AAC1C,iBAAO,iBAAiB,MAAM,wBAAwB;AAExD,aAAK,UAAU,KAAK,OAAO,qCAAqC,KAAK,GAAG;AAExE,YAAI,CAAC,KAAK,KAAK,SAAS,OAAO,MAAM,GAAG;AAEtC,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,OAAO,GAAG,CAAC,MAAM,YAAY;AACpC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAKxC,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,cAAM,QAAQ,UAAU,KAAK,MAAM;AACnC,qBAAa,MAAM;AAEnB,YAAI,UAAU;AACZ,iBAAO,iBAAiB,MAAM,0BAA0B;AAE1D,aAAK,UAAU,KAAK,OAAO,uCAAuC,KAAK,GAAG;AAE1E,YAAI,CAAC,KAAK,KAAK,WAAW,OAAO,MAAM,KAAK,GAAG;AAE7C,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,QAAQ,GAAG,CAAC,MAAM,YAAY;AACrC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAKxC,cAAM,SAAS,aAAa,WAAW;AACvC,cAAM,QAAQ,UAAU,KAAK,MAAM;AACnC,qBAAa,MAAM;AAEnB,YAAI,UAAU,UAAa,OAAO,SAAS;AACzC,iBAAO,iBAAiB,MAAM,2BAA2B;AAE3D,aAAK,UAAU,KAAK;AAAA,UAClB,wCAAwC,KAAK;AAAA,QAC/C;AAEA,YAAI,CAAC,KAAK,KAAK,YAAY,OAAO,QAAQ,KAAK,GAAG;AAEhD,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,OAAO,GAAG,CAAC,MAAM,YAAY;AACpC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAIxC,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,qBAAa,MAAM;AAEnB,YAAI,SAAS;AACX,iBAAO,iBAAiB,MAAM,0BAA0B;AAE1D,aAAK,UAAU,KAAK,OAAO,uCAAuC,KAAK,GAAG;AAE1E,YAAI,CAAC,KAAK,KAAK,WAAW,OAAO,IAAI,GAAG;AAEtC,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,OAAO,GAAG,CAAC,MAAM,YAAY;AACpC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAIxC,cAAM,SAAS,aAAa,WAAW;AACvC,qBAAa,MAAM;AAEnB,YAAI,WAAW,UAAa,OAAO,SAAS;AAC1C,iBAAO,iBAAiB,MAAM,0BAA0B;AAE1D,aAAK,UAAU,KAAK,OAAO,uCAAuC,KAAK,GAAG;AAE1E,YAAI,CAAC,KAAK,KAAK,WAAW,OAAO,MAAM,GAAG;AAExC,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,MAAM,GAAG,CAAC,MAAM,YAAY;AACnC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAIxC,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,qBAAa,MAAM;AAEnB,YAAI,SAAS;AACX,iBAAO,iBAAiB,MAAM,yBAAyB;AAEzD,aAAK,UAAU,KAAK,OAAO,sCAAsC,KAAK,GAAG;AAEzE,YAAI,CAAC,KAAK,KAAK,UAAU,OAAO,IAAI,GAAG;AAErC,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,YAAY;AAClC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAKxC,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,cAAM,QAAQ,UAAU,KAAK,MAAM;AACnC,qBAAa,MAAM;AAEnB,YAAI,UAAU;AACZ,iBAAO,iBAAiB,MAAM,wBAAwB;AAExD,aAAK,UAAU,KAAK,OAAO,qCAAqC,KAAK,GAAG;AAExE,YAAI,CAAC,KAAK,KAAK,SAAS,OAAO,MAAM,KAAK,GAAG;AAE3C,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,YAAY;AAClC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAIxC,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,qBAAa,MAAM;AAEnB,YAAI,SAAS;AACX,iBAAO,iBAAiB,MAAM,wBAAwB;AAExD,aAAK,UAAU,KAAK,OAAO,qCAAqC,KAAK,GAAG;AAExE,YAAI,CAAC,KAAK,KAAK,SAAS,OAAO,IAAI,GAAG;AAEpC,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,QAAQ,GAAG,CAAC,MAAM,YAAY;AACrC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAIxC,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,qBAAa,MAAM;AAEnB,YAAI,SAAS;AACX,iBAAO,iBAAiB,MAAM,2BAA2B;AAE3D,aAAK,UAAU,KAAK;AAAA,UAClB,wCAAwC,KAAK;AAAA,QAC/C;AAEA,YAAI,CAAC,KAAK,KAAK,YAAY,OAAO,IAAI,GAAG;AAEvC,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,YAAY;AACjC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAIxC,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,qBAAa,MAAM;AAEnB,YAAI,SAAS;AACX,iBAAO,iBAAiB,MAAM,uBAAuB;AAEvD,aAAK,UAAU,KAAK,OAAO,oCAAoC,KAAK,GAAG;AAEvE,YAAI,CAAC,KAAK,KAAK,QAAQ,OAAO,IAAI,GAAG;AAEnC,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,MAAM,GAAG,CAAC,MAAM,YAAY;AACnC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAKxC,cAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,cAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,qBAAa,MAAM;AAEnB,YAAI,YAAY;AACd,iBAAO,iBAAiB,MAAM,yBAAyB;AAEzD,aAAK,UAAU,KAAK,OAAO,sCAAsC,KAAK,GAAG;AAEzE,YAAI,CAAC,KAAK,KAAK,UAAU,OAAO,SAAS,OAAO,GAAG;AAEjD,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,QAAQ,GAAG,CAAC,MAAM,YAAY;AACrC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAIxC,cAAM,OAAO,aAAa,WAAW,IAAI;AACzC,qBAAa,MAAM;AAEnB,YAAI,SAAS;AACX,iBAAO,iBAAiB,MAAM,2BAA2B;AAE3D,aAAK,UAAU,KAAK;AAAA,UAClB,wCAAwC,KAAK;AAAA,QAC/C;AAEA,YAAI,CAAC,KAAK,KAAK,YAAY,OAAO,IAAI,GAAG;AAEvC,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,OAAO,GAAG,CAAC,MAAM,YAAY;AACpC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAKxC,cAAM,WAAW,aAAa,WAAW,IAAI;AAC7C,cAAM,aAAa,aAAa,WAAW,IAAI;AAC/C,qBAAa,MAAM;AAEnB,YAAI,eAAe;AACjB,iBAAO,iBAAiB,MAAM,0BAA0B;AAE1D,aAAK,UAAU,KAAK,OAAO,uCAAuC,KAAK,GAAG;AAE1E,YAAI;AACJ,YAAI,KAAK,YAAY;AAEnB,oBAAU,KAAK,KAAK,WAAW,OAAO,YAAY,QAAQ;AAAA,QAC5D,OAAO;AACL,oBAAU,KAAK,KAAK,WAAW,OAAO,UAAU,UAAU;AAAA,QAC5D;AACA,YAAI,CAAC,SAAS;AAEZ,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,QAAQ,QAAQ,GAAG,CAAC,MAAM,YAAY;AACrC,qBAAa,KAAK,SAAS,CAAC;AAC5B,cAAM,QAAQ,aAAa,aAAa;AAKxC,cAAM,UAAU,aAAa,WAAW,IAAI;AAC5C,YAAI,YAAY,QAAW;AACzB,uBAAa,MAAM;AACnB,iBAAO,iBAAiB,MAAM,2BAA2B;AAAA,QAC3D;AAEA,YAAI;AACJ,YAAI,aAAa,MAAM;AACrB,oBAAU,aAAa,QAAQ;AACjC,qBAAa,MAAM;AAEnB,aAAK,UAAU,KAAK;AAAA,UAClB,wCAAwC,KAAK;AAAA,QAC/C;AAEA,YAAI,CAAC,KAAK,KAAK,YAAY,OAAO,SAAS,OAAO,GAAG;AAEnD,eAAK,OAAO,OAAO,YAAY,cAAc;AAAA,QAC/C;AAAA,MACF;AAAA,IACF;AAKA,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,QAAM,gBAAgB;AAEtB,QAAI;AAMJ,QAAM,gBAAgB,CAAC;AAEvB,aAAS,aAAa,UAAU;AAC9B,UAAI,cAAc,SAAS;AACzB,eAAO,cAAc,IAAI;AAAA;AAEzB,eAAO,OAAO,YAAY,QAAQ;AACpC,WAAK,OAAO;AAAA,IACd;AAGA,aAAS,cAAc,KAAK,MAAM;AAChC,UAAI,CAAC,OAAO,cAAc,GAAG,GAAG;AAC9B,uBAAe,KAAK,IAAI;AACxB,YAAI,CAAC,OAAO,UAAU,GAAG;AACvB,gBAAM,IAAI,iBAAiB,MAAM,cAAc,GAAG;AACpD,cAAM,IAAI,iBAAiB,MAAM,2BAA2B,GAAG;AAAA,MACjE;AACA,UAAI,MAAM;AACR,cAAM,IAAI,iBAAiB,MAAM,2BAA2B,GAAG;AAAA,IACnE;AAEA,aAAS,qBAAqB,GAAG;AAC/B,aAAQ,IAAI,IAAK,CAAC;AAAA,IACpB;AAEA,aAAS,WAAW,MAAM,MAAM,SAAS;AACvC,UAAI,YAAY;AACd,kBAAU,CAAC;AAAA,eACJ,OAAO,YAAY;AAC1B,kBAAU,EAAE,UAAU,QAAQ;AAAA,eACvB,YAAY,QAAQ,OAAO,YAAY;AAC9C,cAAM,IAAI,UAAU,kDAAkD;AAAA;AAEtE,kBAAU,OAAO,OAAO,OAAO;AAGjC,UAAI,QAAQ,kBAAkB;AAC5B,gBAAQ,gBAAgB,KAAK;AAG/B,cAAQ,YAAY;AACpB,cAAQ,cAAc;AAEtB,qBAAe,KAAK,MAAM,OAAO;AAEjC,WAAK,OAAO;AACZ,WAAK,QAAQ,QAAQ,UAAU,SAAY,MAAM,QAAQ;AACzD,WAAK,OAAO,QAAQ,SAAS,SAAY,MAAQ,QAAQ;AAEzD,WAAK,QAAQ,QAAQ;AACrB,WAAK,MAAM,QAAQ;AACnB,WAAK,YAAY,QAAQ,cAAc,SAAY,OAAO,QAAQ;AAClE,WAAK,MAAM;AACX,WAAK,YAAY;AACjB,WAAK,WAAW;AAEhB,WAAK,SAAS,QAAQ,WAAW,SAAY,OAAO,QAAQ;AAC5D,WAAK,OAAO;AACZ,WAAK,WAAW;AAEhB,UAAI,KAAK,UAAU,QAAW;AAC5B,sBAAc,KAAK,OAAO,OAAO;AAEjC,aAAK,MAAM,KAAK;AAAA,MAClB;AAEA,UAAI,KAAK,QAAQ,QAAW;AAC1B,aAAK,MAAM;AAAA,MACb,WAAW,KAAK,QAAQ,UAAU;AAChC,sBAAc,KAAK,KAAK,KAAK;AAE7B,YAAI,KAAK,UAAU,UAAa,KAAK,QAAQ,KAAK,KAAK;AACrD,gBAAM,IAAI;AAAA,YACR;AAAA,YACA,mBAAmB,KAAK,GAAG;AAAA,YAC3B,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAEA,WAAK,GAAG,OAAO,WAAW;AACxB,YAAI,KAAK;AACP,eAAK,QAAQ;AAAA,MACjB,CAAC;AAED,UAAI,CAAC,OAAO,SAAS,KAAK,MAAM;AAC9B,aAAK,KAAK;AAAA,IACd;AACA,aAAS,YAAY,cAAc;AAEnC,eAAW,UAAU,OAAO,WAAW;AACrC,UAAI,KAAK;AACP;AAEF,WAAK,WAAW;AAEhB,WAAK,KAAK,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,CAAC,IAAI,WAAW;AAC/D,aAAK,WAAW;AAEhB,YAAI,IAAI;AACN,eAAK,KAAK,SAAS,EAAE;AACrB,cAAI,KAAK;AACP,iBAAK,QAAQ;AACf;AAAA,QACF;AAEA,aAAK,SAAS;AACd,aAAK,KAAK,QAAQ,MAAM;AACxB,aAAK,KAAK,OAAO;AAEjB,aAAK,KAAK;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,eAAW,UAAU,QAAQ,SAAS,GAAG;AACvC,UAAI,CAAC,OAAO,SAAS,KAAK,MAAM;AAC9B,eAAO,KAAK,KAAK,QAAQ,MAAM,KAAK,MAAM,CAAC,CAAC;AAG9C,UAAI,KAAK;AACP;AAEF,UAAI,CAAC,QAAQ,KAAK,SAAS,KAAK,OAAO,eAAe;AAEpD,qBAAa,KAAK,yBACF,KAAK,eAAe,aAAa;AAAA,MACnD;AAKA,YAAM,WAAW;AACjB,UAAI,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,MAAM,CAAC;AAChD,YAAM,QAAQ,KAAK;AAEnB,UAAI,KAAK,QAAQ;AACf,iBAAS,KAAK,IAAI,KAAK,MAAM,KAAK,MAAM,GAAG,MAAM;AAInD,UAAI,UAAU;AACZ,eAAO,KAAK,KAAK,IAAI;AAGvB,WAAK,KAAK;AAAA,QAAK,KAAK;AAAA,QACL;AAAA,QACA,KAAK;AAAA,QACL;AAAA,QACA,KAAK;AAAA,QACL,CAAC,IAAI,cAAc;AAChC,cAAI,IAAI;AACN,iBAAK,KAAK,SAAS,EAAE;AACrB,gBAAI,KAAK;AACP,mBAAK,QAAQ;AACf;AAAA,UACF;AACA,cAAI,IAAI;AAKR,cAAI,QAAQ,WAAW,SAAS,QAAQ,aAAa,MAAM;AACzD,qBAAS,OAAO,qBAAqB,SAAS,OAAO,YAAY,MAAM;AAAA,UACzE,OAAO;AAGL,kBAAM,aAAc,QAAQ,SAAU,CAAC;AACvC,kBAAM,eAAe,qBAAqB,QAAQ,SAAS;AAC3D,gBAAI,aAAa,gBAAgB;AAC/B,4BAAc,KAAK,SAAS,MAAM,cAAc,UAAU,CAAC;AAAA,UAC/D;AAEA,cAAI,YAAY,GAAG;AACjB,iBAAK,aAAa;AAClB,gBAAI,SAAS,MAAM,OAAO,QAAQ,SAAS;AAAA,UAC7C;AAGA,eAAK,OAAO;AAEZ,eAAK,KAAK,CAAC;AAAA,QACb;AAAA,MAAC;AAED,WAAK,OAAO,qBAAqB,KAAK,OAAO,MAAM;AAAA,IACrD;AAEA,eAAW,UAAU,WAAW,SAAS,KAAK,IAAI;AAChD,UAAI,KAAK,YAAY,CAAC,OAAO,SAAS,KAAK,MAAM,GAAG;AAClD,aAAK,KAAK,QAAQ,YAAY,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC;AACvD;AAAA,MACF;AAEA,kBAAY,MAAM,IAAI,GAAG;AACzB,WAAK,SAAS;AACd,WAAK,WAAW;AAAA,IAClB;AAEA,aAAS,YAAY,QAAQ,IAAI,KAAK;AACpC,UAAI,CAAC,OAAO;AACV,eAAO,QAAQ;AAEjB,aAAO,KAAK,MAAM,OAAO,QAAQ,OAAO;AAExC,eAAS,QAAQ,IAAI;AACnB,aAAK,MAAM;AACX,WAAG,EAAE;AACL,eAAO,WAAW;AAClB,YAAI,CAAC;AACH,iBAAO,KAAK,OAAO;AAAA,MACvB;AAAA,IACF;AAEA,eAAW,UAAU,QAAQ,SAAS,IAAI;AACxC,WAAK,QAAQ,MAAM,EAAE;AAAA,IACvB;AAEA,WAAO,eAAe,WAAW,WAAW,WAAW;AAAA,MACrD,MAAM;AACJ,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAID,aAAS,YAAY,MAAM,MAAM,SAAS;AACxC,UAAI,YAAY;AACd,kBAAU,CAAC;AAAA,eACJ,OAAO,YAAY;AAC1B,kBAAU,EAAE,UAAU,QAAQ;AAAA,eACvB,YAAY,QAAQ,OAAO,YAAY;AAC9C,cAAM,IAAI,UAAU,kDAAkD;AAAA;AAEtE,kBAAU,OAAO,OAAO,OAAO;AAGjC,cAAQ,YAAY;AACpB,cAAQ,cAAc;AAEtB,qBAAe,KAAK,MAAM,OAAO;AAEjC,WAAK,OAAO;AACZ,WAAK,QAAQ,QAAQ,UAAU,SAAY,MAAM,QAAQ;AACzD,WAAK,OAAO,QAAQ,SAAS,SAAY,MAAQ,QAAQ;AAEzD,WAAK,QAAQ,QAAQ;AACrB,WAAK,YAAY,QAAQ,cAAc,SAAY,OAAO,QAAQ;AAClE,WAAK,MAAM;AACX,WAAK,eAAe;AACpB,WAAK,WAAW;AAEhB,WAAK,SAAS,QAAQ,WAAW,SAAY,OAAO,QAAQ;AAC5D,WAAK,OAAO;AACZ,WAAK,WAAW;AAEhB,UAAI,KAAK,UAAU,QAAW;AAC5B,sBAAc,KAAK,OAAO,OAAO;AAEjC,aAAK,MAAM,KAAK;AAAA,MAClB;AAEA,UAAI,QAAQ;AACV,aAAK,mBAAmB,QAAQ,QAAQ;AAG1C,WAAK,GAAG,UAAU,WAAW;AAC3B,YAAI,KAAK,eAAe;AACtB;AACF,YAAI,KAAK;AACP,eAAK,QAAQ;AAAA,MACjB,CAAC;AAED,UAAI,CAAC,OAAO,SAAS,KAAK,MAAM;AAC9B,aAAK,KAAK;AAAA,IACd;AACA,aAAS,aAAa,cAAc;AAEpC,gBAAY,UAAU,SAAS,SAAS,IAAI;AAC1C,UAAI,KAAK;AACP,aAAK,QAAQ;AACf,SAAG;AAAA,IACL;AAEA,gBAAY,UAAU,OAAO,WAAW;AACtC,UAAI,KAAK;AACP;AAEF,WAAK,WAAW;AAEhB,WAAK,KAAK,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,CAAC,IAAI,WAAW;AAC/D,aAAK,WAAW;AAEhB,YAAI,IAAI;AACN,eAAK,KAAK,SAAS,EAAE;AACrB,cAAI,KAAK;AACP,iBAAK,QAAQ;AACf;AAAA,QACF;AAEA,aAAK,SAAS;AAEd,cAAM,WAAW,CAAC,QAAQ;AACxB,cAAI,KAAK;AAGP,iBAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,CAAC,SAAS,SAAS,CAAC;AAC1D;AAAA,UACF;AAGA,cAAI,KAAK,MAAM,CAAC,MAAM,KAAK;AACzB,kBAAM,UAAU,CAACJ,MAAK,OAAO;AAC3B,kBAAIA,MAAK;AAGP,qBAAK,KAAK,KAAK,KAAK,MAAM,CAAC,MAAM,QAAQ;AACvC,sBAAI,MAAM;AACR,yBAAK,QAAQ;AACb,yBAAK,KAAK,SAASA,IAAG;AACtB;AAAA,kBACF;AACA,0BAAQ,MAAM,GAAG;AAAA,gBACnB,CAAC;AACD;AAAA,cACF;AAEA,mBAAK,MAAM,GAAG;AACd,mBAAK,KAAK,QAAQ,MAAM;AACxB,mBAAK,KAAK,OAAO;AAAA,YACnB;AAEA,iBAAK,KAAK,MAAM,QAAQ,OAAO;AAC/B;AAAA,UACF;AAEA,eAAK,KAAK,QAAQ,MAAM;AACxB,eAAK,KAAK,OAAO;AAAA,QACnB;AAEA,aAAK,KAAK,OAAO,QAAQ,KAAK,MAAM,QAAQ;AAAA,MAC9C,CAAC;AAAA,IACH;AAEA,gBAAY,UAAU,SAAS,SAAS,MAAM,UAAU,IAAI;AAC1D,UAAI,CAAC,OAAO,SAAS,IAAI,GAAG;AAC1B,cAAM,MAAM,IAAI,qBAAqB,QAAQ,UAAU,IAAI;AAC3D,eAAO,KAAK,KAAK,SAAS,GAAG;AAAA,MAC/B;AAEA,UAAI,CAAC,OAAO,SAAS,KAAK,MAAM,GAAG;AACjC,eAAO,KAAK,KAAK,QAAQ,WAAW;AAClC,eAAK,OAAO,MAAM,UAAU,EAAE;AAAA,QAChC,CAAC;AAAA,MACH;AAEA,WAAK,KAAK;AAAA,QAAM,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,CAAC,IAAI,UAAU;AAC7B,cAAI,IAAI;AACN,gBAAI,KAAK;AACP,mBAAK,QAAQ;AACf,mBAAO,GAAG,EAAE;AAAA,UACd;AACA,eAAK,gBAAgB;AACrB,aAAG;AAAA,QACL;AAAA,MAAC;AAED,WAAK,OAAO,KAAK;AAAA,IACnB;AAEA,gBAAY,UAAU,UAAU,SAAS,MAAM,IAAI;AACjD,UAAI,CAAC,OAAO,SAAS,KAAK,MAAM,GAAG;AACjC,eAAO,KAAK,KAAK,QAAQ,WAAW;AAClC,eAAK,QAAQ,MAAM,EAAE;AAAA,QACvB,CAAC;AAAA,MACH;AAEA,YAAM,OAAO,KAAK;AAClB,YAAM,SAAS,KAAK;AACpB,UAAI,aAAa,KAAK;AAEtB,YAAM,UAAU,CAAC,IAAI,UAAU;AAC7B,YAAI,IAAI;AACN,eAAK,QAAQ;AACb,iBAAO,GAAG,EAAE;AAAA,QACd;AACA,aAAK,gBAAgB;AACrB,YAAI,EAAE,eAAe;AACnB,aAAG;AAAA,MACP;AAGA,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,cAAM,QAAQ,KAAK,CAAC,EAAE;AAEtB,aAAK,MAAM,QAAQ,OAAO,GAAG,MAAM,QAAQ,KAAK,KAAK,OAAO;AAC5D,aAAK,OAAO,MAAM;AAAA,MACpB;AAAA,IACF;AAEA,QAAI,OAAO,eAAe,UAAU,YAAY;AAC9C,kBAAY,UAAU,UAAU,WAAW,UAAU;AAEvD,gBAAY,UAAU,WAAW,WAAW,UAAU;AACtD,gBAAY,UAAU,QAAQ,SAAS,IAAI;AACzC,UAAI,IAAI;AACN,YAAI,KAAK,UAAU;AACjB,kBAAQ,SAAS,EAAE;AACnB;AAAA,QACF;AACA,aAAK,GAAG,SAAS,EAAE;AAAA,MACrB;AAIA,UAAI,CAAC,KAAK;AACR,aAAK,GAAG,UAAU,KAAK,QAAQ,KAAK,IAAI,CAAC;AAE3C,WAAK,IAAI;AAAA,IACX;AAGA,gBAAY,UAAU,cAAc,YAAY,UAAU;AAE1D,WAAO,eAAe,YAAY,WAAW,WAAW;AAAA,MACtD,MAAM;AACJ,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAGD,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;ACn9HA;AAAA;AAAA;AAEA,QAAM;AAAA,MACJ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,IACZ,IAAI,UAAQ,QAAQ;AAEpB,QAAM;AAAA,MACJ,2BAA2B,EAAE,OAAO;AAAA,IACtC,IAAI;AACJ,QAAM,EAAE,YAAY,IAAI;AAExB,QAAM,cAAc,KAAK;AACzB,QAAM,aAAa,IAAI,OAAO;AAC9B,QAAM,mBAAmB,aAAa;AAEtC,QAAM,eAAN,cAA2B,eAAe;AAAA,MACxC,YAAY,SAAS,YAAY;AAC/B,cAAM,UAAU;AAEhB,aAAK,WAAW;AAAA,MAClB;AAAA,MACA,MAAM,GAAG;AACP,YAAI,KAAK,SAAS,gBAAgB;AAChC,eAAK,SAAS,iBAAiB;AAC/B,cAAI,KAAK,SAAS,SAAS,UAAU;AACnC,yBAAa,KAAK,QAAQ;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAEA,QAAM,eAAN,cAA2B,eAAe;AAAA,MACxC,YAAY,SAAS;AACnB,cAAM,EAAE,eAAe,WAAW,CAAC;AAEnC,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,OAAO,MAAM,UAAU,IAAI;AACzB,cAAM,UAAU,KAAK;AACrB,cAAM,WAAW,QAAQ,QAAQ;AACjC,cAAM,WAAW,QAAQ;AACzB,cAAM,aAAa,SAAS;AAC5B,cAAM,KAAK,SAAS;AACpB,YAAIK,UAAS,SAAS;AACtB,cAAM,MAAM,KAAK;AACjB,YAAI,IAAI;AAER,YAAI,SAAS,UAAU;AACrB;AAEF,eAAO,MAAM,IAAI,KAAKA,UAAS,GAAG;AAChC,cAAI,WAAW,MAAM;AACrB,cAAI,WAAWA;AACb,uBAAWA;AACb,cAAI,WAAW;AACb,uBAAW;AAEb,cAAI,MAAM,KAAK,aAAa;AAC1B,qBAAS,eAAe,IAAI,MAAM,MAAM;AAAA;AAExC,qBAAS,eAAe,IAAI,YAAY,MAAM,GAAG,IAAI,QAAQ,GAAG,MAAM;AAExE,eAAK;AACL,UAAAA,WAAU;AAAA,QACZ;AAEA,iBAAS,SAASA;AAElB,YAAI,MAAM,IAAI,GAAG;AACf,cAAIA,YAAW;AACb,oBAAQ,cAAc;AACxB,cAAI,IAAI;AACN,oBAAQ,YAAY,YAAY,MAAM,GAAG,GAAG;AAAA;AAE5C,oBAAQ,YAAY;AACtB,kBAAQ,cAAc;AACtB;AAAA,QACF;AAEA,WAAG;AAAA,MACL;AAAA,IACF;AAEA,QAAM,UAAN,cAAsB,aAAa;AAAA,MACjC,YAAY,QAAQ,MAAM,MAAM;AAC9B,cAAM,aAAa;AAAA,UACjB,eAAe;AAAA,UACf,eAAgB,CAAC,QAAS,QAAQ,KAAK,kBAAkB;AAAA,UACzD,WAAW;AAAA,QACb;AACA,cAAM,UAAU;AAChB,aAAK,gBAAgB,WAAW;AAEhC,cAAM,SAAS,CAAC,EAAE,QAAQ,KAAK;AAE/B,aAAK,SAAS;AACd,aAAK,OAAO,KAAK;AACjB,aAAK,UAAU;AAWf,aAAK,WAAW,KAAK;AACrB,aAAK,WAAW,KAAK;AACrB,aAAK,aAAa,CAAC;AAEnB,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,QAAQ;AAAA,UACX,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAEA,aAAK,QAAQ,KAAK,SAAS;AAE3B,YAAI;AACF,eAAK,SAAS,IAAI,aAAa,IAAI;AAAA;AAEnC,eAAK,SAAS,IAAI,aAAa,MAAM,UAAU;AAGjD,aAAK,cAAc;AAGnB,aAAK,iBAAiB;AAEtB,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,aAAK,YAAY;AACjB,aAAK,cAAc;AAEnB,aAAK,GAAG,UAAU,QAAQ,EACrB,GAAG,aAAa,QAAQ;AAE7B,aAAK,GAAG,OAAO,KAAK,EAAE,GAAG,SAAS,KAAK;AAAA,MACzC;AAAA,MAEA,MAAM,GAAG;AACP,YAAI,KAAK,gBAAgB;AACvB,eAAK,iBAAiB;AACtB,cAAI,KAAK,SAAS,UAAU;AAC1B,yBAAa,IAAI;AAAA,QACrB;AAAA,MACF;AAAA,MAEA,OAAO,MAAM,UAAU,IAAI;AACzB,cAAM,WAAW,KAAK,QAAQ;AAC9B,cAAM,WAAW,KAAK;AACtB,cAAM,aAAa,SAAS;AAC5B,cAAM,KAAK,SAAS;AACpB,YAAIA,UAAS,SAAS;AACtB,cAAM,MAAM,KAAK;AACjB,YAAI,IAAI;AAER,YAAI,SAAS,UAAU;AACrB;AAEF,eAAO,MAAM,IAAI,KAAKA,UAAS,GAAG;AAChC,cAAI,WAAW,MAAM;AACrB,cAAI,WAAWA;AACb,uBAAWA;AACb,cAAI,WAAW;AACb,uBAAW;AAEb,cAAI,MAAM,KAAK,aAAa;AAC1B,qBAAS,YAAY,IAAI,IAAI;AAAA;AAE7B,qBAAS,YAAY,IAAI,YAAY,MAAM,GAAG,IAAI,QAAQ,CAAC;AAE7D,eAAK;AACL,UAAAA,WAAU;AAAA,QACZ;AAEA,iBAAS,SAASA;AAElB,YAAI,MAAM,IAAI,GAAG;AACf,cAAIA,YAAW;AACb,iBAAK,cAAc;AACrB,cAAI,IAAI;AACN,iBAAK,SAAS,YAAY,MAAM,GAAG,GAAG;AAAA;AAEtC,iBAAK,SAAS;AAChB,eAAK,WAAW;AAChB;AAAA,QACF;AAEA,WAAG;AAAA,MACL;AAAA,MAEA,MAAM;AACJ,YAAI,KAAK,SAAS,UAAU,QAAQ;AAClC,eAAK,SAAS,QAAQ;AACtB,eAAK,QAAQ,UAAU,WAAW,KAAK,SAAS,EAAE;AAAA,QACpD;AAAA,MACF;AAAA,MAEA,QAAQ;AACN,YAAI,KAAK,SAAS,UAAU,UAAU,KAAK,SAAS,UAAU,OAAO;AACnE,eAAK,SAAS,QAAQ;AACtB,eAAK,QAAQ,UAAU,aAAa,KAAK,SAAS,EAAE;AAAA,QACtD;AAAA,MACF;AAAA,MAEA,UAAU;AACR,aAAK,IAAI;AACT,aAAK,MAAM;AACX,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,UAAU,MAAM,MAAM,QAAQ,OAAO;AACnC,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,KAAK,SAAS,cACV,KAAK,YAAY,WAAW,KAAK,YAAY,WAC9C,KAAK,YACL,KAAK,SAAS,UAAU,QAAQ;AACrC,eAAK,QAAQ,UAAU;AAAA,YAAa,KAAK,SAAS;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAK;AAAA,QAC3C;AAAA,MACF;AAAA,MAEA,OAAO,YAAY;AACjB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,KAAK,SAAS,aACX,KAAK,YACL,KAAK,SAAS,UAAU,QAAQ;AACrC,eAAK,QAAQ,UAAU,OAAO,KAAK,SAAS,IAAI,UAAU;AAAA,QAC5D;AAAA,MACF;AAAA,MAEA,KAAK,gBAAgB,YAAY,KAAK;AACpC,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,0CAA0C;AAE5D,YAAI,KAAK,SAAS,aACX,KAAK,YACL,KAAK,SAAS,UAAU,QAAQ;AACrC,cAAI,OAAO,mBAAmB,UAAU;AACtC,iBAAK,QAAQ,UAAU,WAAW,KAAK,SAAS,IAAI,cAAc;AAAA,UACpE,OAAO;AACL,iBAAK,QAAQ,UAAU;AAAA,cAAW,KAAK,SAAS;AAAA,cACd;AAAA,cACA;AAAA,cACA;AAAA,YAAG;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA,IAEF;AAEA,aAAS,WAAW;AAClB,WAAK,IAAI;AACT,UAAI,KAAK,UAAU,CAAC,KAAK;AACvB,aAAK,MAAM;AACb,WAAK,WAAW;AAAA,IAClB;AAEA,aAAS,QAAQ;AACf,WAAK,WAAW;AAAA,IAClB;AAEA,aAAS,aAAaC,OAAM;AAC1B,UAAIA,MAAK,SAAS,UAAU;AAC1B;AACF,YAAM,MAAM,aAAaA,MAAK,SAAS;AACvC,UAAI,OAAO;AACT;AACF,MAAAA,MAAK,SAAS,UAAU;AACxB,MAAAA,MAAK,QAAQ,UAAU,oBAAoBA,MAAK,SAAS,IAAI,GAAG;AAAA,IAClE;AAEA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;ACtSA,IAAAC,iBAAA;AAAA;AAAA;AAEA,QAAM,EAAE,KAAK,IAAI;AAEjB,QAAM,cAAc,KAAK,KAAK;AAE9B,aAAS,qBAAqBC,OAAM,WAAW,MAAM,IAAI;AACvD,MAAAA,MAAK,SAAS,OAAO,SAAS;AAC9B,UAAI,OAAO,OAAO;AAChB;AAEF,UAAI;AACJ,UAAI,gBAAgB,OAAO;AACzB,cAAM;AAAA,MACR,WAAW,OAAO,SAAS,YAAY,SAAS,MAAM;AACpD,cAAM,IAAI,MAAM,+BAA+B,KAAK,WAAW,EAAE;AACjE,YAAI,SAAS,KAAK;AAAA,MACpB,OAAO;AACL,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AACA,YAAI,SAAS;AAAA,MACf;AAEA,SAAG,GAAG;AAAA,IACR;AAEA,aAAS,gBAAgBA,OAAM,WAAW,SAAS,KAAK,MAAM;AAC5D,UAAI,OAAO,YAAY,YAAY;AAGjC,6BAAqBA,OAAM,WAAW,KAAK,OAAO;AAClD;AAAA,MACF;AAEA,UAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,UAAI,QAAQ,YAAY,QAAQ,SAAS,UAAU;AACjD;AAEF,MAAAA,MAAK,SAAS,OAAO,SAAS;AAE9B,UAAI,QAAQ,UAAU,QAAQ,YAAY,SAAS;AACjD;AAEF,cAAQ,SAAS,QAAQ;AAEzB,UAAI,QAAQ;AACV,gBAAQ,KAAK,IAAI;AACnB,UAAI,QAAQ,QAAQ;AAClB,YAAI,QAAQ,OAAO;AACjB,kBAAQ,OAAO,IAAI;AAAA,MACvB,WAAW,QAAQ,OAAO,UAAU;AAClC,gBAAQ,OAAO,KAAK,IAAI;AAAA,MAC1B;AAEA,UAAI,QAAQ,gBAAgB,SACpB,QAAQ,SAAS,UAAU,UACxB,QAAQ,SAAS,UAAU,UAC/B,CAAC,MAAM;AACZ,gBAAQ,MAAM;AAAA,MAChB;AACA,UAAI,QAAQ,SAAS,UAAU;AAC7B,gBAAQ,SAAS,QAAQ;AAE3B,YAAM,YAAY,QAAQ;AAC1B,YAAM,aAAa,QAAQ;AAC3B,UAAI,cAAc,CAAC,WAAW,UAAU,CAAC,WAAW,YAAY,CAAC;AAC/D,gBAAQ,IAAI;AAGd,YAAM,gBAAgB,QAAQ;AAC9B,cAAQ,aAAa,CAAC;AACtB,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,EAAE;AAC1C,sBAAc,CAAC,EAAE,IAAI;AAEvB,UAAI,QAAQ,QAAQ;AAClB,YAAI,CAAC,QAAQ,YACN,QAAQ,aACP,aAAa,UAAU,YAAa;AAC1C,kBAAQ,KAAK,OAAO;AAAA,QACtB,OAAO;AACL,kBAAQ,KAAK,OAAO,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,QACjD;AAAA,MACF,OAAO;AACL,YAAI;AACJ,gBAAQ,QAAQ,MAAM;AAAA,UACpB,KAAK;AAAA,UACL,KAAK;AACH,sBAAU,MAAM,QAAQ,KAAK,OAAO;AACpC;AAAA,UACF,SAAS;AAGP,kBAAM,OAAO,QAAQ;AACrB,sBAAU,MAAM;AACd,kBAAI,KAAK,SAAS;AAChB,wBAAQ,KAAK,SAAS,KAAK,MAAM,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AAAA;AAElE,wBAAQ,KAAK,SAAS,KAAK,IAAI;AAAA,YACnC;AAAA,UACF;AAAA,QACF;AACA,YAAI,CAAC,QAAQ,YACN,QAAQ,aACP,aAAa,UAAU,YAAa;AAC1C,kBAAQ;AAAA,QACV,OAAO;AACL,kBAAQ,KAAK,OAAO,OAAO;AAAA,QAC7B;AAEA,cAAM,eAAe,QAAQ,OAAO;AACpC,YAAI,CAAC,QAAQ,OAAO,YACb,QAAQ,OAAO,aACd,gBAAgB,aAAa,YAAa;AAChD,kBAAQ,OAAO,KAAK,OAAO;AAAA,QAC7B,OAAO;AACL,kBAAQ,OAAO,KAAK,OAAO,MAAM,QAAQ,OAAO,KAAK,OAAO,CAAC;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AAEA,QAAM,iBAAN,MAAqB;AAAA,MACnB,YAAY,QAAQ;AAClB,aAAK,UAAU;AACf,aAAK,YAAY,CAAC;AAClB,aAAK,OAAO;AACZ,aAAK,SAAS;AAAA,MAChB;AAAA,MACA,IAAI,KAAK;AAGP,YAAI;AAEJ,YAAI,KAAK,OAAO,aAAa;AAC3B,eAAK,EAAE,KAAK;AAAA,QACd,WAAW,KAAK,WAAW,GAAG;AAG5B,eAAK,OAAO;AACZ,eAAK;AAAA,QACP,OAAO;AAML,gBAAM,WAAW,KAAK;AACtB,mBAAS,IAAI,GAAG,IAAI,aAAa,EAAE,GAAG;AACpC,gBAAI,SAAS,CAAC,MAAM,QAAW;AAC7B,mBAAK;AACL;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,OAAO;AACT,iBAAO;AAET,aAAK,UAAU,EAAE,IAAK,OAAO;AAC7B,UAAE,KAAK;AAEP,eAAO;AAAA,MACT;AAAA,MACA,OAAO,IAAI,KAAK;AACd,YAAI,OAAO,OAAO,YAAY,KAAK,KAAK,MAAM,eAAe,CAAC,SAAS,EAAE;AACvE,gBAAM,IAAI,MAAM,uBAAuB,EAAE,EAAE;AAE7C,YAAI,OAAO,KAAK,UAAU,EAAE;AAC1B,eAAK,UAAU,EAAE,IAAI;AAAA,MACzB;AAAA,MACA,IAAI,IAAI;AACN,YAAI,OAAO,OAAO,YAAY,KAAK,KAAK,MAAM,eAAe,CAAC,SAAS,EAAE;AACvE,gBAAM,IAAI,MAAM,uBAAuB,EAAE,EAAE;AAE7C,eAAO,KAAK,UAAU,EAAE;AAAA,MAC1B;AAAA,MACA,OAAO,IAAI;AACT,YAAI,OAAO,OAAO,YAAY,KAAK,KAAK,MAAM,eAAe,CAAC,SAAS,EAAE;AACvE,gBAAM,IAAI,MAAM,uBAAuB,EAAE,EAAE;AAE7C,YAAI,KAAK,UAAU,EAAE,GAAG;AACtB,iBAAO,KAAK,UAAU,EAAE;AACxB,cAAI,KAAK;AACP,cAAE,KAAK;AAAA,QACX;AAAA,MACF;AAAA,MACA,QAAQ,KAAK;AACX,cAAM,WAAW,KAAK;AACtB,aAAK,YAAY,CAAC;AAClB,aAAK,OAAO;AACZ,aAAK,SAAS;AAEd,cAAM,UAAU,OAAO,KAAK,QAAQ;AACpC,cAAM,SAAS,KAAK;AACpB,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,gBAAM,KAAK,CAAC,QAAQ,CAAC;AACrB,gBAAM,UAAU,SAAS,EAAE;AAC3B,0BAAgB,QAAQ,IAAI,QAAQ,YAAY,SAAS,KAAK,IAAI;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AAEA,QAAM,WAAY,uBAAM;AACtB,YAAM,WAAW,OAAO,UAAU;AAClC,aAAO,CAAC,QAAQ,SAAS,KAAK,GAAG,MAAM;AAAA,IACzC,GAAG;AAEH,aAAS,sBAAsB,UAAU,aAAa,eAAe;AACnE,UAAI,MAAM,QAAQ,QAAQ,KAAK,SAAS,SAAS,GAAG;AAElD,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,cAAI,cAAc,QAAQ,SAAS,CAAC,CAAC,MAAM;AACzC,kBAAM,IAAI,MAAM,0BAA0B,SAAS,CAAC,CAAC,EAAE;AAAA,QAC3D;AACA,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,aAAa,YAAY,aAAa,MAAM;AAErD,cAAM,OAAO,OAAO,KAAK,QAAQ;AACjC,YAAI,OAAO;AACX,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,gBAAM,MAAM,KAAK,CAAC;AAClB,cAAI,MAAM,SAAS,GAAG;AACtB,kBAAQ,KAAK;AAAA,YACX,KAAK;AACH,kBAAI,CAAC,MAAM,QAAQ,GAAG;AACpB,sBAAM,CAAC,GAAG;AACZ,kBAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,yBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AACnC,wBAAM,SAAS,IAAI,CAAC;AACpB,sBAAI,OAAO,WAAW,UAAU;AAC9B,wBAAI,CAAC,UAAU,KAAK,QAAQ,MAAM,MAAM;AACtC;AACF,wBAAI,cAAc,QAAQ,MAAM,MAAM;AACpC,4BAAM,IAAI,MAAM,0BAA0B,MAAM,EAAE;AACpD,wBAAI,SAAS;AACX,6BAAO,KAAK,MAAM;AACpB,yBAAK,KAAK,MAAM;AAAA,kBAClB,WAAW,SAAS,MAAM,GAAG;AAC3B,6BAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,EAAE,GAAG;AAC7C,4BAAM,OAAO,cAAc,CAAC;AAC5B,0BAAI,OAAO,KAAK,IAAI,GAAG;AACrB,4BAAI,KAAK,QAAQ,IAAI,MAAM;AACzB;AACF,4BAAI,SAAS;AACX,iCAAO,KAAK,MAAM;AACpB,6BAAK,KAAK,IAAI;AAAA,sBAChB;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AACA;AAAA,YACF,KAAK;AACH,kBAAI,CAAC,MAAM,QAAQ,GAAG;AACpB,sBAAM,CAAC,GAAG;AACZ,kBAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,yBAAS,IAAI,IAAI,QAAQ,KAAK,GAAG,EAAE,GAAG;AACpC,wBAAM,UAAU,IAAI,CAAC;AACrB,sBAAI,OAAO,YAAY,UAAU;AAC/B,wBAAI,CAAC,WAAW,KAAK,QAAQ,OAAO,MAAM;AACxC;AACF,wBAAI,cAAc,QAAQ,OAAO,MAAM;AACrC,4BAAM,IAAI,MAAM,0BAA0B,OAAO,EAAE;AACrD,wBAAI,SAAS;AACX,6BAAO,KAAK,MAAM;AACpB,yBAAK,QAAQ,OAAO;AAAA,kBACtB,WAAW,SAAS,OAAO,GAAG;AAC5B,6BAAS,IAAI,cAAc,QAAQ,KAAK,GAAG,EAAE,GAAG;AAC9C,4BAAM,OAAO,cAAc,CAAC;AAC5B,0BAAI,QAAQ,KAAK,IAAI,GAAG;AACtB,4BAAI,KAAK,QAAQ,IAAI,MAAM;AACzB;AACF,4BAAI,SAAS;AACX,iCAAO,KAAK,MAAM;AACpB,6BAAK,QAAQ,IAAI;AAAA,sBACnB;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AACA;AAAA,YACF,KAAK;AACH,kBAAI,CAAC,MAAM,QAAQ,GAAG;AACpB,sBAAM,CAAC,GAAG;AACZ,kBAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,yBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AACnC,wBAAM,SAAS,IAAI,CAAC;AACpB,sBAAI,OAAO,WAAW,UAAU;AAC9B,wBAAI,CAAC;AACH;AACF,0BAAM,MAAM,KAAK,QAAQ,MAAM;AAC/B,wBAAI,QAAQ;AACV;AACF,wBAAI,SAAS;AACX,6BAAO,KAAK,MAAM;AACpB,yBAAK,OAAO,KAAK,CAAC;AAAA,kBACpB,WAAW,SAAS,MAAM,GAAG;AAC3B,6BAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,0BAAI,OAAO,KAAK,KAAK,CAAC,CAAC,GAAG;AACxB,4BAAI,SAAS;AACX,iCAAO,KAAK,MAAM;AACpB,6BAAK,OAAO,GAAG,CAAC;AAChB,0BAAE;AAAA,sBACJ;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AACA;AAAA,UACJ;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,CAAC,WAAW;AAGtB,eAAQ,UACG,OAAO,YACP,OAAO,kBACP,OAAO,eAAe,UAAU;AAAA,MAC7C;AAAA,IACF;AAAA;AAAA;;;AC/UA;AAAA;AAAA;AAMA,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,UAAQ,QAAQ;AACpB,QAAM,EAAE,OAAO,IAAI,UAAQ,KAAK;AAChC,QAAM,EAAE,QAAQ,UAAU,IAAI,UAAQ,KAAK;AAC3C,QAAM,eAAe,UAAQ,QAAQ;AACrC,QAAM,SAAS,UAAU;AAEzB,QAAM;AAAA,MACJ;AAAA,MACA,2BAA2B,EAAE,OAAO;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM,EAAE,MAAM,WAAW,IAAI;AAC7B,QAAM,WAAW;AACjB,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,EAAE,KAAK,IAAI;AACjB,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,QAAM,EAAE,cAAc,aAAa,QAAQ,IAAI;AAC/C,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,QAAM,eAAe,iBAAiB;AACtC,QAAM,YAAY,iBAAiB;AACnC,QAAM,aAAa;AACnB,QAAM,OAAO,CAAC,QAAQ;AAAA,IAAC;AAEvB,QAAMC,UAAN,cAAqB,aAAa;AAAA,MAChC,cAAc;AACZ,cAAM;AAEN,aAAK,SAAS;AAAA,UACZ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,cAAc;AAAA,UACd,WAAW;AAAA,UACX,WAAW;AAAA,UACX,WAAW;AAAA,UACX,mBAAmB;AAAA,UACnB,mBAAmB;AAAA,UACnB,cAAc;AAAA,UACd,OAAO;AAAA,UAEP,UAAU;AAAA,UACV,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,OAAO;AAAA,UACP,eAAe;AAAA,UACf,aAAa;AAAA,UAEb,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,OAAO;AAAA,QACT;AAEA,aAAK,SAAS;AACd,aAAK,gBAAgB;AACrB,aAAK,WAAW;AAChB,aAAK,aAAa;AAClB,aAAK,cAAc;AACnB,aAAK,kBAAkB;AACvB,aAAK,aAAa;AAClB,aAAK,mBAAmB;AACxB,aAAK,aAAa;AAElB,aAAK,YAAY;AACjB,aAAK,QAAQ;AACb,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,QAAQ,KAAK;AACX,YAAI,KAAK,SAAS,WAAW,KAAK,KAAK,GAAG;AACxC,eAAK,KAAK,SAAS,MAAM;AACvB,iBAAK,QAAQ,GAAG;AAAA,UAClB,CAAC;AACD,eAAK,IAAI;AACT,iBAAO;AAAA,QACT;AAEA,aAAK,OAAO,OAAO,IAAI,YAAY,IAAI,QAAQ;AAC/C,aAAK,OAAO,OAAO,IAAI,QAAQ;AAC/B,aAAK,OAAO,eAAgB,OAAO,IAAI,iBAAiB,WAC1B,IAAI,eACJ;AAC9B,aAAK,OAAO,YAAa,OAAO,IAAI,cAAc,YACtB,OAAO,IAAI,cAAc,WAC1B,IAAI,YACJ;AAC3B,aAAK,OAAO,YAAY,IAAI,aAAa;AACzC,aAAK,OAAO,YAAY,IAAI,aAAa;AACzC,aAAK,OAAO,oBAAqB,OAAO,IAAI,sBAAsB,YAC9B,IAAI,qBAAqB,IAC1B,IAAI,oBACJ;AACnC,aAAK,OAAO,oBAAqB,OAAO,IAAI,sBAAsB,YAC9B,IAAI,oBAAoB,IACzB,IAAI,oBACJ;AACnC,aAAK,OAAO,eAAgB,OAAO,IAAI,iBAAiB,YACzB,IAAI,gBAAgB,IACrB,IAAI,eACJ;AAC9B,aAAK,OAAO,QAAS,OAAO,IAAI,UAAU,YAClB,OAAO,SAAS,IAAI,KAAK,IAC1B,IAAI,QACJ;AAEvB,cAAM,aAAa;AAAA,UACjB,KAAK;AAAA,UACL,eAAe;AAAA,UACf,IAAI;AAAA,YACF,QAAQ;AAAA,YACR,KAAK;AAAA,YACL,UAAU;AAAA,YACV,MAAM,CAAC;AAAA,UACT;AAAA,UACA,IAAI;AAAA,QACN;AACA,YAAI,mBAAmB;AACvB,YAAI,OAAO,IAAI,eAAe,YAAY,IAAI,eAAe,MAAM;AACjE,qBAAW,MAAM;AAAA,YAAsB,IAAI,WAAW;AAAA,YACf;AAAA,YACA;AAAA,UAAa;AACpD,cAAI,WAAW,QAAQ;AACrB,+BAAmB;AAErB,qBAAW,gBACT;AAAA,YAAsB,IAAI,WAAW;AAAA,YACf;AAAA,YACA;AAAA,UAAyB;AACjD,cAAI,WAAW,kBAAkB;AAC/B,+BAAmB;AAErB,qBAAW,GAAG,SAAS;AAAA,YAAsB,IAAI,WAAW;AAAA,YACf;AAAA,YACA;AAAA,UAAgB;AAC7D,cAAI,WAAW,GAAG,WAAW;AAC3B,+BAAmB;AAErB,qBAAW,GAAG,MAAM;AAAA,YAAsB,IAAI,WAAW;AAAA,YACf;AAAA,YACA;AAAA,UAAa;AACvD,cAAI,WAAW,GAAG,QAAQ;AACxB,+BAAmB;AAErB,qBAAW,GAAG,WAAW;AAAA,YAAsB,IAAI,WAAW;AAAA,YACf;AAAA,YACA;AAAA,UAAqB;AACpE,cAAI,WAAW,GAAG,aAAa;AAC7B,+BAAmB;AAErB,cAAI,CAAC;AACH,uBAAW,KAAK,WAAW;AAAA,QAC/B;AAEA,YAAI,OAAO,IAAI,aAAa;AAC1B,eAAK,OAAO,WAAW,IAAI;AAAA,iBACpB,OAAO,IAAI,SAAS;AAC3B,eAAK,OAAO,WAAW,IAAI;AAAA;AAE3B,gBAAM,IAAI,MAAM,kBAAkB;AAEpC,aAAK,OAAO,WAAY,OAAO,IAAI,aAAa,WACtB,IAAI,WACJ;AAC1B,aAAK,OAAO,aAAc,OAAO,IAAI,eAAe,YACvB,OAAO,SAAS,IAAI,UAAU,IAC/B,IAAI,aACJ;AAC5B,aAAK,OAAO,gBAAiB,OAAO,IAAI,kBAAkB,WAC3B,IAAI,gBACJ;AAC/B,aAAK,OAAO,gBAAiB,OAAO,IAAI,kBAAkB,WAC3B,IAAI,gBACJ;AAC/B,aAAK,OAAO,cAAe,IAAI,gBAAgB;AAC/C,YAAI,OAAO,IAAI,UAAU,YAAY,IAAI,MAAM;AAC7C,eAAK,OAAO,QAAQ,YAAY,IAAI,KAAK;AAAA,iBAClC,QAAQ,IAAI,KAAK;AACxB,eAAK,OAAO,QAAQ,IAAI;AAAA;AAExB,eAAK,OAAO,QAAQ;AACtB,aAAK,OAAO,gBAAiB,IAAI,iBAAiB,QAClB,KAAK,OAAO,UAAU;AACtD,YAAI,cAAc,KAAK,OAAO,cAC5B,OAAO,IAAI,gBAAgB,cACxB,MAAM,QAAQ,IAAI,WAAW,IAC9B,IAAI,cACJ;AAGJ,aAAK,OAAO,eAAgB,OAAO,IAAI,iBAAiB,YAC1B,IAAI,eACJ;AAE9B,cAAM,QAAQ,KAAK,OAAO,QAAS,OAAO,IAAI,UAAU,aACnB,IAAI,QACJ;AAErC,YAAI,IAAI,iBAAiB,QAAQ,CAAC,KAAK,OAAO,eAAe;AAC3D,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,YAAI,YAAY,KAAK,aAAa,CAAC;AACnC,aAAK,WAAW,IAAI,eAAe,IAAI;AACvC,aAAK,cAAc,CAAC;AACpB,aAAK,kBAAkB,CAAC;AACxB,aAAK,aAAa;AAClB,aAAK,mBAAmB;AACxB,aAAK,SAAU,KAAK,OAAO,QAAQ,KAAK,OAAO,QAAQ;AACvD,aAAK,aAAa;AAClB,YAAI;AAEJ,YAAI,KAAK,OAAO,YAAY;AAC1B,uBAAa,SAAS,KAAK,OAAO,YAAY,IAAI,UAAU;AAC5D,cAAI,sBAAsB;AACxB,kBAAM,IAAI,MAAM,4BAA4B,WAAW,OAAO,EAAE;AAClE,cAAI,MAAM,QAAQ,UAAU,GAAG;AAE7B,yBAAa,WAAW,CAAC;AAAA,UAC3B;AACA,cAAI,WAAW,cAAc,MAAM,MAAM;AACvC,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI;AACJ,YAAI,OAAO,IAAI,iBAAiB,YAAY;AAC1C,gBAAM,SAAS,IAAI;AACnB,cAAI;AACJ,cAAI,OAAO,QAAQ,IAAI,QAAQ,MAAM,IAAI;AAEvC,uBAAW,IAAI;AAAA,UACjB;AACA,yBAAe,CAAC,KAAK,WAAW;AAC9B,gBAAI;AACF,oBAAM,WAAW,QAAQ,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK;AACrD,kBAAM,MAAM,OAAO,KAAK,MAAM;AAC9B,gBAAI,QAAQ;AACV,qBAAO,GAAG;AAAA,UACd;AAAA,QACF;AAEA,cAAM,OAAO,KAAK,QAAS,IAAI,QAAQ,IAAI,OAAO;AAClD,YAAI,QAAQ;AACZ,YAAI,YAAY;AAChB,YAAI,KAAK;AACP,eAAK,UAAU,QAAQ;AACzB,cAAM,gBAAiB,CAAC,QAAQ,SAAY,CAAC,GAAG,SAAS,QAAQ;AAC/D,gBAAM,6BAA6B,KAAK,UAAU,GAAG,CAAC,EAAE;AAAA,QAC1D;AACA,YAAI;AACJ,cAAM,QAAQ,KAAK,YAAY,IAAI,SAAS;AAAA,UAC1C,OAAO,KAAK,OAAO;AAAA,UACnB,OAAQ,mBAAmB,SAAY;AAAA,UACvC,SAAS,CAAC,SAAS;AACjB,gBAAI,WAAW,IAAI;AACjB,mBAAK,MAAM,IAAI;AAAA,UACnB;AAAA,UACA,SAAS,CAAC,QAAQ;AAChB,gBAAI,IAAI,UAAU;AAChB,2BAAa,KAAK,aAAa;AACjC,gBAAI,CAAC,MAAM;AACT,mBAAK,mBAAmB,MAAM;AAChC,iBAAK,KAAK,SAAS,GAAG;AACtB,gBAAI;AACF,mBAAK,IAAI;AAAA,YACX,QAAQ;AAAA,YAAC;AAAA,UACX;AAAA,UACA,UAAU,CAAC,WAAW;AACpB,wBAAY;AACZ,iBAAK,aAAa,OAAO,SAAS;AAClC,gBAAI,OAAO;AACT,mBAAK,KAAK,YAAY,OAAO,QAAQ;AAAA,UACzC;AAAA,UACA,qBAAqB,CAAC,eAAe;AACnC,iBAAK,KAAK,aAAa,UAAU;AACjC,gBAAI,CAAC,OAAO;AACV,sBAAQ;AACR,oBAAM,QAAQ,cAAc;AAAA,YAC9B;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,YACf,OAAO;AAAA,YACP,YAAY,CAAC,GAAG,QAAQ,SAAS;AAC/B,kBAAI,WAAW,kBAAkB,gBAAgB;AAC/C,oBAAI,CAAC,MAAM;AACT,yBAAO,2BAA2B,MAAM;AACxC,sBAAI,SAAS;AACX,2BAAO,oCAAoC,MAAM;AAAA,gBACrD;AACA,sBAAM,MAAM,IAAI,MAAM,IAAI;AAC1B,oBAAI,OAAO;AACX,qBAAK,KAAK,SAAS,GAAG;AAAA,cACxB;AACA,mBAAK,IAAI;AAAA,YACX;AAAA,YACA,gBAAgB,CAAC,GAAG,SAAS;AAC3B,kBAAI,SAAS;AACX,4BAAY;AAAA,YAChB;AAAA,YACA,UAAU,CAAC,GAAG,SAAS;AACrB,kBAAI,kBAAkB,QAAW;AAC/B,2BAAW,OAAO,MAAM;AACtB,sBAAI,IAAI,SAAS,mBAAmB;AAClC,oCAAgB,IAAI;AACpB;AAAA,kBACF;AAAA,gBACF;AACA,gCAAgB;AAAA,cAClB;AAAA,YACF;AAAA,YACA,iBAAiB,CAAC,GAAG,QAAQ;AAC3B,mBAAK,KAAK,UAAU,GAAG;AAAA,YACzB;AAAA,YACA,kBAAkB,CAAC,MAAM;AAEvB,sBAAQ;AAER,2BAAa,KAAK,aAAa;AAE/B,mBAAK,KAAK,OAAO;AAAA,YACnB;AAAA,YACA,kBAAkB,CAAC,GAAG,aAAa,mBAAmB;AAGpD,kBAAI,QAAQ,UAAU;AACpB,sBAAM,aAAa,QAAQ,SAAS,CAAC,EAAE,CAAC;AACxC,oBAAI;AACF,wBAAM,WAAW,QAAQ,IAAI,KAAK,UAAU,eAAe;AAC7D,wBAAQ,SAAS,MAAM;AACvB,oBAAI,QAAQ,SAAS,QAAQ;AAC3B,wBAAM,CAAC,SAAS,QAAQ,IAAI,QAAQ,SAAS,CAAC;AAC9C,0BAAQ,QAAQ,MAAM;AAAA,oBACpB,KAAK;AACH,4BAAM;AAAA,wBACJ,QAAQ;AAAA,wBACR,QAAQ,SAAS,WAAW;AAAA,wBAC5B;AAAA,sBACF;AACA;AAAA,oBACF,KAAK;AACH,4BAAM,OAAO,QAAQ,UAAU,QAAQ,KAAK,OAAO;AACnD;AAAA,oBACF,KAAK;AACH,4BAAM;AAAA,wBAAc,QAAQ;AAAA,wBACR,QAAQ;AAAA,wBACR,QAAQ;AAAA,wBACR,QAAQ;AAAA,wBACR;AAAA,wBACA,CAAC,KAAK,OAAO;AAC/B,gCAAM,YAAY,QAAQ,IAAI,KAAK,KAAK,QAAQ;AAChD,8BAAI,qBAAqB,OAAO;AAC9B,sCAAU,UACR,iCAAiC,UAAU,OAAO;AACpD,sCAAU,QAAQ;AAClB,iCAAK,KAAK,SAAS,SAAS;AAC5B,mCAAO,YAAY;AAAA,0BACrB;AAEA,6BAAG,SAAS;AAAA,wBACd;AAAA,sBAAC;AACD;AAAA,kBACJ;AAAA,gBACF,OAAO;AACL,0BAAQ,WAAW;AAAA,gBACrB;AAAA,cACF;AAEA,kBAAI,QAAQ,SAAS,SAAS;AAC5B,sBAAM,MAAM,QAAQ,SAAS,IAAI;AACjC,yBAAS,MAAM,sBAAsB,MAAM,CAAC,SAAS;AACrD,uBAAO,gBAAgB;AAAA,cACzB;AAEA,uBAAS,MAAM,WAAW,QAAQ,IAAI,cAAc;AAEpD,2BAAa;AACb,6BAAe;AACf,0BAAY;AAAA,YACd;AAAA,YACA,2BAA2B,CAAC,GAAG,WAAW;AACxC,kBAAI,QAAQ,SAAS,YAAY;AAG/B,qBAAK,KAAK,mBAAmB,QAAQ,CAAC,gBAAgB;AACpD,wBAAM;AAAA,oBACJ,KAAK,OAAO;AAAA,oBACZ,KAAK,OAAO;AAAA,oBACZ;AAAA,kBACF;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AAAA,YACA,gBAAgB,CAAC,MAAM;AACrB,kBAAI;AACJ,kBAAI;AACJ,kBAAI,QAAQ;AACV,iBAAC,SAAS,QAAQ,IAAI,QAAQ,SAAS,CAAC;AAC1C,kBAAI,QAAQ,SAAS,SAAS;AAC5B,sBAAM,MAAM,QAAQ,SAAS,WAAW;AACxC,sBAAM,OAAO,QAAQ,UAAU,KAAK,SAAS,CAAC,KAAK,OAAO;AACxD,wBAAM,OAAO,EAAE,MAAM,SAAS;AAC9B,0BAAQ,SAAS,KAAK,KAAK,KAAK,MAAM,CAAC,KAAK,WAAW;AACrD,wBAAI,KAAK;AACP,0BAAI,QAAQ;AACZ,2BAAK,KAAK,SAAS,GAAG;AAAA,oBACxB,OAAO;AACL,6BAAO,GAAG,MAAM;AAAA,oBAClB;AAEA,oCAAgB;AAAA,kBAClB,CAAC;AAAA,gBACH,CAAC;AAAA,cACH,WAAW,QAAQ,SAAS,aAAa;AACvC,sBAAM,OAAO,QAAQ,UAAU,QAAQ,KAAK,SAAS,CAAC,KAAK,OAAO;AAChE,wBAAM,YAAY,QAAQ,IAAI,KAAK,KAAK,QAAQ;AAChD,sBAAI,qBAAqB,OAAO;AAC9B,8BAAU,UACR,gCAAgC,UAAU,OAAO;AACnD,8BAAU,QAAQ;AAClB,yBAAK,KAAK,SAAS,SAAS;AAC5B,2BAAO,YAAY;AAAA,kBACrB;AACA,qBAAG,SAAS;AAAA,gBACd,CAAC;AAAA,cACH;AAAA,YACF;AAAA,YACA,uBAAuB,CAAC,GAAG,MAAM,cAAc,YAAY;AACzD,kBAAI,QAAQ,SAAS,wBAAwB;AAC3C,sBAAM,WAAY,MAAM,QAAQ,OAAO,IAAI,QAAQ,SAAS;AAC5D,oBAAI,aAAa,GAAG;AAClB,2BAAS;AAAA,oBACP;AAAA,kBACF;AACA,wBAAM,YAAY;AAClB;AAAA,gBACF;AAIA,wBAAQ;AAAA,kBACN;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,CAAC,YAAY;AACX,0BAAM,YAAY,OAAO;AAAA,kBAC3B;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,iBAAiB,CAAC,GAAG,SAAS;AAC5B,kBAAI,UAAU;AACZ,0BAAU,MAAM,EAAE,OAAO,IAAI;AAAA,YACjC;AAAA,YACA,iBAAiB,CAAC,MAAM;AACtB,kBAAI,UAAU;AACZ,0BAAU,MAAM,EAAE,IAAI;AAAA,YAC1B;AAAA,YACA,gBAAgB,CAAC,GAAG,MAAM,WAAW,SAAS;AAC5C,sBAAQ,MAAM;AAAA,gBACZ,KAAK;AAEH,gCAAc,MAAM,MAAM,CAAC,KAAK,SAAS;AACvC,wBAAI;AACF;AACF,yBAAK,KAAK,YAAY,IAAI;AAAA,kBAC5B,CAAC;AACD,sBAAI;AACF,0BAAM,eAAe;AACvB;AAAA,gBACF;AAIE,sBAAI;AACF,0BAAM,eAAe;AAAA,cAC3B;AAAA,YACF;AAAA,YACA,cAAc,CAAC,GAAG,SAAS;AAGzB,6BAAe,MAAM,IAAI;AAAA,YAC3B;AAAA,YACA,2BAA2B,CAAC,GAAG,SAAS;AACtC,oBAAM,UAAU,KAAK,SAAS,IAAI,KAAK,SAAS;AAChD,kBAAI,OAAO,YAAY;AACrB;AAEF,oBAAM,SAAU,QAAQ,SAAS;AACjC,oBAAM,OAAQ,SAAS,YAAY,QAAQ;AAC3C,oBAAM,WAAW;AAAA,gBACf;AAAA,gBACA,UAAU;AAAA,kBACR,IAAI,KAAK;AAAA,kBACT,QAAQ;AAAA,kBACR,YAAY;AAAA,kBACZ,OAAO;AAAA,gBACT;AAAA,gBACA,UAAU;AAAA,kBACR,IAAI,KAAK;AAAA,kBACT,QAAQ,KAAK;AAAA,kBACb,YAAY,KAAK;AAAA,kBACjB,OAAO;AAAA,gBACT;AAAA,cACF;AACA,oBAAM,WACJ,SACE,IAAI,KAAK,MAAM,UAAU,EAAE,MAAM,CAAC,IAClC,IAAI,QAAQ,MAAM,QAAQ;AAE9B,mBAAK,SAAS,OAAO,KAAK,WAAW,QAAQ;AAC7C,sBAAQ,QAAW,QAAQ;AAAA,YAC7B;AAAA,YACA,sBAAsB,CAAC,GAAG,WAAW,QAAQ,gBAAgB;AAC3D,oBAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,kBAAI,OAAO,YAAY;AACrB;AAEF,oBAAM,OAAO,EAAE,QAAQ,YAAY;AACnC,mCAAqB,MAAM,WAAW,MAAM,OAAO;AAAA,YACrD;AAAA,YACA,cAAc,CAAC,GAAG,WAAW,SAAS;AACpC,oBAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAKF,kBAAI,QAAQ,SAAS,WAAW;AAC9B;AAEF,sBAAQ,SAAS,UAAU,KAAK;AAEhC,kBAAI,QAAQ,KAAK,IAAI,MAAM,OAAO;AAChC,wBAAQ,iBAAiB;AACzB;AAAA,cACF;AAEA,kBAAI,QAAQ,SAAS,UAAU;AAC7B,6BAAa,OAAO;AAAA,YACxB;AAAA,YACA,uBAAuB,CAAC,GAAG,WAAW,MAAM,SAAS;AACnD,kBAAI,SAAS;AACX;AAEF,oBAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAKF,kBAAI,QAAQ,SAAS,WAAW;AAC9B;AAEF,sBAAQ,SAAS,UAAU,KAAK;AAEhC,kBAAI,CAAC,QAAQ,OAAO,KAAK,IAAI,GAAG;AAC9B,wBAAQ,iBAAiB;AACzB;AAAA,cACF;AAEA,kBAAI,QAAQ,SAAS,UAAU;AAC7B,6BAAa,OAAO;AAAA,YACxB;AAAA,YACA,uBAAuB,CAAC,GAAG,WAAW,WAAW;AAC/C,oBAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAGF,sBAAQ,SAAS,UAAU;AAE3B,kBAAI,QAAQ,aAAa;AACvB,wBAAQ,cAAc;AAEtB,oBAAI,QAAQ,QAAQ;AAClB,0BAAQ,OAAO,QAAQ,QAAQ,MAAM,QAAQ,QAAQ;AAAA,gBACvD,WAAW,QAAQ,UAAU;AAC3B,0BAAQ,SAAS;AAAA,gBACnB,WAAW,QAAQ,WAAW;AAC5B,0BAAQ,OAAO;AAAA,oBAAO,QAAQ;AAAA,oBACR;AAAA,oBACA,QAAQ;AAAA,kBAAW;AAAA,gBAC3C,WAAW,QAAQ,aAAa;AAC9B,0BAAQ,YAAY;AAAA,gBACtB;AAAA,cACF;AAAA,YACF;AAAA,YACA,iBAAiB,CAAC,GAAG,cAAc;AACjC,oBAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,mBAAK,SAAS;AAEd,kBAAI,QAAQ,WAAW;AACrB,wBAAQ,WAAW,MAAM,EAAE,KAAK;AAAA,YACpC;AAAA,YACA,iBAAiB,CAAC,GAAG,cAAc;AACjC,oBAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,mBAAK,SAAS;AAEd,kBAAI,QAAQ,WAAW;AACrB,wBAAQ,WAAW,MAAM,EAAE,IAAI;AAAA,YACnC;AAAA,YACA,iBAAiB,CAAC,GAAG,WAAW,MAAM,WAAW,SAAS;AACxD,oBAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,oBAAM,OAAO,QAAQ;AACrB,kBAAI,KAAK,SAAS;AAChB;AACF,sBAAQ,MAAM;AAAA,gBACZ,KAAK;AACH,0BAAQ,KAAK,QAAQ,KAAK,OAAO,IAAI;AACrC;AAAA,gBACF,KAAK;AACH,0BAAQ;AAAA,oBAAK;AAAA,oBACA,KAAK,OAAO;AAAA,oBACZ,KAAK,SAAS,MAAM,KAAK,MAAM;AAAA,oBAC/B,KAAK,OAAO,KAAK;AAAA,oBACjB,KAAK,OAAO,KAAK;AAAA,kBAAY;AAC1C;AAAA,cACJ;AAKA,kBAAI;AACF,kBAAE,eAAe,QAAQ,SAAS,EAAE;AAAA,YACxC;AAAA,YACA,aAAa,CAAC,GAAG,cAAc;AAC7B,oBAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,kBAAI,QAAQ,SAAS,UAAU;AAC7B;AACF,sBAAQ,SAAS,QAAQ;AAEzB,kBAAI,QAAQ;AACV,wBAAQ,KAAK,IAAI;AACnB,kBAAI,QAAQ,OAAO;AACjB,wBAAQ,OAAO,KAAK,IAAI;AAAA,YAC5B;AAAA,YACA,eAAe,CAAC,GAAG,cAAc;AAC/B,8BAAgB,MAAM,WAAW,KAAK,SAAS,IAAI,SAAS,CAAC;AAAA,YAC/D;AAAA,UACF;AAAA,QACF,CAAC;AAED,aAAK,MAAM;AAIX,cAAM,aAAa,KAAK,OAAO;AAC/B,cAAM,aAAa,KAAK,OAAO;AAC/B,YAAI,UAAU;AACd,YAAI;AACJ,cAAM,SAAS,MAAM;AACnB,cAAI,EAAE,UAAU,YAAY;AAC1B,0BAAc,OAAO;AACrB,gBAAI,KAAK,UAAU;AACjB,oBAAM,MAAM,IAAI,MAAM,mBAAmB;AACzC,kBAAI,QAAQ;AACZ,mBAAK,KAAK,SAAS,GAAG;AACtB,mBAAK,QAAQ;AAAA,YACf;AACA;AAAA,UACF;AACA,cAAI,WAAW,IAAI,GAAG;AAEpB,sBAAU,KAAK,OAAO;AACtB,kBAAM,KAAK;AAAA,UACb,OAAO;AACL,0BAAc,OAAO;AAAA,UACvB;AAAA,QACF;AACA,iBAAS,UAAU;AACjB,cAAI,aAAa,GAAG;AAClB,sBAAU;AACV,0BAAc,OAAO;AACrB,gBAAI,WAAW,IAAI;AACjB,wBAAU,YAAY,QAAQ,UAAU;AAAA,UAC5C;AAAA,QACF;AACA,aAAK,WAAW;AAEhB,cAAM,SAAU,uBAAM;AACpB,cAAI,SAAS;AACb,iBAAO,MAAM;AACX,gBAAI;AACF;AACF,qBAAS;AACT,gBAAI,gBAAgB,CAAC,WAAW;AAC9B,oBAAM,MACJ,UAAU,oCAAoC,YAAY,IAAI;AAChE,mBAAK,KAAK,SAAS,GAAG;AAAA,YACxB;AAAA,UACF;AAAA,QACF,GAAG;AACH,cAAM,YAAa,uBAAM;AACvB,cAAI,SAAS;AACb,iBAAO,MAAM;AACX,gBAAI;AACF;AACF,qBAAS;AAET,2BAAe;AACf,qBAAS,MAAM,kBAAkB;AACjC,iBAAK,KAAK,SAAS;AAEnB,uBAAW,KAAK,MAAM;AACpB,oBAAM,MAAM;AACZ,mBAAK,GAAG,QAAQ,CAAC,SAAS;AACxB,oBAAI;AACF,wBAAM,MAAM,MAAM,GAAG,KAAK,MAAM;AAAA,gBAClC,SAAS,IAAI;AACX,uBAAK,KAAK,SAAS,EAAE;AACrB,sBAAI;AACF,wBAAI,WAAW,IAAI;AACjB,2BAAK,IAAI;AAAA,kBACb,QAAQ;AAAA,kBAAC;AAAA,gBACX;AAAA,cACF,CAAC;AAGD,kBAAI,KAAK,UAAU,OAAO,KAAK,OAAO,WAAW;AAC/C,qBAAK,OAAO,OAAO;AAErB,mBAAK,OAAO;AAAA,YACd,CAAC,EAAE,MAAM,CAAC,QAAQ;AAChB,mBAAK,KAAK,SAAS,GAAG;AACtB,kBAAI;AACF,oBAAI,WAAW,IAAI;AACjB,uBAAK,IAAI;AAAA,cACb,QAAQ;AAAA,cAAC;AAAA,YACX,CAAC;AAAA,UACH;AAAA,QACF,GAAG;AACH,YAAI,eAAe;AACnB,aAAK,GAAG,WAAW,SAAS,EACvB,GAAG,WAAW,MAAM;AACvB,eAAK,KAAK,SAAS;AAAA,QACrB,CAAC,EAAE,GAAG,SAAS,CAAC,QAAQ;AACtB,mBAAS,MAAM,iBAAiB,IAAI,OAAO,EAAE;AAC7C,uBAAa,KAAK,aAAa;AAC/B,cAAI,QAAQ;AACZ,eAAK,KAAK,SAAS,GAAG;AAAA,QACxB,CAAC,EAAE,GAAG,OAAO,MAAM;AACjB,mBAAS,MAAM,cAAc;AAC7B,iBAAO;AACP,gBAAM,QAAQ;AACd,uBAAa,KAAK,aAAa;AAC/B,wBAAc,OAAO;AACrB,eAAK,KAAK,KAAK;AAAA,QACjB,CAAC,EAAE,GAAG,SAAS,MAAM;AACnB,mBAAS,MAAM,eAAe;AAC9B,iBAAO;AACP,gBAAM,QAAQ;AACd,uBAAa,KAAK,aAAa;AAC/B,wBAAc,OAAO;AACrB,eAAK,KAAK,OAAO;AAGjB,gBAAM,aAAa;AACnB,sBAAY,KAAK,aAAa,CAAC;AAC/B,gBAAM,MAAM,IAAI,MAAM,yBAAyB;AAC/C,mBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,EAAE;AACvC,uBAAW,CAAC,EAAE,GAAG;AAGnB,eAAK,SAAS,QAAQ,GAAG;AAAA,QAC3B,CAAC;AAGD,YAAI;AACJ,YAAI,aAAa;AACjB,YAAI,eAAe;AACnB,cAAM,eAAe,CAAC,MAAM;AAC5B,YAAI,KAAK,OAAO,aAAa;AAC3B,uBAAa,KAAK,UAAU;AAC9B,YAAI,eAAe;AACjB,uBAAa,KAAK,WAAW;AAC/B,YAAI,KAAK,WAAW;AAClB,uBAAa,KAAK,OAAO;AAC3B,YAAI,KAAK,OAAO;AACd,uBAAa,KAAK,sBAAsB;AAC1C,YAAI,eAAe,UACZ,KAAK,OAAO,kBAAkB,UAC9B,KAAK,OAAO,kBAAkB,QAAW;AAC9C,uBAAa,KAAK,WAAW;AAAA,QAC/B;AAEA,YAAI,MAAM,QAAQ,WAAW;AAC3B,wBAAc,sBAAsB,WAAW;AAAA,iBACxC,OAAO,gBAAgB;AAC9B,wBAAc,sBAAsB,YAAY;AAElD,YAAI,cAAc;AAClB,cAAM,aAAa,CAAC,aAAa;AAC/B,cAAI;AACF;AACF,wBAAc;AAEd,cAAI,aAAa,OAAO;AACtB,kBAAM,MAAM,IAAI,MAAM,8CAA8C;AACpE,gBAAI,QAAQ;AACZ,iBAAK,KAAK,SAAS,GAAG;AACtB,iBAAK,IAAI;AACT;AAAA,UACF;AAEA,cAAI,OAAO,aAAa,UAAU;AAKhC,kBAAM,OAAO;AACb,gBAAI,aAAa,QAAQ,IAAI,MAAM;AACjC,qBAAO,SAAS,sCAAsC,IAAI,EAAE;AAE9D,kBAAM,WAAW,KAAK,OAAO;AAC7B,oBAAQ,MAAM;AAAA,cACZ,KAAK;AACH,2BAAW,EAAE,MAAM,UAAU,UAAU,KAAK,OAAO,SAAS;AAC5D;AAAA,cACF,KAAK;AACH,2BAAW,EAAE,MAAM,UAAU,KAAK,WAAW;AAC7C;AAAA,cACF,KAAK;AACH,2BAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA,KAAK;AAAA,kBACL,eAAe,KAAK,OAAO;AAAA,kBAC3B,eAAe,KAAK,OAAO;AAAA,gBAC7B;AACA;AAAA,cACF,KAAK;AACH,2BAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA,UAAU,IAAI,aAAa,KAAK,MAAM;AAAA,gBACxC;AACA;AAAA,cACF,KAAK;AACH,2BAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA,QAAQ,IAAI,SAAS,KAAK,KAAK,wBAAwB,GAAG,IAAI;AAAA,gBAChE;AACA;AAAA,cACF,KAAK;AACH,2BAAW,EAAE,MAAM,SAAS;AAC5B;AAAA,cACF;AACE,uBAAO;AAAA,kBACL,+CAA+C,QAAQ;AAAA,gBACzD;AAAA,YACJ;AAAA,UACF,WAAW,OAAO,aAAa,YAAY,aAAa,MAAM;AAC5D,mBAAO;AAAA,cACL,4CAA4C,QAAQ;AAAA,YACtD;AAAA,UACF,OAAO;AACL,kBAAM,WAAW,SAAS;AAC1B,gBAAI,OAAO,aAAa,UAAU;AAChC,qBAAO;AAAA,gBACL,4CAA4C,QAAQ;AAAA,cACtD;AAAA,YACF;AACA,kBAAM,OAAO,SAAS;AACtB,oBAAQ,MAAM;AAAA,cACZ,KAAK,YAAY;AACf,sBAAM,EAAE,SAAS,IAAI;AACrB,oBAAI,OAAO,aAAa,YAAY,CAAC,OAAO,SAAS,QAAQ;AAC3D,yBAAO,SAAS,wCAAwC;AAC1D,2BAAW,EAAE,MAAM,UAAU,SAAS;AACtC;AAAA,cACF;AAAA,cACA,KAAK,aAAa;AAChB,sBAAM,MAAM,SAAS,SAAS,KAAK,SAAS,UAAU;AACtD,oBAAI,eAAe;AACjB,yBAAO,SAAS,mCAAmC;AACrD,oBAAI,CAAC,IAAI,aAAa;AACpB,yBAAO,SAAS,0BAA0B;AAC5C,2BAAW,EAAE,MAAM,UAAU,IAAI;AACjC;AAAA,cACF;AAAA,cACA,KAAK,aAAa;AAChB,sBAAM,EAAE,eAAe,cAAc,IAAI;AACzC,sBAAM,MAAM,SAAS,SAAS,KAAK,SAAS,UAAU;AACtD,oBAAI,eAAe,SACZ,OAAO,kBAAkB,YACzB,OAAO,kBAAkB,UAAU;AACxC,yBAAO,SAAS,yCAAyC;AAAA,gBAC3D;AACA,oBAAI,CAAC,IAAI,aAAa;AACpB,yBAAO,SAAS,0BAA0B;AAC5C,2BAAW,EAAE,MAAM,UAAU,KAAK,eAAe,cAAc;AAC/D;AAAA,cACF;AAAA,cACA,KAAK,SAAS;AACZ,oBAAI,QAAQ,SAAS;AACrB,oBAAI,OAAO,UAAU,YAAY,MAAM,QAAQ;AAC7C,0BAAQ,YAAY,KAAK;AAAA,gBAC3B,WAAW,CAAC,QAAQ,KAAK,GAAG;AAC1B,yBAAO;AAAA,oBACL,2BAA2B,SAAS,KAAK;AAAA,kBAC3C;AAAA,gBACF;AACA,2BAAW,EAAE,MAAM,UAAU,UAAU,IAAI,aAAa,KAAK,EAAE;AAC/D;AAAA,cACF;AAAA,cACA,KAAK,wBAAwB;AAC3B,sBAAM,EAAE,OAAO,IAAI;AACnB,oBAAI,OAAO,WAAW,YAAY;AAChC,yBAAO;AAAA,oBACL;AAAA,kBACF;AAAA,gBACF;AACA,2BAAW,EAAE,MAAM,UAAU,OAAO;AACpC;AAAA,cACF;AAAA,cACA,KAAK;AACH,2BAAW,EAAE,MAAM,SAAS;AAC5B;AAAA,cACF;AACE,uBAAO;AAAA,kBACL,+CAA+C,QAAQ;AAAA,gBACzD;AAAA,YACJ;AAAA,UACF;AACA,oBAAU;AAGV,cAAI;AACF,kBAAM,WAAW,QAAQ;AACzB,oBAAQ,QAAQ,MAAM;AAAA,cACpB,KAAK;AACH,sBAAM,aAAa,UAAU,QAAQ,QAAQ;AAC7C;AAAA,cACF,KAAK,aAAa;AAChB,oBAAI;AACJ,wBAAQ,WAAW,YAAY,MAAM,QAAQ,KAAK,aAAa;AAC/D,oBAAI,QAAQ,UAAU;AACpB,sBAAI,QAAQ,SAAS,QAAQ;AAC3B,8BAAU,QAAQ,SAAS,CAAC,EAAE,CAAC;AAAA,kBACjC,OAAO;AACL,2BAAO;AAAA,sBACL;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AACA,sBAAM,OAAO,UAAU,QAAQ,KAAK,OAAO;AAC3C;AAAA,cACF;AAAA,cACA,KAAK,aAAa;AAChB,oBAAI;AACJ,oBAAI;AACJ,wBAAQ,WAAW,YAAY,MAAM,QAAQ,KAAK,aAAa;AAC/D,oBAAI,QAAQ,UAAU;AACpB,sBAAI,QAAQ,SAAS,QAAQ;AAC3B,qBAAC,SAAS,QAAQ,IAAI,QAAQ,SAAS,CAAC;AAAA,kBAC1C,OAAO;AACL,2BAAO;AAAA,sBACL;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAEA,sBAAM;AAAA,kBAAc;AAAA,kBACA,QAAQ;AAAA,kBACR,QAAQ;AAAA,kBACR,QAAQ;AAAA,kBACR;AAAA,kBACA,CAAC,KAAK,OAAO;AAC/B,0BAAM,YAAY,QAAQ,IAAI,KAAK,KAAK,QAAQ;AAChD,wBAAI,qBAAqB,OAAO;AAC9B,gCAAU,UACR,iCAAiC,UAAU,OAAO;AACpD,gCAAU,QAAQ;AAClB,2BAAK,KAAK,SAAS,SAAS;AAC5B,6BAAO,YAAY;AAAA,oBACrB;AAEA,uBAAG,SAAS;AAAA,kBACd;AAAA,gBAAC;AACD;AAAA,cACF;AAAA,cACA,KAAK;AACH,wBAAQ,SAAS,KAAK,CAAC,QAAQ;AAC7B,sBAAI,KAAK;AACP,wBAAI,QAAQ;AACZ,yBAAK,KAAK,SAAS,GAAG;AACtB,2BAAO,YAAY;AAAA,kBACrB;AACA,kCAAgB;AAAA,gBAClB,CAAC;AACD;AAAA,cACF,KAAK;AACH,sBAAM,aAAa,QAAQ;AAC3B;AAAA,cACF,KAAK;AACH,sBAAM,SAAS,QAAQ;AACvB;AAAA,YACJ;AAAA,UACF,UAAE;AACA,0BAAc;AAAA,UAChB;AAAA,QACF;AAEA,iBAAS,SAAS,KAAK;AACrB,mBAAS,MAAM,GAAG;AAClB,kBAAQ,SAAS,WAAW;AAAA,QAC9B;AAEA,iBAAS,cAAc;AACrB,wBAAc;AACd,gBAAM,OAAO,YAAY,cAAc,YAAY,UAAU;AAC7D,cAAI,eAAe,SAAS;AAC1B;AACF,qBAAW,IAAI;AAAA,QACjB;AAEA,cAAM,kBAAkB,MAAM;AAC5B,cAAI,QAAQ,SAAS,SAAS;AAC5B,kBAAM,MAAM,QAAQ,SAAS,QAAQ;AACrC,gBAAI,QAAQ,OAAO;AACjB,uBAAS,MAAM,iCAAiC;AAChD,uBAAS,MAAM,2BAA2B;AAC1C,0BAAY;AAAA,YACd,OAAO;AACL,oBAAM,MAAM,QAAQ,SAAS,IAAI;AACjC,kBAAI;AACJ,sBAAQ,WAAW,YAAY,MAAM,KAAK,aAAa;AACvD,kBAAI,QAAQ,UAAU;AACpB,oBAAI,QAAQ,SAAS,QAAQ;AAC3B,4BAAU,QAAQ,SAAS,CAAC,EAAE,CAAC;AAAA,gBACjC,OAAO;AACL,2BAAS;AAAA,oBACP,wBAAwB,MAAM,CAAC;AAAA,kBACjC;AACA,kCAAgB;AAChB;AAAA,gBACF;AAAA,cACF;AACA,uBAAS,MAAM,sBAAsB,MAAM,CAAC,EAAE;AAC9C,oBAAM,OAAO,QAAQ,UAAU,KAAK,OAAO;AAAA,YAC7C;AAAA,UACF;AAAA,QACF;AAEA,cAAM,eAAe,MAAM;AACzB,cAAI,KAAK,OAAO,eAAe,GAAG;AAChC,iBAAK,gBAAgB,WAAW,MAAM;AACpC,oBAAM,MAAM,IAAI,MAAM,uCAAuC;AAC7D,kBAAI,QAAQ;AACZ,mBAAK,KAAK,SAAS,GAAG;AACtB,mBAAK,QAAQ;AAAA,YACf,GAAG,KAAK,OAAO,YAAY;AAAA,UAC7B;AAAA,QACF;AAEA,YAAI,CAAC,IAAI,MAAM;AACb,cAAI,OAAO,KAAK,OAAO;AACvB,gBAAM,YAAY,KAAK,OAAO;AAC9B,gBAAM,YAAY,KAAK,OAAO;AAE9B,mBAAS,MAAM,kBAAkB,IAAI,YAAY,KAAK,OAAO,IAAI,MAAM;AAEvE,gBAAM,YAAY,MAAM;AACtB,yBAAa;AACb,iBAAK,QAAQ;AAAA,cACX;AAAA,cACA,MAAM,KAAK,OAAO;AAAA,cAClB,cAAc,KAAK,OAAO;AAAA,cAC1B,WAAW,KAAK,OAAO;AAAA,YACzB,CAAC;AACD,iBAAK,gBAAgB,CAAC;AACtB,iBAAK,WAAW,OAAO,IAAI,YAAY,WAAW,IAAI,UAAU,CAAC;AAAA,UACnE;AAEA,cAAK,CAAC,aAAa,CAAC,aAAe,aAAa,WAAY;AAC1D,sBAAU;AAAA,UACZ,OAAO;AACL,sBAAU,MAAO,YAAY,IAAI,GAAI,CAAC,KAAK,SAAS,WAAW;AAC7D,kBAAI,KAAK;AACP,sBAAM,OAAQ,YAAY,SAAS;AACnC,sBAAM,QAAQ,IAAI;AAAA,kBAChB,0BAA0B,IAAI,iBAAiB,IAAI,MAAM,GAAG;AAAA,gBAC9D;AACA,6BAAa,KAAK,aAAa;AAC/B,sBAAM,QAAQ;AACd,qBAAK,KAAK,SAAS,KAAK;AACxB,qBAAK,KAAK,OAAO;AACjB;AAAA,cACF;AACA,qBAAO;AACP,wBAAU;AAAA,YACZ,CAAC;AAAA,UACH;AAAA,QACF,OAAO;AAEL,uBAAa;AACb,cAAI,OAAO,KAAK,eAAe,WAAW;AAGxC,gBAAI,CAAC,KAAK,YAAY;AAEpB,wBAAU;AAAA,YACZ;AAAA,UACF,OAAO;AAEL,sBAAU;AAAA,UACZ;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM;AACJ,YAAI,KAAK,SAAS,WAAW,KAAK,KAAK,GAAG;AACxC,eAAK,UAAU,WAAW,kBAAkB,cAAc;AAC1D,eAAK,MAAM,IAAI;AAAA,QACjB;AACA,eAAO;AAAA,MACT;AAAA,MAEA,UAAU;AACR,aAAK,SAAS,WAAW,KAAK,KAAK,KAAK,KAAK,MAAM,QAAQ;AAC3D,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,KAAK,MAAM,IAAI;AAClB,YAAI,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,KAAK;AACvC,gBAAM,IAAI,MAAM,eAAe;AAEjC,YAAI,OAAO,SAAS,YAAY;AAC9B,eAAK;AACL,iBAAO,CAAC;AAAA,QACV;AAEA,cAAM,YAAY,EAAE,eAAgB,KAAK,kBAAkB,MAAO;AAElE,oBAAY,MAAM,WAAW,WAAW,CAAC,KAAK,SAAS;AACrD,cAAI,KAAK;AACP,eAAG,GAAG;AACN;AAAA,UACF;AAEA,gBAAM,OAAO,CAAC;AAEd,mBAAS,MAAMC,MAAK;AAClB,gBAAIA,MAAK;AACP,mBAAK,MAAM;AACX,iBAAGA,IAAG;AACN;AAAA,YACF;AACA,gBAAI,KAAK;AACP,mBAAK,MAAM,EAAE;AAAA,UACjB;AAEA,cAAI,KAAK,OAAO,kBAAkB,QAC1B,QACG,KAAK,iBAAiB,QACtB,KAAK,WAAW,QAAY;AACrC,iBAAK,KAAK,MAAM,YAAY,MAAM,KAAK,CAAC;AAAA,UAC1C;AAEA,cAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,gBAAI,OAAO,KAAK,QAAQ,YAAY,KAAK,QAAQ;AAC/C,qBAAO,MAAM,KAAK,GAAG;AACvB,gBAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,QAAQ,QAC3C,KAAK,QAAQ,MAAM;AACxB,mBAAK,KAAK,MAAM,OAAO,MAAM,KAAK,KAAK,KAAK,CAAC;AAAA,YAC/C;AACA,gBAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,QAAQ,QAC3C,KAAK,QAAQ,YACb,KAAK,QAAQ,MAAM;AACxB,mBAAK,KAAK,MAAM,OAAO,MAAM,KAAK,KAAK,KAAK,CAAC;AAAA,YAC/C;AAAA,UACF;AAEA,eAAK,KAAK,MAAM,QAAQ,MAAM,KAAK,MAAM,EAAE,CAAC;AAC5C,eAAK,MAAM,EAAE;AAAA,QACf,CAAC;AAED,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,SAAS,MAAM,IAAI;AACvB,YAAI,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,KAAK;AACvC,gBAAM,IAAI,MAAM,eAAe;AAEjC,YAAI,OAAO,YAAY,YAAY;AACjC,eAAK;AACL,oBAAU,OAAO;AAAA,QACnB,WAAW,OAAO,SAAS,YAAY;AACrC,eAAK;AACL,iBAAO;AAAA,QACT;AACA,YAAI,YAAY,QAAQ,QAAQ,UAAa,QAAQ,QAAQ,SAAY;AACvE,iBAAO;AACP,oBAAU;AAAA,QACZ;AAEA,oBAAY,MAAM,WAAW,CAAC,KAAK,SAAS;AAC1C,cAAI,KAAK;AACP,eAAG,GAAG;AACN;AAAA,UACF;AAEA,gBAAM,OAAO,CAAC;AAEd,mBAAS,MAAMA,MAAK;AAClB,gBAAIA,MAAK;AACP,mBAAK,MAAM;AACX,iBAAGA,IAAG;AACN;AAAA,YACF;AACA,gBAAI,KAAK;AACP,mBAAK,MAAM,EAAE;AAAA,UACjB;AAEA,cAAI,KAAK,OAAO,kBAAkB,QAC1B,QACG,KAAK,iBAAiB,QACtB,KAAK,WAAW,QAAY;AACrC,iBAAK,KAAK,MAAM,YAAY,MAAM,KAAK,CAAC;AAAA,UAC1C;AAEA,cAAI,YAAY;AACd,iBAAK,KAAK,MAAM,OAAO,MAAM,SAAS,KAAK,CAAC;AAE9C,cAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,gBAAI,OAAO,KAAK,QAAQ,YAAY,KAAK,QAAQ;AAC/C,qBAAO,MAAM,KAAK,GAAG;AACvB,gBAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,QAAQ,QAC3C,KAAK,QAAQ,YACb,KAAK,QAAQ,MAAM;AACxB,mBAAK,KAAK,MAAM,OAAO,MAAM,KAAK,KAAK,KAAK,CAAC;AAAA,YAC/C;AAAA,UACF;AAEA,eAAK,KAAK,MAAM,SAAS,MAAM,EAAE,CAAC;AAClC,eAAK,MAAM,EAAE;AAAA,QACf,CAAC;AAED,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,MAAM,IAAI;AACf,YAAI,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,KAAK;AACvC,gBAAM,IAAI,MAAM,eAAe;AAEjC,oBAAY,MAAM,WAAW,CAAC,KAAK,SAAS;AAC1C,cAAI,KAAK;AACP,eAAG,GAAG;AACN;AAAA,UACF;AAEA,uBAAa,MAAM,MAAM,CAACA,MAAK,WAAW;AACxC,gBAAIA,MAAK;AACP,iBAAGA,IAAG;AACN;AAAA,YACF;AAEA,eAAG,QAAW,MAAM;AAAA,UACtB,CAAC;AAAA,QACH,CAAC;AAED,eAAO;AAAA,MACT;AAAA,MAEA,UAAU,UAAU,UAAU,IAAI;AAChC,YAAI,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,KAAK;AACvC,gBAAM,IAAI,MAAM,eAAe;AAKjC,cAAM,YAAa,OAAO,OAAO;AAEjC,YAAI,WAAW;AACb,eAAK,WAAW,KAAK,CAAC,SAAS,SAAS;AACtC,gBAAI,SAAS;AACX,iBAAG,YAAY,OACV,UACA,IAAI,MAAM,qBAAqB,QAAQ,IAAI,QAAQ,EAAE,CAAC;AAC3D;AAAA,YACF;AAEA,gBAAI,WAAW;AACf,gBAAI,aAAa,KAAK,QAAQ,KAAK,UAAU,GAAG;AAC9C,yBAAW,aAAa,MAAM,CAAC;AAC/B,kBAAI,EAAE,KAAK,UAAU,eAAe,OAAO;AACzC,2BAAW;AAAA,YACf;AAEA,iBAAK,YAAY,GAAG,QAAQ,IAAI,QAAQ,EAAE,IAAI;AAE9C,eAAG,QAAW,QAAQ;AAAA,UACxB,CAAC;AAAA,QACH;AAEA,aAAK,UAAU,aAAa,UAAU,UAAU,SAAS;AAEzD,eAAO;AAAA,MACT;AAAA,MAEA,YAAY,UAAU,UAAU,IAAI;AAClC,YAAI,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,KAAK;AACvC,gBAAM,IAAI,MAAM,eAAe;AAKjC,cAAM,YAAa,OAAO,OAAO;AAEjC,YAAI,WAAW;AACb,eAAK,WAAW,KAAK,CAAC,YAAY;AAChC,gBAAI,SAAS;AACX,iBAAG,YAAY,OACV,UACA,IAAI,MAAM,yBAAyB,QAAQ,IAAI,QAAQ,EAAE,CAAC;AAC/D;AAAA,YACF;AAEA,mBAAO,KAAK,YAAY,GAAG,QAAQ,IAAI,QAAQ,EAAE;AAEjD,eAAG;AAAA,UACL,CAAC;AAAA,QACH;AAEA,aAAK,UAAU,mBAAmB,UAAU,UAAU,SAAS;AAE/D,eAAO;AAAA,MACT;AAAA,MAEA,WAAW,OAAO,SAAS,OAAO,SAAS,IAAI;AAC7C,YAAI,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,KAAK;AACvC,gBAAM,IAAI,MAAM,eAAe;AAIjC,cAAM,MAAM;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,YAAI,OAAO,OAAO;AAChB,eAAK;AAEP,oBAAY,MAAM,gBAAgB,KAAK,EAAE;AAEzC,eAAO;AAAA,MACT;AAAA,MAEA,uBAAuB,IAAI;AACzB,YAAI,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,KAAK;AACvC,gBAAM,IAAI,MAAM,eAAe;AAEjC,cAAM,YAAa,OAAO,OAAO;AAEjC,YAAI,CAAC,KAAK,OAAO,gBACT,KAAK,OAAO,gBAAgB,WAAW,KAAK,KAAK,UAAU,GAAI;AACrE,cAAI,WAAW;AACb,iBAAK,WAAW,KAAK,CAAC,YAAY;AAChC,kBAAI,SAAS;AACX,mBAAG,YAAY,OACV,UACA,IAAI,MAAM,mCAAmC,CAAC;AACnD;AAAA,cACF;AAEA,iBAAG;AAAA,YACL,CAAC;AAAA,UACH;AAEA,eAAK,UAAU,uBAAuB,SAAS;AAC/C,iBAAO;AAAA,QACT;AAEA,YAAI,CAAC;AACH,iBAAO;AAET,gBAAQ;AAAA,UACN;AAAA,UACA,IAAI;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,6BAA6B,YAAY,IAAI;AAC3C,YAAI,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,KAAK;AACvC,gBAAM,IAAI,MAAM,eAAe;AAEjC,cAAM,YAAa,OAAO,OAAO;AAEjC,YAAI,CAAC,KAAK,OAAO,gBACT,KAAK,OAAO,gBAAgB,WAAW,KAAK,KAAK,UAAU,GAAI;AACrE,cAAI,WAAW;AACb,iBAAK,WAAW,KAAK,CAAC,YAAY;AAChC,kBAAI,SAAS;AACX,mBAAG,YAAY,OACV,UACA,IAAI,MAAM,qBAAqB,UAAU,EAAE,CAAC;AACjD;AAAA,cACF;AACA,mBAAK,gBAAgB,UAAU,IAAI;AACnC,iBAAG;AAAA,YACL,CAAC;AAAA,UACH;AAEA,eAAK,UAAU,2BAA2B,YAAY,SAAS;AAC/D,iBAAO;AAAA,QACT;AAEA,YAAI,CAAC;AACH,iBAAO;AAET,gBAAQ;AAAA,UACN;AAAA,UACA,IAAI;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,+BAA+B,YAAY,IAAI;AAC7C,YAAI,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,KAAK;AACvC,gBAAM,IAAI,MAAM,eAAe;AAEjC,cAAM,YAAa,OAAO,OAAO;AAEjC,YAAI,CAAC,KAAK,OAAO,gBACT,KAAK,OAAO,gBAAgB,WAAW,KAAK,KAAK,UAAU,GAAI;AACrE,cAAI,WAAW;AACb,iBAAK,WAAW,KAAK,CAAC,YAAY;AAChC,kBAAI,SAAS;AACX,mBAAG,YAAY,OACV,UACA,IAAI,MAAM,yBAAyB,UAAU,EAAE,CAAC;AACrD;AAAA,cACF;AACA,qBAAO,KAAK,gBAAgB,UAAU;AACtC,iBAAG;AAAA,YACL,CAAC;AAAA,UACH;AAEA,eAAK,UAAU,iCAAiC,YAAY,SAAS;AACrE,iBAAO;AAAA,QACT;AAEA,YAAI,CAAC;AACH,iBAAO;AAET,gBAAQ;AAAA,UACN;AAAA,UACA,IAAI;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,8BAA8B,YAAY,IAAI;AAC5C,YAAI,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,KAAK;AACvC,gBAAM,IAAI,MAAM,eAAe;AAEjC,YAAI,OAAO,OAAO;AAChB,eAAK;AAEP,YAAI,CAAC,KAAK,OAAO,gBACT,KAAK,OAAO,gBAAgB,WAAW,KAAK,KAAK,UAAU,GAAI;AACrE,sBAAY,MAAM,kCAAkC,EAAE,WAAW,GAAG,EAAE;AACtE,iBAAO;AAAA,QACT;AACA,gBAAQ;AAAA,UACN;AAAA,UACA,IAAI;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,KAAK,IAAI;AACZ,YAAI,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,KAAK;AACvC,gBAAM,IAAI,MAAM,eAAe;AAEjC,YAAI,OAAO,QAAQ,YAAY;AAC7B,eAAK;AACL,gBAAM;AAAA,QACR;AAEA,oBAAY,MAAM,QAAQ,CAAC,KAAK,SAAS;AACvC,cAAI,KAAK;AACP,eAAG,GAAG;AACN;AAAA,UACF;AAEA,gBAAM,iBAAiB,CAACA,MAAK,UAAU;AACrC,gBAAIA,MAAK;AACP,iBAAGA,IAAG;AACN;AAAA,YACF;AAEA,qBAAS,kBAAkB;AACzB,mBAAK,eAAe,SAAS,OAAO;AACpC,mBAAK,eAAe,SAAS,OAAO;AACpC,mBAAK,eAAe,QAAQ,MAAM;AAClC,mBAAK,eAAe,SAAS,MAAM;AAAA,YACrC;AAEA,qBAAS,UAAU;AAGjB,8BAAgB;AAChB,iBAAG,QAAW,IAAI;AAAA,YACpB;AAEA,qBAAS,QAAQA,MAAK;AACpB,8BAAgB;AAChB,iBAAGA,IAAG;AAAA,YACR;AAEA,qBAAS,OAAO,MAAM,QAAQ;AAC5B,8BAAgB;AAChB,kBAAI;AACJ,kBAAI,OAAO,SAAS;AAClB,sBAAM,sBAAsB,IAAI;AAAA,uBACzB,WAAW;AAClB,sBAAM,mBAAmB,MAAM;AAAA;AAE/B,sBAAM;AACR,oBAAMA,OAAM,IAAI,MAAM,GAAG;AACzB,cAAAA,KAAI,OAAO;AACX,cAAAA,KAAI,SAAS;AACb,iBAAGA,IAAG;AAAA,YACR;AAEA,iBAAK,GAAG,SAAS,OAAO,EACnB,GAAG,SAAS,OAAO,EACnB,GAAG,QAAQ,MAAM,EACjB,GAAG,SAAS,MAAM;AAEvB,iBAAK,MAAM;AAAA,UACb;AAEA,cAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,mBAAO,MAAM,KAAK,CAACA,SAAQ;AACzB,kBAAIA,MAAK;AACP,mBAAGA,IAAG;AACN;AAAA,cACF;AAEA,2BAAa,MAAM,QAAQ,cAAc;AAAA,YAC3C,CAAC;AAAA,UACH,OAAO;AACL,yBAAa,MAAM,QAAQ,cAAc;AAAA,UAC3C;AAAA,QACF,CAAC;AAED,eAAO;AAAA,MACT;AAAA,MAEA,WAAW,SAAS;AAClB,YAAI,KAAK,SAAS,OAAO,KAAK,MAAM,eAAe;AACjD,eAAK,MAAM,WAAW,OAAO;AAE/B,eAAO;AAAA,MACT;AAAA,IACF;AAEA,aAAS,YAAYC,OAAM,MAAM,MAAM,IAAI;AAGzC,YAAM,aAAa;AACnB,YAAM,YAAY;AAElB,UAAI,OAAO,SAAS,YAAY;AAC9B,aAAK;AACL,eAAO,CAAC;AAAA,MACV;AAEA,YAAM,UAAU,CAAC,KAAK,WAAW;AAC/B,WAAG,KAAK,MAAM;AAAA,MAChB;AACA,cAAQ,OAAO;AAEf,YAAM,YAAYA,MAAK,SAAS,IAAI,OAAO;AAE3C,UAAI,cAAc,IAAI;AACpB,WAAG,IAAI,MAAM,4BAA4B,CAAC;AAC1C;AAAA,MACF;AAEA,cAAQ,MAAM;AAAA,QACZ,KAAK;AAAA,QACL,KAAK;AACH,UAAAA,MAAK,UAAU,QAAQ,WAAW,YAAY,SAAS;AACvD;AAAA,QACF,KAAK;AACH,UAAAA,MAAK,UAAU,YAAY,WAAW,YAAY,WAAW,IAAI;AACjE;AAAA,QACF,KAAK;AACH,UAAAA,MAAK,UAAU;AAAA,YACb;AAAA,YAAW;AAAA,YAAY;AAAA,YAAW;AAAA,UACpC;AACA;AAAA,QACF;AACE,gBAAM,IAAI,MAAM,6BAA6B,IAAI,EAAE;AAAA,MACvD;AAAA,IACF;AAEA,aAAS,OAAO,MAAM,QAAQ,IAAI;AAEhC,YAAM,MAAM;AAAA,QACV,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAEA,UAAI,OAAO,WAAW,YAAY;AAChC,aAAK;AAAA,MACP,WAAW,OAAO,WAAW,YAAY,WAAW,MAAM;AACxD,YAAI,OAAO,OAAO,WAAW;AAC3B,cAAI,SAAS,OAAO;AACtB,YAAI,OAAO,OAAO,WAAW;AAC3B,cAAI,SAAS,OAAO;AACtB,YAAI,OAAO,OAAO,aAAa;AAC7B,cAAI,WAAW,OAAO;AACxB,YAAI,OAAO,OAAO,WAAW;AAC3B,cAAI,SAAS,OAAO;AAAA,iBACb,OAAO,SAAS,OAAO,MAAM;AACpC,cAAI,SAAS,OAAO,OAAO,SAAS,GAAG,OAAO,OAAO,MAAM;AAAA,MAC/D;AACA,UAAI,IAAI,WAAW;AACjB,YAAI,SAAS,aAAa;AAE5B,YAAM,YAAa,OAAO,OAAO;AAEjC,UAAI,KAAK,SAAS,UAAU,QAAQ;AAClC,YAAI;AACF,aAAG,IAAI,MAAM,qBAAqB,CAAC;AACrC;AAAA,MACF;AAEA,UAAI,WAAW;AACb,aAAK,WAAW,KAAK,CAAC,YAAY;AAChC,cAAI,SAAS;AACX,eAAG,YAAY,OAAO,UAAU,IAAI,MAAM,uBAAuB,CAAC;AAClE;AAAA,UACF;AAEA,eAAK,UAAU;AACf,YAAE,KAAK,QAAQ;AACf,eAAK,KAAK,SAAS,MAAM;AACvB,gBAAI,KAAK,QAAQ;AACf,gBAAE,KAAK,QAAQ;AAAA,UACnB,CAAC;AAED,aAAG;AAAA,QACL,CAAC;AAAA,MACH;AAEA,WAAK,QAAQ,UAAU,WAAW,KAAK,SAAS,IAAI,KAAK,SAAS;AAAA,IACpE;AAEA,aAAS,OAAO,MAAM,MAAM,IAAI;AAC9B,UAAI,OAAO;AACX,UAAI,OAAO;AACX,UAAI,QAAQ;AACZ,UAAI,SAAS;AACb,UAAI,OAAO;AACX,UAAI,QAAQ;AAEZ,UAAI,OAAO,SAAS,YAAY;AAC9B,aAAK;AAAA,MACP,WAAW,OAAO,SAAS,YAAY,SAAS,MAAM;AACpD,YAAI,OAAO,KAAK,SAAS;AACvB,iBAAO,KAAK;AACd,YAAI,OAAO,KAAK,SAAS;AACvB,iBAAO,KAAK;AACd,YAAI,OAAO,KAAK,UAAU;AACxB,kBAAQ,KAAK;AACf,YAAI,OAAO,KAAK,WAAW;AACzB,mBAAS,KAAK;AAChB,YAAI,OAAO,KAAK,SAAS;AACvB,iBAAO,KAAK;AACd,YAAI,OAAO,KAAK,UAAU;AACxB,kBAAQ,KAAK;AAAA,MACjB;AAEA,YAAM,YAAa,OAAO,OAAO;AAEjC,UAAI,KAAK,SAAS,UAAU,QAAQ;AAClC,YAAI;AACF,aAAG,IAAI,MAAM,qBAAqB,CAAC;AACrC;AAAA,MACF;AAEA,UAAI,WAAW;AACb,aAAK,WAAW,KAAK,CAAC,YAAY;AAChC,cAAI,SAAS;AACX,eAAG,YAAY,OACV,UACA,IAAI,MAAM,qCAAqC,CAAC;AACrD;AAAA,UACF;AACA,aAAG;AAAA,QACL,CAAC;AAAA,MACH;AAEA,WAAK,QAAQ,UAAU;AAAA,QAAI,KAAK,SAAS;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAS;AAAA,IACtC;AAEA,aAAS,YAAY,MAAM,IAAI;AAC7B,YAAM,YAAa,OAAO,OAAO;AAEjC,UAAI,KAAK,SAAS,UAAU,QAAQ;AAClC,qBAAa,GAAG,IAAI,MAAM,qBAAqB,CAAC;AAChD;AAAA,MACF;AACA,UAAI,KAAK,QAAQ,kBAAkB;AACjC,qBAAa,GAAG,KAAK;AACrB;AAAA,MACF;AAEA,WAAK,QAAQ,mBAAmB;AAEhC,WAAK,WAAW,KAAK,CAAC,YAAY;AAChC,YAAI,SAAS;AACX,eAAK,QAAQ,mBAAmB;AAChC,cAAI,WAAW;AACb,eAAG,YAAY,OACV,UACA,IAAI,MAAM,oCAAoC,CAAC;AAAA,UACtD;AACA;AAAA,QACF;AAEA,YAAI;AACF,aAAG;AAAA,MACP,CAAC;AAED,WAAK,QAAQ,UAAU,qBAAqB,KAAK,SAAS,IAAI,IAAI;AAAA,IACpE;AAEA,aAAS,SAAS,MAAM,IAAI;AAC1B,UAAI,KAAK,SAAS,UAAU,QAAQ;AAClC,WAAG,IAAI,MAAM,qBAAqB,CAAC;AACnC;AAAA,MACF;AAEA,WAAK,WAAW,KAAK,CAAC,YAAY;AAChC,YAAI,SAAS;AACX,aAAG,YAAY,OAAO,UAAU,IAAI,MAAM,sBAAsB,CAAC;AACjE;AAAA,QACF;AACA,aAAK,UAAU;AACf,WAAG,QAAW,IAAI;AAAA,MACpB,CAAC;AAED,WAAK,QAAQ,UAAU,MAAM,KAAK,SAAS,IAAI,IAAI;AAAA,IACrD;AAEA,aAAS,QAAQ,MAAM,KAAK,MAAM,IAAI;AACpC,UAAI,KAAK,SAAS,UAAU,QAAQ;AAClC,WAAG,IAAI,MAAM,qBAAqB,CAAC;AACnC;AAAA,MACF;AAEA,WAAK,WAAW,KAAK,CAAC,YAAY;AAChC,YAAI,SAAS;AACX,aAAG,YAAY,OAAO,UAAU,IAAI,MAAM,gBAAgB,CAAC;AAC3D;AAAA,QACF;AACA,aAAK,UAAU;AACf,aAAK,gBAAiB,KAAK,kBAAkB;AAC7C,WAAG,QAAW,IAAI;AAAA,MACpB,CAAC;AAED,WAAK,QAAQ,UAAU,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI;AAAA,IACzD;AAEA,aAAS,OAAO,MAAM,KAAK,IAAI;AAC7B,YAAM,YAAa,OAAO,OAAO;AAEjC,UAAI,KAAK,SAAS,UAAU,QAAQ;AAClC,YAAI;AACF,aAAG,IAAI,MAAM,qBAAqB,CAAC;AACrC;AAAA,MACF;AAEA,UAAI,WAAW;AACb,aAAK,WAAW,KAAK,CAAC,YAAY;AAChC,cAAI,SAAS;AACX,eAAG,YAAY,OACV,UACA,IAAI,MAAM,2BAA2B,CAAC;AAC3C;AAAA,UACF;AACA,aAAG;AAAA,QACL,CAAC;AAAA,MACH;AAEA,YAAM,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC;AAElC,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,cAAM,MAAM,KAAK,CAAC;AAClB,cAAM,MAAM,IAAI,GAAG;AACnB,aAAK,QAAQ,UAAU,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,MAClE;AAAA,IACF;AAEA,aAAS,aAAa,MAAM,MAAM,IAAI;AACpC,UAAI,KAAK,SAAS,UAAU,QAAQ;AAClC,WAAG,IAAI,MAAM,qBAAqB,CAAC;AACnC;AAAA,MACF;AAEA,WAAK,WAAW,KAAK,CAAC,YAAY;AAChC,YAAI,SAAS;AACX,aAAG,YAAY,OACV,UACA,IAAI,MAAM,8BAA8B,IAAI,EAAE,CAAC;AACpD;AAAA,QACF;AACA,aAAK,UAAU;AACf,WAAG,QAAW,IAAI;AAAA,MACpB,CAAC;AAED,WAAK,QAAQ,UAAU,UAAU,KAAK,SAAS,IAAI,MAAM,IAAI;AAAA,IAC/D;AAGA,aAAS,eAAeA,OAAM,MAAM;AAKlC,UAAI,YAAY;AAChB,UAAI;AAEJ,YAAM,SAAS,MAAM;AACnB,cAAM,WAAW;AAAA,UACf,MAAM,KAAK;AAAA,UACX,UAAU;AAAA,YACR,IAAI;AAAA,YACJ,QAAQ;AAAA,YACR,YAAY;AAAA,YACZ,OAAO;AAAA,UACT;AAAA,UACA,UAAU;AAAA,YACR,IAAI,KAAK;AAAA,YACT,QAAQ,KAAK;AAAA,YACb,YAAY,KAAK;AAAA,YACjB,OAAO;AAAA,UACT;AAAA,QACF;AACA,cAAM,SAAS,IAAI,QAAQA,OAAM,QAAQ;AACzC,QAAAA,MAAK,SAAS,OAAO,WAAW,MAAM;AAEtC,QAAAA,MAAK,UAAU;AAAA,UAAmB,KAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QAAW;AAC7C,eAAO;AAAA,MACT;AACA,YAAM,SAAS,MAAM;AACnB,YAAI,WAAW,QAAW;AACxB,cAAI,cAAc;AAChB,qBAAS,qBAAqB;AAAA;AAE9B,qBAAS,qBAAqB;AAAA,QAClC;AAEA,YAAI,cAAc;AAChB,UAAAA,MAAK,SAAS,OAAO,SAAS;AAEhC,QAAAA,MAAK,UAAU,gBAAgB,KAAK,QAAQ,QAAQ,EAAE;AAAA,MACxD;AACA,YAAM,iBAAiB,MAAM;AAC3B,oBAAYA,MAAK,SAAS,IAAI;AAE9B,YAAI,cAAc,IAAI;AACpB,mBAAS,qBAAqB;AAC9B,cAAIA,MAAK,OAAO,OAAO;AACrB,YAAAA,MAAK,OAAO;AAAA,cACV;AAAA,YAEF;AAAA,UACF;AAAA,QACF;AAEA,eAAQ,cAAc;AAAA,MACxB;AAEA,YAAM,OAAO,KAAK;AAClB,cAAQ,KAAK,MAAM;AAAA,QACjB,KAAK,mBAAmB;AACtB,gBAAM,MAAMA,MAAK,YAAY,GAAG,KAAK,MAAM,IAAI,KAAK,QAAQ,EAAE;AAC9D,cAAI,QAAQ,UAAa,eAAe,GAAG;AACzC,gBAAI,KAAK,aAAa;AACpB,mBAAK,WAAW;AAClB,YAAAA,MAAK,KAAK,kBAAkB,MAAM,QAAQ,MAAM;AAChD;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK;AACH,cAAIA,MAAK,gBAAgB,KAAK,UAAU,MAAM,UACvC,eAAe,GAAG;AACvB,YAAAA,MAAK,KAAK,mBAAmB,MAAM,QAAQ,MAAM;AACjD;AAAA,UACF;AACA;AAAA,QACF,KAAK;AACH,cAAIA,MAAK,oBACF,OAAOA,MAAK,OAAO,cAAc,cACjC,eAAe,GAAG;AACvB,YAAAA,MAAK,OAAO,UAAU,CAAC,KAAK,WAAW;AACrC,kBAAI;AACF,uBAAO,OAAO;AAEhB,oBAAM,WAAW,OAAO;AACxB,uBAAS,KAAK,MAAM,EAAE,KAAK,QAAQ;AAAA,YACrC,CAAC;AACD;AAAA,UACF;AACA;AAAA,QACF,KAAK;AACH,cAAIA,MAAK,eAAe,KAAK,eAAe,GAAG;AAC7C,YAAAA,MAAK,KAAK,OAAO,MAAM,QAAQ,MAAM;AACrC;AAAA,UACF;AACA;AAAA,QACF;AAEE,mBAAS,qBAAqB;AAC9B,cAAIA,MAAK,OAAO,OAAO;AACrB,YAAAA,MAAK,OAAO;AAAA,cACV,0EACa,KAAK,IAAI;AAAA,YACxB;AAAA,UACF;AAAA,MACJ;AAEA,UAAI,WAAW,QAAW;AACxB,iBAAS,qBAAqB;AAC9B,YAAIA,MAAK,OAAO,OAAO;AACpB,UAAAA,MAAK,OAAO;AAAA,YACX,0EACI,KAAK;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,QAAM,gBAAgB,MAAM;AAC1B,YAAM,SAAS,OAAO,YAAY,EAAE;AACpC,aAAO,MAAM;AACX,uBAAe,QAAQ,GAAG,EAAE;AAC5B,eAAO,OAAO,SAAS,GAAG,EAAE;AAAA,MAC9B;AAAA,IACF,GAAG;AAEH,aAAS,sBAAsB,UAAU;AACvC,UAAI,CAAC,MAAM,QAAQ,QAAQ;AACzB,cAAM,IAAI,MAAM,2BAA2B;AAE7C,UAAI,IAAI;AACR,aAAO,CAAC,WAAW,gBAAgB,OAAO;AACxC,YAAI,MAAM,SAAS;AACjB,iBAAO;AACT,eAAO,SAAS,GAAG;AAAA,MACrB;AAAA,IACF;AAEA,aAAS,cAAc,QAAQ,OAAO,IAAI;AACxC,UAAI,CAAC,OAAO,SAAS,CAAC,WAAW,OAAO,KAAK;AAC3C;AAEF,UAAI,OAAO,OAAO;AAChB,aAAK;AAEP,UAAI,CAAC,MAAM,QAAQ,KAAK;AACtB,cAAM,IAAI,UAAU,4BAA4B;AAElD,YAAM,OAAO,CAAC;AACd,iBAAW,OAAO,OAAO;AACvB,cAAM,SAAS,SAAS,GAAG;AAC3B,YAAI,kBAAkB;AACpB,gBAAM;AACR,aAAK,KAAK,MAAM;AAAA,MAClB;AAEA,UAAI,CAAC,OAAO,OAAO,gBACX,OAAO,OAAO,gBAAgB,WAAW,KAAK,OAAO,UAAU,GAAI;AACzE,eAAO,WAAW,KAAK,CAAC,SAAS,SAAS;AACxC,cAAI,SAAS;AACX,eAAG,YAAY,OACV,UACA,IAAI,MAAM,sCAAsC,CAAC;AACtD;AAAA,UACF;AAGA,gBAAM,MAAM,CAAC;AACb,cAAI,SAAS;AACb,uBAAa,KAAK,MAAM,CAAC;AACzB,iBAAO,aAAa,MAAM,GAAG;AAC3B,gBAAI,WAAW,KAAK;AAClB;AACF,kBAAM,MAAM,KAAK,QAAQ;AACzB,kBAAM,YAAY,IAAI,aAAa;AAEnC,kBAAM,WAAW,aAAa,WAAW;AACzC,sBAAU,KAAK,UAAU,CAAC;AAC1B,kBAAM,OAAO,UAAU,WAAW,IAAI;AACtC,gBAAI,QAAQ,UAAU,WAAW;AAEjC,gBAAI;AACJ,gBAAI,SAAS,IAAI,MAAM;AACrB,kBAAI,IAAI,SAAS,WAAW;AAC1B,wBAAQ,MAAM;AAAA,kBACZ,KAAK;AACH,2BAAO;AACP;AAAA,kBACF,KAAK;AACH,2BAAO;AACP;AAAA,kBACF;AACE;AAAA,gBACJ;AAAA,cACF,OAAO;AACL;AAAA,cACF;AAAA,YACF;AAEA,kBAAM,YAAY,OAAO,UAAU,KAAK;AACxC,kBAAM,aAAa,OAAO;AAAA,cACxB,IAAI,KAAK,IAAI,UAAU,SAAS,IAAI,UAAU;AAAA,YAChD;AACA,gBAAI,IAAI;AACR,0BAAc,YAAY,IAAI,CAAC;AAC/B,uBAAW,UAAU,iCAAiC,KAAK,GAAG,EAAE;AAChE,0BAAc,YAAY,UAAU,QAAQ,KAAK,EAAE;AACnD,uBAAW,WAAW,YAAY,GAAG,UAAU,QAAQ,KAAK,CAAC;AAC7D,0BAAc,YAAY,UAAU,QAAQ,KAAK,UAAU,MAAM;AACjE,uBAAW,WAAW,YAAY,GAAG,UAAU,QAAQ,KAAK,CAAC;AAE7D,gBAAI,EAAE,QAAQ,aAAa,OAAO,IAAI;AACpC;AACF,gBAAI,IAAI,OAAO,YAAY,OAAO,IAAI,MAAM;AAC1C,kBAAI,KAAK,GAAG;AAAA,UAChB;AACA,oBAAU,MAAM;AAChB,uBAAa,MAAM;AAEnB,aAAG,MAAM,GAAG;AAAA,QACd,CAAC;AAED,eAAO,UAAU,sBAAsB,IAAI;AAC3C;AAAA,MACF;AAEA,cAAQ;AAAA,QACN;AAAA,QACA,IAAI;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,aAAS,YAAY,QAAQ,KAAK,eAAe;AAC/C,cAAQ,IAAI,MAAM;AAAA,QAChB,KAAK;AACH,cAAI,OAAO,UAAU,eAAe,OAAO,wBAAwB;AACjE,gBAAI,CAAC,MAAM,QAAQ,aAAa;AAC9B,8BAAgB,CAAC,gBAAgB,cAAc;AAAA;AAE/C,8BAAgB,CAAC,gBAAgB,gBAAgB,GAAG,aAAa;AAAA,UACrE;AACA,cAAI,MAAM,QAAQ,aAAa,GAAG;AAChC,gBAAI,cAAc,QAAQ,cAAc,MAAM;AAC5C,qBAAO,CAAC,CAAC,gBAAgB,QAAQ,CAAC;AACpC,gBAAI,cAAc,QAAQ,cAAc,MAAM;AAC5C,qBAAO,CAAC,CAAC,gBAAgB,QAAQ,CAAC;AACpC,gBAAI,cAAc,QAAQ,SAAS,MAAM;AACvC,qBAAO,CAAC;AAAA,UACZ;AACA,iBAAO,CAAC,CAAC,WAAW,MAAM,CAAC;AAAA,MAC/B;AAAA,IACF;AAEA,WAAO,UAAUF;AAAA;AAAA;;;AC/nEjB;AAAA;AAAA;AAEA,QAAM,EAAE,OAAO,UAAU,IAAI,UAAQ,MAAM;AAC3C,QAAM,EAAE,OAAO,WAAW,IAAI,UAAQ,OAAO;AAC7C,QAAM,EAAE,SAAS,WAAW,IAAI,UAAQ,KAAK;AAE7C,QAAIG;AAEJ,eAAW,QAAQ,CAAC,WAAW,UAAU,GAAG;AAAA,MAC1C,MAAM,iBAAiB,KAAK;AAAA,QAC1B,YAAY,YAAY,cAAc;AACpC,gBAAM,YAAY;AAElB,eAAK,cAAc;AACnB,eAAK,gBAAiB,gBAAgB,aAAa,SAAU;AAAA,QAC/D;AAAA,QAEA,iBAAiB,SAAS,IAAI;AAC5B,gBAAM,QAAS,WAAW,QAAQ,gBAAiB,KAAK;AACxD,gBAAM,UAAW,WAAW,QAAQ,aAAc;AAClD,gBAAM,QAAQ,QAAQ;AACtB,gBAAM,UAAU,QAAQ;AAExB,cAAIA,YAAW;AACb,YAAAA,UAAS;AAEX,gBAAM,SAAS,IAAIA,QAAO;AAC1B,cAAI,eAAe;AACnB,iBAAO,GAAG,SAAS,MAAM;AACvB,mBAAO,WAAW,OAAO,SAAS,OAAO,SAAS,CAAC,KAAK,WAAW;AACjE,6BAAe;AACf,kBAAI,KAAK;AACP,uBAAO,IAAI;AACX,uBAAO,GAAG,GAAG;AAAA,cACf;AACA,qBAAO,KAAK,SAAS,MAAM,OAAO,IAAI,CAAC;AACvC,iBAAG,MAAM,eAAe,QAAQ,MAAM,OAAO,CAAC;AAAA,YAChD,CAAC;AAAA,UACH,CAAC,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,SAAS,MAAM;AACnC,gBAAI,CAAC;AACH,iBAAG,IAAI,MAAM,6BAA6B,CAAC;AAAA,UAC/C,CAAC,EAAE,QAAQ,KAAK,WAAW;AAAA,QAC7B;AAAA,MACF;AAEA,cAAQ,SAAS,YAAY,gBAAgB,cAAc,IAAI;AAAA,IACjE;AAEA,aAAS,OAAO;AAAA,IAAC;AAEjB,aAAS,eAAe,QAAQ,MAAM,SAAS;AAC7C,UAAI,SAAS,WAAW;AAEtB,eAAO,eAAe;AACtB,eAAO,aAAa;AACpB,eAAO,aAAa;AACpB,eAAO,MAAM;AACb,eAAO,QAAQ;AACf,eAAO,cAAc,OAAO;AAC5B,eAAO;AAAA,MACT;AAGA,cAAQ,SAAS;AACjB,YAAM,UAAU,WAAW,OAAO;AAIlC,YAAM,UAAW,uBAAM;AACrB,YAAI,SAAS;AACb,eAAO,MAAM;AACX,cAAI;AACF;AACF,mBAAS;AACT,cAAI,OAAO,SAAS;AAClB,mBAAO,OAAO;AAAA,QAClB;AAAA,MACF,GAAG;AAGH,cAAQ,GAAG,OAAO,OAAO,EAAE,GAAG,SAAS,OAAO;AAE9C,aAAO;AAAA,IACT;AAAA;AAAA;;;ACnFA;AAAA;AAAA;AAOA,QAAM,EAAE,QAAQ,UAAU,IAAI,UAAQ,KAAK;AAC3C,QAAM,eAAe,UAAQ,QAAQ;AACrC,QAAM,EAAE,cAAc,IAAI;AAE1B,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM,EAAE,MAAM,WAAW,IAAI;AAC7B,QAAM,EAAE,QAAQ,IAAI;AACpB,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,WAAW;AACjB,QAAM,EAAE,KAAK,IAAI;AACjB,QAAM,EAAE,cAAc,IAAI;AAE1B,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,QAAM,oBAAoB;AAE1B,QAAM,cAAN,cAA0B,aAAa;AAAA,MACrC,YAAY,UAAU,UAAU,SAAS,QAAQ,IAAI;AACnD,cAAM;AAEN,aAAK,WAAW,KAAK,OAAO;AAC5B,aAAK,UAAU;AACf,aAAK,SAAS;AACd,aAAK,mBAAmB;AACxB,aAAK,iBAAiB;AACtB,aAAK,aAAa;AAClB,aAAK,WAAW,CAAC,SAAS,aAAa,cAAc;AACnD,cAAI,CAAC,KAAK,gBAAgB;AACxB,iBAAK,iBAAiB;AACtB,eAAG,MAAM,SAAS,aAAa,SAAS;AAAA,UAC1C;AAAA,QACF;AACA,aAAK,YAAY;AAAA,MACnB;AAAA,MAEA,SAAS;AACP,aAAK,YAAY,KAAK,SAAS;AAC/B,aAAK,mBAAmB;AACxB,aAAK,SAAS,IAAI;AAAA,MACpB;AAAA,MACA,OAAO,aAAa,WAAW;AAC7B,aAAK,YAAY,KAAK,SAAS;AAC/B,aAAK,mBAAmB;AACxB,aAAK,SAAS,OAAO,aAAa,SAAS;AAAA,MAC7C;AAAA,IACF;AAGA,QAAM,sBAAN,cAAkC,YAAY;AAAA,MAC5C,YAAY,UAAU,UAAU,SAAS,QAAQ,YAAY,IAAI;AAC/D,cAAM,UAAU,UAAU,SAAS,QAAQ,EAAE;AAE7C,aAAK,aAAa;AAElB,aAAK,MAAM;AACX,aAAK,kBAAkB,CAAC,cAAc;AACpC,gBAAM,WAAW,KAAK;AACtB,cAAI,UAAU;AACZ,iBAAK,MAAM;AACX,qBAAS,SAAS;AAAA,UACpB;AAAA,QACF;AACA,aAAK,aAAa;AAClB,aAAK,GAAG,SAAS,MAAM;AACrB,eAAK,OAAO,KAAK,IAAI,IAAI,MAAM,gCAAgC,CAAC;AAAA,QAClE,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,SAAS,OAAO,cAAc,IAAI;AACvC,YAAI,CAAC,MAAM,QAAQ,OAAO;AACxB,oBAAU,CAAE,OAAQ;AAEtB,YAAI,OAAO,UAAU,YAAY;AAC/B,eAAK;AACL,kBAAQ,eAAe;AAAA,QACzB,WAAW,OAAO,iBAAiB,YAAY;AAC7C,eAAK;AACL,yBAAe;AAAA,QACjB,WAAW,OAAO,OAAO,YAAY;AACnC,eAAK;AAAA,QACP;AAEA,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,cAAI,OAAO,QAAQ,CAAC,MAAM,UAAU;AAClC,oBAAQ,CAAC,IAAI;AAAA,cACX,QAAQ,QAAQ,CAAC;AAAA,cACjB,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,aAAK,MAAM;AACX,aAAK,mBAAmB;AAExB,aAAK,UAAU,YAAY,OAAO,cAAc,OAAO;AAAA,MACzD;AAAA,IACF;AAEA,QAAM,gBAAN,cAA4B,YAAY;AAAA,MACtC,YAAY,UAAU,UAAU,SAAS,QAAQ,QAAQ,IAAI;AAC3D,cAAM,UAAU,UAAU,SAAS,QAAQ,EAAE;AAE7C,aAAK,MAAM,EAAE,MAAM,OAAO,SAAS,MAAM,OAAO,IAAI;AACpD,aAAK,WAAW,OAAO;AACvB,aAAK,YAAY,OAAO;AACxB,aAAK,OAAO,OAAO;AAAA,MACrB;AAAA,MAEA,SAAS;AACP,YAAI,CAAC,KAAK,WAAW;AACnB,eAAK,mBAAmB;AACxB,eAAK,UAAU,SAAS,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI;AAAA,QACtD,OAAO;AACL,sBAAY,UAAU,OAAO,KAAK,IAAI;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,QAAM,uBAAN,cAAmC,YAAY;AAAA,MAC7C,YAAY,UAAU,UAAU,SAAS,QAAQ,QAAQ,IAAI;AAC3D,cAAM,UAAU,UAAU,SAAS,QAAQ,EAAE;AAE7C,aAAK,MAAM,EAAE,MAAM,OAAO,SAAS,MAAM,OAAO,IAAI;AACpD,aAAK,WAAW,OAAO;AACvB,aAAK,YAAY,OAAO;AACxB,aAAK,OAAO,OAAO;AACnB,aAAK,gBAAgB,OAAO;AAC5B,aAAK,gBAAgB,OAAO;AAAA,MAC9B;AAAA,IACF;AAEA,QAAM,iBAAN,cAA6B,YAAY;AAAA,MACvC,YAAY,UAAU,UAAU,SAAS,QAAQ,UAAU,IAAI;AAC7D,cAAM,UAAU,UAAU,SAAS,QAAQ,EAAE;AAE7C,aAAK,WAAW;AAChB,aAAK,YAAY;AAAA,MACnB;AAAA,MAEA,cAAc,QAAQ,IAAI;AACxB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM,oCAAoC;AACtD,YAAI,OAAO,WAAW;AACpB,gBAAM,IAAI,MAAM,kCAAkC;AACpD,YAAI,OAAO,OAAO;AAChB,gBAAM,IAAI,MAAM,sCAAsC;AACxD,aAAK,YAAY;AACjB,aAAK,UAAU,cAAc,MAAM;AAAA,MACrC;AAAA,IACF;AAGA,QAAM,UAAN,cAAsB,aAAa;AAAA,MACjC,YAAY,QAAQ,MAAM,WAAW;AACnC,cAAM;AAEN,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,WAAW;AAChB,aAAK,YAAY;AAAA,UACf,MAAM;AAAA,UACN,UAAU;AAAA,YACR,IAAI;AAAA,YACJ,QAAQ;AAAA,YACR,YAAY;AAAA,YACZ,OAAO;AAAA,UACT;AAAA,UACA,UAAU;AAAA,YACR,IAAI,KAAK;AAAA,YACT,QAAQ,KAAK;AAAA,YACb,YAAY,KAAK;AAAA,YACjB,OAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAMC,UAAN,cAAqB,aAAa;AAAA,MAChC,YAAY,KAAK,UAAU;AACzB,cAAM;AAEN,YAAI,OAAO,QAAQ,YAAY,QAAQ;AACrC,gBAAM,IAAI,MAAM,8BAA8B;AAEhD,cAAM,WAAW,uBAAO,OAAO,IAAI;AACnC,cAAM,mBAAmB,CAAC;AAE1B,cAAM,YAAY,IAAI;AACtB,YAAI,CAAC,MAAM,QAAQ,SAAS;AAC1B,gBAAM,IAAI,MAAM,2BAA2B;AAE7C,cAAM,WACJ,OAAO,IAAI,eAAe,YAAY,IAAI,eAAe,OACvD,IAAI,aACJ,CAAC;AAGL,cAAM,eAAe;AAAA,UACnB,SAAS;AAAA,UACT;AAAA,UACA;AAAA,QACF;AACA,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,cAAI;AACJ,cAAI,OAAO,SAAS,UAAU,CAAC,CAAC,KAAK,OAAO,UAAU,CAAC,MAAM;AAC3D,yBAAa,SAAS,UAAU,CAAC,CAAC;AAAA;AAElC,yBAAa,SAAS,UAAU,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,UAAU;AAEjE,cAAI,sBAAsB;AACxB,kBAAM,IAAI,MAAM,4BAA4B,WAAW,OAAO,EAAE;AAElE,cAAI,MAAM,QAAQ,UAAU,GAAG;AAE7B,yBAAa,WAAW,CAAC;AAAA,UAC3B;AAEA,cAAI,WAAW,cAAc,MAAM;AACjC,kBAAM,IAAI,MAAM,kDAAkD;AAGpE,cAAI,iBAAiB,SAAS,WAAW,IAAI;AAC3C;AAEF,cAAI,WAAW,SAAS,WAAW;AAGjC,gBAAI,UAAU,aAAa,QAAQ,SAAS;AAC5C,kBAAM,YAAY,aAAa,QAAQ,cAAc;AACrD,kBAAM,YAAY,aAAa,QAAQ,cAAc;AACrD,gBAAI,YAAY,IAAI;AAElB,wBAAU;AAAA,YACZ;AACA,aAAC,SAAS,WAAW,SAAS,EAAE,KAAK,cAAc,EAAE,QAAQ,CAAC,QAAQ;AACpE,kBAAI,QAAQ;AACV;AAEF,kBAAI;AACJ,sBAAQ,KAAK;AAAA,gBACX,KAAK;AAAS,yBAAO;AAAW;AAAA,gBAChC,KAAK;AAAW,yBAAO;AAAgB;AAAA,gBACvC,KAAK;AAAW,yBAAO;AAAgB;AAAA,gBACvC;AAAS;AAAA,cACX;AAGA,uBAAS,IAAI,IAAI;AAEjB,+BAAiB,KAAK,IAAI;AAAA,YAC5B,CAAC;AAAA,UACH,OAAO;AACL,qBAAS,WAAW,IAAI,IAAI;AAC5B,6BAAiB,KAAK,WAAW,IAAI;AAAA,UACvC;AAAA,QACF;AAEA,cAAM,aAAa;AAAA,UACjB,KAAK;AAAA,YACH,SAAS;AAAA,YACT;AAAA,YACA;AAAA,UACF,EAAE,OAAO,CAAC,8BAA8B,CAAC;AAAA,UACzC,eAAe;AAAA,UACf,IAAI;AAAA,YACF,QAAQ;AAAA,cACE,SAAS;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YACR,KAAK,sBAAsB,SAAS,MAAM,aAAa,aAAa;AAAA,YACpE,UAAU;AAAA,cACE,SAAS;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YACV,MAAM,CAAC;AAAA,UACT;AAAA,UACA,IAAI;AAAA,QACN;AACA,mBAAW,KAAK,WAAW;AAE3B,YAAI,OAAO,aAAa;AACtB,eAAK,GAAG,cAAc,QAAQ;AAEhC,cAAM,YAAa,OAAO,IAAI,UAAU,aAAa,IAAI,QAAQ;AACjE,cAAM,QAAS,IAAI,QAAQ,OAAO,KAAK,IAAI,KAAK,IAAI;AACpD,cAAM,QAAQ,IAAI,QAAQ,UAAU;AAEpC,aAAK,OAAO,IAAI,UAAU,CAAC,WAAW;AACpC,cAAI,KAAK,gBAAgB,KAAK,gBAAgB;AAC5C,mBAAO,QAAQ;AACf;AAAA,UACF;AACA,YAAE,KAAK;AACP,iBAAO,KAAK,SAAS,MAAM;AACzB,cAAE,KAAK;AAAA,UACT,CAAC;AAED,cAAI;AACJ,cAAI,WAAW;AAGb,kBAAM,cAAc,IAAI,QAAQ,OAAO,EAAE,KAAK,GAAG,CAAC;AAClD,oBAAQ,CAAC,QAAQ;AACf,wBAAU,GAAG,WAAW,GAAG,GAAG,EAAE;AAAA,YAClC;AAAA,UACF;AAGA,cAAIC,QAAO,QAAQ,UAAU,OAAO,OAAO,OAAO,MAAM,GAAG;AAAA,QAC7D,CAAC,EAAE,GAAG,SAAS,CAAC,QAAQ;AACtB,eAAK,KAAK,SAAS,GAAG;AAAA,QACxB,CAAC,EAAE,GAAG,aAAa,MAAM;AACvB,eAAK,KAAK,WAAW;AAAA,QACvB,CAAC,EAAE,GAAG,SAAS,MAAM;AACnB,eAAK,KAAK,OAAO;AAAA,QACnB,CAAC;AACD,aAAK,eAAe;AACpB,aAAK,iBAAiB;AAAA,MACxB;AAAA,MAEA,aAAa,QAAQ;AACnB,aAAK,KAAK,KAAK,cAAc,MAAM;AAAA,MACrC;AAAA,MAEA,UAAU,MAAM;AACd,aAAK,KAAK,OAAO,GAAG,IAAI;AACxB,eAAO;AAAA,MACT;AAAA,MAEA,UAAU;AACR,eAAO,KAAK,KAAK,QAAQ;AAAA,MAC3B;AAAA,MAEA,eAAe,IAAI;AACjB,aAAK,KAAK,eAAe,EAAE;AAC3B,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,IAAI;AACR,aAAK,KAAK,MAAM,EAAE;AAClB,eAAO;AAAA,MACT;AAAA,MAEA,MAAM;AACJ,aAAK,KAAK,IAAI;AACd,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ;AACN,aAAK,KAAK,MAAM;AAChB,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAAD,QAAO,4BAA4B;AACnC,IAAAA,QAAO,6BAA6B;AAGpC,QAAMC,UAAN,cAAqB,aAAa;AAAA,MAChC,YAAY,QAAQ,UAAU,OAAO,OAAO,OAAO,QAAQ,QAAQ;AACjE,cAAM;AAEN,YAAI,YAAY;AAChB,YAAI,kBAAkB;AACtB,YAAI,eAAe,CAAC;AACpB,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,cAAM,8BAA8B,CAAC;AACrC,aAAK,QAAQ;AACb,aAAK,WAAW,IAAI,eAAe,IAAI;AACvC,aAAK,SAAS;AACd,aAAK,iBAAiB;AACtB,aAAK,gBAAgB;AAGrB,iBAAS,uBAAuB,KAAK;AAAA,QAAC;AACtC,aAAK,GAAG,SAAS,sBAAsB;AAEvC,cAAM,gBAAiB,CAAC,QAAQ,SAAY,CAAC,GAAG,SAAS,QAAQ;AAC/D,gBAAM,6BAA6B,KAAK,UAAU,GAAG,CAAC,EAAE;AAAA,QAC1D;AAEA,cAAM,UACJ,OAAO,OAAO,sBAAsB,YAC/B,SAAS,OAAO,iBAAiB,KACjC,OAAO,oBAAoB,IAC9B,OAAO,oBAEP,OAAOD,QAAO,8BAA8B,YACvC,SAASA,QAAO,yBAAyB,KACzCA,QAAO,4BAA4B,IACtCA,QAAO,4BACP;AAGN,cAAM,aACJ,OAAO,OAAO,sBAAsB,YAC/B,SAAS,OAAO,iBAAiB,KACjC,OAAO,qBAAqB,IAC/B,OAAO,oBAEP,OAAOA,QAAO,+BAA+B,YACxC,SAASA,QAAO,0BAA0B,KAC1CA,QAAO,8BAA8B,IACxCA,QAAO,6BACP;AAGN,YAAI,aAAa;AACjB,YAAI,YAAY,MAAM,eAAe,IAAI;AACvC,eAAK,KAAK,SAAS,MAAM;AACvB,kBAAM,UAAU,MAAM;AACpB,4BAAc,OAAO;AAAA,YACvB;AACA,iBAAK,GAAG,SAAS,OAAO,EAAE,GAAG,OAAO,OAAO;AAC3C,sBAAU,YAAY,MAAM;AAC1B,kBAAI,EAAE,aAAa,YAAY;AAC7B,8BAAc,OAAO;AACrB,sBAAM,MAAM,IAAI,MAAM,mBAAmB;AACzC,oBAAI,QAAQ;AACZ,qBAAK,KAAK,SAAS,GAAG;AACtB,qBAAK,IAAI;AAAA,cACX,OAAO;AAIL,sBAAM,KAAK;AAAA,cACb;AAAA,YACF,GAAG,OAAO;AAAA,UACZ,CAAC;AAED,qBAAW,MAAM;AACf,uBAAW,QAAQ,QAAQ;AAC3B,yBAAa;AAAA,UACf;AAAA,QACF;AAEA,cAAM,QAAQ,KAAK,YAAY,IAAI,SAAS;AAAA,UAC1C,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU,OAAO;AAAA,UACjB,QAAQ,OAAO;AAAA,UACf,SAAS,CAAC,SAAS;AACjB,gBAAI,WAAW,MAAM;AACnB,qBAAO,MAAM,IAAI;AAAA,UACrB;AAAA,UACA,SAAS,CAAC,QAAQ;AAChB,gBAAI,CAAC,MAAM;AACT,qBAAO,mBAAmB,MAAM;AAClC,iBAAK,KAAK,SAAS,GAAG;AACtB,gBAAI;AACF,qBAAO,IAAI;AAAA,YACb,QAAQ;AAAA,YAAC;AAAA,UACX;AAAA,UACA,UAAU,CAAC,WAAW;AACpB,iBAAK,eAAe,SAAS,sBAAsB;AAEnD,kBAAM,OAAO;AAAA,cACX,IAAI,OAAO;AAAA,cACX,QAAQ,OAAO;AAAA,cACf,MAAM,OAAO;AAAA,cACb;AAAA,YACF;AACA,gBAAI,CAAC,OAAO,KAAK,cAAc,MAAM,IAAI,GAAG;AAE1C,oBAAM,WAAW,kBAAkB,cAAc;AACjD,qBAAO,IAAI;AACX;AAAA,YACF;AAEA,gBAAI,OAAO;AACT,mBAAK,KAAK,YAAY,OAAO,QAAQ;AAAA,UACzC;AAAA,UACA,qBAAqB,CAAC,eAAe;AACnC,gBAAI,EAAE,YAAY;AAChB,mBAAK,KAAK,OAAO;AACnB,iBAAK,KAAK,aAAa,UAAU;AAAA,UACnC;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,YACf,OAAO;AAAA,YACP,YAAY,CAAC,GAAG,QAAQ,SAAS;AAC/B,kBAAI,WAAW,kBAAkB,gBAAgB;AAC/C,oBAAI,CAAC,MAAM;AACT,yBAAO,2BAA2B,MAAM;AACxC,sBAAI,SAAS;AACX,2BAAO,oCAAoC,MAAM;AAAA,gBACrD;AACA,sBAAM,MAAM,IAAI,MAAM,IAAI;AAC1B,oBAAI,OAAO;AACX,qBAAK,KAAK,SAAS,GAAG;AAAA,cACxB;AACA,qBAAO,IAAI;AAAA,YACb;AAAA,YACA,cAAc,CAAC,GAAG,SAAS;AAKzB,kBAAK,KAAK,SAAS,aAAa,KAAK,kBAC9B,CAAC,KAAK,eAAe;AAC1B,sBAAM,aAAa,qBAAqB;AACxC,uBAAO,MAAM,gBAAgB,KAAK,QAAQ,UAAU;AAAA,cACtD;AAEA,kBAAI,YAAY;AAChB,kBAAI;AACJ,kBAAI,UAAU;AAEd,kBAAI;AACJ,oBAAM,SAAS,MAAM;AACnB,oBAAI;AACF;AACF,0BAAU;AAEV,oBAAI,WAAW,QAAW;AACxB,sBAAI,cAAc;AAChB,6BAAS,qBAAqB;AAAA;AAE9B,6BAAS,qBAAqB;AAAA,gBAClC;AAEA,oBAAI,cAAc;AAChB,uBAAK,SAAS,OAAO,SAAS;AAChC,sBAAM,gBAAgB,KAAK,QAAQ,QAAQ,EAAE;AAAA,cAC/C;AACA,oBAAM,iBAAiB,MAAM;AAC3B,4BAAY,KAAK,SAAS,IAAI;AAE9B,oBAAI,cAAc,IAAI;AACpB,2BAAS,qBAAqB;AAC9B,sBAAI,OAAO;AACT,0BAAM,qEAC2B;AAAA,kBACnC;AAAA,gBACF;AAEA,uBAAQ,cAAc;AAAA,cACxB;AAEA,oBAAM,OAAO,KAAK;AAClB,sBAAQ,KAAK,MAAM;AAAA,gBACjB,KAAK;AACH,sBAAI,cAAc,MAAM,SAAS,KAAK,eAAe,GAAG;AACtD,6BAAS,MAAM;AACb,0BAAI;AACF;AACF,gCAAU;AAEV,4BAAM,WAAW,IAAI,QAAQ,MAAM,MAAM,SAAS;AAClD,2BAAK,SAAS,OAAO,WAAW,QAAQ;AAExC,4BAAM;AAAA,wBAAmB,KAAK;AAAA,wBACL;AAAA,wBACA;AAAA,wBACA;AAAA,sBAAW;AAEpC,6BAAO;AAAA,oBACT;AAEA,yBAAK,KAAK,WAAW,QAAQ,MAAM;AACnC;AAAA,kBACF;AACA;AAAA,gBACF,KAAK;AACH,sBAAI,cAAc,MAAM,OAAO,KAAK,eAAe,GAAG;AACpD,6BAAS,MAAM;AACb,0BAAI;AACF;AACF,gCAAU;AAEV,4BAAM,WAAW;AAAA,wBACf,MAAM;AAAA,wBACN,UAAU;AAAA,0BACR,IAAI;AAAA,0BACJ,QAAQ;AAAA,0BACR,YAAY;AAAA,0BACZ,OAAO;AAAA,wBACT;AAAA,wBACA,UAAU;AAAA,0BACR,IAAI,KAAK;AAAA,0BACT,QAAQ,KAAK;AAAA,0BACb,YAAY,KAAK;AAAA,0BACjB,OAAO;AAAA,wBACT;AAAA,sBACF;AAEA,4BAAM,SAAS,IAAI,QAAQ,MAAM,UAAU,EAAE,QAAQ,KAAK,CAAC;AAC3D,2BAAK,SAAS,OAAO,WAAW,MAAM;AAEtC,4BAAM;AAAA,wBAAmB,KAAK;AAAA,wBACL;AAAA,wBACA;AAAA,wBACA;AAAA,sBAAW;AAEpC,6BAAO;AAAA,oBACT;AAEA,yBAAK,KAAK,SAAS,QAAQ,QAAQ,IAAI;AACvC;AAAA,kBACF;AACA;AAAA,gBACF,KAAK;AACH,sBAAI,cAAc,MAAM,qBAAqB,KACtC,eAAe,GAAG;AACvB,6BAAS,MAAM;AACb,0BAAI;AACF;AACF,gCAAU;AAEV,4BAAM,WAAW;AAAA,wBACf,MAAM;AAAA,wBACN,UAAU;AAAA,0BACR,IAAI;AAAA,0BACJ,QAAQ;AAAA,0BACR,YAAY;AAAA,0BACZ,OAAO;AAAA,wBACT;AAAA,wBACA,UAAU;AAAA,0BACR,IAAI,KAAK;AAAA,0BACT,QAAQ,KAAK;AAAA,0BACb,YAAY,KAAK;AAAA,0BACjB,OAAO;AAAA,wBACT;AAAA,sBACF;AAEA,4BAAM,SAAS,IAAI,QAAQ,MAAM,UAAU,EAAE,QAAQ,KAAK,CAAC;AAC3D,2BAAK,SAAS,OAAO,WAAW,MAAM;AAEtC,4BAAM;AAAA,wBAAmB,KAAK;AAAA,wBACL;AAAA,wBACA;AAAA,wBACA;AAAA,sBAAW;AAEpC,6BAAO;AAAA,oBACT;AAEA,yBAAK,KAAK,uBAAuB,QAAQ,QAAQ,IAAI;AACrD;AAAA,kBACF;AACA;AAAA,gBACF;AAEE,2BAAS,qBAAqB;AAC9B,sBAAI,OAAO;AACT,0BAAM,kEACc,KAAK,IAAI,EAAE;AAAA,kBACjC;AAAA,cACJ;AAEA,kBAAI,WAAW,QAAW;AACxB,yBAAS,qBAAqB;AAC9B,oBAAI,OAAO;AACT,wBAAM,gEACa,KAAK,IAAI,EAAE;AAAA,gBAChC;AAAA,cACF;AAEA,qBAAO;AAAA,YACT;AAAA,YACA,2BAA2B,CAAC,GAAG,SAAS;AACtC,oBAAM,UAAU,KAAK,SAAS,IAAI,KAAK,SAAS;AAChD,kBAAI,OAAO,YAAY;AACrB;AAEF,oBAAM,WAAW;AAAA,gBACf,MAAM,QAAQ;AAAA,gBACd,UAAU;AAAA,kBACR,IAAI,KAAK;AAAA,kBACT,QAAQ;AAAA,kBACR,YAAY;AAAA,kBACZ,OAAO;AAAA,gBACT;AAAA,gBACA,UAAU;AAAA,kBACR,IAAI,KAAK;AAAA,kBACT,QAAQ,KAAK;AAAA,kBACb,YAAY,KAAK;AAAA,kBACjB,OAAO;AAAA,gBACT;AAAA,cACF;AAEA,oBAAM,WAAW,IAAI,QAAQ,MAAM,UAAU,EAAE,QAAQ,KAAK,CAAC;AAC7D,mBAAK,SAAS,OAAO,KAAK,WAAW,QAAQ;AAC7C,sBAAQ,QAAW,QAAQ;AAAA,YAC7B;AAAA,YACA,sBAAsB,CAAC,GAAG,WAAW,QAAQ,gBAAgB;AAC3D,oBAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,kBAAI,OAAO,YAAY;AACrB;AAEF,oBAAM,OAAO,EAAE,QAAQ,YAAY;AACnC,mCAAqB,MAAM,WAAW,MAAM,OAAO;AAAA,YACrD;AAAA,YACA,cAAc,CAAC,GAAG,WAAW,SAAS;AACpC,kBAAI,UAAU,KAAK,SAAS,IAAI,SAAS;AACzC,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,kBAAI,QAAQ,gBAAgB,SAAS;AACnC,0BAAU,QAAQ;AAClB,oBAAI,CAAC;AACH;AAAA,cACJ;AAKA,kBAAI,QAAQ,SAAS,WAAW;AAC9B;AAEF,sBAAQ,SAAS,UAAU,KAAK;AAEhC,kBAAI,QAAQ,KAAK,IAAI,MAAM,OAAO;AAChC,wBAAQ,iBAAiB;AACzB;AAAA,cACF;AAEA,kBAAI,QAAQ,SAAS,UAAU;AAC7B,6BAAa,OAAO;AAAA,YACxB;AAAA,YACA,uBAAuB,CAAC,GAAG,WAAW,MAAM,SAAS;AAAA,YAErD;AAAA,YACA,uBAAuB,CAAC,GAAG,WAAW,WAAW;AAC/C,kBAAI,UAAU,KAAK,SAAS,IAAI,SAAS;AACzC,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,kBAAI,QAAQ,gBAAgB,SAAS;AACnC,0BAAU,QAAQ;AAClB,oBAAI,CAAC;AACH;AAAA,cACJ;AAGA,sBAAQ,SAAS,UAAU;AAE3B,kBAAI,QAAQ,aAAa;AACvB,wBAAQ,cAAc;AAEtB,oBAAI,QAAQ,QAAQ;AAClB,0BAAQ,OAAO,QAAQ,QAAQ,MAAM,QAAQ,QAAQ;AAAA,gBACvD,WAAW,QAAQ,UAAU;AAC3B,0BAAQ,SAAS;AAAA,gBACnB,WAAW,QAAQ,WAAW;AAC5B,0BAAQ,OAAO;AAAA,oBAAO,QAAQ;AAAA,oBACR;AAAA,oBACA,QAAQ;AAAA,kBAAW;AAAA,gBAC3C,WAAW,QAAQ,aAAa;AAC9B,0BAAQ,YAAY;AAAA,gBACtB;AAAA,cACF;AAAA,YACF;AAAA,YACA,iBAAiB,CAAC,GAAG,cAAc;AACjC,kBAAI,UAAU,KAAK,SAAS,IAAI,SAAS;AACzC,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,kBAAI,QAAQ,gBAAgB,SAAS;AACnC,0BAAU,QAAQ;AAClB,oBAAI,CAAC;AACH;AAAA,cACJ;AAEA,kBAAI,QAAQ,WAAW;AACrB,wBAAQ,WAAW,MAAM,EAAE,KAAK;AAAA,YACpC;AAAA,YACA,iBAAiB,CAAC,GAAG,cAAc;AACjC,kBAAI,UAAU,KAAK,SAAS,IAAI,SAAS;AACzC,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,kBAAI,QAAQ,gBAAgB,SAAS;AACnC,0BAAU,QAAQ;AAClB,oBAAI,CAAC;AACH;AAAA,cACJ;AAEA,kBAAI,QAAQ,WAAW;AACrB,wBAAQ,WAAW,MAAM,EAAE,IAAI;AAAA,YACnC;AAAA,YACA,iBAAiB,CAAC,GAAG,WAAW,MAAM,WAAW,SAAS;AACxD,oBAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,kBAAI,UAAU;AACd,kBAAI;AACJ,kBAAI;AAEJ,kBAAI,QAAQ,gBAAgB,SAAS;AAEnC,oBAAI;AACF,wBAAM,eAAe,QAAQ,SAAS,EAAE;AAC1C;AAAA,cACF;AAEA,kBAAI,WAAW;AAEb,oBAAI,SAAS,WACN,SAAS,UACT,SAAS,aAAa;AAC3B,2BAAS,MAAM;AACb,wBAAI,WAAW,QAAQ,WAAW,QAAQ;AACxC;AACF,8BAAU;AAEV,0BAAM,eAAe,QAAQ,UAAU,SAAS,EAAE;AAAA,kBACpD;AAAA,gBACF;AAEA,yBAAS,MAAM;AACb,sBAAI,WAAW,QAAQ,WAAW,QAAQ;AACxC;AACF,4BAAU;AAEV,wBAAM,eAAe,QAAQ,UAAU,SAAS,EAAE;AAAA,gBACpD;AAAA,cACF;AAEA,kBAAI,QAAQ,SAAS;AACnB,0BAAU,OAAO;AACjB;AAAA,cACF;AAEA,sBAAQ,MAAM;AAAA,gBAEZ,KAAK;AACH,sBAAI,cAAc,SAAS,KAAK,GAAG;AACjC,4BAAQ,KAAK,OAAO,QAAQ,QAAQ;AAAA,sBAClC,KAAK,KAAK;AAAA,sBACV,KAAK,KAAK;AAAA,oBACZ,CAAC;AACD;AAAA,kBACF;AACA;AAAA,gBACF,KAAK;AACH,sBAAI,cAAc,SAAS,KAAK,GAAG;AACjC,4BAAQ,KAAK,OAAO,QAAQ,QAAQ,IAAI;AACxC;AAAA,kBACF;AACA;AAAA,gBACF,KAAK;AACH,sBAAI,cAAc,SAAS,eAAe;AACxC,4BAAQ,KAAK,iBAAiB,QAAQ,QAAQ,IAAI;AAAA;AAElD,8BAAU,OAAO;AACnB;AAAA,gBACF,KAAK;AACH,sBAAI,cAAc,SAAS,KAAK,GAAG;AACjC,4BAAQ,KAAK,OAAO,QAAQ,QAAQ,IAAI;AACxC;AAAA,kBACF;AACA;AAAA,gBAEF,KAAK;AACH,sBAAI,cAAc,SAAS,QAAQ,GAAG;AACpC,4BAAQ,KAAK,UAAU,QAAQ,QAAQ;AAAA,sBACrC,MAAM;AAAA,oBACR,CAAC;AACD;AAAA,kBACF;AACA;AAAA,gBAGF,KAAK;AACH,sBAAI,cAAc,SAAS,YAAY,GAAG;AACxC,4BAAQ,KAAK,cAAc,QAAQ,MAAM;AACzC;AAAA,kBACF;AACA;AAAA,gBAEF,KAAK;AACH,sBAAI,cAAc,SAAS,OAAO,GAAG;AACnC,6BAAS,MAAM;AACb,0BAAI,WAAW,QAAQ,WAAW,QAAQ;AACxC;AACF,gCAAU;AAEV,0BAAI;AACF,8BAAM,eAAe,QAAQ,UAAU,SAAS,EAAE;AAEpD,4BAAM,UAAU,IAAI;AAAA,wBAClB;AAAA,wBAAM,QAAQ;AAAA,wBAAW,EAAE,QAAQ,KAAK;AAAA,sBAC1C;AAEA,8BAAQ,UAAU,QAAQ,UAAU;AACpC,8BAAQ,WAAW;AAEnB,6BAAO;AAAA,oBACT;AAEA,4BAAQ,KAAK,SAAS,QAAQ,MAAM;AACpC;AAAA,kBACF;AACA;AAAA,gBACF,KAAK;AACH,sBAAI,cAAc,SAAS,MAAM,GAAG;AAClC,6BAAS,MAAM;AACb,0BAAI,WAAW,QAAQ,WAAW,QAAQ;AACxC;AACF,gCAAU;AAEV,0BAAI;AACF,8BAAM,eAAe,QAAQ,UAAU,SAAS,EAAE;AAEpD,4BAAM,UAAU,IAAI;AAAA,wBAClB;AAAA,wBAAM,QAAQ;AAAA,wBAAW,EAAE,QAAQ,KAAK;AAAA,sBAC1C;AAEA,8BAAQ,UAAU,QAAQ,UAAU;AACpC,8BAAQ,WAAW;AAEnB,6BAAO;AAAA,oBACT;AAEA,4BAAQ,KAAK,QAAQ,QAAQ,QAAQ;AAAA,sBACnC,SAAS;AAAA,oBACX,CAAC;AACD;AAAA,kBACF;AACA;AAAA,gBACF,KAAK,aAAa;AAChB,sBAAI,UAAW,SAAS;AACxB,2BAAS,MAAM;AACb,wBAAI,WAAW,QAAQ,WAAW,QAAQ;AACxC;AACF,8BAAU;AAEV,wBAAI;AACF,4BAAM,eAAe,QAAQ,UAAU,SAAS,EAAE;AAEpD,wBAAI;AACJ,wBAAI,SAAS;AACX,iCAAW,IAAI,KAAK,MAAM,QAAQ,WAAW;AAAA,wBAC3C,QAAQ;AAAA,wBACR;AAAA,sBACF,CAAC;AAAA,oBACH,OAAO;AACL,iCAAW,IAAI;AAAA,wBACb;AAAA,wBAAM,QAAQ;AAAA,wBAAW,EAAE,QAAQ,KAAK;AAAA,sBAC1C;AACA,+BAAS,UACP,QAAQ,UAAU,GAAG,IAAI,IAAI,IAAI;AAAA,oBACrC;AACA,4BAAQ,WAAW;AAEnB,2BAAO;AAAA,kBACT;AAEA,sBAAI,SAAS,QAAQ;AACnB,wBAAI,cAAc,SAAS,MAAM,GAAG;AAClC,8BAAQ,KAAK,QAAQ,QAAQ,MAAM;AACnC;AAAA,oBACF;AACA,8BAAU;AAAA,kBACZ;AACA,sBAAI,cAAc,SAAS,WAAW,GAAG;AACvC,4BAAQ,KAAK,aAAa,QAAQ,QAAQ;AAAA,sBACxC,MAAM;AAAA,oBACR,CAAC;AACD;AAAA,kBACF;AACA;AAAA,gBACF;AAAA,cACF;AACA,uBAAS;AAAA,gBACP,oDAAoD,IAAI;AAAA,cAC1D;AACA,wBAAU,OAAO;AAAA,YACnB;AAAA,YACA,aAAa,CAAC,GAAG,cAAc;AAC7B,kBAAI,UAAU,KAAK,SAAS,IAAI,SAAS;AACzC,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,kBAAI,QAAQ,gBAAgB,SAAS;AACnC,oBAAI,CAAC,QAAQ,SAAS;AACpB,0BAAQ,UAAU;AAClB,0BAAQ,KAAK,KAAK;AAClB,0BAAQ,KAAK,KAAK;AAAA,gBACpB;AACA,0BAAU,QAAQ;AAClB,oBAAI,CAAC;AACH;AAAA,cACJ;AAEA,kBAAI,QAAQ,SAAS,UAAU;AAC7B;AACF,sBAAQ,SAAS,QAAQ;AAEzB,kBAAI,QAAQ;AACV,wBAAQ,KAAK,IAAI;AAAA,YACrB;AAAA,YACA,eAAe,CAAC,GAAG,cAAc;AAC/B,kBAAI,UAAU,KAAK,SAAS,IAAI,SAAS;AACzC,kBAAI,OAAO,YAAY,YAAY,YAAY;AAC7C;AAEF,kBAAI,QAAQ,gBAAgB,SAAS;AACnC,wBAAQ,UAAU;AAClB,wBAAQ,KAAK,OAAO;AACpB,0BAAU,QAAQ;AAClB,oBAAI,CAAC;AACH;AAAA,cACJ;AAEA,8BAAgB,MAAM,WAAW,OAAO;AAAA,YAC1C;AAAA;AAAA,YAEA,iBAAiB,CAAC,GAAG,YAAY;AAC/B,kBAAI,cAAc,KACX,mBACA,KAAK,iBACL,YAAY,gBAAgB;AACjC,sBAAM,WAAW,kBAAkB,qBAAqB;AACxD,uBAAO,IAAI;AACX;AAAA,cACF;AAEA,gCAAkB;AAClB,oBAAM,cAAc,OAAO;AAAA,YAC7B;AAAA,YACA,kBAAkB,CAAC,GAAG,UAAU,SAAS,QAAQ,eAAe;AAC9D,kBAAI,cAAc,KACX,KAAK,iBACJ,YACI,QAAQ,aAAa,YAClB,QAAQ,YAAY,YAE3B,WAAW,cACR,WAAW,eACX,WAAW,eACX,WAAW,0BACX,WAAW,UACf,aAAa,WAAW,mBAAmB;AAChD,sBAAM,WAAW,kBAAkB,cAAc;AACjD,uBAAO,IAAI;AACX;AAAA,cACF,WAAW,YAAY,kBAAkB;AACvC,sBAAM,WAAW,kBAAkB,qBAAqB;AACxD,uBAAO,IAAI;AACX;AAAA,cACF;AAEA,kBAAI;AACJ,sBAAQ,QAAQ;AAAA,gBACd,KAAK;AACH,wBAAM,IAAI;AAAA,oBAAoB;AAAA,oBAAO;AAAA,oBAAU;AAAA,oBAAS;AAAA,oBAC1B;AAAA,oBAAY;AAAA,kBAAY;AACtD;AAAA,gBACF,KAAK;AACH,wBAAM,IAAI;AAAA,oBAAc;AAAA,oBAAO;AAAA,oBAAU;AAAA,oBAAS;AAAA,oBAC1B;AAAA,oBAAY;AAAA,kBAAY;AAChD;AAAA,gBACF,KAAK;AACH,wBAAM,IAAI;AAAA,oBAAqB;AAAA,oBAAO;AAAA,oBAAU;AAAA,oBAAS;AAAA,oBAC1B;AAAA,oBAAY;AAAA,kBAAY;AACvD;AAAA,gBACF,KAAK;AACH,sBAAI,WACG,mBAAmB,kBACnB,QAAQ,WAAW;AACxB,0BAAM,KAAK,QAAQ;AACnB,4BAAQ,YAAY;AACpB,uBAAG,WAAW,WAAW;AACzB;AAAA,kBACF;AACA,wBAAM,IAAI;AAAA,oBAAe;AAAA,oBAAO;AAAA,oBAAU;AAAA,oBAAS;AAAA,oBAC1B;AAAA,oBAAY;AAAA,kBAAY;AACjD;AAAA,gBACF,KAAK;AACH,wBAAM,IAAI;AAAA,oBAAY;AAAA,oBAAO;AAAA,oBAAU;AAAA,oBAAS;AAAA,oBAC1B;AAAA,kBAAY;AAClC;AAAA,cACJ;AAEA,kBAAI,SAAS;AACX,oBAAI,CAAC,QAAQ,kBAAkB;AAC7B,yBAAO,aAAa,KAAK,GAAG;AAAA,gBAC9B,WAAW,QAAQ,cAAc,CAAC,QAAQ,gBAAgB;AAKxD,0BAAQ,YAAY,QAAQ,SAAS;AACrC,0BAAQ,KAAK,OAAO;AAAA,gBACtB;AAAA,cACF;AAEA,wBAAU;AAEV,kBAAI,cAAc,MAAM,gBAAgB;AACtC,qBAAK,KAAK,kBAAkB,OAAO;AAAA;AAEnC,wBAAQ,OAAO;AAAA,YACnB;AAAA,YACA,wBAAwB,CAAC,GAAG,cAAc;AACxC,kBAAI,WAAW,mBAAmB;AAChC,wBAAQ,gBAAgB,SAAS;AAAA,YACrC;AAAA;AAAA,YAEA,gBAAgB,CAAC,GAAG,MAAM,WAAW,SAAS;AAC5C,oBAAM,QAAQ;AAAA,gBACZ,MAAM;AAAA,gBACN,KAAK;AAAA,cACP;AAEA,uBAAS,SAAS,MAAM,KAAK;AAC3B,sBAAM,OAAO;AACb,sBAAM,MAAM;AACZ,4BAAY;AAAA,cACd;AAEA,kBAAI;AACF,4CAA4B,KAAK,KAAK;AAExC,mBAAK,SAAS,mBACN,SAAS,0BACT,SAAS,kCACT,SAAS,qCACT,SAAS,6CACV,cAAc,MAAM,SAAS,KAC7B,KAAK,eAAe;AACzB,oBAAI;AACJ,oBAAI;AAEJ,oBAAI,WAAW;AACb,sBAAI,UAAU;AACd,2BAAS,CAAC,eAAe;AACvB,wBAAI;AACF;AACF,8BAAU;AACV,wBAAI;AACJ,wBAAI,SAAS,mBACN,KAAK,aAAa,KAClB,OAAO,eAAe,UAAU;AACrC,gCAAU,OAAO,YAAY,CAAC;AAC9B,oCAAc,SAAS,YAAY,CAAC;AAAA,oBACtC;AACA,6BAAS,WAAW,OAAO;AAAA,kBAC7B;AACA,2BAAS,MAAM;AACb,wBAAI;AACF;AACF,8BAAU;AACV,6BAAS,SAAS;AAAA,kBACpB;AAAA,gBACF;AAEA,oBAAI,SAAS,gCAAgC;AAC3C,uBAAK,iBAAiB;AACtB,4BAAU,OAAO;AACjB;AAAA,gBACF;AAEA,qBAAK,KAAK,WAAW,QAAQ,QAAQ,MAAM,IAAI;AAAA,cACjD,WAAW,WAAW;AACpB,yBAAS,SAAS;AAAA,cACpB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAED,eAAO,MAAM;AACb,mBAAW,KAAK,MAAM;AACpB,gBAAM,MAAM;AACZ,iBAAO,GAAG,QAAQ,CAAC,SAAS;AAC1B,gBAAI;AACF,oBAAM,MAAM,MAAM,GAAG,KAAK,MAAM;AAAA,YAClC,SAAS,IAAI;AACX,mBAAK,KAAK,SAAS,EAAE;AACrB,kBAAI;AACF,oBAAI,WAAW,MAAM;AACnB,yBAAO,IAAI;AAAA,cACf,QAAQ;AAAA,cAAC;AAAA,YACX;AAAA,UACF,CAAC;AACD,iBAAO,OAAO;AAAA,QAChB,CAAC,EAAE,MAAM,CAAC,QAAQ;AAChB,eAAK,KAAK,SAAS,GAAG;AACtB,cAAI;AACF,gBAAI,WAAW,MAAM;AACnB,qBAAO,IAAI;AAAA,UACf,QAAQ;AAAA,UAAC;AAAA,QACX,CAAC;AACD,eAAO,GAAG,SAAS,CAAC,QAAQ;AAC1B,cAAI,QAAQ;AACZ,eAAK,KAAK,SAAS,GAAG;AAAA,QACxB,CAAC,EAAE,KAAK,OAAO,MAAM;AACnB,mBAAS,MAAM,cAAc;AAC7B,gBAAM,QAAQ;AACd,eAAK,KAAK,KAAK;AAAA,QACjB,CAAC,EAAE,KAAK,SAAS,MAAM;AACrB,mBAAS,MAAM,eAAe;AAC9B,gBAAM,QAAQ;AACd,eAAK,KAAK,OAAO;AAEjB,gBAAM,MAAM,IAAI,MAAM,yBAAyB;AAG/C,eAAK,SAAS,QAAQ,GAAG;AAAA,QAC3B,CAAC;AAED,cAAM,eAAe,CAAC,KAAK,SAAS,aAAa,cAAc;AAC7D,cAAI,YAAY,OAAO,CAAC,KAAK,eAAe;AAC1C,gBAAI,SAAS;AACX,wBAAU;AACV,mBAAK,gBAAgB;AACrB,oBAAM,YAAY;AAClB,6BAAe,CAAC;AAChB,mBAAK,KAAK,OAAO;AAAA,YACnB,OAAO;AACL,oBAAM,YAAY,aAAa,SAAS;AACxC,kBAAI,aAAa,QAAQ;AACvB,0BAAU,aAAa,IAAI;AAC3B,oBAAI,cAAc,MAAM,gBAAgB;AACtC,uBAAK,KAAK,kBAAkB,OAAO;AAAA;AAEnC,0BAAQ,OAAO;AAAA,cACnB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,cAAc;AACrB,iBAAO,4BAA4B,SAAS,KAClC,4BAA4B,CAAC,EAAE,MAAM;AAC7C,kBAAM,QAAQ,4BAA4B,MAAM;AAChD,gBAAI,MAAM,SAAS;AACjB,oBAAM,eAAe,MAAM,GAAG;AAChC,gBAAI,MAAM,SAAS;AACjB,oBAAM,eAAe;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM;AACJ,YAAI,KAAK,SAAS,WAAW,KAAK,KAAK,GAAG;AACxC,eAAK,UAAU,WAAW,kBAAkB,cAAc;AAC1D,eAAK,MAAM,IAAI;AAAA,QACjB;AACA,eAAO;AAAA,MACT;AAAA,MAEA,IAAI,YAAY,YAAY,IAAI;AAC9B,cAAM,OAAO,EAAE,YAAY,WAAW;AACtC,oBAAY,MAAM,OAAO,MAAM,EAAE;AACjC,eAAO;AAAA,MACT;AAAA,MAEA,WAAW,WAAW,WAAW,YAAY,YAAY,IAAI;AAC3D,cAAM,OAAO,EAAE,WAAW,WAAW,YAAY,WAAW;AAC5D,oBAAY,MAAM,mBAAmB,MAAM,EAAE;AAC7C,eAAO;AAAA,MACT;AAAA,MAEA,8BAA8B,YAAY,IAAI;AAC5C,cAAM,OAAO,EAAE,WAAW;AAC1B,oBAAY,MAAM,qCAAqC,MAAM,EAAE;AAC/D,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,IAAI;AACR,YAAI;AAEJ,YAAI;AACF,eAAK,UAAU,MAAM;AAAA,QACvB,SAAS,IAAI;AACX,kBAAQ;AAAA,QACV;AAIA,YAAI,OAAO,OAAO,YAAY;AAC5B,cAAI;AACF,oBAAQ,SAAS,IAAI,KAAK;AAAA;AAE1B,iBAAK,KAAK,SAAS,EAAE;AAAA,QACzB;AAAA,MACF;AAAA,MAEA,WAAW,SAAS;AAClB,YAAI,KAAK,SAAS,OAAO,KAAK,MAAM,eAAe;AACjD,eAAK,MAAM,WAAW,OAAO;AAE/B,eAAO;AAAA,MACT;AAAA,IACF;AAGA,aAAS,YAAYE,OAAM,MAAM,MAAM,IAAI;AAGzC,YAAM,aAAa;AACnB,YAAM,YAAY;AAElB,UAAI,OAAO,SAAS,YAAY;AAC9B,aAAK;AACL,eAAO,CAAC;AAAA,MACV;AAEA,YAAM,UAAU,CAAC,KAAK,WAAW;AAC/B,WAAG,KAAK,MAAM;AAAA,MAChB;AACA,cAAQ,OAAO;AAEf,YAAM,YAAYA,MAAK,SAAS,IAAI,OAAO;AAE3C,UAAI,cAAc,IAAI;AACpB,WAAG,IAAI,MAAM,4BAA4B,CAAC;AAC1C;AAAA,MACF;AAEA,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,UAAAA,MAAK,UAAU,eAAe,WAAW,YAAY,WAAW,IAAI;AACpE;AAAA,QACF,KAAK;AACH,UAAAA,MAAK,UAAU,IAAI,WAAW,YAAY,WAAW,IAAI;AACzD;AAAA,QACF,KAAK;AACH,UAAAA,MAAK,UAAU;AAAA,YACb;AAAA,YAAW;AAAA,YAAY;AAAA,YAAW;AAAA,UACpC;AACA;AAAA,QACF;AACE,gBAAM,IAAI,MAAM,6BAA6B,IAAI,EAAE;AAAA,MACvD;AAAA,IACF;AAEA,aAAS,eAAe,GAAG,GAAG;AAC5B,aAAO,IAAI;AAAA,IACb;AAEA,WAAO,UAAUF;AACjB,WAAO,QAAQ,iBAAiBC;AAAA;AAAA;;;ACn2ChC;AAAA;AAAA;AAEA,QAAM;AAAA,MACJ;AAAA,MACA,iBAAiB;AAAA,MACjB,qBAAqB;AAAA,MACrB;AAAA,MACA;AAAA,IACF,IAAI,UAAQ,QAAQ;AAEpB,QAAM,EAAE,IAAI,IAAI;AAChB,QAAM,eAAe,uBAAwB;AAE7C,QAAM,EAAE,YAAY,IAAI;AAExB,QAAM,WAAW;AACjB,QAAM,iBAAiB;AAEvB,QAAM,SAAS,UAAU;AACzB,QAAM,UAAU,IAAI,IAAI,OAAO,QAAQ,WAAW,CAAC;AAEnD,aAAS,SAAS,MAAM,MAAM;AAC5B,UAAI,OAAO,SAAS;AAClB,cAAM,IAAI,UAAU,2BAA2B;AAEjD,YAAM,oBAAoB,EAAE,MAAM,QAAQ,QAAQ,MAAM;AACxD,YAAM,qBAAqB,EAAE,MAAM,SAAS,QAAQ,MAAM;AAE1D,cAAQ,KAAK,YAAY,GAAG;AAAA,QAC1B,KAAK,OAAO;AACV,cAAI,OAAO,SAAS,YAAY,SAAS;AACvC,kBAAM,IAAI,UAAU,oCAAoC;AAC1D,gBAAM,gBAAgB,KAAK;AAC3B,cAAI,CAAC,OAAO,UAAU,aAAa;AACjC,kBAAM,IAAI,UAAU,6BAA6B;AACnD,cAAI,iBAAiB,KAAK,gBAAgB;AACxC,kBAAM,IAAI,WAAW,wCAAwC;AAC/D,iBAAO,CAAC,OAAO,EAAE,eAAe,mBAAmB,mBAAmB,CAAC;AAAA,QACzE;AAAA,QACA,KAAK,SAAS;AACZ,cAAI,OAAO,SAAS,YAAY,SAAS;AACvC,kBAAM,IAAI,UAAU,sCAAsC;AAC5D,cAAI,CAAC,OAAO,UAAU,KAAK,IAAI;AAC7B,kBAAM,IAAI,UAAU,+BAA+B;AACrD,cAAI;AACJ,kBAAQ,KAAK,MAAM;AAAA,YACjB,KAAK;AACH,2BAAa;AACb;AAAA,YACF,KAAK;AACH,2BAAa;AACb;AAAA,YACF,KAAK;AACH,2BAAa;AACb;AAAA,YACF;AACE,oBAAM,IAAI,MAAM,qCAAqC;AAAA,UACzD;AACA,cAAI,CAAC,OAAO,SAAS,UAAU;AAC7B,kBAAM,IAAI,MAAM,8BAA8B;AAChD,iBAAO,CAAC,MAAM,EAAE,YAAY,mBAAmB,mBAAmB,CAAC;AAAA,QACrE;AAAA,QACA,KAAK;AACH,iBAAO,CAAC,WAAW,EAAE,mBAAmB,mBAAmB,CAAC;AAAA,QAC9D;AACE,gBAAM,IAAI,MAAM,yBAAyB,IAAI,EAAE;AAAA,MACnD;AAAA,IACF;AAEA,aAAS,UAAU,SAAS,KAAK,MAAM;AACrC,cAAQ,SAAS;AAAA,QACf,KAAK,OAAO;AAKV,cAAI,SAAS,IAAI,IAAI,OAAO,IAAI;AAChC,iBAAO,aAAa;AAGpB,cAAI,OAAO,QAAQ,MAAM;AACvB,kBAAM,IAAI,MAAM,wCAAwC;AAG1D,iBAAO,aAAa;AACpB,cAAI,OAAO,QAAQ,MAAM;AACvB,kBAAM,IAAI,MAAM,qBAAqB;AAEvC,cAAI,OAAO,SAAS,MAAM,IAAI;AAC5B,kBAAM,IAAI,MAAM,2CAA2C;AAC7D,cAAI,OAAO,SAAS,MAAM,GAAM;AAC9B,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAEA,mBAAS,IAAI,IAAI,OAAO,OAAO,WAAW,IAAI,aAAa,IAAI,CAAC;AAChE,iBAAO,aAAa;AACpB,cAAI,OAAO,QAAQ,MAAM;AACvB,kBAAM,IAAI,MAAM,wCAAwC;AAC1D,gBAAM,IAAI,OAAO,WAAW,IAAI,SAAS,IAAI;AAC7C,gBAAM,IAAI,OAAO,WAAW,IAAI,SAAS,IAAI;AAC7C,gBAAM,IAAI,OAAO,WAAW,IAAI,SAAS,IAAI;AAC7C,gBAAM,IAAI,OAAO,WAAW,IAAI,SAAS,IAAI;AAC7C,gBAAM,IAAI,OAAO,WAAW,IAAI,SAAS,IAAI;AAC7C,iBAAO,WAAW,IAAI,SAAS,IAAI;AACnC,iBAAO,WAAW,IAAI,SAAS,IAAI;AACnC,gBAAM,OAAO,OAAO,WAAW,IAAI,SAAS,IAAI;AAYhD,gBAAM,UAAU,OAAO,KAAK,SAAS;AACrC,gBAAM,UAAU,OAAO;AAAA,YACrB,IAAI,QAAQ,SACV,IAAI,EAAE,SACN,IAAI,EAAE,SACN,IAAI,EAAE,SACN,IAAI,KAAK,SACT,IAAI,EAAE,SACN,IAAI,EAAE;AAAA,UACV;AACA,cAAI,MAAM;AAEV,kBAAQ,cAAc,QAAQ,QAAQ,OAAO,CAAC;AAC9C,kBAAQ,IAAI,SAAS,OAAO,CAAC;AAC7B,kBAAQ,cAAc,EAAE,QAAQ,OAAO,QAAQ,MAAM;AACrD,kBAAQ,IAAI,GAAG,OAAO,CAAC;AACvB,kBAAQ,cAAc,EAAE,QAAQ,OAAO,EAAE,MAAM;AAC/C,kBAAQ,IAAI,GAAG,OAAO,CAAC;AACvB,kBAAQ,cAAc,EAAE,QAAQ,OAAO,EAAE,MAAM;AAC/C,kBAAQ,IAAI,GAAG,OAAO,CAAC;AACvB,kBAAQ,cAAc,KAAK,QAAQ,OAAO,EAAE,MAAM;AAClD,kBAAQ,IAAI,MAAM,OAAO,CAAC;AAC1B,kBAAQ,cAAc,EAAE,QAAQ,OAAO,KAAK,MAAM;AAClD,kBAAQ,IAAI,GAAG,OAAO,CAAC;AACvB,kBAAQ,cAAc,EAAE,QAAQ,OAAO,EAAE,MAAM;AAC/C,kBAAQ,IAAI,GAAG,OAAO,CAAC;AAQvB,gBAAM,SAAS,OAAO;AAAA,YACpB,IAAI,QAAQ,SACV,IAAI,EAAE,SACN,IAAI,EAAE;AAAA,UACV;AACA,gBAAM;AAEN,iBAAO,cAAc,QAAQ,QAAQ,OAAO,CAAC;AAC7C,iBAAO,IAAI,SAAS,OAAO,CAAC;AAC5B,iBAAO,cAAc,EAAE,QAAQ,OAAO,QAAQ,MAAM;AACpD,iBAAO,IAAI,GAAG,OAAO,CAAC;AACtB,iBAAO,cAAc,EAAE,QAAQ,OAAO,EAAE,MAAM;AAC9C,iBAAO,IAAI,GAAG,OAAO,CAAC;AAEtB,iBAAO,EAAE,SAAS,QAAQ,SAAS,GAAG,MAAM,SAAS,KAAK,OAAO;AAAA,QACnE;AAAA,QACA,KAAK,MAAM;AAET,cAAI,SAAS,IAAI,IAAI,OAAO,GAAG;AAC/B,iBAAO,aAAa;AAEpB,iBAAO,aAAa;AACpB,cAAI,OAAO,QAAQ,MAAM;AACvB,kBAAM,IAAI,MAAM,sBAAsB;AAExC,iBAAO,QAAQ;AACf,cAAI,SAAS,OAAO,WAAW,IAAI,WAAW,IAAI;AAClD;AAEE,gBAAI,IAAI;AACR,mBAAO,IAAI,OAAO,UAAU,OAAO,CAAC,MAAM,GAAM,EAAE;AAAE;AACpD,gBAAI,IAAI;AACN,uBAAS,OAAO,MAAM,CAAC;AAAA,UAC3B;AAGA,mBAAS,IAAI,IAAI,OAAO,IAAI;AAC5B,iBAAO,aAAa;AAGpB,cAAI,OAAO,QAAQ,MAAM;AACvB,kBAAM,IAAI,MAAM,0CAA0C;AAE5D,iBAAO,aAAa;AACpB,cAAI,OAAO,QAAQ,MAAM;AACvB,kBAAM,IAAI,MAAM,uBAAuB;AACzC,gBAAM,WAAW,OAAO,QAAQ;AAChC,cAAI;AACJ,kBAAQ,UAAU;AAAA,YAChB,KAAK;AAEH,6BAAe;AACf;AAAA,YACF,KAAK;AAEH,6BAAe;AACf;AAAA,YACF,KAAK;AAEH,6BAAe;AACf;AAAA,YACF;AACE,oBAAM,IAAI,MAAM,wCAAwC;AAAA,UAC5D;AAEA,mBAAS,IAAI,IAAI,OAAO,OAAO,WAAW,IAAI,aAAa,IAAI,CAAC;AAChE,iBAAO,aAAa;AAGpB,cAAI,OAAO,QAAQ,MAAM;AACvB,kBAAM,IAAI,MAAM,0CAA0C;AAG5D,gBAAM,UAAU,OAAO,OAAO;AAAA,YAC5B,OAAO,KAAK,CAAC,CAAI,CAAC;AAAA,YAClB,OAAO,WAAW,IAAI,aAAa,IAAI;AAAA,UACzC,CAAC;AASD,gBAAM,UAAU,OAAO,KAAK,cAAc,YAAY,EAAE;AACxD,yBAAe,OAAO,KAAK,YAAY;AACvC,gBAAM,UAAU,OAAO;AAAA,YACrB,IAAI,QAAQ,SACV,IAAI,aAAa,SACjB,IAAI,OAAO,SACX,IAAI,QAAQ;AAAA,UAChB;AACA,cAAI,MAAM;AAEV,kBAAQ,cAAc,QAAQ,QAAQ,OAAO,CAAC;AAC9C,kBAAQ,IAAI,SAAS,OAAO,CAAC;AAC7B,kBAAQ,cAAc,aAAa,QAAQ,OAAO,QAAQ,MAAM;AAChE,kBAAQ,IAAI,cAAc,OAAO,CAAC;AAClC,kBAAQ,cAAc,OAAO,QAAQ,OAAO,aAAa,MAAM;AAC/D,kBAAQ,IAAI,QAAQ,OAAO,CAAC;AAC5B,kBAAQ,cAAc,QAAQ,QAAQ,OAAO,OAAO,MAAM;AAC1D,kBAAQ,IAAI,SAAS,OAAO,CAAC;AAQ7B,gBAAM,SAAS,OAAO;AAAA,YACpB,IAAI,QAAQ,SACV,IAAI,aAAa,SACjB,IAAI,OAAO;AAAA,UACf;AACA,gBAAM;AAEN,iBAAO,cAAc,QAAQ,QAAQ,OAAO,CAAC;AAC7C,iBAAO,IAAI,SAAS,OAAO,CAAC;AAC5B,iBAAO,cAAc,aAAa,QAAQ,OAAO,QAAQ,MAAM;AAC/D,iBAAO,IAAI,cAAc,OAAO,CAAC;AACjC,iBAAO,cAAc,OAAO,QAAQ,OAAO,aAAa,MAAM;AAC9D,iBAAO,IAAI,QAAQ,OAAO,CAAC;AAE3B,iBAAO,EAAE,SAAS,QAAQ,SAAS,GAAG,MAAM,SAAS,KAAK,OAAO;AAAA,QACnE;AAAA,QACA,KAAK,WAAW;AAEd,cAAI,SAAS,IAAI,IAAI,OAAO,GAAG;AAC/B,iBAAO,aAAa;AAGpB,iBAAO,aAAa;AACpB,cAAI,OAAO,QAAQ,MAAM;AACvB,kBAAM,IAAI,MAAM,wBAAwB;AAG1C,cAAI,SAAS,OAAO,WAAW,IAAI,WAAW,IAAI;AAClD;AAEE,gBAAI,IAAI;AACR,mBAAO,IAAI,OAAO,UAAU,OAAO,CAAC,MAAM,GAAM,EAAE;AAAE;AACpD,gBAAI,IAAI;AACN,uBAAS,OAAO,MAAM,CAAC;AAAA,UAC3B;AAGA,mBAAS,IAAI,IAAI,OAAO,IAAI;AAC5B,iBAAO,aAAa;AAGpB,cAAI,OAAO,QAAQ,MAAM;AACvB,kBAAM,IAAI,MAAM,4CAA4C;AAG9D,iBAAO,aAAa;AACpB,cAAI,OAAO,QAAQ,MAAM;AACvB,kBAAM,IAAI,MAAM,yBAAyB;AAG3C,mBAAS,IAAI,IAAI,OAAO,OAAO,WAAW,IAAI,aAAa,IAAI,CAAC;AAChE,gBAAM,UAAU,OAAO,WAAW,IAAI,aAAa,IAAI;AAQvD,gBAAM,UAAU,OAAO,KAAK,aAAa;AACzC,gBAAM,UAAU,OAAO;AAAA,YACrB,IAAI,QAAQ,SACV,IAAI,OAAO,SACX,KAAK,QAAQ,SAAS,OAAO;AAAA,UACjC;AACA,cAAI,MAAM;AAEV,kBAAQ,cAAc,QAAQ,QAAQ,OAAO,CAAC;AAC9C,kBAAQ,IAAI,SAAS,OAAO,CAAC;AAC7B,kBAAQ,cAAc,OAAO,QAAQ,OAAO,QAAQ,MAAM;AAC1D,kBAAQ,IAAI,QAAQ,OAAO,CAAC;AAC5B,kBAAQ;AAAA,YACN,QAAQ,SAAS,OAAO;AAAA,YACxB,OAAO,OAAO;AAAA,UAChB;AACA,kBAAQ,IAAI,SAAS,OAAO,CAAC;AAC7B,kBAAQ,IAAI,QAAQ,OAAO,QAAQ,MAAM;AAOzC,gBAAM,SAAS,OAAO;AAAA,YACpB,IAAI,QAAQ,SACV,IAAI,OAAO;AAAA,UACf;AACA,gBAAM;AAEN,iBAAO,cAAc,QAAQ,QAAQ,OAAO,CAAC;AAC7C,iBAAO,IAAI,SAAS,OAAO,CAAC;AAC5B,iBAAO,cAAc,OAAO,QAAQ,OAAO,QAAQ,MAAM;AACzD,iBAAO,IAAI,QAAQ,OAAO,CAAC;AAE3B,iBAAO,EAAE,SAAS,QAAQ,SAAS,GAAG,MAAM,SAAS,KAAK,OAAO;AAAA,QACnE;AAAA,MACF;AAAA,IACF;AAEA,aAAS,YAAY,SAAS,KAAK,MAAM,MAAM;AAC7C,UAAI,SAAS;AACb,UAAI;AACJ,UAAI,UAAU;AACd,UAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,YAAI,OAAO,KAAK,YAAY,YAAY,KAAK;AAC3C,oBAAU,KAAK;AACjB,YAAI,OAAO,KAAK,WAAW,YAAY,KAAK;AAC1C,mBAAS,KAAK;AAChB,YAAI,KAAK,YAAY;AACnB,cAAI;AACJ,cAAI,OAAO,KAAK,eAAe;AAC7B,yBAAa,OAAO,KAAK,KAAK,UAAU;AAAA,mBACjC,OAAO,SAAS,KAAK,UAAU;AACtC,yBAAa,KAAK;AAAA;AAElB,kBAAM,IAAI,MAAM,oBAAoB;AAEtC,cAAI,KAAK,WAAW;AAClB,kBAAM,IAAI,MAAM,qBAAqB;AACvC,gBAAM,SAAS,QAAQ,IAAI,KAAK,MAAM;AACtC,cAAI,WAAW;AACb,kBAAM,IAAI,MAAM,qBAAqB;AAEvC,cAAI,WAAW,OAAO;AACpB,gBAAI,SAAS;AACb,gBAAI,KAAK,WAAW,QAAW;AAC7B,kBAAI,CAAC,OAAO,UAAU,KAAK,MAAM;AAC/B,sBAAM,IAAI,UAAU,2BAA2B;AACjD,kBAAI,KAAK,SAAS;AAChB,yBAAS,KAAK;AAAA,YAClB;AAEA,kBAAM,MAAM,OAAO,YAAY,OAAO,SAAS,OAAO,KAAK;AAC3D,kBAAM,OAAO,YAAY,QAAQ;AACjC,kBAAM,IAAI;AAAA,cACR;AAAA,cACA,WAAW;AAAA,cACX;AAAA,cACA,KAAK;AAAA,cACL;AAAA,cACA,IAAI;AAAA,cACJ;AAAA,YACF;AACA,gBAAI,MAAM;AACR,qBAAO,IAAI,MAAM,+CAA+C;AAMlE,kBAAM,aAAa,OAAO,YAAY,IAAI,KAAK,SAAS,CAAC;AACzD;AACE,kBAAI,MAAM;AACV,yBAAW,cAAc,KAAK,QAAQ,OAAO,CAAC;AAC9C,yBAAW,IAAI,MAAM,OAAO,CAAC;AAC7B,yBAAW,cAAc,QAAQ,OAAO,KAAK,MAAM;AAAA,YACrD;AAEA,wBAAY;AAAA,cACV;AAAA,cACA,YAAY,KAAK;AAAA,cACjB,SAAS;AAAA,cACT;AAAA,cACA,KAAK,IAAI,MAAM,GAAG,OAAO,MAAM;AAAA,cAC/B,IAAI,IAAI,MAAM,OAAO,MAAM;AAAA,YAC7B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,cAAQ,QAAQ;AAAA,QACd,KAAK,OAAO;AACV,cAAI,aAAa;AACjB,cAAI;AAmBJ,gBAAM,aAAa,OAAO,KAAK,YAAY,UAAU,aAAa,MAAM;AACxE,gBAAM,UAAU,OAAO,KAAK,YAAY,UAAU,UAAU,MAAM;AAClE,gBAAM,aAAc,YAAY,UAAU,aAAa,OAAO,MAAM,CAAC;AACrE,gBAAM,WAAY,YAAY,UAAU,OAAO,WAAW;AAE1D,gBAAM,SAAS,UAAU,SAAS,KAAK,IAAI;AAE3C,gBAAM,WAAW,YAAY,CAAC;AAC9B,gBAAM,aAAa,OAAO,KAAK,OAAO;AACtC,gBAAM,cAAe,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,WAAW;AACjE,cAAI,UAAU,CAAC;AACf,mBAAS,IAAI,IAAK,cAAc,QAAQ,UAAU,UAAW,EAAE;AAC7D,oBAAQ,KAAK,IAAI,GAAI;AACvB,oBAAU,OAAO,KAAK,OAAO;AAE7B,cAAI,WAAW,OAAO,YAAY,cAAc,QAAQ,MAAM;AAC9D,cAAI;AACJ;AACE,gBAAI,MAAM;AACV,qBAAS,IAAI,UAAU,OAAO,CAAC;AAC/B,qBAAS,IAAI,UAAU,OAAO,CAAC;AAC/B,qBAAS,IAAI,OAAO,MAAM,OAAO,CAAC;AAClC,qBAAS,cAAc,WAAW,QAAQ,OAAO,OAAO,KAAK,MAAM;AACnE,qBAAS,IAAI,YAAY,OAAO,CAAC;AACjC,qBAAS,IAAI,SAAS,OAAO,WAAW,MAAM;AAAA,UAChD;AAEA,cAAI,WAAW;AACb,kBAAM,UAAU,EAAE,eAAe,UAAU,OAAO,QAAQ;AAC1D,kBAAM,SAAS;AAAA,cACb,UAAU,OAAO;AAAA,cACjB,UAAU;AAAA,cACV,UAAU;AAAA,cACV;AAAA,YACF;AACA,mBAAO,eAAe,KAAK;AAC3B,uBAAW,OAAO,OAAO,CAAE,OAAO,OAAO,QAAQ,GAAG,OAAO,MAAM,CAAE,CAAC;AACpE,gBAAI,UAAU,OAAO,UAAU;AAC7B,sBAAQ,OAAO,WAAW;AAAA;AAE1B,sBAAQ,OAAO,MAAM,CAAC;AACxB,sBAAU,IAAI,KAAK,CAAC;AACpB,sBAAU,GAAG,KAAK,CAAC;AAAA,UACrB,OAAO;AACL,oBAAQ,OAAO,MAAM,CAAC;AAAA,UACxB;AAEA,gBAAM,aAAa,OAAO,KAAK,kBAAkB;AACjD,gBAAM,UAAU,OAAO;AAAA,YACrB,WAAW,SACP,IAAI,WAAW,SACf,IAAI,QAAQ,SACZ,IAAI,WAAW,SACf,IACA,IAAI,OAAO,IAAI,SACf,IAAI,SAAS,SACb,MAAM;AAAA,UACZ;AACA;AACE,gBAAI,MAAM;AACV,oBAAQ,IAAI,YAAY,OAAO,CAAC;AAChC,oBAAQ,cAAc,WAAW,QAAQ,OAAO,WAAW,MAAM;AACjE,oBAAQ,IAAI,YAAY,OAAO,CAAC;AAChC,oBAAQ,cAAc,QAAQ,QAAQ,OAAO,WAAW,MAAM;AAC9D,oBAAQ,IAAI,SAAS,OAAO,CAAC;AAC7B,oBAAQ,cAAc,WAAW,QAAQ,OAAO,QAAQ,MAAM;AAC9D,oBAAQ,IAAI,YAAY,OAAO,CAAC;AAChC,oBAAQ,cAAc,GAAG,OAAO,WAAW,MAAM;AACjD,oBAAQ,cAAc,OAAO,IAAI,QAAQ,OAAO,CAAC;AACjD,oBAAQ,IAAI,OAAO,KAAK,OAAO,CAAC;AAChC,oBAAQ,cAAc,SAAS,QAAQ,OAAO,OAAO,IAAI,MAAM;AAC/D,oBAAQ,IAAI,UAAU,OAAO,CAAC;AAC9B,oBAAQ,IAAI,OAAO,OAAO,SAAS,MAAM;AAAA,UAC3C;AAEA;AACE,kBAAM,MAAM,QAAQ,YAAY,GAAG,QAAQ,MAAM;AACjD,gBAAI,YAAY,IAAI,QAAQ,UAAU,MAAM;AAC5C,gBAAI,IAAI,SAAS;AACf,2BAAa;AACf,0BAAc;AAAA,UAChB;AAEA;AACE,kBAAM,MAAM,OAAO,IAAI,YAAY,GAAG,OAAO,IAAI,MAAM;AACvD,wBAAY,GAAG,OAAO,OAAO,IAAI,GAAG,GAAG,UAAU,IAAI,OAAO,KAAK,EAAE;AAAA,UACrE;AAEA,wBAAc;AACd,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,QACA;AACE,gBAAM,IAAI,MAAM,2BAA2B;AAAA,MAC/C;AAAA,IACF;AAEA,aAAS,OAAO;AAAA,IAAC;AAEjB,WAAO,UAAU;AAAA,MACf,iBAAiB,CAAC,SAAS,MAAM,OAAO;AACtC,YAAI,OAAO,SAAS,YAAY;AAC9B,eAAK;AACL,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,OAAO;AAChB,eAAK;AACP,cAAM,OAAO,SAAS,SAAS,IAAI;AACnC,yBAAiB,GAAG,MAAM,CAAC,KAAK,KAAK,SAAS;AAC5C,cAAI;AACF,mBAAO,GAAG,GAAG;AACf,cAAI;AACJ,cAAI;AACF,kBAAM,YAAY,KAAK,CAAC,GAAG,KAAK,MAAM,IAAI;AAAA,UAC5C,SAAS,IAAI;AACX,mBAAO,GAAG,EAAE;AAAA,UACd;AACA,aAAG,MAAM,GAAG;AAAA,QACd,CAAC;AAAA,MACH;AAAA,MACA,qBAAqB,CAAC,SAAS,SAAS;AACtC,cAAM,OAAO,SAAS,SAAS,IAAI;AACnC,cAAM,EAAE,WAAW,KAAK,YAAY,KAAK,IAAI,qBAAqB,GAAG,IAAI;AACzE,eAAO,YAAY,KAAK,CAAC,GAAG,KAAK,MAAM,IAAI;AAAA,MAC7C;AAAA,IACF;AAAA;AAAA;;;ACrkBA,IAAAE,eAAA;AAAA;AAAA;AAEA,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM;AAAA,MACJ,aAAa;AAAA,MACb,cAAc;AAAA,IAChB,IAAI;AACJ,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,OAAO;AAAA,QACL;AAAA,QACA,GAAG;AAAA,QACH,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC3CA,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,EACA;AAAA,OACK;;;ACDA,IAAM,yBAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,UAAU,CAAC,MAAM;AAAA,EACnB;AACF;AAcA,eAAsB,yBACpB,MACA,eAC6D;AAC7D,QAAM,EAAE,MAAM,YAAY,MAAM,IAAI;AAEpC,MAAI;AACF,UAAM,QAAQ,MAAM,gBAAgB,eAAe,MAAM,SAAS;AAElE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,MAAM,KAAK,IAAI;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,+BAA+B,YAAY;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,eAAe,gBACb,KACA,SACA,WACmB;AACnB,QAAM,UAAU,MAAM,IAAI,UAAU,OAAO;AAC3C,QAAM,QAAkB,CAAC;AAEzB,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,aAAa;AACrB,YAAM,KAAK,GAAG,MAAM,IAAI,GAAG;AAC3B,UAAI,WAAW;AACb,cAAM,WAAW,GAAG,OAAO,IAAI,MAAM,IAAI,GAAG,QAAQ,QAAQ,GAAG;AAC/D,cAAM,WAAW,MAAM,gBAAgB,KAAK,UAAU,SAAS;AAC/D,cAAM,KAAK,GAAG,SAAS,IAAI,OAAK,GAAG,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;AAAA,MACvD;AAAA,IACF,OAAO;AACL,YAAM,KAAK,MAAM,IAAI;AAAA,IACvB;AAAA,EACF;AAEA,SAAO,MAAM,KAAK;AACpB;;;ACvFO,IAAM,8BAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,UAAU,CAAC,SAAS;AAAA,EACtB;AACF;AAsBA,eAAsB,8BACpB,MACA,eAC6D;AAC7D,QAAM,EAAE,SAAS,KAAK,UAAU,GAAG,IAAI;AAEvC,MAAI;AAEF,UAAM,cAAc,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK;AAEtD,UAAM,SAAS,MAAM,cAAc,gBAAgB,aAAa,OAAO;AAGvE,UAAM,SAA+B;AAAA,MACnC,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,MACf,UAAU,OAAO;AAAA,MACjB,UAAU,OAAO;AAAA,IACnB;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU;AAAA,YACnB,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,UAAU;AAAA,YACV,UAAU;AAAA,UACZ,GAAG,MAAM,CAAC;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACxFO,IAAM,wBAA8B;AAAA,EACzC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,MAAM,CAAC,SAAS,SAAS,QAAQ;AAAA,MACnC;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,UAAU,CAAC,MAAM;AAAA,EACnB;AACF;AAqBA,eAAsB,wBACpB,MACA,eAC6D;AAC7D,QAAM,EAAE,MAAM,WAAW,SAAS,UAAU,QAAQ,IAAI;AAExD,MAAI;AACF,UAAM,SAAS,MAAM,cAAc,SAAS,MAAM,UAAU,OAAO;AAEnE,UAAM,SAAyB;AAAA,MAC7B,SAAS,OAAO;AAAA,MAChB,MAAM,OAAO;AAAA,MACb,UAAU,OAAO;AAAA,IACnB;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU;AAAA,YACnB,OAAO;AAAA,YACP,SAAS;AAAA,YACT,MAAM;AAAA,YACN;AAAA,UACF,GAAG,MAAM,CAAC;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACpFO,IAAM,yBAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,MACX;AAAA,MACA,YAAY;AAAA,QACV,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,UAAU,CAAC,QAAQ,SAAS;AAAA,EAC9B;AACF;AAuBA,eAAsB,yBACpB,MACA,eAC6D;AAC7D,QAAM,EAAE,MAAM,SAAS,WAAW,SAAS,aAAa,OAAO,SAAS,MAAM,IAAI;AAElF,MAAI;AACF,UAAM,SAAS,MAAM,cAAc,UAAU,MAAM,SAAS;AAAA,MAC1D;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,SAA0B;AAAA,MAC9B,SAAS,OAAO;AAAA,MAChB,cAAc,OAAO;AAAA,MACrB,YAAY,OAAO;AAAA,IACrB;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU;AAAA,YACnB,SAAS;AAAA,YACT,cAAc;AAAA,YACd,OAAO;AAAA,UACT,GAAG,MAAM,CAAC;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACpGA,kBAAoC;AAO7B,IAAM,uBAAN,MAA2B;AAAA,EACxB;AAAA,EACA;AAAA,EACA,YAAqB;AAAA,EAE7B,YAAY,QAAmB;AAC7B,SAAK,SAAS;AACd,SAAK,SAAS,IAAI,mBAAO;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAyB;AAC7B,QAAI,KAAK,WAAW;AAClB;AAAA,IACF;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,WAAK,OACF,GAAG,SAAS,MAAM;AACjB,aAAK,YAAY;AACjB,gBAAQ;AAAA,MACV,CAAC,EACA,GAAG,SAAS,CAAC,QAAQ;AACpB,eAAO,GAAG;AAAA,MACZ,CAAC,EACA,QAAQ;AAAA,QACP,MAAM,KAAK,OAAO;AAAA,QAClB,MAAM,KAAK,OAAO,QAAQ;AAAA,QAC1B,UAAU,KAAK,OAAO;AAAA,QACtB,YAAY,KAAK,OAAO;AAAA,MAC1B,CAAC;AAAA,IACL,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,SAAkC;AAC3C,QAAI,CAAC,KAAK,WAAW;AACnB,YAAM,KAAK,QAAQ;AAAA,IACrB;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,WAAK,OAAO,KAAK,SAAS,CAAC,KAAK,WAAW;AACzC,YAAI,KAAK;AACP,iBAAO,GAAG;AACV;AAAA,QACF;AAEA,YAAI,SAAS;AACb,YAAI,SAAS;AAEb,eACG,GAAG,SAAS,CAAC,SAAiB;AAC7B,cAAI,SAAS,GAAG;AACd,mBAAO,IAAI,MAAM,4BAA4B,IAAI,KAAK,MAAM,EAAE,CAAC;AAAA,UACjE,OAAO;AACL,oBAAQ,MAAM;AAAA,UAChB;AAAA,QACF,CAAC,EACA,GAAG,QAAQ,CAAC,SAAiB;AAC5B,oBAAU,KAAK,SAAS;AAAA,QAC1B,CAAC,EACA,OAAO,GAAG,QAAQ,CAAC,SAAiB;AACnC,oBAAU,KAAK,SAAS;AAAA,QAC1B,CAAC;AAAA,MACL,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBACJ,SACA,iBAAyB,IACyD;AAClF,QAAI,CAAC,KAAK,WAAW;AACnB,YAAM,KAAK,QAAQ;AAAA,IACrB;AAEA,UAAM,cAAc,IAAI,QAA8D,CAAC,SAAS,WAAW;AACzG,WAAK,OAAO,KAAK,SAAS,CAAC,KAAK,WAAW;AACzC,YAAI,KAAK;AACP,iBAAO,GAAG;AACV;AAAA,QACF;AAEA,YAAI,SAAS;AACb,YAAI,SAAS;AAEb,eACG,GAAG,SAAS,CAAC,SAAiB;AAC7B,kBAAQ,EAAE,QAAQ,QAAQ,UAAU,KAAK,CAAC;AAAA,QAC5C,CAAC,EACA,GAAG,QAAQ,CAAC,SAAiB;AAC5B,oBAAU,KAAK,SAAS;AAAA,QAC1B,CAAC,EACA,OAAO,GAAG,QAAQ,CAAC,SAAiB;AACnC,oBAAU,KAAK,SAAS;AAAA,QAC1B,CAAC;AAAA,MACL,CAAC;AAAA,IACH,CAAC;AAED,UAAM,iBAAiB,IAAI,QAAe,CAAC,GAAG,WAAW;AACvD,iBAAW,MAAM;AACf,eAAO,IAAI,MAAM,6BAA6B,CAAC;AAAA,MACjD,GAAG,iBAAiB,GAAI;AAAA,IAC1B,CAAC;AAED,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,KAAK,CAAC,aAAa,cAAc,CAAC;AAC/D,aAAO,EAAE,GAAG,QAAQ,UAAU,MAAM;AAAA,IACtC,SAAS,OAAO;AACd,UAAI,iBAAiB,SAAS,MAAM,YAAY,+BAA+B;AAC7E,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,MACF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAgC;AACpC,QAAI,CAAC,KAAK,WAAW;AACnB,YAAM,KAAK,QAAQ;AAAA,IACrB;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,WAAK,OAAO,KAAK,CAAC,KAAK,SAAS;AAC9B,YAAI,KAAK;AACP,iBAAO,GAAG;AAAA,QACZ,OAAO;AACL,kBAAQ,IAAI;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,MAAsE;AACpF,UAAM,OAAO,MAAM,KAAK,QAAQ;AAEhC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,WAAK,QAAQ,MAAM,CAAC,KAAK,SAAS;AAChC,YAAI,KAAK;AACP,iBAAO,GAAG;AACV;AAAA,QACF;AAEA,cAAM,QAAQ,KAAK,IAAI,CAAC,UAAU;AAAA,UAChC,MAAM,KAAK;AAAA,UACX,aAAa,KAAK,MAAM,YAAY;AAAA,QACtC,EAAE;AAEF,gBAAQ,KAAK;AAAA,MACf,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SACJ,MACA,WAAmB,SACnB,UAAkB,SAC4C;AAC9D,UAAM,OAAO,MAAM,KAAK,QAAQ;AAEhC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAEtC,WAAK,KAAK,MAAM,CAAC,KAAK,UAAU;AAC9B,YAAI,KAAK;AACP,iBAAO,IAAI,MAAM,mCAAmC,IAAI,EAAE,CAAC;AAC3D;AAAA,QACF;AAEA,YAAI,MAAM,OAAO,SAAS;AACxB,iBAAO,IAAI,MAAM,mBAAmB,MAAM,IAAI,gBAAgB,OAAO,SAAS,CAAC;AAC/E;AAAA,QACF;AAGA,aAAK,SAAS,MAAM,EAAE,SAAqC,GAAG,CAACC,MAAK,SAAS;AAC3E,cAAIA,MAAK;AACP,mBAAO,IAAI,MAAM,wBAAwBA,KAAI,OAAO,EAAE,CAAC;AACvD;AAAA,UACF;AAEA,kBAAQ;AAAA,YACN,SAAS,KAAK,SAAS;AAAA,YACvB,MAAM,MAAM;AAAA,YACZ;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UACJ,MACA,SACA,UAII,CAAC,GACqE;AAC1E,UAAM,EAAE,WAAW,SAAS,aAAa,OAAO,SAAS,MAAM,IAAI;AACnE,UAAM,OAAO,MAAM,KAAK,QAAQ;AAEhC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,iBAAiB,MAAM;AAE3B,YAAI,QAAQ;AACV,gBAAM,aAAa,GAAG,IAAI;AAC1B,eAAK,OAAO,MAAM,YAAY,CAAC,QAAQ;AACrC,gBAAI,OAAO,IAAI,YAAY,gBAAgB;AAEzC,qBAAO,IAAI,MAAM,4BAA4B,IAAI,OAAO,EAAE,CAAC;AAC3D;AAAA,YACF;AAGA,yBAAa,UAAU;AAAA,UACzB,CAAC;AAAA,QACH,OAAO;AACL,uBAAa;AAAA,QACf;AAAA,MACF;AAEA,YAAM,eAAe,CAAC,eAAwB;AAC5C,cAAM,SAAS,OAAO,KAAK,SAAS,QAA0B;AAC9D,cAAM,WAAW,GAAG,IAAI;AAGxB,aAAK,UAAU,UAAU,QAAQ,CAAC,QAAQ;AACxC,cAAI,KAAK;AACP,mBAAO,IAAI,MAAM,yBAAyB,IAAI,OAAO,EAAE,CAAC;AACxD;AAAA,UACF;AAGA,eAAK,OAAO,UAAU,MAAM,CAACA,SAAQ;AACnC,gBAAIA,MAAK;AACP,qBAAO,IAAI,MAAM,+BAA+BA,KAAI,OAAO,EAAE,CAAC;AAC9D;AAAA,YACF;AAEA,oBAAQ;AAAA,cACN,SAAS;AAAA,cACT,cAAc,OAAO;AAAA,cACrB;AAAA,YACF,CAAC;AAAA,UACH,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAGA,UAAI,YAAY;AACd,cAAM,UAAU,KAAK,UAAU,GAAG,KAAK,YAAY,GAAG,CAAC;AACvD,aAAK,KAAK,YAAY,OAAO,EAAE,EAAE,KAAK,MAAM;AAC1C,yBAAe;AAAA,QACjB,CAAC,EAAE,MAAM,MAAM;AAAA,MACjB,OAAO;AACL,uBAAe;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,aAAmB;AACjB,QAAI,KAAK,WAAW;AAClB,WAAK,OAAO,IAAI;AAChB,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAuB;AACrB,WAAO,KAAK;AAAA,EACd;AACF;;;AL/RA,eAAsB,aAAa,cAA6C;AAE9E,QAAM,gBAAgB,IAAI,qBAAqB,aAAa,GAAG;AAG/D,QAAM,cAAc,QAAQ;AAE5B,QAAM,SAAS,IAAI;AAAA,IACjB;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA;AAAA,MACE,cAAc;AAAA,QACZ,OAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAGA,SAAO,kBAAkB,wBAAwB,aAAa;AAAA,IAC5D,OAAO,CAAC,wBAAwB,6BAA6B,uBAAuB,sBAAsB;AAAA,EAC5G,EAAE;AAEF,SAAO,kBAAkB,uBAAuB,OAAO,YAAY;AACjE,QAAI,QAAQ,OAAO,SAAS,yBAAyB;AAEnD,aAAO,MAAM,yBAAyB,QAAQ,OAAO,WAAW,aAAa;AAAA,IAC/E;AACA,QAAI,QAAQ,OAAO,SAAS,8BAA8B;AACxD,aAAO,MAAM,8BAA8B,QAAQ,OAAO,WAAW,aAAa;AAAA,IACpF;AACA,QAAI,QAAQ,OAAO,SAAS,wBAAwB;AAClD,aAAO,MAAM,wBAAwB,QAAQ,OAAO,WAAW,aAAa;AAAA,IAC9E;AACA,QAAI,QAAQ,OAAO,SAAS,yBAAyB;AACnD,aAAO,MAAM,yBAAyB,QAAQ,OAAO,WAAW,aAAa;AAAA,IAC/E;AACA,UAAM,IAAI,MAAM,iBAAiB,QAAQ,OAAO,IAAI,EAAE;AAAA,EACxD,CAAC;AAGD,UAAQ,GAAG,UAAU,MAAM;AACzB,kBAAc,WAAW;AACzB,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AAED,UAAQ,GAAG,WAAW,MAAM;AAC1B,kBAAc,WAAW;AACzB,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AAED,SAAO;AACT;",
|
|
6
|
-
"names": ["
|
|
3
|
+
"sources": ["../src/server-factory.ts", "../src/tools/acp-remote-list-files.ts", "../src/utils/logger.ts", "../src/tools/acp-remote-execute-command.ts", "../src/tools/acp-remote-read-file.ts", "../src/tools/acp-remote-write-file.ts", "../src/utils/ssh-connection.ts"],
|
|
4
|
+
"sourcesContent": ["import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { config } from './config.js';\nimport { acpRemoteListFilesTool, handleAcpRemoteListFiles } from './tools/acp-remote-list-files.js';\nimport { acpRemoteExecuteCommandTool, handleAcpRemoteExecuteCommand } from './tools/acp-remote-execute-command.js';\nimport { acpRemoteReadFileTool, handleAcpRemoteReadFile } from './tools/acp-remote-read-file.js';\nimport { acpRemoteWriteFileTool, handleAcpRemoteWriteFile } from './tools/acp-remote-write-file.js';\nimport { ServerConfig } from './types/ssh-config.js';\nimport { SSHConnectionManager } from './utils/ssh-connection.js';\nimport { logger } from './utils/logger.js';\n\n/**\n * Create an MCP server instance for a specific user with SSH configuration\n * This factory function is used by mcp-auth for multi-tenant support\n * \n * @param serverConfig - Configuration including userId and SSH credentials\n * @returns Configured MCP Server instance\n */\nexport async function createServer(serverConfig: ServerConfig): Promise<Server> {\n logger.info('Creating server instance', { userId: serverConfig.userId });\n logger.debug('SSH configuration', {\n host: serverConfig.ssh.host,\n port: serverConfig.ssh.port,\n username: serverConfig.ssh.username,\n });\n \n // Create SSH connection manager\n const sshConnection = new SSHConnectionManager(serverConfig.ssh);\n \n // Connect to remote server\n await sshConnection.connect();\n \n logger.info('Server created successfully', { userId: serverConfig.userId });\n\n const server = new Server(\n {\n name: 'acp-mcp',\n version: '0.1.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n // Register tools with SSH connection context\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n logger.debug('Tool discovery requested', { userId: serverConfig.userId });\n const tools = [acpRemoteListFilesTool, acpRemoteExecuteCommandTool, acpRemoteReadFileTool, acpRemoteWriteFileTool];\n logger.debug(`Returning ${tools.length} tools`, { tools: tools.map(t => t.name), userId: serverConfig.userId });\n return { tools };\n });\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const startTime = Date.now();\n logger.toolInvoked(request.params.name, request.params.arguments, serverConfig.userId);\n \n try {\n let result;\n \n if (request.params.name === 'acp_remote_list_files') {\n // Pass SSH connection to handler for remote operations\n result = await handleAcpRemoteListFiles(request.params.arguments, sshConnection);\n } else if (request.params.name === 'acp_remote_execute_command') {\n result = await handleAcpRemoteExecuteCommand(request.params.arguments, sshConnection);\n } else if (request.params.name === 'acp_remote_read_file') {\n result = await handleAcpRemoteReadFile(request.params.arguments, sshConnection);\n } else if (request.params.name === 'acp_remote_write_file') {\n result = await handleAcpRemoteWriteFile(request.params.arguments, sshConnection);\n } else {\n throw new Error(`Unknown tool: ${request.params.name}`);\n }\n \n const duration = Date.now() - startTime;\n const resultSize = JSON.stringify(result).length;\n logger.toolCompleted(request.params.name, duration, resultSize);\n \n return result;\n } catch (error) {\n logger.toolFailed(request.params.name, error as Error, request.params.arguments);\n throw error;\n }\n });\n\n // Handle server shutdown to cleanup SSH connection\n process.on('SIGINT', () => {\n logger.info('Received SIGINT, shutting down', { userId: serverConfig.userId });\n sshConnection.disconnect();\n process.exit(0);\n });\n\n process.on('SIGTERM', () => {\n logger.info('Received SIGTERM, shutting down', { userId: serverConfig.userId });\n sshConnection.disconnect();\n process.exit(0);\n });\n\n return server;\n}\n", "import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { SSHConnectionManager } from '../utils/ssh-connection.js';\n\nexport const acpRemoteListFilesTool: Tool = {\n name: 'acp_remote_list_files',\n description: 'List files and directories in a specified path on the remote machine via SSH',\n inputSchema: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n description: 'The directory path to list files from',\n },\n recursive: {\n type: 'boolean',\n description: 'Whether to list files recursively',\n default: false,\n },\n },\n required: ['path'],\n },\n};\n\ninterface ListFilesArgs {\n path: string;\n recursive?: boolean;\n}\n\n/**\n * Handle the acp_remote_list_files tool invocation\n * Lists files and directories at the specified path on the remote machine via SSH\n * \n * @param args - Tool arguments containing path and recursive flag\n * @param sshConnection - SSH connection manager for remote operations\n */\nexport async function handleAcpRemoteListFiles(\n args: any,\n sshConnection: SSHConnectionManager\n): Promise<{ content: Array<{ type: string; text: string }> }> {\n const { path, recursive = false } = args as ListFilesArgs;\n\n try {\n const files = await listRemoteFiles(sshConnection, path, recursive);\n \n return {\n content: [\n {\n type: 'text',\n text: files.join('\\n'),\n },\n ],\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: `Error listing remote files: ${errorMessage}`,\n },\n ],\n };\n }\n}\n\n/**\n * Recursively list files in a remote directory via SSH\n * Returns absolute paths for compatibility with acp_remote_read_file\n */\nasync function listRemoteFiles(\n ssh: SSHConnectionManager,\n dirPath: string,\n recursive: boolean\n): Promise<string[]> {\n const entries = await ssh.listFiles(dirPath);\n const files: string[] = [];\n\n for (const entry of entries) {\n // Construct absolute path by combining dirPath with entry name\n const fullPath = `${dirPath}/${entry.name}`.replace(/\\/+/g, '/');\n \n if (entry.isDirectory) {\n files.push(`${fullPath}/`); // Return absolute path with trailing slash\n if (recursive) {\n const subFiles = await listRemoteFiles(ssh, fullPath, recursive);\n files.push(...subFiles); // Sub-files already have absolute paths\n }\n } else {\n files.push(fullPath); // Return absolute path\n }\n }\n\n return files.sort();\n}\n", "/**\n * Logger utility for ACP MCP Server\n * Provides structured logging with configurable log levels\n */\n\nexport type LogLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace';\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n trace: 4,\n};\n\nclass Logger {\n private level: LogLevel;\n private enabled: boolean;\n\n constructor() {\n // Read configuration from environment variables\n this.level = (process.env.ACP_MCP_LOG_LEVEL as LogLevel) || 'info';\n this.enabled = process.env.ACP_MCP_DEBUG === 'true' || process.env.NODE_ENV === 'development';\n }\n\n private shouldLog(level: LogLevel): boolean {\n if (!this.enabled && level !== 'error' && level !== 'warn') {\n return false;\n }\n return LOG_LEVELS[level] <= LOG_LEVELS[this.level];\n }\n\n private formatMessage(level: LogLevel, message: string, data?: any): string {\n const timestamp = new Date().toISOString();\n const prefix = `[${timestamp}] [${level.toUpperCase()}]`;\n \n if (data !== undefined) {\n const dataStr = typeof data === 'object' ? JSON.stringify(data, null, 2) : String(data);\n return `${prefix} ${message}\\n${dataStr}`;\n }\n \n return `${prefix} ${message}`;\n }\n\n error(message: string, data?: any): void {\n if (this.shouldLog('error')) {\n console.error(this.formatMessage('error', message, data));\n }\n }\n\n warn(message: string, data?: any): void {\n if (this.shouldLog('warn')) {\n console.error(this.formatMessage('warn', message, data));\n }\n }\n\n info(message: string, data?: any): void {\n if (this.shouldLog('info')) {\n console.error(this.formatMessage('info', message, data));\n }\n }\n\n debug(message: string, data?: any): void {\n if (this.shouldLog('debug')) {\n console.error(this.formatMessage('debug', message, data));\n }\n }\n\n trace(message: string, data?: any): void {\n if (this.shouldLog('trace')) {\n console.error(this.formatMessage('trace', message, data));\n }\n }\n\n /**\n * Log tool invocation with parameters\n */\n toolInvoked(toolName: string, params: any, userId?: string): void {\n this.info(`Tool invoked: ${toolName}`);\n this.debug('Tool parameters', { tool: toolName, params, userId });\n }\n\n /**\n * Log tool completion with result summary\n */\n toolCompleted(toolName: string, duration: number, resultSize?: number): void {\n this.info(`Tool completed: ${toolName}`);\n this.debug('Tool performance', { tool: toolName, duration: `${duration}ms`, resultSize });\n }\n\n /**\n * Log tool failure with error details\n */\n toolFailed(toolName: string, error: Error, params?: any): void {\n this.error(`Tool execution failed: ${toolName}`, {\n tool: toolName,\n error: error.message,\n stack: error.stack,\n params,\n });\n }\n\n /**\n * Log SSH command execution\n */\n sshCommand(command: string, cwd?: string, timeout?: number): void {\n this.debug('Executing SSH command', { command, cwd, timeout });\n }\n\n /**\n * Log SSH command result\n */\n sshCommandResult(exitCode: number, duration: number, stdoutSize: number, stderrSize: number): void {\n this.debug('SSH command completed', {\n exitCode,\n duration: `${duration}ms`,\n stdout: `${stdoutSize} bytes`,\n stderr: `${stderrSize} bytes`,\n });\n }\n\n /**\n * Log file operation\n */\n fileOperation(operation: string, path: string, details?: any): void {\n this.info(`File operation: ${operation}`, { path, ...details });\n }\n}\n\n// Export singleton instance\nexport const logger = new Logger();\n", "import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { SSHConnectionManager } from '../utils/ssh-connection.js';\nimport { logger } from '../utils/logger.js';\n\nexport const acpRemoteExecuteCommandTool: Tool = {\n name: 'acp_remote_execute_command',\n description: 'Execute a shell command on the remote machine via SSH',\n inputSchema: {\n type: 'object',\n properties: {\n command: {\n type: 'string',\n description: 'Shell command to execute',\n },\n cwd: {\n type: 'string',\n description: 'Working directory for command execution (optional)',\n },\n timeout: {\n type: 'number',\n description: 'Timeout in seconds (default: 30)',\n default: 30,\n },\n },\n required: ['command'],\n },\n};\n\ninterface ExecuteCommandArgs {\n command: string;\n cwd?: string;\n timeout?: number;\n}\n\ninterface ExecuteCommandResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n timedOut: boolean;\n}\n\n/**\n * Handle the acp_remote_execute_command tool invocation\n * Executes a shell command on the remote machine via SSH\n * \n * @param args - Tool arguments containing command, cwd, and timeout\n * @param sshConnection - SSH connection manager for remote operations\n */\nexport async function handleAcpRemoteExecuteCommand(\n args: any,\n sshConnection: SSHConnectionManager\n): Promise<{ content: Array<{ type: string; text: string }> }> {\n const { command, cwd, timeout = 30 } = args as ExecuteCommandArgs;\n\n logger.debug('Executing remote command', { command, cwd, timeout });\n\n try {\n // Build command with working directory if specified\n const fullCommand = cwd ? `cd ${cwd} && ${command}` : command;\n \n const result = await sshConnection.execWithTimeout(fullCommand, timeout);\n \n logger.debug('Command execution result', {\n exitCode: result.exitCode,\n timedOut: result.timedOut,\n stdoutLength: result.stdout.length,\n stderrLength: result.stderr.length,\n });\n \n // Format output as JSON for structured response\n const output: ExecuteCommandResult = {\n stdout: result.stdout,\n stderr: result.stderr,\n exitCode: result.exitCode,\n timedOut: result.timedOut,\n };\n \n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(output, null, 2),\n },\n ],\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error('Command execution error', { command, error: errorMessage });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n stdout: '',\n stderr: errorMessage,\n exitCode: 1,\n timedOut: false,\n }, null, 2),\n },\n ],\n };\n }\n}\n", "import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { SSHConnectionManager } from '../utils/ssh-connection.js';\nimport { logger } from '../utils/logger.js';\n\nexport const acpRemoteReadFileTool: Tool = {\n name: 'acp_remote_read_file',\n description: 'Read file contents from the remote machine via SSH',\n inputSchema: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n description: 'Absolute path to file',\n },\n encoding: {\n type: 'string',\n description: 'File encoding (default: utf-8)',\n default: 'utf-8',\n enum: ['utf-8', 'ascii', 'base64'],\n },\n maxSize: {\n type: 'number',\n description: 'Max file size in bytes (default: 1MB)',\n default: 1048576,\n },\n },\n required: ['path'],\n },\n};\n\ninterface ReadFileArgs {\n path: string;\n encoding?: string;\n maxSize?: number;\n}\n\ninterface ReadFileResult {\n content: string;\n size: number;\n encoding: string;\n}\n\n/**\n * Handle the acp_remote_read_file tool invocation\n * Reads file contents from the remote machine via SSH\n * \n * @param args - Tool arguments containing path, encoding, and maxSize\n * @param sshConnection - SSH connection manager for remote operations\n */\nexport async function handleAcpRemoteReadFile(\n args: any,\n sshConnection: SSHConnectionManager\n): Promise<{ content: Array<{ type: string; text: string }> }> {\n const { path, encoding = 'utf-8', maxSize = 1048576 } = args as ReadFileArgs;\n\n logger.debug('Reading remote file', { path, encoding, maxSize });\n\n try {\n const result = await sshConnection.readFile(path, encoding, maxSize);\n \n logger.debug('File read successful', { path, size: result.size });\n \n const output: ReadFileResult = {\n content: result.content,\n size: result.size,\n encoding: result.encoding,\n };\n \n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(output, null, 2),\n },\n ],\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error('File read error', { path, error: errorMessage });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n error: errorMessage,\n content: '',\n size: 0,\n encoding,\n }, null, 2),\n },\n ],\n };\n }\n}\n", "import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { SSHConnectionManager } from '../utils/ssh-connection.js';\nimport { logger } from '../utils/logger.js';\n\nexport const acpRemoteWriteFileTool: Tool = {\n name: 'acp_remote_write_file',\n description: 'Write file contents to the remote machine via SSH',\n inputSchema: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n description: 'Absolute path to file',\n },\n content: {\n type: 'string',\n description: 'File contents to write',\n },\n encoding: {\n type: 'string',\n description: 'File encoding (default: utf-8)',\n default: 'utf-8',\n },\n createDirs: {\n type: 'boolean',\n description: 'Create parent directories if they don\\'t exist (default: false)',\n default: false,\n },\n backup: {\n type: 'boolean',\n description: 'Backup existing file before overwriting (default: false)',\n default: false,\n },\n },\n required: ['path', 'content'],\n },\n};\n\ninterface WriteFileArgs {\n path: string;\n content: string;\n encoding?: string;\n createDirs?: boolean;\n backup?: boolean;\n}\n\ninterface WriteFileResult {\n success: boolean;\n bytesWritten: number;\n backupPath?: string;\n}\n\n/**\n * Handle the acp_remote_write_file tool invocation\n * Writes file contents to the remote machine via SSH\n * \n * @param args - Tool arguments containing path, content, and options\n * @param sshConnection - SSH connection manager for remote operations\n */\nexport async function handleAcpRemoteWriteFile(\n args: any,\n sshConnection: SSHConnectionManager\n): Promise<{ content: Array<{ type: string; text: string }> }> {\n const { path, content, encoding = 'utf-8', createDirs = false, backup = false } = args as WriteFileArgs;\n\n logger.debug('Writing remote file', { path, contentSize: content.length, encoding, createDirs, backup });\n\n try {\n const result = await sshConnection.writeFile(path, content, {\n encoding,\n createDirs,\n backup,\n });\n \n logger.debug('File write successful', { path, bytesWritten: result.bytesWritten, backupPath: result.backupPath });\n \n const output: WriteFileResult = {\n success: result.success,\n bytesWritten: result.bytesWritten,\n backupPath: result.backupPath,\n };\n \n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(output, null, 2),\n },\n ],\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error('File write error', { path, error: errorMessage });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n success: false,\n bytesWritten: 0,\n error: errorMessage,\n }, null, 2),\n },\n ],\n };\n }\n}\n", "import { Client, SFTPWrapper } from 'ssh2';\nimport { SSHConfig } from '../types/ssh-config.js';\nimport { logger } from './logger.js';\n\n/**\n * SSH Connection Manager\n * Manages SSH connections and provides SFTP access for remote file operations\n */\nexport class SSHConnectionManager {\n private client: Client;\n private config: SSHConfig;\n private connected: boolean = false;\n\n constructor(config: SSHConfig) {\n this.config = config;\n this.client = new Client();\n }\n\n /**\n * Connect to the remote SSH server\n */\n async connect(): Promise<void> {\n if (this.connected) {\n logger.debug('SSH connection already established');\n return;\n }\n\n logger.info('Connecting to SSH server', {\n host: this.config.host,\n port: this.config.port || 22,\n username: this.config.username,\n });\n\n return new Promise((resolve, reject) => {\n this.client\n .on('ready', () => {\n this.connected = true;\n logger.info('SSH connection established', {\n host: this.config.host,\n username: this.config.username,\n });\n resolve();\n })\n .on('error', (err) => {\n logger.error('SSH connection failed', {\n host: this.config.host,\n error: err.message,\n });\n reject(err);\n })\n .connect({\n host: this.config.host,\n port: this.config.port || 22,\n username: this.config.username,\n privateKey: this.config.privateKey,\n });\n });\n }\n\n /**\n * Execute a command on the remote server\n */\n async exec(command: string): Promise<string> {\n if (!this.connected) {\n await this.connect();\n }\n\n return new Promise((resolve, reject) => {\n this.client.exec(command, (err, stream) => {\n if (err) {\n reject(err);\n return;\n }\n\n let stdout = '';\n let stderr = '';\n\n stream\n .on('close', (code: number) => {\n if (code !== 0) {\n reject(new Error(`Command failed with code ${code}: ${stderr}`));\n } else {\n resolve(stdout);\n }\n })\n .on('data', (data: Buffer) => {\n stdout += data.toString();\n })\n .stderr.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n });\n });\n }\n\n /**\n * Execute a command on the remote server with timeout support\n */\n async execWithTimeout(\n command: string,\n timeoutSeconds: number = 30\n ): Promise<{ stdout: string; stderr: string; exitCode: number; timedOut: boolean }> {\n if (!this.connected) {\n await this.connect();\n }\n\n const startTime = Date.now();\n logger.sshCommand(command, undefined, timeoutSeconds);\n\n const execPromise = new Promise<{ stdout: string; stderr: string; exitCode: number }>((resolve, reject) => {\n this.client.exec(command, (err, stream) => {\n if (err) {\n reject(err);\n return;\n }\n\n let stdout = '';\n let stderr = '';\n\n stream\n .on('close', (code: number) => {\n const duration = Date.now() - startTime;\n logger.sshCommandResult(code, duration, stdout.length, stderr.length);\n resolve({ stdout, stderr, exitCode: code });\n })\n .on('data', (data: Buffer) => {\n stdout += data.toString();\n })\n .stderr.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n });\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Command execution timed out'));\n }, timeoutSeconds * 1000);\n });\n\n try {\n const result = await Promise.race([execPromise, timeoutPromise]);\n return { ...result, timedOut: false };\n } catch (error) {\n if (error instanceof Error && error.message === 'Command execution timed out') {\n logger.warn('SSH command timed out', { command, timeout: timeoutSeconds });\n return {\n stdout: '',\n stderr: 'Command execution timed out',\n exitCode: 124,\n timedOut: true,\n };\n }\n logger.error('SSH command execution failed', {\n command,\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n }\n\n /**\n * Get SFTP wrapper for file operations\n */\n async getSFTP(): Promise<SFTPWrapper> {\n if (!this.connected) {\n await this.connect();\n }\n\n return new Promise((resolve, reject) => {\n this.client.sftp((err, sftp) => {\n if (err) {\n reject(err);\n } else {\n resolve(sftp);\n }\n });\n });\n }\n\n /**\n * List files in a directory using SFTP\n */\n async listFiles(path: string): Promise<Array<{ name: string; isDirectory: boolean }>> {\n const sftp = await this.getSFTP();\n\n return new Promise((resolve, reject) => {\n sftp.readdir(path, (err, list) => {\n if (err) {\n reject(err);\n return;\n }\n\n const files = list.map((item) => ({\n name: item.filename,\n isDirectory: item.attrs.isDirectory(),\n }));\n\n resolve(files);\n });\n });\n }\n\n /**\n * Read file contents from remote machine\n */\n async readFile(\n path: string,\n encoding: string = 'utf-8',\n maxSize: number = 1048576\n ): Promise<{ content: string; size: number; encoding: string }> {\n const startTime = Date.now();\n logger.fileOperation('read', path, { encoding, maxSize });\n \n const sftp = await this.getSFTP();\n\n return new Promise((resolve, reject) => {\n // First, get file stats to check size\n sftp.stat(path, (err, stats) => {\n if (err) {\n logger.error('File stat failed', { path, error: err.message });\n reject(new Error(`File not found or inaccessible: ${path}`));\n return;\n }\n\n logger.debug('File stat retrieved', { path, size: stats.size });\n\n if (stats.size > maxSize) {\n logger.warn('File too large', { path, size: stats.size, maxSize });\n reject(new Error(`File too large: ${stats.size} bytes (max: ${maxSize} bytes)`));\n return;\n }\n\n // Read file contents\n sftp.readFile(path, { encoding: encoding as BufferEncoding }, (err, data) => {\n if (err) {\n logger.error('File read failed', { path, error: err.message });\n reject(new Error(`Failed to read file: ${err.message}`));\n return;\n }\n\n const duration = Date.now() - startTime;\n logger.debug('File read completed', { path, size: stats.size, duration: `${duration}ms` });\n\n resolve({\n content: data.toString(),\n size: stats.size,\n encoding,\n });\n });\n });\n });\n }\n\n /**\n * Write file contents to remote machine\n */\n async writeFile(\n path: string,\n content: string,\n options: {\n encoding?: string;\n createDirs?: boolean;\n backup?: boolean;\n } = {}\n ): Promise<{ success: boolean; bytesWritten: number; backupPath?: string }> {\n const { encoding = 'utf-8', createDirs = false, backup = false } = options;\n const startTime = Date.now();\n \n logger.fileOperation('write', path, {\n contentSize: content.length,\n encoding,\n createDirs,\n backup,\n });\n \n const sftp = await this.getSFTP();\n\n return new Promise((resolve, reject) => {\n const writeOperation = () => {\n // Create backup if requested\n if (backup) {\n const backupPath = `${path}.backup`;\n sftp.rename(path, backupPath, (err) => {\n if (err && err.message !== 'No such file') {\n // Ignore \"no such file\" error (file doesn't exist yet)\n reject(new Error(`Failed to create backup: ${err.message}`));\n return;\n }\n \n // Write file\n performWrite(backupPath);\n });\n } else {\n performWrite();\n }\n };\n\n const performWrite = (backupPath?: string) => {\n const buffer = Buffer.from(content, encoding as BufferEncoding);\n const tempPath = `${path}.tmp`;\n\n // Write to temp file first (atomic write)\n sftp.writeFile(tempPath, buffer, (err) => {\n if (err) {\n reject(new Error(`Failed to write file: ${err.message}`));\n return;\n }\n\n // Rename temp file to target (atomic operation)\n sftp.rename(tempPath, path, (err) => {\n if (err) {\n logger.error('File rename failed', { tempPath, path, error: err.message });\n reject(new Error(`Failed to rename temp file: ${err.message}`));\n return;\n }\n\n const duration = Date.now() - startTime;\n logger.debug('File write completed', {\n path,\n bytesWritten: buffer.length,\n duration: `${duration}ms`,\n backupPath,\n });\n\n resolve({\n success: true,\n bytesWritten: buffer.length,\n backupPath,\n });\n });\n });\n };\n\n // Create parent directories if requested\n if (createDirs) {\n const dirPath = path.substring(0, path.lastIndexOf('/'));\n this.exec(`mkdir -p ${dirPath}`).then(() => {\n writeOperation();\n }).catch(reject);\n } else {\n writeOperation();\n }\n });\n }\n\n /**\n * Disconnect from the SSH server\n */\n disconnect(): void {\n if (this.connected) {\n logger.info('Disconnecting from SSH server', {\n host: this.config.host,\n username: this.config.username,\n });\n this.client.end();\n this.connected = false;\n }\n }\n\n /**\n * Check if connected\n */\n isConnected(): boolean {\n return this.connected;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["err"]
|
|
7
7
|
}
|