UNPKG

knex-firebird-dialect

Version:
167 lines (165 loc) 22.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _readOnlyError2 = _interopRequireDefault(require("@babel/runtime/helpers/readOnlyError")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _querycompiler = _interopRequireDefault(require("knex/lib/query/querycompiler")); function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } // Firebird Query Builder & Compiler var identity = require("lodash/identity"); var reduce = require("lodash/reduce"); var QueryCompiler_Firebird = /*#__PURE__*/function (_QueryCompiler) { function QueryCompiler_Firebird() { (0, _classCallCheck2["default"])(this, QueryCompiler_Firebird); return _callSuper(this, QueryCompiler_Firebird, arguments); } (0, _inherits2["default"])(QueryCompiler_Firebird, _QueryCompiler); return (0, _createClass2["default"])(QueryCompiler_Firebird, [{ key: "columns", value: function columns() { var distinctClause = ""; if (this.onlyUnions()) { return ""; } var hints = this._hintComments(); var columns = this.grouped.columns || []; var i = -1, sql = []; if (columns) { while (++i < columns.length) { var stmt = columns[i]; if (stmt.distinct) distinctClause = "distinct "; if (stmt.distinctOn) { distinctClause = this.distinctOn(stmt.value); continue; } if (stmt.type === "aggregate") { var _sql; (_sql = sql).push.apply(_sql, (0, _toConsumableArray2["default"])(this.aggregate(stmt))); } else if (stmt.type === "aggregateRaw") { sql.push(this.aggregateRaw(stmt)); } else if (stmt.type === "analytic") { sql.push(this.analytic(stmt)); } else if (stmt.value && stmt.value.length > 0) { sql.push(this.formatter.columnize(stmt.value)); } } } if (sql.length === 0) sql = ["*"]; return "select ".concat(this._limit(), " ").concat(this._offset(), " ").concat(hints).concat(distinctClause) + sql.join(", ") + (this.tableName ? " from ".concat(this.single.only ? "only " : "").concat(this.tableName) : ""); } }, { key: "_limit", value: function _limit() { return _superPropGet(QueryCompiler_Firebird, "limit", this, 3)([]).replace("limit", "first"); } }, { key: "_offset", value: function _offset() { return _superPropGet(QueryCompiler_Firebird, "offset", this, 3)([]).replace("offset", "skip"); } }, { key: "offset", value: function offset() { return ""; } }, { key: "limit", value: function limit() { return ""; } }, { key: "truncate", value: function truncate() { throw new Error("Truncate SQL command does not exists in Firebird."); } }, { key: "insert", value: function insert() { var sql = _superPropGet(QueryCompiler_Firebird, "insert", this, 3)([]); if (sql === "") return sql; var returning = this.single.returning; if (returning) sql += this._returning(returning); return { sql: sql, returning: returning }; } }, { key: "_returning", value: function _returning(value) { return value ? " returning ".concat(this.formatter.columnize(value)) : ""; } }, { key: "_prepInsert", value: function _prepInsert(insertValues) { if (Array.isArray(insertValues)) { if (insertValues.length !== 1) { throw new Error("Firebird does not support multiple insertions."); } insertValues = insertValues[0]; } var newValue = {}; for (var key in insertValues) { if (Object.prototype.hasOwnProperty.call(insertValues, key)) { var value = insertValues[key]; if (typeof value !== "undefined") { newValue[key] = value; } } } return _superPropGet(QueryCompiler_Firebird, "_prepInsert", this, 3)([newValue]); } }, { key: "columnInfo", value: function columnInfo() { var column = this.getColumnName(this.single.columnInfo); // The user may have specified a custom wrapIdentifier function in the config. We // need to run the identifiers through that function, but not format them as // identifiers otherwise. var table = this.client.customWrapIdentifier(this.single.table, identity); var self = this; return { sql: "\n select \n rlf.rdb$field_name as name,\n fld.rdb$character_length as max_length,\n typ.rdb$type_name as type,\n rlf.rdb$null_flag as not_null\n from rdb$relation_fields rlf\n inner join rdb$fields fld on fld.rdb$field_name = rlf.rdb$field_source\n inner join rdb$types typ on typ.rdb$type = fld.rdb$field_type\n where rdb$relation_name = '".concat(table.toUpperCase(), "'\n "), output: function output(_ref) { var rows = _ref.rows; var result = reduce(rows, function (columns, value) { var name = self.getColumnName(value[self.getColumnName("name")].trim()); columns[name] = { type: value[self.getColumnName("type")].trim().toLowerCase(), nullable: !value[self.getColumnName("not_null")] }; if (value.MAX_LENGTH) { columns[name] = value.MAX_LENGTH; } return columns; }, {}); if (column && !result[column]) { throw new Error("Specified column \"".concat(column, "\" was not found!")); } return column ? result[column] : result; } }; } }, { key: "getColumnName", value: function getColumnName(name) { if (!name) { return name; } return this.client.config.connection.lowercase_keys ? name.toLowerCase() : name; } }]); }(_querycompiler["default"]); var _default = exports["default"] = QueryCompiler_Firebird; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcXVlcnljb21waWxlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NhbGxTdXBlciIsInQiLCJvIiwiZSIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsImNhbGwiLCJfc3VwZXJQcm9wR2V0IiwiciIsInAiLCJfZ2V0MiIsImlkZW50aXR5IiwicmVkdWNlIiwiUXVlcnlDb21waWxlcl9GaXJlYmlyZCIsIl9RdWVyeUNvbXBpbGVyIiwiX2NsYXNzQ2FsbENoZWNrMiIsImFyZ3VtZW50cyIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJjb2x1bW5zIiwiZGlzdGluY3RDbGF1c2UiLCJvbmx5VW5pb25zIiwiaGludHMiLCJfaGludENvbW1lbnRzIiwiZ3JvdXBlZCIsImkiLCJzcWwiLCJsZW5ndGgiLCJzdG10IiwiZGlzdGluY3QiLCJkaXN0aW5jdE9uIiwidHlwZSIsIl9zcWwiLCJwdXNoIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImFnZ3JlZ2F0ZSIsImFnZ3JlZ2F0ZVJhdyIsImFuYWx5dGljIiwiZm9ybWF0dGVyIiwiY29sdW1uaXplIiwiY29uY2F0IiwiX2xpbWl0IiwiX29mZnNldCIsImpvaW4iLCJ0YWJsZU5hbWUiLCJzaW5nbGUiLCJvbmx5IiwicmVwbGFjZSIsIm9mZnNldCIsImxpbWl0IiwidHJ1bmNhdGUiLCJFcnJvciIsImluc2VydCIsInJldHVybmluZyIsIl9yZXR1cm5pbmciLCJfcHJlcEluc2VydCIsImluc2VydFZhbHVlcyIsIkFycmF5IiwiaXNBcnJheSIsIm5ld1ZhbHVlIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJjb2x1bW5JbmZvIiwiY29sdW1uIiwiZ2V0Q29sdW1uTmFtZSIsInRhYmxlIiwiY2xpZW50IiwiY3VzdG9tV3JhcElkZW50aWZpZXIiLCJzZWxmIiwidG9VcHBlckNhc2UiLCJvdXRwdXQiLCJfcmVmIiwicm93cyIsInJlc3VsdCIsIm5hbWUiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJudWxsYWJsZSIsIk1BWF9MRU5HVEgiLCJjb25maWciLCJjb25uZWN0aW9uIiwibG93ZXJjYXNlX2tleXMiLCJRdWVyeUNvbXBpbGVyIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L2NvbXBpbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEZpcmViaXJkIFF1ZXJ5IEJ1aWxkZXIgJiBDb21waWxlclxuaW1wb3J0IFF1ZXJ5Q29tcGlsZXIgZnJvbSBcImtuZXgvbGliL3F1ZXJ5L3F1ZXJ5Y29tcGlsZXJcIjtcbmNvbnN0IGlkZW50aXR5ID0gcmVxdWlyZShcImxvZGFzaC9pZGVudGl0eVwiKTtcbmNvbnN0IHJlZHVjZSA9IHJlcXVpcmUoXCJsb2Rhc2gvcmVkdWNlXCIpO1xuXG5jbGFzcyBRdWVyeUNvbXBpbGVyX0ZpcmViaXJkIGV4dGVuZHMgUXVlcnlDb21waWxlciB7XG4gIGNvbHVtbnMoKSB7XG4gICAgbGV0IGRpc3RpbmN0Q2xhdXNlID0gXCJcIjtcbiAgICBpZiAodGhpcy5vbmx5VW5pb25zKCkpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGNvbnN0IGhpbnRzID0gdGhpcy5faGludENvbW1lbnRzKCk7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ3JvdXBlZC5jb2x1bW5zIHx8IFtdO1xuICAgIGxldCBpID0gLTEsXG4gICAgICBzcWwgPSBbXTtcblxuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICB3aGlsZSAoKytpIDwgY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgc3RtdCA9IGNvbHVtbnNbaV07XG4gICAgICAgIGlmIChzdG10LmRpc3RpbmN0KSBkaXN0aW5jdENsYXVzZSA9IFwiZGlzdGluY3QgXCI7XG4gICAgICAgIGlmIChzdG10LmRpc3RpbmN0T24pIHtcbiAgICAgICAgICBkaXN0aW5jdENsYXVzZSA9IHRoaXMuZGlzdGluY3RPbihzdG10LnZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RtdC50eXBlID09PSBcImFnZ3JlZ2F0ZVwiKSB7XG4gICAgICAgICAgc3FsLnB1c2goLi4udGhpcy5hZ2dyZWdhdGUoc3RtdCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0bXQudHlwZSA9PT0gXCJhZ2dyZWdhdGVSYXdcIikge1xuICAgICAgICAgIHNxbC5wdXNoKHRoaXMuYWdncmVnYXRlUmF3KHN0bXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdG10LnR5cGUgPT09IFwiYW5hbHl0aWNcIikge1xuICAgICAgICAgIHNxbC5wdXNoKHRoaXMuYW5hbHl0aWMoc3RtdCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0bXQudmFsdWUgJiYgc3RtdC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc3FsLnB1c2godGhpcy5mb3JtYXR0ZXIuY29sdW1uaXplKHN0bXQudmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3FsLmxlbmd0aCA9PT0gMCkgc3FsID0gW1wiKlwiXTtcbiAgICByZXR1cm4gKFxuICAgICAgYHNlbGVjdCAke3RoaXMuX2xpbWl0KCl9ICR7dGhpcy5fb2Zmc2V0KCl9ICR7aGludHN9JHtkaXN0aW5jdENsYXVzZX1gICtcbiAgICAgIHNxbC5qb2luKFwiLCBcIikgK1xuICAgICAgKHRoaXMudGFibGVOYW1lXG4gICAgICAgID8gYCBmcm9tICR7dGhpcy5zaW5nbGUub25seSA/IFwib25seSBcIiA6IFwiXCJ9JHt0aGlzLnRhYmxlTmFtZX1gXG4gICAgICAgIDogXCJcIilcbiAgICApO1xuICB9XG5cbiAgX2xpbWl0KCkge1xuICAgIHJldHVybiBzdXBlci5saW1pdCgpLnJlcGxhY2UoXCJsaW1pdFwiLCBcImZpcnN0XCIpO1xuICB9XG5cbiAgX29mZnNldCgpIHtcbiAgICByZXR1cm4gc3VwZXIub2Zmc2V0KCkucmVwbGFjZShcIm9mZnNldFwiLCBcInNraXBcIik7XG4gIH1cblxuICBvZmZzZXQoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBsaW1pdCgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHRydW5jYXRlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlRydW5jYXRlIFNRTCBjb21tYW5kIGRvZXMgbm90IGV4aXN0cyBpbiBGaXJlYmlyZC5cIik7XG4gIH1cblxuICBpbnNlcnQoKSB7XG4gICAgbGV0IHNxbCA9IHN1cGVyLmluc2VydCgpO1xuICAgIGlmIChzcWwgPT09IFwiXCIpIHJldHVybiBzcWw7XG5cbiAgICBjb25zdCB7IHJldHVybmluZyB9ID0gdGhpcy5zaW5nbGU7XG4gICAgaWYgKHJldHVybmluZykgc3FsICs9IHRoaXMuX3JldHVybmluZyhyZXR1cm5pbmcpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNxbDogc3FsLFxuICAgICAgcmV0dXJuaW5nLFxuICAgIH07XG4gIH1cblxuICBfcmV0dXJuaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID8gYCByZXR1cm5pbmcgJHt0aGlzLmZvcm1hdHRlci5jb2x1bW5pemUodmFsdWUpfWAgOiBcIlwiO1xuICB9XG5cbiAgX3ByZXBJbnNlcnQoaW5zZXJ0VmFsdWVzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5zZXJ0VmFsdWVzKSkge1xuICAgICAgaWYgKGluc2VydFZhbHVlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmlyZWJpcmQgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBpbnNlcnRpb25zLlwiKTtcbiAgICAgIH1cbiAgICAgIGluc2VydFZhbHVlcyA9IGluc2VydFZhbHVlc1swXTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdWYWx1ZSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGluc2VydFZhbHVlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnNlcnRWYWx1ZXMsIGtleSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnNlcnRWYWx1ZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIG5ld1ZhbHVlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuX3ByZXBJbnNlcnQobmV3VmFsdWUpO1xuICB9XG5cbiAgY29sdW1uSW5mbygpIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbk5hbWUodGhpcy5zaW5nbGUuY29sdW1uSW5mbyk7XG5cbiAgICAvLyBUaGUgdXNlciBtYXkgaGF2ZSBzcGVjaWZpZWQgYSBjdXN0b20gd3JhcElkZW50aWZpZXIgZnVuY3Rpb24gaW4gdGhlIGNvbmZpZy4gV2VcbiAgICAvLyBuZWVkIHRvIHJ1biB0aGUgaWRlbnRpZmllcnMgdGhyb3VnaCB0aGF0IGZ1bmN0aW9uLCBidXQgbm90IGZvcm1hdCB0aGVtIGFzXG4gICAgLy8gaWRlbnRpZmllcnMgb3RoZXJ3aXNlLlxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5jbGllbnQuY3VzdG9tV3JhcElkZW50aWZpZXIodGhpcy5zaW5nbGUudGFibGUsIGlkZW50aXR5KTtcblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiB7XG4gICAgICBzcWw6IGBcbiAgICAgIHNlbGVjdCBcbiAgICAgICAgcmxmLnJkYiRmaWVsZF9uYW1lIGFzIG5hbWUsXG4gICAgICAgIGZsZC5yZGIkY2hhcmFjdGVyX2xlbmd0aCBhcyBtYXhfbGVuZ3RoLFxuICAgICAgICB0eXAucmRiJHR5cGVfbmFtZSBhcyB0eXBlLFxuICAgICAgICBybGYucmRiJG51bGxfZmxhZyBhcyBub3RfbnVsbFxuICAgICAgZnJvbSByZGIkcmVsYXRpb25fZmllbGRzIHJsZlxuICAgICAgaW5uZXIgam9pbiByZGIkZmllbGRzIGZsZCBvbiBmbGQucmRiJGZpZWxkX25hbWUgPSBybGYucmRiJGZpZWxkX3NvdXJjZVxuICAgICAgaW5uZXIgam9pbiByZGIkdHlwZXMgdHlwIG9uIHR5cC5yZGIkdHlwZSA9IGZsZC5yZGIkZmllbGRfdHlwZVxuICAgICAgd2hlcmUgcmRiJHJlbGF0aW9uX25hbWUgPSAnJHt0YWJsZS50b1VwcGVyQ2FzZSgpfSdcbiAgICAgIGAsXG4gICAgICBvdXRwdXQoeyByb3dzIH0pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVkdWNlKFxuICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgZnVuY3Rpb24gKGNvbHVtbnMsIHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gc2VsZi5nZXRDb2x1bW5OYW1lKFxuICAgICAgICAgICAgICB2YWx1ZVtzZWxmLmdldENvbHVtbk5hbWUoXCJuYW1lXCIpXS50cmltKClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbHVtbnNbbmFtZV0gPSB7XG4gICAgICAgICAgICAgIHR5cGU6IHZhbHVlW3NlbGYuZ2V0Q29sdW1uTmFtZShcInR5cGVcIildLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICBudWxsYWJsZTogIXZhbHVlW3NlbGYuZ2V0Q29sdW1uTmFtZShcIm5vdF9udWxsXCIpXSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZS5NQVhfTEVOR1RIKSB7XG4gICAgICAgICAgICAgIGNvbHVtbnNbbmFtZV0gPSB2YWx1ZS5NQVhfTEVOR1RIO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGNvbHVtbiAmJiAhcmVzdWx0W2NvbHVtbl0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBjb2x1bW4gXCIke2NvbHVtbn1cIiB3YXMgbm90IGZvdW5kIWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW4gPyByZXN1bHRbY29sdW1uXSA6IHJlc3VsdDtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGdldENvbHVtbk5hbWUobmFtZSkge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsaWVudC5jb25maWcuY29ubmVjdGlvbi5sb3dlcmNhc2Vfa2V5c1xuICAgICAgPyBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIDogbmFtZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBRdWVyeUNvbXBpbGVyX0ZpcmViaXJkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxjQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBeUQsU0FBQUMsV0FBQUMsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsV0FBQUQsQ0FBQSxPQUFBRSxnQkFBQSxhQUFBRixDQUFBLE9BQUFHLDJCQUFBLGFBQUFKLENBQUEsRUFBQUsseUJBQUEsS0FBQUMsT0FBQSxDQUFBQyxTQUFBLENBQUFOLENBQUEsRUFBQUMsQ0FBQSxZQUFBQyxnQkFBQSxhQUFBSCxDQUFBLEVBQUFRLFdBQUEsSUFBQVAsQ0FBQSxDQUFBUSxLQUFBLENBQUFULENBQUEsRUFBQUUsQ0FBQTtBQUFBLFNBQUFHLDBCQUFBLGNBQUFMLENBQUEsSUFBQVUsT0FBQSxDQUFBQyxTQUFBLENBQUFDLE9BQUEsQ0FBQUMsSUFBQSxDQUFBUCxPQUFBLENBQUFDLFNBQUEsQ0FBQUcsT0FBQSxpQ0FBQVYsQ0FBQSxhQUFBSyx5QkFBQSxZQUFBQSwwQkFBQSxhQUFBTCxDQUFBO0FBQUEsU0FBQWMsY0FBQWQsQ0FBQSxFQUFBQyxD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