123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.transformTypes = void 0;
- var _node = _interopRequireDefault(require("parse/node"));
- var _graphqlRelay = require("graphql-relay");
- var _filesMutations = require("../loaders/filesMutations");
- var objectsMutations = _interopRequireWildcard(require("../helpers/objectsMutations"));
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
- const transformTypes = async (inputType, fields, {
- className,
- parseGraphQLSchema,
- req,
- originalFields
- }) => {
- const {
- classGraphQLCreateType,
- classGraphQLUpdateType,
- config: {
- isCreateEnabled,
- isUpdateEnabled
- }
- } = parseGraphQLSchema.parseClassTypes[className];
- const parseClass = parseGraphQLSchema.parseClasses[className];
- if (fields) {
- const classGraphQLCreateTypeFields = isCreateEnabled && classGraphQLCreateType ? classGraphQLCreateType.getFields() : null;
- const classGraphQLUpdateTypeFields = isUpdateEnabled && classGraphQLUpdateType ? classGraphQLUpdateType.getFields() : null;
- const promises = Object.keys(fields).map(async field => {
- let inputTypeField;
- if (inputType === 'create' && classGraphQLCreateTypeFields) {
- inputTypeField = classGraphQLCreateTypeFields[field];
- } else if (classGraphQLUpdateTypeFields) {
- inputTypeField = classGraphQLUpdateTypeFields[field];
- }
- if (inputTypeField) {
- const parseFieldType = parseClass.fields[field].type;
- switch (parseFieldType) {
- case 'GeoPoint':
- if (fields[field] === null) {
- fields[field] = {
- __op: 'Delete'
- };
- break;
- }
- fields[field] = transformers.geoPoint(fields[field]);
- break;
- case 'Polygon':
- if (fields[field] === null) {
- fields[field] = {
- __op: 'Delete'
- };
- break;
- }
- fields[field] = transformers.polygon(fields[field]);
- break;
- case 'File':
- // We need to use the originalFields to handle the file upload
- // since fields are a deepcopy and do not keep the file object
- fields[field] = await transformers.file(originalFields[field], req);
- break;
- case 'Relation':
- fields[field] = await transformers.relation(parseClass.fields[field].targetClass, field, fields[field], originalFields[field], parseGraphQLSchema, req);
- break;
- case 'Pointer':
- if (fields[field] === null) {
- fields[field] = {
- __op: 'Delete'
- };
- break;
- }
- fields[field] = await transformers.pointer(parseClass.fields[field].targetClass, field, fields[field], originalFields[field], parseGraphQLSchema, req);
- break;
- default:
- if (fields[field] === null) {
- fields[field] = {
- __op: 'Delete'
- };
- return;
- }
- break;
- }
- }
- });
- await Promise.all(promises);
- if (fields.ACL) fields.ACL = transformers.ACL(fields.ACL);
- }
- return fields;
- };
- exports.transformTypes = transformTypes;
- const transformers = {
- file: async (input, {
- config
- }) => {
- if (input === null) {
- return {
- __op: 'Delete'
- };
- }
- const {
- file,
- upload
- } = input;
- if (upload) {
- const {
- fileInfo
- } = await (0, _filesMutations.handleUpload)(upload, config);
- return _objectSpread(_objectSpread({}, fileInfo), {}, {
- __type: 'File'
- });
- } else if (file && file.name) {
- return {
- name: file.name,
- __type: 'File',
- url: file.url
- };
- }
- throw new _node.default.Error(_node.default.Error.FILE_SAVE_ERROR, 'Invalid file upload.');
- },
- polygon: value => ({
- __type: 'Polygon',
- coordinates: value.map(geoPoint => [geoPoint.latitude, geoPoint.longitude])
- }),
- geoPoint: value => _objectSpread(_objectSpread({}, value), {}, {
- __type: 'GeoPoint'
- }),
- ACL: value => {
- const parseACL = {};
- if (value.public) {
- parseACL['*'] = {
- read: value.public.read,
- write: value.public.write
- };
- }
- if (value.users) {
- value.users.forEach(rule => {
- const globalIdObject = (0, _graphqlRelay.fromGlobalId)(rule.userId);
- if (globalIdObject.type === '_User') {
- rule.userId = globalIdObject.id;
- }
- parseACL[rule.userId] = {
- read: rule.read,
- write: rule.write
- };
- });
- }
- if (value.roles) {
- value.roles.forEach(rule => {
- parseACL[`role:${rule.roleName}`] = {
- read: rule.read,
- write: rule.write
- };
- });
- }
- return parseACL;
- },
- relation: async (targetClass, field, value, originalValue, parseGraphQLSchema, {
- config,
- auth,
- info
- }) => {
- if (Object.keys(value).length === 0) throw new _node.default.Error(_node.default.Error.INVALID_POINTER, `You need to provide at least one operation on the relation mutation of field ${field}`);
- const op = {
- __op: 'Batch',
- ops: []
- };
- let nestedObjectsToAdd = [];
- if (value.createAndAdd) {
- nestedObjectsToAdd = (await Promise.all(value.createAndAdd.map(async (input, i) => {
- const parseFields = await transformTypes('create', input, {
- className: targetClass,
- originalFields: originalValue.createAndAdd[i],
- parseGraphQLSchema,
- req: {
- config,
- auth,
- info
- }
- });
- return objectsMutations.createObject(targetClass, parseFields, config, auth, info);
- }))).map(object => ({
- __type: 'Pointer',
- className: targetClass,
- objectId: object.objectId
- }));
- }
- if (value.add || nestedObjectsToAdd.length > 0) {
- if (!value.add) value.add = [];
- value.add = value.add.map(input => {
- const globalIdObject = (0, _graphqlRelay.fromGlobalId)(input);
- if (globalIdObject.type === targetClass) {
- input = globalIdObject.id;
- }
- return {
- __type: 'Pointer',
- className: targetClass,
- objectId: input
- };
- });
- op.ops.push({
- __op: 'AddRelation',
- objects: [...value.add, ...nestedObjectsToAdd]
- });
- }
- if (value.remove) {
- op.ops.push({
- __op: 'RemoveRelation',
- objects: value.remove.map(input => {
- const globalIdObject = (0, _graphqlRelay.fromGlobalId)(input);
- if (globalIdObject.type === targetClass) {
- input = globalIdObject.id;
- }
- return {
- __type: 'Pointer',
- className: targetClass,
- objectId: input
- };
- })
- });
- }
- return op;
- },
- pointer: async (targetClass, field, value, originalValue, parseGraphQLSchema, {
- config,
- auth,
- info
- }) => {
- if (Object.keys(value).length > 1 || Object.keys(value).length === 0) throw new _node.default.Error(_node.default.Error.INVALID_POINTER, `You need to provide link OR createLink on the pointer mutation of field ${field}`);
- let nestedObjectToAdd;
- if (value.createAndLink) {
- const parseFields = await transformTypes('create', value.createAndLink, {
- className: targetClass,
- parseGraphQLSchema,
- originalFields: originalValue.createAndLink,
- req: {
- config,
- auth,
- info
- }
- });
- nestedObjectToAdd = await objectsMutations.createObject(targetClass, parseFields, config, auth, info);
- return {
- __type: 'Pointer',
- className: targetClass,
- objectId: nestedObjectToAdd.objectId
- };
- }
- if (value.link) {
- let objectId = value.link;
- const globalIdObject = (0, _graphqlRelay.fromGlobalId)(objectId);
- if (globalIdObject.type === targetClass) {
- objectId = globalIdObject.id;
- }
- return {
- __type: 'Pointer',
- className: targetClass,
- objectId
- };
- }
- }
- };
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dyYXBocWxSZWxheSIsIl9maWxlc011dGF0aW9ucyIsIm9iamVjdHNNdXRhdGlvbnMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJ0cmFuc2Zvcm1UeXBlcyIsImlucHV0VHlwZSIsImZpZWxkcyIsImNsYXNzTmFtZSIsInBhcnNlR3JhcGhRTFNjaGVtYSIsInJlcSIsIm9yaWdpbmFsRmllbGRzIiwiY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZSIsImNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUiLCJjb25maWciLCJpc0NyZWF0ZUVuYWJsZWQiLCJpc1VwZGF0ZUVuYWJsZWQiLCJwYXJzZUNsYXNzVHlwZXMiLCJwYXJzZUNsYXNzIiwicGFyc2VDbGFzc2VzIiwiY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZUZpZWxkcyIsImdldEZpZWxkcyIsImNsYXNzR3JhcGhRTFVwZGF0ZVR5cGVGaWVsZHMiLCJwcm9taXNlcyIsIm1hcCIsImZpZWxkIiwiaW5wdXRUeXBlRmllbGQiLCJwYXJzZUZpZWxkVHlwZSIsInR5cGUiLCJfX29wIiwidHJhbnNmb3JtZXJzIiwiZ2VvUG9pbnQiLCJwb2x5Z29uIiwiZmlsZSIsInJlbGF0aW9uIiwidGFyZ2V0Q2xhc3MiLCJwb2ludGVyIiwiUHJvbWlzZSIsImFsbCIsIkFDTCIsImV4cG9ydHMiLCJpbnB1dCIsInVwbG9hZCIsImZpbGVJbmZvIiwiaGFuZGxlVXBsb2FkIiwiX190eXBlIiwibmFtZSIsInVybCIsIlBhcnNlIiwiRXJyb3IiLCJGSUxFX1NBVkVfRVJST1IiLCJjb29yZGluYXRlcyIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwicGFyc2VBQ0wiLCJwdWJsaWMiLCJyZWFkIiwid3JpdGUiLCJ1c2VycyIsInJ1bGUiLCJnbG9iYWxJZE9iamVjdCIsImZyb21HbG9iYWxJZCIsInVzZXJJZCIsImlkIiwicm9sZXMiLCJyb2xlTmFtZSIsIm9yaWdpbmFsVmFsdWUiLCJhdXRoIiwiaW5mbyIsIklOVkFMSURfUE9JTlRFUiIsIm9wIiwib3BzIiwibmVzdGVkT2JqZWN0c1RvQWRkIiwiY3JlYXRlQW5kQWRkIiwicGFyc2VGaWVsZHMiLCJjcmVhdGVPYmplY3QiLCJvYmplY3QiLCJvYmplY3RJZCIsImFkZCIsIm9iamVjdHMiLCJyZW1vdmUiLCJuZXN0ZWRPYmplY3RUb0FkZCIsImNyZWF0ZUFuZExpbmsiLCJsaW5rIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvdHJhbnNmb3JtZXJzL211dGF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCB7IGZyb21HbG9iYWxJZCB9IGZyb20gJ2dyYXBocWwtcmVsYXknO1xuaW1wb3J0IHsgaGFuZGxlVXBsb2FkIH0gZnJvbSAnLi4vbG9hZGVycy9maWxlc011dGF0aW9ucyc7XG5pbXBvcnQgKiBhcyBvYmplY3RzTXV0YXRpb25zIGZyb20gJy4uL2hlbHBlcnMvb2JqZWN0c011dGF0aW9ucyc7XG5cbmNvbnN0IHRyYW5zZm9ybVR5cGVzID0gYXN5bmMgKFxuICBpbnB1dFR5cGU6ICdjcmVhdGUnIHwgJ3VwZGF0ZScsXG4gIGZpZWxkcyxcbiAgeyBjbGFzc05hbWUsIHBhcnNlR3JhcGhRTFNjaGVtYSwgcmVxLCBvcmlnaW5hbEZpZWxkcyB9XG4pID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzR3JhcGhRTENyZWF0ZVR5cGUsXG4gICAgY2xhc3NHcmFwaFFMVXBkYXRlVHlwZSxcbiAgICBjb25maWc6IHsgaXNDcmVhdGVFbmFibGVkLCBpc1VwZGF0ZUVuYWJsZWQgfSxcbiAgfSA9IHBhcnNlR3JhcGhRTFNjaGVtYS5wYXJzZUNsYXNzVHlwZXNbY2xhc3NOYW1lXTtcbiAgY29uc3QgcGFyc2VDbGFzcyA9IHBhcnNlR3JhcGhRTFNjaGVtYS5wYXJzZUNsYXNzZXNbY2xhc3NOYW1lXTtcbiAgaWYgKGZpZWxkcykge1xuICAgIGNvbnN0IGNsYXNzR3JhcGhRTENyZWF0ZVR5cGVGaWVsZHMgPVxuICAgICAgaXNDcmVhdGVFbmFibGVkICYmIGNsYXNzR3JhcGhRTENyZWF0ZVR5cGUgPyBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlLmdldEZpZWxkcygpIDogbnVsbDtcbiAgICBjb25zdCBjbGFzc0dyYXBoUUxVcGRhdGVUeXBlRmllbGRzID1cbiAgICAgIGlzVXBkYXRlRW5hYmxlZCAmJiBjbGFzc0dyYXBoUUxVcGRhdGVUeXBlID8gY2xhc3NHcmFwaFFMVXBkYXRlVHlwZS5nZXRGaWVsZHMoKSA6IG51bGw7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3Qua2V5cyhmaWVsZHMpLm1hcChhc3luYyBmaWVsZCA9PiB7XG4gICAgICBsZXQgaW5wdXRUeXBlRmllbGQ7XG4gICAgICBpZiAoaW5wdXRUeXBlID09PSAnY3JlYXRlJyAmJiBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlRmllbGRzKSB7XG4gICAgICAgIGlucHV0VHlwZUZpZWxkID0gY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZUZpZWxkc1tmaWVsZF07XG4gICAgICB9IGVsc2UgaWYgKGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGVGaWVsZHMpIHtcbiAgICAgICAgaW5wdXRUeXBlRmllbGQgPSBjbGFzc0dyYXBoUUxVcGRhdGVUeXBlRmllbGRzW2ZpZWxkXTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dFR5cGVGaWVsZCkge1xuICAgICAgICBjb25zdCBwYXJzZUZpZWxkVHlwZSA9IHBhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkXS50eXBlO1xuICAgICAgICBzd2l0Y2ggKHBhcnNlRmllbGRUeXBlKSB7XG4gICAgICAgICAgY2FzZSAnR2VvUG9pbnQnOlxuICAgICAgICAgICAgaWYgKGZpZWxkc1tmaWVsZF0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IHsgX19vcDogJ0RlbGV0ZScgfTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZHNbZmllbGRdID0gdHJhbnNmb3JtZXJzLmdlb1BvaW50KGZpZWxkc1tmaWVsZF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgICAgICBpZiAoZmllbGRzW2ZpZWxkXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBmaWVsZHNbZmllbGRdID0geyBfX29wOiAnRGVsZXRlJyB9O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0gPSB0cmFuc2Zvcm1lcnMucG9seWdvbihmaWVsZHNbZmllbGRdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0ZpbGUnOlxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB1c2UgdGhlIG9yaWdpbmFsRmllbGRzIHRvIGhhbmRsZSB0aGUgZmlsZSB1cGxvYWRcbiAgICAgICAgICAgIC8vIHNpbmNlIGZpZWxkcyBhcmUgYSBkZWVwY29weSBhbmQgZG8gbm90IGtlZXAgdGhlIGZpbGUgb2JqZWN0XG4gICAgICAgICAgICBmaWVsZHNbZmllbGRdID0gYXdhaXQgdHJhbnNmb3JtZXJzLmZpbGUob3JpZ2luYWxGaWVsZHNbZmllbGRdLCByZXEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnUmVsYXRpb24nOlxuICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IGF3YWl0IHRyYW5zZm9ybWVycy5yZWxhdGlvbihcbiAgICAgICAgICAgICAgcGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnRhcmdldENsYXNzLFxuICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSxcbiAgICAgICAgICAgICAgb3JpZ2luYWxGaWVsZHNbZmllbGRdLFxuICAgICAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEsXG4gICAgICAgICAgICAgIHJlcVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1BvaW50ZXInOlxuICAgICAgICAgICAgaWYgKGZpZWxkc1tmaWVsZF0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IHsgX19vcDogJ0RlbGV0ZScgfTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZHNbZmllbGRdID0gYXdhaXQgdHJhbnNmb3JtZXJzLnBvaW50ZXIoXG4gICAgICAgICAgICAgIHBhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkXS50YXJnZXRDbGFzcyxcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0sXG4gICAgICAgICAgICAgIG9yaWdpbmFsRmllbGRzW2ZpZWxkXSxcbiAgICAgICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLFxuICAgICAgICAgICAgICByZXFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKGZpZWxkc1tmaWVsZF0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IHsgX19vcDogJ0RlbGV0ZScgfTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgaWYgKGZpZWxkcy5BQ0wpIGZpZWxkcy5BQ0wgPSB0cmFuc2Zvcm1lcnMuQUNMKGZpZWxkcy5BQ0wpO1xuICB9XG4gIHJldHVybiBmaWVsZHM7XG59O1xuXG5jb25zdCB0cmFuc2Zvcm1lcnMgPSB7XG4gIGZpbGU6IGFzeW5jIChpbnB1dCwgeyBjb25maWcgfSkgPT4ge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgX19vcDogJ0RlbGV0ZScgfTtcbiAgICB9XG4gICAgY29uc3QgeyBmaWxlLCB1cGxvYWQgfSA9IGlucHV0O1xuICAgIGlmICh1cGxvYWQpIHtcbiAgICAgIGNvbnN0IHsgZmlsZUluZm8gfSA9IGF3YWl0IGhhbmRsZVVwbG9hZCh1cGxvYWQsIGNvbmZpZyk7XG4gICAgICByZXR1cm4geyAuLi5maWxlSW5mbywgX190eXBlOiAnRmlsZScgfTtcbiAgICB9IGVsc2UgaWYgKGZpbGUgJiYgZmlsZS5uYW1lKSB7XG4gICAgICByZXR1cm4geyBuYW1lOiBmaWxlLm5hbWUsIF9fdHlwZTogJ0ZpbGUnLCB1cmw6IGZpbGUudXJsIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdJbnZhbGlkIGZpbGUgdXBsb2FkLicpO1xuICB9LFxuICBwb2x5Z29uOiB2YWx1ZSA9PiAoe1xuICAgIF9fdHlwZTogJ1BvbHlnb24nLFxuICAgIGNvb3JkaW5hdGVzOiB2YWx1ZS5tYXAoZ2VvUG9pbnQgPT4gW2dlb1BvaW50LmxhdGl0dWRlLCBnZW9Qb2ludC5sb25naXR1ZGVdKSxcbiAgfSksXG4gIGdlb1BvaW50OiB2YWx1ZSA9PiAoe1xuICAgIC4uLnZhbHVlLFxuICAgIF9fdHlwZTogJ0dlb1BvaW50JyxcbiAgfSksXG4gIEFDTDogdmFsdWUgPT4ge1xuICAgIGNvbnN0IHBhcnNlQUNMID0ge307XG4gICAgaWYgKHZhbHVlLnB1YmxpYykge1xuICAgICAgcGFyc2VBQ0xbJyonXSA9IHtcbiAgICAgICAgcmVhZDogdmFsdWUucHVibGljLnJlYWQsXG4gICAgICAgIHdyaXRlOiB2YWx1ZS5wdWJsaWMud3JpdGUsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUudXNlcnMpIHtcbiAgICAgIHZhbHVlLnVzZXJzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgIGNvbnN0IGdsb2JhbElkT2JqZWN0ID0gZnJvbUdsb2JhbElkKHJ1bGUudXNlcklkKTtcbiAgICAgICAgaWYgKGdsb2JhbElkT2JqZWN0LnR5cGUgPT09ICdfVXNlcicpIHtcbiAgICAgICAgICBydWxlLnVzZXJJZCA9IGdsb2JhbElkT2JqZWN0LmlkO1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlQUNMW3J1bGUudXNlcklkXSA9IHtcbiAgICAgICAgICByZWFkOiBydWxlLnJlYWQsXG4gICAgICAgICAgd3JpdGU6IHJ1bGUud3JpdGUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnJvbGVzKSB7XG4gICAgICB2YWx1ZS5yb2xlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICBwYXJzZUFDTFtgcm9sZToke3J1bGUucm9sZU5hbWV9YF0gPSB7XG4gICAgICAgICAgcmVhZDogcnVsZS5yZWFkLFxuICAgICAgICAgIHdyaXRlOiBydWxlLndyaXRlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUFDTDtcbiAgfSxcbiAgcmVsYXRpb246IGFzeW5jIChcbiAgICB0YXJnZXRDbGFzcyxcbiAgICBmaWVsZCxcbiAgICB2YWx1ZSxcbiAgICBvcmlnaW5hbFZhbHVlLFxuICAgIHBhcnNlR3JhcGhRTFNjaGVtYSxcbiAgICB7IGNvbmZpZywgYXV0aCwgaW5mbyB9XG4gICkgPT4ge1xuICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKVxuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1BPSU5URVIsXG4gICAgICAgIGBZb3UgbmVlZCB0byBwcm92aWRlIGF0IGxlYXN0IG9uZSBvcGVyYXRpb24gb24gdGhlIHJlbGF0aW9uIG11dGF0aW9uIG9mIGZpZWxkICR7ZmllbGR9YFxuICAgICAgKTtcblxuICAgIGNvbnN0IG9wID0ge1xuICAgICAgX19vcDogJ0JhdGNoJyxcbiAgICAgIG9wczogW10sXG4gICAgfTtcbiAgICBsZXQgbmVzdGVkT2JqZWN0c1RvQWRkID0gW107XG5cbiAgICBpZiAodmFsdWUuY3JlYXRlQW5kQWRkKSB7XG4gICAgICBuZXN0ZWRPYmplY3RzVG9BZGQgPSAoXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHZhbHVlLmNyZWF0ZUFuZEFkZC5tYXAoYXN5bmMgKGlucHV0LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZUZpZWxkcyA9IGF3YWl0IHRyYW5zZm9ybVR5cGVzKCdjcmVhdGUnLCBpbnB1dCwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IHRhcmdldENsYXNzLFxuICAgICAgICAgICAgICBvcmlnaW5hbEZpZWxkczogb3JpZ2luYWxWYWx1ZS5jcmVhdGVBbmRBZGRbaV0sXG4gICAgICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYSxcbiAgICAgICAgICAgICAgcmVxOiB7IGNvbmZpZywgYXV0aCwgaW5mbyB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0c011dGF0aW9ucy5jcmVhdGVPYmplY3QodGFyZ2V0Q2xhc3MsIHBhcnNlRmllbGRzLCBjb25maWcsIGF1dGgsIGluZm8pO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICkubWFwKG9iamVjdCA9PiAoe1xuICAgICAgICBfX3R5cGU6ICdQb2ludGVyJyxcbiAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgb2JqZWN0SWQ6IG9iamVjdC5vYmplY3RJZCxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUuYWRkIHx8IG5lc3RlZE9iamVjdHNUb0FkZC5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIXZhbHVlLmFkZCkgdmFsdWUuYWRkID0gW107XG4gICAgICB2YWx1ZS5hZGQgPSB2YWx1ZS5hZGQubWFwKGlucHV0ID0+IHtcbiAgICAgICAgY29uc3QgZ2xvYmFsSWRPYmplY3QgPSBmcm9tR2xvYmFsSWQoaW5wdXQpO1xuICAgICAgICBpZiAoZ2xvYmFsSWRPYmplY3QudHlwZSA9PT0gdGFyZ2V0Q2xhc3MpIHtcbiAgICAgICAgICBpbnB1dCA9IGdsb2JhbElkT2JqZWN0LmlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgICBvYmplY3RJZDogaW5wdXQsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIG9wLm9wcy5wdXNoKHtcbiAgICAgICAgX19vcDogJ0FkZFJlbGF0aW9uJyxcbiAgICAgICAgb2JqZWN0czogWy4uLnZhbHVlLmFkZCwgLi4ubmVzdGVkT2JqZWN0c1RvQWRkXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5yZW1vdmUpIHtcbiAgICAgIG9wLm9wcy5wdXNoKHtcbiAgICAgICAgX19vcDogJ1JlbW92ZVJlbGF0aW9uJyxcbiAgICAgICAgb2JqZWN0czogdmFsdWUucmVtb3ZlLm1hcChpbnB1dCA9PiB7XG4gICAgICAgICAgY29uc3QgZ2xvYmFsSWRPYmplY3QgPSBmcm9tR2xvYmFsSWQoaW5wdXQpO1xuICAgICAgICAgIGlmIChnbG9iYWxJZE9iamVjdC50eXBlID09PSB0YXJnZXRDbGFzcykge1xuICAgICAgICAgICAgaW5wdXQgPSBnbG9iYWxJZE9iamVjdC5pZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgICAgIG9iamVjdElkOiBpbnB1dCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3A7XG4gIH0sXG4gIHBvaW50ZXI6IGFzeW5jIChcbiAgICB0YXJnZXRDbGFzcyxcbiAgICBmaWVsZCxcbiAgICB2YWx1ZSxcbiAgICBvcmlnaW5hbFZhbHVlLFxuICAgIHBhcnNlR3JhcGhRTFNjaGVtYSxcbiAgICB7IGNvbmZpZywgYXV0aCwgaW5mbyB9XG4gICkgPT4ge1xuICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID4gMSB8fCBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKVxuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1BPSU5URVIsXG4gICAgICAgIGBZb3UgbmVlZCB0byBwcm92aWRlIGxpbmsgT1IgY3JlYXRlTGluayBvbiB0aGUgcG9pbnRlciBtdXRhdGlvbiBvZiBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICk7XG5cbiAgICBsZXQgbmVzdGVkT2JqZWN0VG9BZGQ7XG4gICAgaWYgKHZhbHVlLmNyZWF0ZUFuZExpbmspIHtcbiAgICAgIGNvbnN0IHBhcnNlRmllbGRzID0gYXdhaXQgdHJhbnNmb3JtVHlwZXMoJ2NyZWF0ZScsIHZhbHVlLmNyZWF0ZUFuZExpbmssIHtcbiAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLFxuICAgICAgICBvcmlnaW5hbEZpZWxkczogb3JpZ2luYWxWYWx1ZS5jcmVhdGVBbmRMaW5rLFxuICAgICAgICByZXE6IHsgY29uZmlnLCBhdXRoLCBpbmZvIH0sXG4gICAgICB9KTtcbiAgICAgIG5lc3RlZE9iamVjdFRvQWRkID0gYXdhaXQgb2JqZWN0c011dGF0aW9ucy5jcmVhdGVPYmplY3QoXG4gICAgICAgIHRhcmdldENsYXNzLFxuICAgICAgICBwYXJzZUZpZWxkcyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBhdXRoLFxuICAgICAgICBpbmZvXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICAgIGNsYXNzTmFtZTogdGFyZ2V0Q2xhc3MsXG4gICAgICAgIG9iamVjdElkOiBuZXN0ZWRPYmplY3RUb0FkZC5vYmplY3RJZCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZS5saW5rKSB7XG4gICAgICBsZXQgb2JqZWN0SWQgPSB2YWx1ZS5saW5rO1xuICAgICAgY29uc3QgZ2xvYmFsSWRPYmplY3QgPSBmcm9tR2xvYmFsSWQob2JqZWN0SWQpO1xuICAgICAgaWYgKGdsb2JhbElkT2JqZWN0LnR5cGUgPT09IHRhcmdldENsYXNzKSB7XG4gICAgICAgIG9iamVjdElkID0gZ2xvYmFsSWRPYmplY3QuaWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGU6ICdQb2ludGVyJyxcbiAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgb2JqZWN0SWQsXG4gICAgICB9O1xuICAgIH1cbiAgfSxcbn07XG5cbmV4cG9ydCB7IHRyYW5zZm9ybVR5cGVzIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGdCQUFBLEdBQUFDLHVCQUFBLENBQUFKLE9BQUE7QUFBZ0UsU0FBQUsseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQUYsd0JBQUFFLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxXQUFBSyxPQUFBLEVBQUFMLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFBYyxDQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxDQUFBLFNBQUFHLENBQUEsR0FBQVAsQ0FBQSxHQUFBQyxNQUFBLENBQUFFLHdCQUFBLENBQUFiLENBQUEsRUFBQWMsQ0FBQSxVQUFBRyxDQUFBLEtBQUFBLENBQUEsQ0FBQVYsR0FBQSxJQUFBVSxDQUFBLENBQUFDLEdBQUEsSUFBQVAsTUFBQSxDQUFBQyxjQUFBLENBQUFKLENBQUEsRUFBQU0sQ0FBQSxFQUFBRyxDQUFBLElBQUFULENBQUEsQ0FBQU0sQ0FBQSxJQUFBZCxDQUFBLENBQUFjLENBQUEsWUFBQU4sQ0FBQSxDQUFBSCxPQUFBLEdBQUFMLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQWYsdUJBQUFPLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsR0FBQUosQ0FBQSxLQUFBSyxPQUFBLEVBQUFMLENBQUE7QUFBQSxTQUFBbUIsUUFBQW5CLENBQUEsRUFBQUUsQ0FBQSxRQUFBQyxDQUFBLEdBQUFRLE1BQUEsQ0FBQVMsSUFBQSxDQUFBcEIsQ0FBQSxPQUFBVyxNQUFBLENBQUFVLHFCQUFBLFFBQUFDLENBQUEsR0FBQVgsTUFBQSxDQUFBVSxxQkFBQSxDQUFBckIsQ0FBQSxHQUFBRSxDQUFBLEtBQUFvQixDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBckIsQ0FBQSxXQUFBUyxNQUFBLENBQUFFLHdCQUFBLENBQUFiLENBQUEsRUFBQUUsQ0FBQSxFQUFBc0IsVUFBQSxPQUFBckIsQ0FBQSxDQUFBc0IsSUFBQSxDQUFBQyxLQUFBLENBQUF2QixDQUFBLEVBQUFtQixDQUFBLFlBQUFuQixDQUFBO0FBQUEsU0FBQXdCLGNBQUEzQixDQUFBLGFBQUFFLENBQUEsTUFBQUEsQ0FBQSxHQUFBMEIsU0FBQSxDQUFBQyxNQUFBLEVBQUEzQixDQUFBLFVBQUFDLENBQUEsV0FBQXlCLFNBQUEsQ0FBQTFCLENBQUEsSUFBQTBCLFNBQUEsQ0FBQTFCLENBQUEsUUFBQUEsQ0FBQSxPQUFBaUIsT0FBQSxDQUFBUixNQUFBLENBQUFSLENBQUEsT0FBQTJCLE9BQUEsV0FBQTVCLENBQUEsSUFBQTZCLGVBQUEsQ0FBQS9CLENBQUEsRUFBQUUsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQVMsTUFBQSxDQUFBcUIseUJBQUEsR0FBQXJCLE1BQUEsQ0FBQXNCLGdCQUFBLENBQUFqQyxDQUFBLEVBQUFXLE1BQUEsQ0FBQXFCLHlCQUFBLENBQUE3QixDQUFBLEtBQUFnQixPQUFBLENBQUFSLE1BQUEsQ0FBQVIsQ0FBQSxHQUFBMkIsT0FBQSxXQUFBNUIsQ0FBQSxJQUFBUyxNQUFBLENBQUFDLGNBQUEsQ0FBQVosQ0FBQSxFQUFBRSxDQUFBLEVBQUFTLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQVYsQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRixDQUFBO0FBQUEsU0FBQStCLGdCQUFBL0IsQ0FBQSxFQUFBRSxDQUFBLEVBQUFDLENBQUEsWUFBQUQsQ0FBQSxHQUFBZ0MsY0FBQSxDQUFBaEMsQ0FBQSxNQUFBRixDQUFBLEdBQUFXLE1BQUEsQ0FBQUMsY0FBQSxDQUFBWixDQUFBLEVBQUFFLENBQUEsSUFBQWlDLEtBQUEsRUFBQWhDLENBQUEsRUFBQXFCLFVBQUEsTUFBQVksWUFBQSxNQUFBQyxRQUFBLFVBQUFyQyxDQUFBLENBQUFFLENBQUEsSUFBQUMsQ0FBQSxFQUFBSCxDQUFBO0FBQUEsU0FBQWtDLGVBQUEvQixDQUFBLFFBQUFjLENBQUEsR0FBQXFCLFlBQUEsQ0FBQW5DLENBQUEsdUNBQUFjLENBQUEsR0FBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQXFCLGFBQUFuQyxDQUFBLEVBQUFELENBQUEsMkJBQUFDLENBQUEsS0FBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFILENBQUEsR0FBQUcsQ0FBQSxDQUFBb0MsTUFBQSxDQUFBQyxXQUFBLGtCQUFBeEMsQ0FBQSxRQUFBaUIsQ0FBQSxHQUFBakIsQ0FBQSxDQUFBZ0IsSUFBQSxDQUFBYixDQUFBLEVBQUFELENBQUEsdUNBQUFlLENBQUEsU0FBQUEsQ0FBQSxZQUFBd0IsU0FBQSx5RUFBQXZDLENBQUEsR0FBQXdDLE1BQUEsR0FBQUMsTUFBQSxFQUFBeEMsQ0FBQTtBQUVoRSxNQUFNeUMsY0FBYyxHQUFHLE1BQUFBLENBQ3JCQyxTQUE4QixFQUM5QkMsTUFBTSxFQUNOO0VBQUVDLFNBQVM7RUFBRUMsa0JBQWtCO0VBQUVDLEdBQUc7RUFBRUM7QUFBZSxDQUFDLEtBQ25EO0VBQ0gsTUFBTTtJQUNKQyxzQkFBc0I7SUFDdEJDLHNCQUFzQjtJQUN0QkMsTUFBTSxFQUFFO01BQUVDLGVBQWU7TUFBRUM7SUFBZ0I7RUFDN0MsQ0FBQyxHQUFHUCxrQkFBa0IsQ0FBQ1EsZUFBZSxDQUFDVCxTQUFTLENBQUM7RUFDakQsTUFBTVUsVUFBVSxHQUFHVCxrQkFBa0IsQ0FBQ1UsWUFBWSxDQUFDWCxTQUFTLENBQUM7RUFDN0QsSUFBSUQsTUFBTSxFQUFFO0lBQ1YsTUFBTWEsNEJBQTRCLEdBQ2hDTCxlQUFlLElBQUlILHNCQUFzQixHQUFHQSxzQkFBc0IsQ0FBQ1MsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJO0lBQ3ZGLE1BQU1DLDRCQUE0QixHQUNoQ04sZUFBZSxJQUFJSCxzQkFBc0IsR0FBR0Esc0JBQXNCLENBQUNRLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtJQUN2RixNQUFNRSxRQUFRLEdBQUduRCxNQUFNLENBQUNTLElBQUksQ0FBQzBCLE1BQU0sQ0FBQyxDQUFDaUIsR0FBRyxDQUFDLE1BQU1DLEtBQUssSUFBSTtNQUN0RCxJQUFJQyxjQUFjO01BQ2xCLElBQUlwQixTQUFTLEtBQUssUUFBUSxJQUFJYyw0QkFBNEIsRUFBRTtRQUMxRE0sY0FBYyxHQUFHTiw0QkFBNEIsQ0FBQ0ssS0FBSyxDQUFDO01BQ3RELENBQUMsTUFBTSxJQUFJSCw0QkFBNEIsRUFBRTtRQUN2Q0ksY0FBYyxHQUFHSiw0QkFBNEIsQ0FBQ0csS0FBSyxDQUFDO01BQ3REO01BQ0EsSUFBSUMsY0FBYyxFQUFFO1FBQ2xCLE1BQU1DLGNBQWMsR0FBR1QsVUFBVSxDQUFDWCxNQUFNLENBQUNrQixLQUFLLENBQUMsQ0FBQ0csSUFBSTtRQUNwRCxRQUFRRCxjQUFjO1VBQ3BCLEtBQUssVUFBVTtZQUNiLElBQUlwQixNQUFNLENBQUNrQixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7Y0FDMUJsQixNQUFNLENBQUNrQixLQUFLLENBQUMsR0FBRztnQkFBRUksSUFBSSxFQUFFO2NBQVMsQ0FBQztjQUNsQztZQUNGO1lBQ0F0QixNQUFNLENBQUNrQixLQUFLLENBQUMsR0FBR0ssWUFBWSxDQUFDQyxRQUFRLENBQUN4QixNQUFNLENBQUNrQixLQUFLLENBQUMsQ0FBQztZQUNwRDtVQUNGLEtBQUssU0FBUztZQUNaLElBQUlsQixNQUFNLENBQUNrQixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7Y0FDMUJsQixNQUFNLENBQUNrQixLQUFLLENBQUMsR0FBRztnQkFBRUksSUFBSSxFQUFFO2NBQVMsQ0FBQztjQUNsQztZQUNGO1lBQ0F0QixNQUFNLENBQUNrQixLQUFLLENBQUMsR0FBR0ssWUFBWSxDQUFDRSxPQUFPLENBQUN6QixNQUFNLENBQUNrQixLQUFLLENBQUMsQ0FBQztZQUNuRDtVQUNGLEtBQUssTUFBTTtZQUNUO1lBQ0E7WUFDQWxCLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQyxHQUFHLE1BQU1LLFlBQVksQ0FBQ0csSUFBSSxDQUFDdEIsY0FBYyxDQUFDYyxLQUFLLENBQUMsRUFBRWYsR0FBRyxDQUFDO1lBQ25FO1VBQ0YsS0FBSyxVQUFVO1lBQ2JILE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQyxHQUFHLE1BQU1LLFlBQVksQ0FBQ0ksUUFBUSxDQUN6Q2hCLFVBQVUsQ0FBQ1gsTUFBTSxDQUFDa0IsS0FBSyxDQUFDLENBQUNVLFdBQVcsRUFDcENWLEtBQUssRUFDTGxCLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQyxFQUNiZCxjQUFjLENBQUNjLEtBQUssQ0FBQyxFQUNyQmhCLGtCQUFrQixFQUNsQkMsR0FDRixDQUFDO1lBQ0Q7VUFDRixLQUFLLFNBQVM7WUFDWixJQUFJSCxNQUFNLENBQUNrQixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7Y0FDMUJsQixNQUFNLENBQUNrQixLQUFLLENBQUMsR0FBRztnQkFBRUksSUFBSSxFQUFFO2NBQVMsQ0FBQztjQUNsQztZQUNGO1lBQ0F0QixNQUFNLENBQUNrQixLQUFLLENBQUMsR0FBRyxNQUFNSyxZQUFZLENBQUNNLE9BQU8sQ0FDeENsQixVQUFVLENBQUNYLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQyxDQUFDVSxXQUFXLEVBQ3BDVixLQUFLLEVBQ0xsQixNQUFNLENBQUNrQixLQUFLLENBQUMsRUFDYmQsY0FBYyxDQUFDYyxLQUFLLENBQUMsRUFDckJoQixrQkFBa0IsRUFDbEJDLEdBQ0YsQ0FBQztZQUNEO1VBQ0Y7WUFDRSxJQUFJSCxNQUFNLENBQUNrQixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7Y0FDMUJsQixNQUFNLENBQUNrQixLQUFLLENBQUMsR0FBRztnQkFBRUksSUFBSSxFQUFFO2NBQVMsQ0FBQztjQUNsQztZQUNGO1lBQ0E7UUFDSjtNQUNGO0lBQ0YsQ0FBQyxDQUFDO0lBQ0YsTUFBTVEsT0FBTyxDQUFDQyxHQUFHLENBQUNmLFFBQVEsQ0FBQztJQUMzQixJQUFJaEIsTUFBTSxDQUFDZ0MsR0FBRyxFQUFFaEMsTUFBTSxDQUFDZ0MsR0FBRyxHQUFHVCxZQUFZLENBQUNTLEdBQUcsQ0FBQ2hDLE1BQU0sQ0FBQ2dDLEdBQUcsQ0FBQztFQUMzRDtFQUNBLE9BQU9oQyxNQUFNO0FBQ2YsQ0FBQztBQUFDaUMsT0FBQSxDQUFBbkMsY0FBQSxHQUFBQSxjQUFBO0FBRUYsTUFBTXlCLFlBQVksR0FBRztFQUNuQkcsSUFBSSxFQUFFLE1BQUFBLENBQU9RLEtBQUssRUFBRTtJQUFFM0I7RUFBTyxDQUFDLEtBQUs7SUFDakMsSUFBSTJCLEtBQUssS0FBSyxJQUFJLEVBQUU7TUFDbEIsT0FBTztRQUFFWixJQUFJLEVBQUU7TUFBUyxDQUFDO0lBQzNCO0lBQ0EsTUFBTTtNQUFFSSxJQUFJO01BQUVTO0lBQU8sQ0FBQyxHQUFHRCxLQUFLO0lBQzlCLElBQUlDLE1BQU0sRUFBRTtNQUNWLE1BQU07UUFBRUM7TUFBUyxDQUFDLEdBQUcsTUFBTSxJQUFBQyw0QkFBWSxFQUFDRixNQUFNLEVBQUU1QixNQUFNLENBQUM7TUFDdkQsT0FBQTFCLGFBQUEsQ0FBQUEsYUFBQSxLQUFZdUQsUUFBUTtRQUFFRSxNQUFNLEVBQUU7TUFBTTtJQUN0QyxDQUFDLE1BQU0sSUFBSVosSUFBSSxJQUFJQSxJQUFJLENBQUNhLElBQUksRUFBRTtNQUM1QixPQUFPO1FBQUVBLElBQUksRUFBRWIsSUFBSSxDQUFDYSxJQUFJO1FBQUVELE1BQU0sRUFBRSxNQUFNO1FBQUVFLEdBQUcsRUFBRWQsSUFBSSxDQUFDYztNQUFJLENBQUM7SUFDM0Q7SUFDQSxNQUFNLElBQUlDLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsZUFBZSxFQUFFLHNCQUFzQixDQUFDO0VBQzVFLENBQUM7RUFDRGxCLE9BQU8sRUFBRXBDLEtBQUssS0FBSztJQUNqQmlELE1BQU0sRUFBRSxTQUFTO0lBQ2pCTSxXQUFXLEVBQUV2RCxLQUFLLENBQUM0QixHQUFHLENBQUNPLFFBQVEsSUFBSSxDQUFDQSxRQUFRLENBQUNxQixRQUFRLEVBQUVyQixRQUFRLENBQUNzQixTQUFTLENBQUM7RUFDNUUsQ0FBQyxDQUFDO0VBQ0Z0QixRQUFRLEVBQUVuQyxLQUFLLElBQUFSLGFBQUEsQ0FBQUEsYUFBQSxLQUNWUSxLQUFLO0lBQ1JpRCxNQUFNLEVBQUU7RUFBVSxFQUNsQjtFQUNGTixHQUFHLEVBQUUzQyxLQUFLLElBQUk7SUFDWixNQUFNMEQsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJMUQsS0FBSyxDQUFDMkQsTUFBTSxFQUFFO01BQ2hCRCxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUc7UUFDZEUsSUFBSSxFQUFFNUQsS0FBSyxDQUFDMkQsTUFBTSxDQUFDQyxJQUFJO1FBQ3ZCQyxLQUFLLEVBQUU3RCxLQUFLLENBQUMyRCxNQUFNLENBQUNFO01BQ3RCLENBQUM7SUFDSDtJQUNBLElBQUk3RCxLQUFLLENBQUM4RCxLQUFLLEVBQUU7TUFDZjlELEtBQUssQ0FBQzhELEtBQUssQ0FBQ25FLE9BQU8sQ0FBQ29FLElBQUksSUFBSTtRQUMxQixNQUFNQyxjQUFjLEdBQUcsSUFBQUMsMEJBQVksRUFBQ0YsSUFBSSxDQUFDRyxNQUFNLENBQUM7UUFDaEQsSUFBSUYsY0FBYyxDQUFDaEMsSUFBSSxLQUFLLE9BQU8sRUFBRTtVQUNuQytCLElBQUksQ0FBQ0csTUFBTSxHQUFHRixjQUFjLENBQUNHLEVBQUU7UUFDakM7UUFDQVQsUUFBUSxDQUFDSyxJQUFJLENBQUNHLE1BQU0sQ0FBQyxHQUFHO1VBQ3RCTixJQUFJLEVBQUVHLElBQUksQ0FBQ0gsSUFBSTtVQUNmQyxLQUFLLEVBQUVFLElBQUksQ0FBQ0Y7UUFDZCxDQUFDO01BQ0gsQ0FBQyxDQUFDO0lBQ0o7SUFDQSxJQUFJN0QsS0FBSyxDQUFDb0UsS0FBSyxFQUFFO01BQ2ZwRSxLQUFLLENBQUNvRSxLQUFLLENBQUN6RSxPQUFPLENBQUNvRSxJQUFJLElBQUk7UUFDMUJMLFFBQVEsQ0FBQyxRQUFRSyxJQUFJLENBQUNNLFFBQVEsRUFBRSxDQUFDLEdBQUc7VUFDbENULElBQUksRUFBRUcsSUFBSSxDQUFDSCxJQUFJO1VBQ2ZDLEtBQUssRUFBRUUsSUFBSSxDQUFDRjtRQUNkLENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSjtJQUNBLE9BQU9ILFFBQVE7RUFDakIsQ0FBQztFQUNEcEIsUUFBUSxFQUFFLE1BQUFBLENBQ1JDLFdBQVcsRUFDWFYsS0FBSyxFQUNMN0IsS0FBSyxFQUNMc0UsYUFBYSxFQUNiekQsa0JBQWtCLEVBQ2xCO0lBQUVLLE1BQU07SUFBRXFELElBQUk7SUFBRUM7RUFBSyxDQUFDLEtBQ25CO0lBQ0gsSUFBSWhHLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDZSxLQUFLLENBQUMsQ0FBQ04sTUFBTSxLQUFLLENBQUMsRUFDakMsTUFBTSxJQUFJMEQsYUFBSyxDQUFDQyxLQUFLLENBQ25CRCxhQUFLLENBQUNDLEtBQUssQ0FBQ29CLGVBQWUsRUFDM0IsZ0ZBQWdGNUMsS0FBSyxFQUN2RixDQUFDO0lBRUgsTUFBTTZDLEVBQUUsR0FBRztNQUNUekMsSUFBSSxFQUFFLE9BQU87TUFDYjBDLEdBQUcsRUFBRTtJQUNQLENBQUM7SUFDRCxJQUFJQyxrQkFBa0IsR0FBRyxFQUFFO0lBRTNCLElBQUk1RSxLQUFLLENBQUM2RSxZQUFZLEVBQUU7TUFDdEJELGtCQUFrQixHQUFHLENBQ25CLE1BQU1uQyxPQUFPLENBQUNDLEdBQUcsQ0FDZjFDLEtBQUssQ0FBQzZFLFlBQVksQ0FBQ2pELEdBQUcsQ0FBQyxPQUFPaUIsS0FBSyxFQUFFL0QsQ0FBQyxLQUFLO1FBQ3pDLE1BQU1nRyxXQUFXLEdBQUcsTUFBTXJFLGNBQWMsQ0FBQyxRQUFRLEVBQUVvQyxLQUFLLEVBQUU7VUFDeERqQyxTQUFTLEVBQUUyQixXQUFXO1VBQ3RCeEIsY0FBYyxFQUFFdUQsYUFBYSxDQUFDTyxZQUFZLENBQUMvRixDQUFDLENBQUM7VUFDN0MrQixrQkFBa0I7VUFDbEJDLEdBQUcsRUFBRTtZQUFFSSxNQUFNO1lBQUVxRCxJQUFJO1lBQUVDO1VBQUs7UUFDNUIsQ0FBQyxDQUFDO1FBQ0YsT0FBTzlHLGdCQUFnQixDQUFDcUgsWUFBWSxDQUFDeEMsV0FBVyxFQUFFdUMsV0FBVyxFQUFFNUQsTUFBTSxFQUFFcUQsSUFBSSxFQUFFQyxJQUFJLENBQUM7TUFDcEYsQ0FBQyxDQUNILENBQUMsRUFDRDVDLEdBQUcsQ0FBQ29ELE1BQU0sS0FBSztRQUNmL0IsTUFBTSxFQUFFLFNBQVM7UUFDakJyQyxTQUFTLEVBQUUyQixXQUFXO1FBQ3RCMEMsUUFBUSxFQUFFRCxNQUFNLENBQUNDO01BQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0w7SUFFQSxJQUFJakYsS0FBSyxDQUFDa0YsR0FBRyxJQUFJTixrQkFBa0IsQ0FBQ2xGLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDOUMsSUFBSSxDQUFDTSxLQUFLLENBQUNrRixHQUFHLEVBQUVsRixLQUFLLENBQUNrRixHQUFHLEdBQUcsRUFBRTtNQUM5QmxGLEtBQUssQ0FBQ2tGLEdBQUcsR0FBR2xGLEtBQUssQ0FBQ2tGLEdBQUcsQ0FBQ3RELEdBQUcsQ0FBQ2lCLEtBQUssSUFBSTtRQUNqQyxNQUFNbUIsY0FBYyxHQUFHLElBQUFDLDBCQUFZLEVBQUNwQixLQUFLLENBQUM7UUFDMUMsSUFBSW1CLGNBQWMsQ0FBQ2hDLElBQUksS0FBS08sV0FBVyxFQUFFO1VBQ3ZDTSxLQUFLLEdBQUdtQixjQUFjLENBQUNHLEVBQUU7UUFDM0I7UUFDQSxPQUFPO1VBQ0xsQixNQUFNLEVBQUUsU0FBUztVQUNqQnJDLFNBQVMsRUFBRTJCLFdBQVc7VUFDdEIwQyxRQUFRLEVBQUVwQztRQUNaLENBQUM7TUFDSCxDQUFDLENBQUM7TUFDRjZCLEVBQUUsQ0FBQ0MsR0FBRyxDQUFDckYsSUFBSSxDQUFDO1FBQ1YyQyxJQUFJLEVBQUUsYUFBYTtRQUNuQmtELE9BQU8sRUFBRSxDQUFDLEdBQUduRixLQUFLLENBQUNrRixHQUFHLEVBQUUsR0FBR04sa0JBQWtCO01BQy9DLENBQUMsQ0FBQztJQUNKO0lBRUEsSUFBSTVFLEtBQUssQ0FBQ29GLE1BQU0sRUFBRTtNQUNoQlYsRUFBRSxDQUFDQyxHQUFHLENBQUNyRixJQUFJLENBQUM7UUFDVjJDLElBQUksRUFBRSxnQkFBZ0I7UUFDdEJrRCxPQUFPLEVBQUVuRixLQUFLLENBQUNvRixNQUFNLENBQUN4RCxHQUFHLENBQUNpQixLQUFLLElBQUk7VUFDakMsTUFBTW1CLGNBQWMsR0FBRyxJQUFBQywwQkFBWSxFQUFDcEIsS0FBSyxDQUFDO1VBQzFDLElBQUltQixjQUFjLENBQUNoQyxJQUFJLEtBQUtPLFdBQVcsRUFBRTtZQUN2Q00sS0FBSyxHQUFHbUIsY0FBYyxDQUFDRyxFQUFFO1VBQzNCO1VBQ0EsT0FBTztZQUNMbEIsTUFBTSxFQUFFLFNBQVM7WUFDakJyQyxTQUFTLEVBQUUyQixXQUFXO1lBQ3RCMEMsUUFBUSxFQUFFcEM7VUFDWixDQUFDO1FBQ0gsQ0FBQztNQUNILENBQUMsQ0FBQztJQUNKO0lBQ0EsT0FBTzZCLEVBQUU7RUFDWCxDQUFDO0VBQ0RsQyxPQUFPLEVBQUUsTUFBQUEsQ0FDUEQsV0FBVyxFQUNYVixLQUFLLEVBQ0w3QixLQUFLLEVBQ0xzRSxhQUFhLEVBQ2J6RCxrQkFBa0IsRUFDbEI7SUFBRUssTUFBTTtJQUFFcUQsSUFBSTtJQUFFQztFQUFLLENBQUMsS0FDbkI7SUFDSCxJQUFJaEcsTUFBTSxDQUFDUyxJQUFJLENBQUNlLEtBQUssQ0FBQyxDQUFDTixNQUFNLEdBQUcsQ0FBQyxJQUFJbEIsTUFBTSxDQUFDUyxJQUFJLENBQUNlLEtBQUssQ0FBQyxDQUFDTixNQUFNLEtBQUssQ0FBQyxFQUNsRSxNQUFNLElBQUkwRCxhQUFLLENBQUNDLEtBQUssQ0FDbkJELGFBQUssQ0FBQ0MsS0FBSyxDQUFDb0IsZUFBZSxFQUMzQiwyRUFBMkU1QyxLQUFLLEVBQ2xGLENBQUM7SUFFSCxJQUFJd0QsaUJBQWlCO0lBQ3JCLElBQUlyRixLQUFLLENBQUNzRixhQUFhLEVBQUU7TUFDdkIsTUFBTVIsV0FBVyxHQUFHLE1BQU1yRSxjQUFjLENBQUMsUUFBUSxFQUFFVCxLQUFLLENBQUNzRixhQUFhLEVBQUU7UUFDdEUxRSxTQUFTLEVBQUUyQixXQUFXO1FBQ3RCMUIsa0JBQWtCO1FBQ2xCRSxjQUFjLEVBQUV1RCxhQUFhLENBQUNnQixhQUFhO1FBQzNDeEUsR0FBRyxFQUFFO1VBQUVJLE1BQU07VUFBRXFELElBQUk7VUFBRUM7UUFBSztNQUM1QixDQUFDLENBQUM7TUFDRmEsaUJBQWlCLEdBQUcsTUFBTTNILGdCQUFnQixDQUFDcUgsWUFBWSxDQUNyRHhDLFdBQVcsRUFDWHVDLFdBQVcsRUFDWDVELE1BQU0sRUFDTnFELElBQUksRUFDSkMsSUFDRixDQUFDO01BQ0QsT0FBTztRQUNMdkIsTUFBTSxFQUFFLFNBQVM7UUFDakJyQyxTQUFTLEVBQUUyQixXQUFXO1FBQ3RCMEMsUUFBUSxFQUFFSSxpQkFBaUIsQ0FBQ0o7TUFDOUIsQ0FBQztJQUNIO0lBQ0EsSUFBSWpGLEtBQUssQ0FBQ3VGLElBQUksRUFBRTtNQUNkLElBQUlOLFFBQVEsR0FBR2pGLEtBQUssQ0FBQ3VGLElBQUk7TUFDekIsTUFBTXZCLGNBQWMsR0FBRyxJQUFBQywwQkFBWSxFQUFDZ0IsUUFBUSxDQUFDO01BQzdDLElBQUlqQixjQUFjLENBQUNoQyxJQUFJLEtBQUtPLFdBQVcsRUFBRTtRQUN2QzBDLFFBQVEsR0FBR2pCLGNBQWMsQ0FBQ0csRUFBRTtNQUM5QjtNQUNBLE9BQU87UUFDTGxCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCckMsU0FBUyxFQUFFMkIsV0FBVztRQUN0QjBDO01BQ0YsQ0FBQztJQUNIO0VBQ0Y7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
|