@datagrok-libraries/bio 5.3.0 → 5.4.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/package.json +1 -1
- package/src/utils/atomic-works.d.ts +2 -0
- package/src/utils/atomic-works.d.ts.map +1 -0
- package/src/utils/atomic-works.js +354 -0
- package/src/utils/const.d.ts +48 -0
- package/src/utils/const.d.ts.map +1 -0
- package/src/utils/const.js +29 -0
- package/src/utils/monomer-library.d.ts +43 -0
- package/src/utils/monomer-library.d.ts.map +1 -0
- package/src/utils/monomer-library.js +154 -0
- package/src/utils/monomer-utils.d.ts +10 -0
- package/src/utils/monomer-utils.d.ts.map +1 -0
- package/src/utils/monomer-utils.js +125 -0
- package/src/utils/notation-converter.d.ts.map +1 -1
- package/src/utils/notation-converter.js +5 -1
- package/src/utils/to-atomic-level.d.ts +3 -0
- package/src/utils/to-atomic-level.d.ts.map +1 -0
- package/src/utils/to-atomic-level.js +1009 -0
- package/src/utils/units-handler.d.ts +4 -0
- package/src/utils/units-handler.d.ts.map +1 -1
- package/src/utils/units-handler.js +6 -8
- package/tsconfig.json +1 -1
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/** HELM associated sdf libraries with monomer processing*/
|
|
2
|
+
export class MonomerLibrary {
|
|
3
|
+
constructor(sdf) {
|
|
4
|
+
this.monomerFields = [
|
|
5
|
+
'molecule', 'MonomerType', 'MonomerNaturalAnalogCode', 'MonomerName', 'MonomerCode', 'MonomerCaps', 'BranchMonomer',
|
|
6
|
+
];
|
|
7
|
+
this.library = {};
|
|
8
|
+
this.monomers = [];
|
|
9
|
+
const sdfReader = new SDFReader();
|
|
10
|
+
const data = sdfReader.getColls(sdf);
|
|
11
|
+
this.monomerFields.forEach((f) => {
|
|
12
|
+
if (!(f in data))
|
|
13
|
+
throw new Error(`Monomer library was not compiled: ${f} field is absent in provided file`);
|
|
14
|
+
if (data[f].length != data.molecule.length)
|
|
15
|
+
throw new Error(`Monomer library was not compiled: ${f} field is not presented for each monomer`);
|
|
16
|
+
});
|
|
17
|
+
for (let i = 0; i < data.molecule.length; i++) {
|
|
18
|
+
const linkData = this.getLinkData(data.molecule[i], data.MonomerCaps[i], data.MonomerName[i]);
|
|
19
|
+
const entry = {
|
|
20
|
+
mol: data.molecule[i],
|
|
21
|
+
type: 'Peptide',
|
|
22
|
+
code: data.MonomerCode[i],
|
|
23
|
+
analogueCode: data.MonomerNaturalAnalogCode[i],
|
|
24
|
+
linkages: linkData,
|
|
25
|
+
};
|
|
26
|
+
const name = data.MonomerCode[i] !== '.' ? data.MonomerCode[i] : data.MonomerName[i];
|
|
27
|
+
this.library[name] = entry;
|
|
28
|
+
this.monomers.push(name);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** getting full monomer information from monomer library
|
|
32
|
+
* @param {string} name
|
|
33
|
+
* @return {MonomerEntry}
|
|
34
|
+
*/
|
|
35
|
+
getMonomerEntry(name) {
|
|
36
|
+
if (!this.monomers.includes(name))
|
|
37
|
+
throw new Error(`Monomer library do not contain ${name} monomer`);
|
|
38
|
+
return this.library[name];
|
|
39
|
+
}
|
|
40
|
+
/** getting mol as string for monomer
|
|
41
|
+
* @param {string} name
|
|
42
|
+
* @return {string}
|
|
43
|
+
*/
|
|
44
|
+
getMonomerMol(name) {
|
|
45
|
+
if (!this.monomers.includes(name))
|
|
46
|
+
throw new Error(`Monomer library do not contain ${name} monomer`);
|
|
47
|
+
const entry = this.library[name];
|
|
48
|
+
let monomerMol = entry.mol.replace(/M RGP .+\n/, '');
|
|
49
|
+
//order matters
|
|
50
|
+
const links = Object.keys(entry.linkages);
|
|
51
|
+
for (const link of links)
|
|
52
|
+
monomerMol = monomerMol.replace('R#', entry.linkages[link].type + ' ');
|
|
53
|
+
return monomerMol;
|
|
54
|
+
}
|
|
55
|
+
/** getting the list of the minomers available in library*/
|
|
56
|
+
get monomerNames() {
|
|
57
|
+
return this.monomers;
|
|
58
|
+
}
|
|
59
|
+
static get id() {
|
|
60
|
+
return MonomerLibrary.libName;
|
|
61
|
+
}
|
|
62
|
+
getLinkData(mol, caps, name) {
|
|
63
|
+
var _a;
|
|
64
|
+
const rawData = mol.match(/M RGP .+/);
|
|
65
|
+
if (rawData === null)
|
|
66
|
+
throw new Error(`Monomer library was not compiled: ${name} entry has no RGP`);
|
|
67
|
+
const types = {};
|
|
68
|
+
(_a = caps.split('\n')) === null || _a === void 0 ? void 0 : _a.forEach((e) => {
|
|
69
|
+
types[e.match(/\d+/)[0]] = e.match(/(?<=\])\w+/)[0];
|
|
70
|
+
});
|
|
71
|
+
const data = rawData[0].replace('M RGP ', '').split(/\s+/);
|
|
72
|
+
const res = {};
|
|
73
|
+
for (let i = 0; i < parseInt(data[0]); i++) {
|
|
74
|
+
const code = parseInt(data[2 * i + 2]);
|
|
75
|
+
let type = '';
|
|
76
|
+
switch (code) {
|
|
77
|
+
case 1:
|
|
78
|
+
type = 'N-terminal';
|
|
79
|
+
break;
|
|
80
|
+
case 2:
|
|
81
|
+
type = 'C-terminal';
|
|
82
|
+
break;
|
|
83
|
+
case 3:
|
|
84
|
+
type = 'branch';
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
res[type] = { atomNumber: parseInt(data[2 * i + 1]), type: types[code] };
|
|
90
|
+
}
|
|
91
|
+
return res;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
MonomerLibrary.libName = 'monomerLibrary';
|
|
95
|
+
//TODO: merge with Chem version
|
|
96
|
+
class SDFReader {
|
|
97
|
+
constructor() {
|
|
98
|
+
this.dataColls = { 'molecule': [] };
|
|
99
|
+
}
|
|
100
|
+
getColls(content) {
|
|
101
|
+
this.read(content);
|
|
102
|
+
return this.dataColls;
|
|
103
|
+
}
|
|
104
|
+
read(content) {
|
|
105
|
+
content = content.replaceAll('\r', ''); //equalize old and new sdf standards
|
|
106
|
+
let startIndex = content.indexOf('$$$$', 0);
|
|
107
|
+
this.parse(content, 0, startIndex, (name, val) => {
|
|
108
|
+
this.dataColls[name] = [];
|
|
109
|
+
this.dataColls[name].push(val);
|
|
110
|
+
});
|
|
111
|
+
startIndex += 5;
|
|
112
|
+
while (startIndex > -1 && startIndex < content.length)
|
|
113
|
+
startIndex = this.readNext(content, startIndex);
|
|
114
|
+
}
|
|
115
|
+
readNext(content, startIndex) {
|
|
116
|
+
const nextStartIndex = content.indexOf('$$$$', startIndex);
|
|
117
|
+
if (nextStartIndex === -1) {
|
|
118
|
+
return -1;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
this.parse(content, startIndex, nextStartIndex, (name, val) => {
|
|
122
|
+
this.dataColls[name].push(val);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
if (nextStartIndex > -1)
|
|
126
|
+
return nextStartIndex + 5;
|
|
127
|
+
return nextStartIndex;
|
|
128
|
+
}
|
|
129
|
+
parse(content, start, end, handler) {
|
|
130
|
+
const molEnd = +content.indexOf('M END\n', start) + 7;
|
|
131
|
+
let localEnd = start;
|
|
132
|
+
this.dataColls['molecule'].push(content.substring(start, molEnd));
|
|
133
|
+
start = molEnd;
|
|
134
|
+
while (localEnd < end) {
|
|
135
|
+
start = content.indexOf('> <', localEnd);
|
|
136
|
+
if (start === -1)
|
|
137
|
+
return;
|
|
138
|
+
start += 3;
|
|
139
|
+
localEnd = content.indexOf('>\n', start);
|
|
140
|
+
if (localEnd === -1)
|
|
141
|
+
return;
|
|
142
|
+
const propertyName = content.substring(start, localEnd);
|
|
143
|
+
start = localEnd + 2;
|
|
144
|
+
localEnd = content.indexOf('\n', start);
|
|
145
|
+
if (localEnd === -1)
|
|
146
|
+
localEnd = end;
|
|
147
|
+
else if (content[localEnd + 1] != '\n')
|
|
148
|
+
localEnd = content.indexOf('\n', localEnd + 1);
|
|
149
|
+
handler(propertyName, content.substring(start, localEnd));
|
|
150
|
+
localEnd += 2;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub21lci1saWJyYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibW9ub21lci1saWJyYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLDJEQUEyRDtBQUMzRCxNQUFNLE9BQU8sY0FBYztJQVd6QixZQUFZLEdBQVc7UUFSZixrQkFBYSxHQUFhO1lBQ2hDLFVBQVUsRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZTtTQUNwSCxDQUFDO1FBRU0sWUFBTyxHQUFtQixFQUFFLENBQUM7UUFFN0IsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQUc5QixNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO2dCQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUU3RixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dCQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDdEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FB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LENBQUMsQ0FBQztnQkFDakIsUUFBUSxHQUFHLEdBQUcsQ0FBQztpQkFDWixJQUFJLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSTtnQkFDcEMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVqRCxPQUFPLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUQsUUFBUSxJQUFJLENBQUMsQ0FBQztTQUNmO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgTW9ub21lckVudHJ5ID0ge1xuICBtb2w6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nLFxuICBhbmFsb2d1ZUNvZGU6IHN0cmluZyxcbiAgbGlua2FnZXM6IHsgW2xpbms6IHN0cmluZ106IHsgYXRvbU51bWJlcjogbnVtYmVyLCB0eXBlOiBzdHJpbmcgfSB9XG59O1xuZXhwb3J0IHR5cGUgTW9ub21lckVudHJpZXMgPSB7IFtuYW1lOiBzdHJpbmddOiBNb25vbWVyRW50cnkgfTtcbmV4cG9ydCB0eXBlIExpbmtEYXRhID0geyBbbGluazogc3RyaW5nXTogeyBhdG9tTnVtYmVyOiBudW1iZXIsIHR5cGU6IHN0cmluZyB9IH07XG5cbi8qKiBIRUxNIGFzc29jaWF0ZWQgc2RmIGxpYnJhcmllcyB3aXRoIG1vbm9tZXIgcHJvY2Vzc2luZyovXG5leHBvcnQgY2xhc3MgTW9ub21lckxpYnJhcnkge1xuICBzdGF0aWMgbGliTmFtZSA9ICdtb25vbWVyTGlicmFyeSc7XG5cbiAgcHJpdmF0ZSBtb25vbWVyRmllbGRzOiBzdHJpbmdbXSA9IFtcbiAgICAnbW9sZWN1bGUnLCAnTW9ub21lclR5cGUnLCAnTW9ub21lck5hdHVyYWxBbmFsb2dDb2RlJywgJ01vbm9tZXJOYW1lJywgJ01vbm9tZXJDb2RlJywgJ01vbm9tZXJDYXBzJywgJ0JyYW5jaE1vbm9tZXInLFxuICBdO1xuXG4gIHByaXZhdGUgbGlicmFyeTogTW9ub21lckVudHJpZXMgPSB7fTtcblxuICBwcml2YXRlIG1vbm9tZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNkZjogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2RmUmVhZGVyID0gbmV3IFNERlJlYWRlcigpO1xuICAgIGNvbnN0IGRhdGEgPSBzZGZSZWFkZXIuZ2V0Q29sbHMoc2RmKTtcbiAgICB0aGlzLm1vbm9tZXJGaWVsZHMuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgaWYgKCEoZiBpbiBkYXRhKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb25vbWVyIGxpYnJhcnkgd2FzIG5vdCBjb21waWxlZDogJHtmfSBmaWVsZCBpcyBhYnNlbnQgaW4gcHJvdmlkZWQgZmlsZWApO1xuXG4gICAgICBpZiAoZGF0YVtmXS5sZW5ndGggIT0gZGF0YS5tb2xlY3VsZS5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9ub21lciBsaWJyYXJ5IHdhcyBub3QgY29tcGlsZWQ6ICR7Zn0gZmllbGQgaXMgbm90IHByZXNlbnRlZCBmb3IgZWFjaCBtb25vbWVyYCk7XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubW9sZWN1bGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGxpbmtEYXRhID0gdGhpcy5nZXRMaW5rRGF0YShkYXRhLm1vbGVjdWxlW2ldLCBkYXRhLk1vbm9tZXJDYXBzW2ldLCBkYXRhLk1vbm9tZXJOYW1lW2ldKTtcbiAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICBtb2w6IGRhdGEubW9sZWN1bGVbaV0sXG4gICAgICAgIHR5cGU6ICdQZXB0aWRlJyxcbiAgICAgICAgY29kZTogZGF0YS5Nb25vbWVyQ29kZVtpXSxcbiAgICAgICAgYW5hbG9ndWVDb2RlOiBkYXRhLk1vbm9tZXJOYXR1cmFsQW5hbG9nQ29kZVtpXSxcbiAgICAgICAgbGlua2FnZXM6IGxpbmtEYXRhLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbmFtZSA9IGRhdGEuTW9ub21lckNvZGVbaV0gIT09ICcuJyA/IGRhdGEuTW9ub21lckNvZGVbaV0gOiBkYXRhLk1vbm9tZXJOYW1lW2ldO1xuICAgICAgdGhpcy5saWJyYXJ5W25hbWVdID0gZW50cnk7XG4gICAgICB0aGlzLm1vbm9tZXJzLnB1c2gobmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIGdldHRpbmcgZnVsbCBtb25vbWVyIGluZm9ybWF0aW9uIGZyb20gbW9ub21lciBsaWJyYXJ5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEByZXR1cm4ge01vbm9tZXJFbnRyeX1cbiAgICovXG4gIHB1YmxpYyBnZXRNb25vbWVyRW50cnkobmFtZTogc3RyaW5nKTogTW9ub21lckVudHJ5IHtcbiAgICBpZiAoIXRoaXMubW9ub21lcnMuaW5jbHVkZXMobmFtZSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vbm9tZXIgbGlicmFyeSBkbyBub3QgY29udGFpbiAke25hbWV9IG1vbm9tZXJgKTtcblxuICAgIHJldHVybiB0aGlzLmxpYnJhcnlbbmFtZV07XG4gIH1cblxuICAvKiogZ2V0dGluZyBtb2wgYXMgc3RyaW5nIGZvciBtb25vbWVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHB1YmxpYyBnZXRNb25vbWVyTW9sKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLm1vbm9tZXJzLmluY2x1ZGVzKG5hbWUpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb25vbWVyIGxpYnJhcnkgZG8gbm90IGNvbnRhaW4gJHtuYW1lfSBtb25vbWVyYCk7XG5cblxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5saWJyYXJ5W25hbWVdO1xuICAgIGxldCBtb25vbWVyTW9sID0gZW50cnkubW9sLnJlcGxhY2UoL00gIFJHUCAgLitcXG4vLCAnJyk7XG5cbiAgICAvL29yZGVyIG1hdHRlcnNcbiAgICBjb25zdCBsaW5rcyA9IE9iamVjdC5rZXlzKGVudHJ5LmxpbmthZ2VzKTtcbiAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpXG4gICAgICBtb25vbWVyTW9sID0gbW9ub21lck1vbC5yZXBsYWNlKCdSIycsIGVudHJ5LmxpbmthZ2VzW2xpbmtdLnR5cGUgKyAnICcpO1xuXG5cbiAgICByZXR1cm4gbW9ub21lck1vbDtcbiAgfVxuXG4gIC8qKiBnZXR0aW5nIHRoZSBsaXN0IG9mIHRoZSBtaW5vbWVycyBhdmFpbGFibGUgaW4gbGlicmFyeSovXG4gIGdldCBtb25vbWVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLm1vbm9tZXJzO1xuICB9XG5cbiAgc3RhdGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNb25vbWVyTGlicmFyeS5saWJOYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMaW5rRGF0YShtb2w6IHN0cmluZywgY2Fwczogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBMaW5rRGF0YSB7XG4gICAgY29uc3QgcmF3RGF0YSA9IG1vbC5tYXRjaCgvTSAgUkdQICAuKy8pO1xuICAgIGlmIChyYXdEYXRhID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb25vbWVyIGxpYnJhcnkgd2FzIG5vdCBjb21waWxlZDogJHtuYW1lfSBlbnRyeSBoYXMgbm8gUkdQYCk7XG5cbiAgICBjb25zdCB0eXBlczogeyBbY29kZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBjYXBzLnNwbGl0KCdcXG4nKT8uZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgdHlwZXNbZS5tYXRjaCgvXFxkKy8pIVswXV0gPSBlLm1hdGNoKC8oPzw9XFxdKVxcdysvKSFbMF07XG4gICAgfSk7XG5cbiAgICBjb25zdCBkYXRhID0gcmF3RGF0YVswXS5yZXBsYWNlKCdNICBSR1AgICcsICcnKS5zcGxpdCgvXFxzKy8pO1xuICAgIGNvbnN0IHJlczogTGlua0RhdGEgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnNlSW50KGRhdGFbMF0pOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBwYXJzZUludChkYXRhWzIgKiBpICsgMl0pO1xuICAgICAgbGV0IHR5cGUgPSAnJztcbiAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0eXBlID0gJ04tdGVybWluYWwnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdHlwZSA9ICdDLXRlcm1pbmFsJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHR5cGUgPSAnYnJhbmNoJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlc1t0eXBlXSA9IHthdG9tTnVtYmVyOiBwYXJzZUludChkYXRhWzIgKiBpICsgMV0pLCB0eXBlOiB0eXBlc1tjb2RlXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxufVxuXG4vL1RPRE86IG1lcmdlIHdpdGggQ2hlbSB2ZXJzaW9uXG5jbGFzcyBTREZSZWFkZXIge1xuICBkYXRhQ29sbHM6IHsgW186IHN0cmluZ106IHN0cmluZyBbXSB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGF0YUNvbGxzID0geydtb2xlY3VsZSc6IFtdfTtcbiAgfVxuXG4gIGdldENvbGxzKGNvbnRlbnQ6IHN0cmluZyk6IHsgW186IHN0cmluZ106IHN0cmluZ1tdIH0ge1xuICAgIHRoaXMucmVhZChjb250ZW50KTtcbiAgICByZXR1cm4gdGhpcy5kYXRhQ29sbHM7XG4gIH1cblxuICByZWFkKGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2VBbGwoJ1xccicsICcnKTsgLy9lcXVhbGl6ZSBvbGQgYW5kIG5ldyBzZGYgc3RhbmRhcmRzXG4gICAgbGV0IHN0YXJ0SW5kZXggPSBjb250ZW50LmluZGV4T2YoJyQkJCQnLCAwKTtcbiAgICB0aGlzLnBhcnNlKGNvbnRlbnQsIDAsIHN0YXJ0SW5kZXgsIChuYW1lOiBzdHJpbmcsIHZhbDogc3RyaW5nKTogdm9pZCA9PiB7IC8vIFRPRE86IHR5cGVcbiAgICAgIHRoaXMuZGF0YUNvbGxzW25hbWVdID0gW107XG4gICAgICB0aGlzLmRhdGFDb2xsc1tuYW1lXS5wdXNoKHZhbCk7XG4gICAgfSk7XG4gICAgc3RhcnRJbmRleCArPSA1O1xuICAgIHdoaWxlIChzdGFydEluZGV4ID4gLTEgJiYgc3RhcnRJbmRleCA8IGNvbnRlbnQubGVuZ3RoKVxuICAgICAgc3RhcnRJbmRleCA9IHRoaXMucmVhZE5leHQoY29udGVudCwgc3RhcnRJbmRleCk7XG4gIH1cblxuICByZWFkTmV4dChjb250ZW50OiBzdHJpbmcsIHN0YXJ0SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgbmV4dFN0YXJ0SW5kZXggPSBjb250ZW50LmluZGV4T2YoJyQkJCQnLCBzdGFydEluZGV4KTtcbiAgICBpZiAobmV4dFN0YXJ0SW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyc2UoY29udGVudCwgc3RhcnRJbmRleCwgbmV4dFN0YXJ0SW5kZXgsXG4gICAgICAgIChuYW1lOiBzdHJpbmcsIHZhbDogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhQ29sbHNbbmFtZV0ucHVzaCh2YWwpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXJ0SW5kZXggPiAtMSlcbiAgICAgIHJldHVybiBuZXh0U3RhcnRJbmRleCArIDU7XG5cblxuICAgIHJldHVybiBuZXh0U3RhcnRJbmRleDtcbiAgfVxuXG4gIHBhcnNlKGNvbnRlbnQ6IHN0cmluZywgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIGhhbmRsZXI6IChuYW1lOiBzdHJpbmcsIHZhbDogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgbW9sRW5kID0gK2NvbnRlbnQuaW5kZXhPZignTSAgRU5EXFxuJywgc3RhcnQpICsgNztcbiAgICBsZXQgbG9jYWxFbmQgPSBzdGFydDtcbiAgICB0aGlzLmRhdGFDb2xsc1snbW9sZWN1bGUnXS5wdXNoKGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBtb2xFbmQpKTtcblxuICAgIHN0YXJ0ID0gbW9sRW5kO1xuICAgIHdoaWxlIChsb2NhbEVuZCA8IGVuZCkge1xuICAgICAgc3RhcnQgPSBjb250ZW50LmluZGV4T2YoJz4gPCcsIGxvY2FsRW5kKTtcbiAgICAgIGlmIChzdGFydCA9PT0gLTEpXG4gICAgICAgIHJldHVybjtcblxuXG4gICAgICBzdGFydCArPSAzO1xuICAgICAgbG9jYWxFbmQgPSBjb250ZW50LmluZGV4T2YoJz5cXG4nLCBzdGFydCk7XG4gICAgICBpZiAobG9jYWxFbmQgPT09IC0xKVxuICAgICAgICByZXR1cm47XG5cblxuICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGxvY2FsRW5kKTtcbiAgICAgIHN0YXJ0ID0gbG9jYWxFbmQgKyAyO1xuXG4gICAgICBsb2NhbEVuZCA9IGNvbnRlbnQuaW5kZXhPZignXFxuJywgc3RhcnQpO1xuICAgICAgaWYgKGxvY2FsRW5kID09PSAtMSlcbiAgICAgICAgbG9jYWxFbmQgPSBlbmQ7XG4gICAgICBlbHNlIGlmIChjb250ZW50W2xvY2FsRW5kICsgMV0gIT0gJ1xcbicpXG4gICAgICAgIGxvY2FsRW5kID0gY29udGVudC5pbmRleE9mKCdcXG4nLCBsb2NhbEVuZCArIDEpO1xuXG4gICAgICBoYW5kbGVyKHByb3BlcnR5TmFtZSwgY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGxvY2FsRW5kKSk7XG4gICAgICBsb2NhbEVuZCArPSAyO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as DG from 'datagrok-api/dg';
|
|
2
|
+
export declare const HELM_CORE_LIB_FILENAME = "/data/HELMCoreLibrary.json";
|
|
3
|
+
export declare function encodeMonomers(col: DG.Column): DG.Column | null;
|
|
4
|
+
export declare function getMolfilesFromSeq(col: DG.Column, monomersLibObject: any[]): any[][] | null;
|
|
5
|
+
export declare function getMolfilesFromSingleSeq(cell: DG.Cell, monomersLibObject: any[]): any[][] | null;
|
|
6
|
+
export declare function createMomomersMolDict(lib: any[]): {
|
|
7
|
+
[key: string]: string | any;
|
|
8
|
+
};
|
|
9
|
+
export declare function createJsonMonomerLibFromSdf(table: DG.DataFrame): any;
|
|
10
|
+
//# sourceMappingURL=monomer-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monomer-utils.d.ts","sourceRoot":"","sources":["monomer-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAUtC,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AAEnE,wBAAgB,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAwB/D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAuB3F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAoBhG;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAA;CAAE,CAYjF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,GAAG,CA8BpE"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// import * as ui from 'datagrok-api/ui';
|
|
2
|
+
import * as DG from 'datagrok-api/dg';
|
|
3
|
+
import * as grok from 'datagrok-api/grok';
|
|
4
|
+
// import {WebLogo, SplitterFunc} from '../../src/viewers/web-logo';
|
|
5
|
+
import { HELM_CORE_FIELDS, jsonSdfMonomerLibDict, MONOMER_ENCODE_MAX, MONOMER_ENCODE_MIN, SDF_MONOMER_NAME } from './const';
|
|
6
|
+
// import {UnitsHandler} from './units-handler';
|
|
7
|
+
import * as bio from '../../index';
|
|
8
|
+
export const HELM_CORE_LIB_FILENAME = '/data/HELMCoreLibrary.json';
|
|
9
|
+
export function encodeMonomers(col) {
|
|
10
|
+
let encodeSymbol = MONOMER_ENCODE_MIN;
|
|
11
|
+
const monomerSymbolDict = {};
|
|
12
|
+
const units = col.tags[DG.TAGS.UNITS];
|
|
13
|
+
const sep = col.getTag("separator" /* bio.TAGS.separator */);
|
|
14
|
+
const splitterFunc = bio.getSplitter(units, sep);
|
|
15
|
+
const encodedStringArray = [];
|
|
16
|
+
for (let i = 0; i < col.length; ++i) {
|
|
17
|
+
let encodedMonomerStr = '';
|
|
18
|
+
const monomers = splitterFunc(col.get(i));
|
|
19
|
+
monomers.forEach((m) => {
|
|
20
|
+
if (!monomerSymbolDict[m]) {
|
|
21
|
+
if (encodeSymbol > MONOMER_ENCODE_MAX) {
|
|
22
|
+
grok.shell.error(`Not enough symbols to encode monomers`);
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
monomerSymbolDict[m] = encodeSymbol;
|
|
26
|
+
encodeSymbol++;
|
|
27
|
+
}
|
|
28
|
+
encodedMonomerStr += String.fromCodePoint(monomerSymbolDict[m]);
|
|
29
|
+
});
|
|
30
|
+
encodedStringArray.push(encodedMonomerStr);
|
|
31
|
+
}
|
|
32
|
+
return DG.Column.fromStrings('encodedMolecules', encodedStringArray);
|
|
33
|
+
}
|
|
34
|
+
export function getMolfilesFromSeq(col, monomersLibObject) {
|
|
35
|
+
const units = col.tags[DG.TAGS.UNITS];
|
|
36
|
+
const sep = col.getTag('separator');
|
|
37
|
+
const splitterFunc = bio.getSplitter(units, sep);
|
|
38
|
+
const monomersDict = createMomomersMolDict(monomersLibObject);
|
|
39
|
+
const molFiles = [];
|
|
40
|
+
for (let i = 0; i < col.length; ++i) {
|
|
41
|
+
const macroMolecule = col.get(i);
|
|
42
|
+
const monomers = splitterFunc(macroMolecule);
|
|
43
|
+
const molFilesForSeq = [];
|
|
44
|
+
for (let j = 0; j < monomers.length; ++j) {
|
|
45
|
+
if (monomers[j]) {
|
|
46
|
+
if (!monomersDict[monomers[j]]) {
|
|
47
|
+
grok.shell.warning(`Monomer ${monomers[j]} is missing in HELM library. Structure cannot be created`);
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
// what is the reason of double conversion?
|
|
51
|
+
molFilesForSeq.push(JSON.parse(JSON.stringify(monomersDict[monomers[j]])));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
molFiles.push(molFilesForSeq);
|
|
55
|
+
}
|
|
56
|
+
return molFiles;
|
|
57
|
+
}
|
|
58
|
+
export function getMolfilesFromSingleSeq(cell, monomersLibObject) {
|
|
59
|
+
const units = cell.column.tags[DG.TAGS.UNITS];
|
|
60
|
+
const sep = cell.column.getTag('separator');
|
|
61
|
+
const splitterFunc = bio.getSplitter(units, sep);
|
|
62
|
+
const monomersDict = createMomomersMolDict(monomersLibObject);
|
|
63
|
+
const molFiles = [];
|
|
64
|
+
const macroMolecule = cell.value;
|
|
65
|
+
const monomers = splitterFunc(macroMolecule);
|
|
66
|
+
const molFilesForSeq = [];
|
|
67
|
+
for (let j = 0; j < monomers.length; ++j) {
|
|
68
|
+
if (monomers[j]) {
|
|
69
|
+
if (!monomersDict[monomers[j]]) {
|
|
70
|
+
grok.shell.warning(`Monomer ${monomers[j]} is missing in HELM library. Structure cannot be created`);
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
molFilesForSeq.push(JSON.parse(JSON.stringify(monomersDict[monomers[j]])));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
molFiles.push(molFilesForSeq);
|
|
77
|
+
return molFiles;
|
|
78
|
+
}
|
|
79
|
+
export function createMomomersMolDict(lib) {
|
|
80
|
+
const dict = {};
|
|
81
|
+
lib.forEach((it) => {
|
|
82
|
+
if (it['polymerType'] === 'PEPTIDE') {
|
|
83
|
+
const monomerObject = {};
|
|
84
|
+
HELM_CORE_FIELDS.forEach((field) => {
|
|
85
|
+
monomerObject[field] = it[field];
|
|
86
|
+
});
|
|
87
|
+
dict[it["symbol" /* HELM_FIELDS.SYMBOL */]] = monomerObject;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return dict;
|
|
91
|
+
}
|
|
92
|
+
export function createJsonMonomerLibFromSdf(table) {
|
|
93
|
+
const resultLib = [];
|
|
94
|
+
for (let i = 0; i < table.rowCount; i++) {
|
|
95
|
+
const monomer = {};
|
|
96
|
+
Object.keys(jsonSdfMonomerLibDict).forEach((key) => {
|
|
97
|
+
if (key === "symbol" /* HELM_FIELDS.SYMBOL */) {
|
|
98
|
+
const monomerSymbol = table.get(jsonSdfMonomerLibDict[key], i);
|
|
99
|
+
monomer[key] = monomerSymbol === '.' ? table.get(SDF_MONOMER_NAME, i) : monomerSymbol;
|
|
100
|
+
}
|
|
101
|
+
else if (key === "rgroups" /* HELM_FIELDS.RGROUPS */) {
|
|
102
|
+
const rgroups = table.get(jsonSdfMonomerLibDict[key], i).split('\n');
|
|
103
|
+
const jsonRgroups = [];
|
|
104
|
+
rgroups.forEach((g) => {
|
|
105
|
+
const rgroup = {};
|
|
106
|
+
const altAtom = g.substring(g.lastIndexOf(']') + 1);
|
|
107
|
+
const radicalNum = g.match(/\[R(\d+)\]/)[1];
|
|
108
|
+
rgroup["capGroupSmiles" /* RGROUP_FIELDS.CAP_GROUP_SMILES */] = altAtom === 'H' ? `[*:${radicalNum}][H]` : `O[*:${radicalNum}]`;
|
|
109
|
+
rgroup["alternateId" /* RGROUP_FIELDS.ALTER_ID */] = altAtom === 'H' ? `R${radicalNum}-H` : `R${radicalNum}-OH`;
|
|
110
|
+
rgroup["capGroupName" /* RGROUP_FIELDS.CAP_GROUP_NAME */] = altAtom === 'H' ? `H` : `OH`;
|
|
111
|
+
rgroup["label" /* RGROUP_FIELDS.LABEL */] = `R${radicalNum}`;
|
|
112
|
+
jsonRgroups.push(rgroup);
|
|
113
|
+
});
|
|
114
|
+
monomer[key] = jsonRgroups;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
if (jsonSdfMonomerLibDict[key])
|
|
118
|
+
monomer[key] = table.get(jsonSdfMonomerLibDict[key], i);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
resultLib.push(monomer);
|
|
122
|
+
}
|
|
123
|
+
return resultLib;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub21lci11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1vbm9tZXItdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUNBQXlDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUUxQyxvRUFBb0U7QUFDcEUsT0FBTyxFQUFjLGdCQUFnQixFQUFpQixxQkFBcUIsRUFDekUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDM0UsZ0RBQWdEO0FBRWhELE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFDO0FBRW5DLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLDRCQUE0QixDQUFDO0FBRW5FLE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBYztJQUMzQyxJQUFJLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztJQUN0QyxNQUFNLGlCQUFpQixHQUE4QixFQUFFLENBQUM7SUFDeEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLHNDQUFvQixDQUFDO0lBQzNDLE1BQU0sWUFBWSxHQUFxQixHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuRSxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNuQyxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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Y2VzQ29udGVudCI6WyIvLyBpbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuXG4vLyBpbXBvcnQge1dlYkxvZ28sIFNwbGl0dGVyRnVuY30gZnJvbSAnLi4vLi4vc3JjL3ZpZXdlcnMvd2ViLWxvZ28nO1xuaW1wb3J0IHtIRUxNX0ZJRUxEUywgSEVMTV9DT1JFX0ZJRUxEUywgUkdST1VQX0ZJRUxEUywganNvblNkZk1vbm9tZXJMaWJEaWN0LFxuICBNT05PTUVSX0VOQ09ERV9NQVgsIE1PTk9NRVJfRU5DT0RFX01JTiwgU0RGX01PTk9NRVJfTkFNRX0gZnJvbSAnLi9jb25zdCc7XG4vLyBpbXBvcnQge1VuaXRzSGFuZGxlcn0gZnJvbSAnLi91bml0cy1oYW5kbGVyJztcblxuaW1wb3J0ICogYXMgYmlvIGZyb20gJy4uLy4uL2luZGV4JztcblxuZXhwb3J0IGNvbnN0IEhFTE1fQ09SRV9MSUJfRklMRU5BTUUgPSAnL2RhdGEvSEVMTUNvcmVMaWJyYXJ5Lmpzb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTW9ub21lcnMoY29sOiBERy5Db2x1bW4pOiBERy5Db2x1bW4gfCBudWxsIHtcbiAgbGV0IGVuY29kZVN5bWJvbCA9IE1PTk9NRVJfRU5DT0RFX01JTjtcbiAgY29uc3QgbW9ub21lclN5bWJvbERpY3Q6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgY29uc3QgdW5pdHMgPSBjb2wudGFnc1tERy5UQUdTLlVOSVRTXTtcbiAgY29uc3Qgc2VwID0gY29sLmdldFRhZyhiaW8uVEFHUy5zZXBhcmF0b3IpO1xuICBjb25zdCBzcGxpdHRlckZ1bmM6IGJpby5TcGxpdHRlckZ1bmMgPSBiaW8uZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcCk7XG4gIGNvbnN0IGVuY29kZWRTdHJpbmdBcnJheSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbC5sZW5ndGg7ICsraSkge1xuICAgIGxldCBlbmNvZGVkTW9ub21lclN0ciA9ICcnO1xuICAgIGNvbnN0IG1vbm9tZXJzID0gc3BsaXR0ZXJGdW5jKGNvbC5nZXQoaSkpO1xuICAgIG1vbm9tZXJzLmZvckVhY2goKG0pID0+IHtcbiAgICAgIGlmICghbW9ub21lclN5bWJvbERpY3RbbV0pIHtcbiAgICAgICAgaWYgKGVuY29kZVN5bWJvbCA+IE1PTk9NRVJfRU5DT0RFX01BWCkge1xuICAgICAgICAgIGdyb2suc2hlbGwuZXJyb3IoYE5vdCBlbm91Z2ggc3ltYm9scyB0byBlbmNvZGUgbW9ub21lcnNgKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBtb25vbWVyU3ltYm9sRGljdFttXSA9IGVuY29kZVN5bWJvbDtcbiAgICAgICAgZW5jb2RlU3ltYm9sKys7XG4gICAgICB9XG4gICAgICBlbmNvZGVkTW9ub21lclN0ciArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChtb25vbWVyU3ltYm9sRGljdFttXSk7XG4gICAgfSk7XG4gICAgZW5jb2RlZFN0cmluZ0FycmF5LnB1c2goZW5jb2RlZE1vbm9tZXJTdHIpO1xuICB9XG4gIHJldHVybiBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2VuY29kZWRNb2xlY3VsZXMnLCBlbmNvZGVkU3RyaW5nQXJyYXkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9sZmlsZXNGcm9tU2VxKGNvbDogREcuQ29sdW1uLCBtb25vbWVyc0xpYk9iamVjdDogYW55W10pOiBhbnlbXVtdIHwgbnVsbCB7XG4gIGNvbnN0IHVuaXRzID0gY29sLnRhZ3NbREcuVEFHUy5VTklUU107XG4gIGNvbnN0IHNlcCA9IGNvbC5nZXRUYWcoJ3NlcGFyYXRvcicpO1xuICBjb25zdCBzcGxpdHRlckZ1bmM6IGJpby5TcGxpdHRlckZ1bmMgPSBiaW8uZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcCk7XG4gIGNvbnN0IG1vbm9tZXJzRGljdCA9IGNyZWF0ZU1vbW9tZXJzTW9sRGljdChtb25vbWVyc0xpYk9iamVjdCk7XG4gIGNvbnN0IG1vbEZpbGVzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWFjcm9Nb2xlY3VsZSA9IGNvbC5nZXQoaSk7XG4gICAgY29uc3QgbW9ub21lcnMgPSBzcGxpdHRlckZ1bmMobWFjcm9Nb2xlY3VsZSk7XG4gICAgY29uc3QgbW9sRmlsZXNGb3JTZXEgPSBbXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbm9tZXJzLmxlbmd0aDsgKytqKSB7XG4gICAgICBpZiAobW9ub21lcnNbal0pIHtcbiAgICAgICAgaWYgKCFtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSB7XG4gICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKGBNb25vbWVyICR7bW9ub21lcnNbal19IGlzIG1pc3NpbmcgaW4gSEVMTSBsaWJyYXJ5LiBTdHJ1Y3R1cmUgY2Fubm90IGJlIGNyZWF0ZWRgKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyB3aGF0IGlzIHRoZSByZWFzb24gb2YgZG91YmxlIGNvbnZlcnNpb24/XG4gICAgICAgIG1vbEZpbGVzRm9yU2VxLnB1c2goSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBtb2xGaWxlcy5wdXNoKG1vbEZpbGVzRm9yU2VxKTtcbiAgfVxuICByZXR1cm4gbW9sRmlsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2xmaWxlc0Zyb21TaW5nbGVTZXEoY2VsbDogREcuQ2VsbCwgbW9ub21lcnNMaWJPYmplY3Q6IGFueVtdKTogYW55W11bXSB8IG51bGwge1xuICBjb25zdCB1bml0cyA9IGNlbGwuY29sdW1uLnRhZ3NbREcuVEFHUy5VTklUU107XG4gIGNvbnN0IHNlcCA9IGNlbGwuY29sdW1uIS5nZXRUYWcoJ3NlcGFyYXRvcicpO1xuICBjb25zdCBzcGxpdHRlckZ1bmM6IGJpby5TcGxpdHRlckZ1bmMgPSBiaW8uZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcCk7XG4gIGNvbnN0IG1vbm9tZXJzRGljdCA9IGNyZWF0ZU1vbW9tZXJzTW9sRGljdChtb25vbWVyc0xpYk9iamVjdCk7XG4gIGNvbnN0IG1vbEZpbGVzID0gW107XG4gIGNvbnN0IG1hY3JvTW9sZWN1bGUgPSBjZWxsLnZhbHVlO1xuICBjb25zdCBtb25vbWVycyA9IHNwbGl0dGVyRnVuYyhtYWNyb01vbGVjdWxlKTtcbiAgY29uc3QgbW9sRmlsZXNGb3JTZXEgPSBbXTtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBtb25vbWVycy5sZW5ndGg7ICsraikge1xuICAgIGlmIChtb25vbWVyc1tqXSkge1xuICAgICAgaWYgKCFtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSB7XG4gICAgICAgIGdyb2suc2hlbGwud2FybmluZyhgTW9ub21lciAke21vbm9tZXJzW2pdfSBpcyBtaXNzaW5nIGluIEhFTE0gbGlicmFyeS4gU3RydWN0dXJlIGNhbm5vdCBiZSBjcmVhdGVkYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgbW9sRmlsZXNGb3JTZXEucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1vbm9tZXJzRGljdFttb25vbWVyc1tqXV0pKSk7XG4gICAgfVxuICB9XG4gIG1vbEZpbGVzLnB1c2gobW9sRmlsZXNGb3JTZXEpO1xuICByZXR1cm4gbW9sRmlsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb21vbWVyc01vbERpY3QobGliOiBhbnlbXSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0ge1xuICBjb25zdCBkaWN0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9ID0ge307XG4gIGxpYi5mb3JFYWNoKChpdCkgPT4ge1xuICAgIGlmIChpdFsncG9seW1lclR5cGUnXSA9PT0gJ1BFUFRJREUnKSB7XG4gICAgICBjb25zdCBtb25vbWVyT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICBIRUxNX0NPUkVfRklFTERTLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIG1vbm9tZXJPYmplY3RbZmllbGRdID0gaXRbZmllbGRdO1xuICAgICAgfSk7XG4gICAgICBkaWN0W2l0W0hFTE1fRklFTERTLlNZTUJPTF1dID0gbW9ub21lck9iamVjdDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGljdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUpzb25Nb25vbWVyTGliRnJvbVNkZih0YWJsZTogREcuRGF0YUZyYW1lKTogYW55IHtcbiAgY29uc3QgcmVzdWx0TGliID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGUucm93Q291bnQ7IGkrKykge1xuICAgIGNvbnN0IG1vbm9tZXI6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0gPSB7fTtcbiAgICBPYmplY3Qua2V5cyhqc29uU2RmTW9ub21lckxpYkRpY3QpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gSEVMTV9GSUVMRFMuU1lNQk9MKSB7XG4gICAgICAgIGNvbnN0IG1vbm9tZXJTeW1ib2wgPSB0YWJsZS5nZXQoanNvblNkZk1vbm9tZXJMaWJEaWN0W2tleV0sIGkpO1xuICAgICAgICBtb25vbWVyW2tleV0gPSBtb25vbWVyU3ltYm9sID09PSAnLicgPyB0YWJsZS5nZXQoU0RGX01PTk9NRVJfTkFNRSwgaSkgOiBtb25vbWVyU3ltYm9sO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IEhFTE1fRklFTERTLlJHUk9VUFMpIHtcbiAgICAgICAgY29uc3Qgcmdyb3VwcyA9IHRhYmxlLmdldChqc29uU2RmTW9ub21lckxpYkRpY3Rba2V5XSwgaSkuc3BsaXQoJ1xcbicpO1xuICAgICAgICBjb25zdCBqc29uUmdyb3VwczogYW55W10gPSBbXTtcbiAgICAgICAgcmdyb3Vwcy5mb3JFYWNoKChnOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCByZ3JvdXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0gPSB7fTtcbiAgICAgICAgICBjb25zdCBhbHRBdG9tID0gZy5zdWJzdHJpbmcoZy5sYXN0SW5kZXhPZignXScpICsgMSk7XG4gICAgICAgICAgY29uc3QgcmFkaWNhbE51bSA9IGcubWF0Y2goL1xcW1IoXFxkKylcXF0vKSFbMV07XG4gICAgICAgICAgcmdyb3VwW1JHUk9VUF9GSUVMRFMuQ0FQX0dST1VQX1NNSUxFU10gPSBhbHRBdG9tID09PSAnSCcgPyBgWyo6JHtyYWRpY2FsTnVtfV1bSF1gIDogYE9bKjoke3JhZGljYWxOdW19XWA7XG4gICAgICAgICAgcmdyb3VwW1JHUk9VUF9GSUVMRFMuQUxURVJfSURdID0gYWx0QXRvbSA9PT0gJ0gnID8gYFIke3JhZGljYWxOdW19LUhgIDogYFIke3JhZGljYWxOdW19LU9IYDtcbiAgICAgICAgICByZ3JvdXBbUkdST1VQX0ZJRUxEUy5DQVBfR1JPVVBfTkFNRV0gPSBhbHRBdG9tID09PSAnSCcgPyBgSGAgOiBgT0hgO1xuICAgICAgICAgIHJncm91cFtSR1JPVVBfRklFTERTLkxBQkVMXSA9IGBSJHtyYWRpY2FsTnVtfWA7XG4gICAgICAgICAganNvblJncm91cHMucHVzaChyZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9ub21lcltrZXldID0ganNvblJncm91cHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoKGpzb25TZGZNb25vbWVyTGliRGljdCBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9KVtrZXldKVxuICAgICAgICAgIG1vbm9tZXJba2V5XSA9IHRhYmxlLmdldCgoanNvblNkZk1vbm9tZXJMaWJEaWN0IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0pW2tleV0sIGkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdExpYi5wdXNoKG1vbm9tZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHRMaWI7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notation-converter.d.ts","sourceRoot":"","sources":["notation-converter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAiC,QAAQ,EAAe,YAAY,EAAO,MAAM,iBAAiB,CAAC;AAE1G,iFAAiF;AACjF,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,SAAS,CAA6B;IAE9C,SAAS,KAAK,QAAQ,IAAI,YAAY,CAIrC;IAEM,OAAO,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAE1C,WAAW,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAE9C,MAAM,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAEhD;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;
|
|
1
|
+
{"version":3,"file":"notation-converter.d.ts","sourceRoot":"","sources":["notation-converter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAiC,QAAQ,EAAe,YAAY,EAAO,MAAM,iBAAiB,CAAC;AAE1G,iFAAiF;AACjF,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,SAAS,CAA6B;IAE9C,SAAS,KAAK,QAAQ,IAAI,YAAY,CAIrC;IAEM,OAAO,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAE1C,WAAW,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAE9C,MAAM,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO;IAEhD;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAoB/B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,mBAAmB;IAkB3B;;;;;;;OAOG;IACI,mBAAmB,CACxB,aAAa,EAAE,MAAM,EACrB,eAAe,GAAE,MAAM,GAAG,IAAW,GACpC,MAAM;IAOT;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IA6B/B;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IAwDnB,OAAO,CAAC,sBAAsB;IAK9B;;;;;OAKG;IACI,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAE,MAAM,GAAG,IAAW,GAAG,EAAE,CAAC,MAAM;gBAmBjE,GAAG,EAAE,EAAE,CAAC,MAAM;CAGlC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as DG from 'datagrok-api/dg';
|
|
1
2
|
import { UnitsHandler } from './units-handler';
|
|
2
3
|
import { getSplitterForColumn, getStats } from './macromolecule';
|
|
3
4
|
/** Class for handling conversion of notation systems in Macromolecule columns */
|
|
@@ -35,6 +36,7 @@ export class NotationConverter extends UnitsHandler {
|
|
|
35
36
|
}
|
|
36
37
|
return fastaMonomersArray.join(separator);
|
|
37
38
|
});
|
|
39
|
+
newColumn.setTag(DG.TAGS.UNITS, "separator" /* NOTATION.SEPARATOR */);
|
|
38
40
|
newColumn.setTag("separator" /* TAGS.separator */, separator);
|
|
39
41
|
return newColumn;
|
|
40
42
|
}
|
|
@@ -98,6 +100,7 @@ export class NotationConverter extends UnitsHandler {
|
|
|
98
100
|
const sourcePolymer = this.column.get(idx);
|
|
99
101
|
return this.convertToHelmHelper(sourcePolymer, sourceGapSymbol, prefix, leftWrapper, rightWrapper, postfix);
|
|
100
102
|
});
|
|
103
|
+
newColumn.setTag(DG.TAGS.UNITS, "helm" /* NOTATION.HELM */);
|
|
101
104
|
return newColumn;
|
|
102
105
|
}
|
|
103
106
|
/**
|
|
@@ -132,6 +135,7 @@ export class NotationConverter extends UnitsHandler {
|
|
|
132
135
|
}
|
|
133
136
|
return fastaMonomersArray.join('');
|
|
134
137
|
});
|
|
138
|
+
newColumn.setTag(DG.TAGS.UNITS, "fasta" /* NOTATION.FASTA */);
|
|
135
139
|
return newColumn;
|
|
136
140
|
}
|
|
137
141
|
/**
|
|
@@ -218,4 +222,4 @@ export class NotationConverter extends UnitsHandler {
|
|
|
218
222
|
return this.convertHelm(tgtNotation, tgtSeparator);
|
|
219
223
|
}
|
|
220
224
|
}
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90YXRpb24tY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm90YXRpb24tY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUE0QyxNQUFNLGlCQUFpQixDQUFDO0FBRTFHLGlGQUFpRjtBQUNqRixNQUFNLE9BQU8saUJBQWtCLFNBQVEsWUFBWTtJQTBQakQsWUFBbUIsR0FBYztRQUMvQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUExUEwsY0FBUyxHQUF3QixJQUFJLENBQUM7SUEyUDlDLENBQUM7SUF6UEQsSUFBYyxRQUFRO1FBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRU0sT0FBTyxDQUFDLGNBQXdCLElBQWEsT0FBTyxjQUFjLGlDQUFtQixDQUFDLENBQUMsQ0FBQztJQUV4RixXQUFXLENBQUMsY0FBd0IsSUFBYSxPQUFPLGNBQWMseUNBQXVCLENBQUMsQ0FBQyxDQUFDO0lBRWhHLE1BQU0sQ0FBQyxjQUF3QixJQUFhLE9BQU8sY0FBYywrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFFN0Y7Ozs7OztPQU1HO0lBQ0ssdUJBQXVCLENBQUMsU0FBaUIsRUFBRSxpQkFBZ0MsSUFBSTtRQUNyRixJQUFJLGNBQWMsS0FBSyxJQUFJO1lBQ3pCLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFFekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksc0NBQW9CLENBQUM7UUFDeEQsc0RBQXNEO1FBQ3RELFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFX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QztRQUM3QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksWUFBWSxLQUFLLElBQUk7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRXBELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksWUFBWSxLQUFLLElBQUk7WUFDMUUsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUN6RSxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUN0RCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2FBQ25DLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsbUJBQW1CO1lBQ3RFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNsQyxpREFBaUQ7WUFDcEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxZQUFhLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBS0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBEbyBub3QgY2hhbmdlIHRoZXNlIGltcG9ydCBsaW5lcyB0byBtYXRjaCBleHRlcm5hbCBtb2R1bGVzIGluIHdlYnBhY2sgY29uZmlndXJhdGlvbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuaW1wb3J0IHtVbml0c0hhbmRsZXJ9IGZyb20gJy4vdW5pdHMtaGFuZGxlcic7XG5pbXBvcnQge2dldFNwbGl0dGVyRm9yQ29sdW1uLCBnZXRTdGF0cywgTk9UQVRJT04sIFNlcUNvbFN0YXRzLCBTcGxpdHRlckZ1bmMsIFRBR1N9IGZyb20gJy4vbWFjcm9tb2xlY3VsZSc7XG5cbi8qKiBDbGFzcyBmb3IgaGFuZGxpbmcgY29udmVyc2lvbiBvZiBub3RhdGlvbiBzeXN0ZW1zIGluIE1hY3JvbW9sZWN1bGUgY29sdW1ucyAqL1xuZXhwb3J0IGNsYXNzIE5vdGF0aW9uQ29udmVydGVyIGV4dGVuZHMgVW5pdHNIYW5kbGVyIHtcbiAgcHJpdmF0ZSBfc3BsaXR0ZXI6IFNwbGl0dGVyRnVuYyB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBnZXQgc3BsaXR0ZXIoKTogU3BsaXR0ZXJGdW5jIHtcbiAgICBpZiAodGhpcy5fc3BsaXR0ZXIgPT09IG51bGwpXG4gICAgICB0aGlzLl9zcGxpdHRlciA9IGdldFNwbGl0dGVyRm9yQ29sdW1uKHRoaXMuY29sdW1uKTtcbiAgICByZXR1cm4gdGhpcy5fc3BsaXR0ZXI7XG4gIH1cblxuICBwdWJsaWMgdG9GYXN0YSh0YXJnZXROb3RhdGlvbjogTk9UQVRJT04pOiBib29sZWFuIHsgcmV0dXJuIHRhcmdldE5vdGF0aW9uID09PSBOT1RBVElPTi5GQVNUQTsgfVxuXG4gIHB1YmxpYyB0b1NlcGFyYXRvcih0YXJnZXROb3RhdGlvbjogTk9UQVRJT04pOiBib29sZWFuIHsgcmV0dXJuIHRhcmdldE5vdGF0aW9uID09PSBOT1RBVElPTi5TRVBBUkFUT1I7IH1cblxuICBwdWJsaWMgdG9IZWxtKHRhcmdldE5vdGF0aW9uOiBOT1RBVElPTik6IGJvb2xlYW4geyByZXR1cm4gdGFyZ2V0Tm90YXRpb24gPT09IE5PVEFUSU9OLkhFTE07IH1cblxuICAvKipcbiAgICogQ29udmVydCBhIE1hY3JvbW9sZWN1bGUgY29sdW1uIGZyb20gRkFTVEEgdG8gU0VQQVJBVE9SIG5vdGF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXBhcmF0b3IgIEEgc3BlY2lmaWMgc2VwYXJhdG9yIHRvIGJlIHVzZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhc3RhR2FwU3ltYm9sICBHYXAgc3ltYm9sIGluIEZBU1RBLCAnLScgYnkgZGVmYXVsdFxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59ICAgICAgICBBIG5ldyBjb2x1bW4gaW4gU0VQQVJBVE9SIG5vdGF0aW9uXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRGYXN0YVRvU2VwYXJhdG9yKHNlcGFyYXRvcjogc3RyaW5nLCBmYXN0YUdhcFN5bWJvbDogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiBERy5Db2x1bW4ge1xuICAgIGlmIChmYXN0YUdhcFN5bWJvbCA9PT0gbnVsbClcbiAgICAgIGZhc3RhR2FwU3ltYm9sID0gdGhpcy5kZWZhdWx0R2FwU3ltYm9sO1xuXG4gICAgY29uc3QgbmV3Q29sdW1uID0gdGhpcy5nZXROZXdDb2x1bW4oTk9UQVRJT04uU0VQQVJBVE9SKTtcbiAgICAvLyBhc3NpZ24gdGhlIHZhbHVlcyB0byB0aGUgbmV3bHkgY3JlYXRlZCBlbXB0eSBjb2x1bW5cbiAgICBuZXdDb2x1bW4uaW5pdCgoaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGZhc3RhUG9seW1lciA9IHRoaXMuY29sdW1uLmdldChpZHgpO1xuICAgICAgY29uc3QgZmFzdGFNb25vbWVyc0FycmF5ID0gdGhpcy5zcGxpdHRlcihmYXN0YVBvbHltZXIpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmYXN0YU1vbm9tZXJzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGZhc3RhTW9ub21lcnNBcnJheVtpXSA9PT0gZmFzdGFHYXBTeW1ib2wpXG4gICAgICAgICAgZmFzdGFNb25vbWVyc0FycmF5W2ldID0gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuU0VQQVJBVE9SO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhc3RhTW9ub21lcnNBcnJheS5qb2luKHNlcGFyYXRvcik7XG4gICAgfSk7XG4gICAgbmV3Q29sdW1uLnNldFRhZyhUQUdTLnNlcGFyYXRvciwgc2VwYXJhdG9yKTtcbiAgICByZXR1cm4gbmV3Q29sdW1uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd3JhcHBlciBzdHJpbmdzIGZvciBIRUxNLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlXG4gICAqIG1hY3JvbW9sZWN1bGUgKHBlcHRpZGUsIEROQSwgUk5BKVxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQXJyYXkgb2Ygd3JhcHBlcnNcbiAgICovXG4gIHByaXZhdGUgZ2V0SGVsbVdyYXBwZXJzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBwcmVmaXggPSAodGhpcy5pc0RuYSgpKSA/ICdETkExeycgOlxuICAgICAgKHRoaXMuaXNSbmEoKSkgPyAnUk5BMXsnIDpcbiAgICAgICAgKHRoaXMuaXNQZXB0aWRlKCkpID8gJ1BFUFRJREUxeycgOlxuICAgICAgICAgICdVbmtub3duJzsgLy8gdGhpcyBjYXNlIHNob3VsZCBiZSBoYW5kbGVkIGFzIGV4Y2VwdGlvbmFsXG5cbiAgICBpZiAocHJlZml4ID09PSAnVW5rbm93bicpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05laXRoZXIgcGVwdGlkZSwgbm9yIG51Y2xlb3RpZGUnKTtcblxuICAgIGNvbnN0IHBvc3RmaXggPSAnfSQkJCc7XG4gICAgY29uc3QgbGVmdFdyYXBwZXIgPSAodGhpcy5pc0RuYSgpKSA/ICdEKCcgOlxuICAgICAgKHRoaXMuaXNSbmEoKSkgPyAnUignIDogJyc7IC8vIG5vIHdyYXBwZXIgZm9yIHBlcHRpZGVzXG4gICAgY29uc3QgcmlnaHRXcmFwcGVyID0gKHRoaXMuaXNEbmEoKSB8fCB0aGlzLmlzUm5hKCkpID8gJylQJyA6ICcnOyAvLyBubyB3cmFwcGVyIGZvciBwZXB0aWRlc1xuICAgIHJldHVybiBbcHJlZml4LCBsZWZ0V3JhcHBlciwgcmlnaHRXcmFwcGVyLCBwb3N0Zml4XTtcbiAgfVxuXG4gIC8vIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBjb252ZXJ0aW5nIHN0cmluZ3MgdG8gSEVMTVxuICBwcml2YXRlIGNvbnZlcnRUb0hlbG1IZWxwZXIoXG4gICAgc291cmNlUG9seW1lcjogc3RyaW5nLFxuICAgIHNvdXJjZUdhcFN5bWJvbDogc3RyaW5nLFxuICAgIHByZWZpeDogc3RyaW5nLFxuICAgIGxlZnRXcmFwcGVyOiBzdHJpbmcsXG4gICAgcmlnaHRXcmFwcGVyOiBzdHJpbmcsXG4gICAgcG9zdGZpeDogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgbW9ub21lckFycmF5ID0gdGhpcy5zcGxpdHRlcihzb3VyY2VQb2x5bWVyKTtcbiAgICBjb25zdCBtb25vbWVySGVsbUFycmF5OiBzdHJpbmdbXSA9IG1vbm9tZXJBcnJheS5tYXAoKG1tOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtbSA9PT0gc291cmNlR2FwU3ltYm9sKVxuICAgICAgICByZXR1cm4gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuSEVMTTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGAke2xlZnRXcmFwcGVyfSR7bW19JHtyaWdodFdyYXBwZXJ9YDtcbiAgICB9KTtcbiAgICByZXR1cm4gYCR7cHJlZml4fSR7bW9ub21lckhlbG1BcnJheS5qb2luKCcuJyl9JHtwb3N0Zml4fWA7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIHN0cmluZyB3aXRoIFNFUEFSQVRPUi9GQVNUQSBub3RhdGlvbiB0byBIRUxNXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VQb2x5bWVyICBBIHN0cmluZyB0byBiZSBjb252ZXJ0ZWRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBzb3VyY2VHYXBTeW1ib2wgIEFuIG9wdGlvbmFsIGdhcCBzeW1ib2wsIHNldCB0b1xuICAgKiBkZWZhdWx0IHZhbHVlcyAoJy0nIGZvciBGQVNUQSBhbmQgJycgZm9yIFNFUEFSQVRPUikgdW5sZXNzIHNwZWNpZmllZFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICBUaGUgdGFyZ2V0IEhFTE0gc3RyaW5nXG4gICAqL1xuICBwdWJsaWMgY29udmVydFN0cmluZ1RvSGVsbShcbiAgICBzb3VyY2VQb2x5bWVyOiBzdHJpbmcsXG4gICAgc291cmNlR2FwU3ltYm9sOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICApOiBzdHJpbmcge1xuICAgIGlmIChzb3VyY2VHYXBTeW1ib2wgPT09IG51bGwpXG4gICAgICBzb3VyY2VHYXBTeW1ib2wgPSB0aGlzLmRlZmF1bHRHYXBTeW1ib2w7XG4gICAgY29uc3QgW3ByZWZpeCwgbGVmdFdyYXBwZXIsIHJpZ2h0V3JhcHBlciwgcG9zdGZpeF0gPSB0aGlzLmdldEhlbG1XcmFwcGVycygpO1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb0hlbG1IZWxwZXIoc291cmNlUG9seW1lciwgc291cmNlR2FwU3ltYm9sLCBwcmVmaXgsIGxlZnRXcmFwcGVyLCByaWdodFdyYXBwZXIsIHBvc3RmaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBjb2x1bW4gdG8gSEVMTVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHNvdXJjZUdhcFN5bWJvbFxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRUb0hlbG0oc291cmNlR2FwU3ltYm9sOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IERHLkNvbHVtbiB7XG4gICAgaWYgKHNvdXJjZUdhcFN5bWJvbCA9PT0gbnVsbClcbiAgICAgIHNvdXJjZUdhcFN5bWJvbCA9IHRoaXMuZGVmYXVsdEdhcFN5bWJvbDtcblxuICAgIGNvbnN0IFtwcmVmaXgsIGxlZnRXcmFwcGVyLCByaWdodFdyYXBwZXIsIHBvc3RmaXhdID0gdGhpcy5nZXRIZWxtV3JhcHBlcnMoKTtcblxuICAgIGNvbnN0IG5ld0NvbHVtbiA9IHRoaXMuZ2V0TmV3Q29sdW1uKE5PVEFUSU9OLkhFTE0pO1xuICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBlbXB0eSBjb2x1bW5cbiAgICBuZXdDb2x1bW4uaW5pdCgoaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZVBvbHltZXIgPSB0aGlzLmNvbHVtbi5nZXQoaWR4KTtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb0hlbG1IZWxwZXIoc291cmNlUG9seW1lciwgc291cmNlR2FwU3ltYm9sISwgcHJlZml4LCBsZWZ0V3JhcHBlciwgcmlnaHRXcmFwcGVyLCBwb3N0Zml4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3Q29sdW1uO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgU0VQQVJBVE9SIGNvbHVtbiB0byBGQVNUQSBub3RhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGZhc3RhR2FwU3ltYm9sIE9wdGlvbmFsIGdhcCBzeW1ib2wgZm9yIEZBU1RBXG4gICAqIEByZXR1cm4ge0RHLkNvbHVtbn0gIENvbnZlcnRlZCBjb2x1bW5cbiAgICovXG4gIHByaXZhdGUgY29udmVydFNlcGFyYXRvclRvRmFzdGEoZmFzdGFHYXBTeW1ib2w6IHN0cmluZyB8IG51bGwgPSBudWxsKTogREcuQ29sdW1uIHtcbiAgICBpZiAoZmFzdGFHYXBTeW1ib2wgPT09IG51bGwpXG4gICAgICBmYXN0YUdhcFN5bWJvbCA9IFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LkZBU1RBO1xuXG4gICAgY29uc3QgbmV3Q29sdW1uID0gdGhpcy5nZXROZXdDb2x1bW4oTk9UQVRJT04uRkFTVEEpO1xuICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBlbXB0eSBjb2x1bW5cbiAgICBuZXdDb2x1bW4uaW5pdCgoaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHNlcGFyYXRvclBvbHltZXIgPSB0aGlzLmNvbHVtbi5nZXQoaWR4KTtcbiAgICAgIC8vIGl0ZW1zIGNhbiBiZSBtb25vbWVycyBvciBzZXBhcmF0b3JzXG4gICAgICBjb25zdCBzZXBhcmF0b3JJdGVtc0FycmF5ID0gdGhpcy5zcGxpdHRlcihzZXBhcmF0b3JQb2x5bWVyKTtcbiAgICAgIGNvbnN0IGZhc3RhTW9ub21lcnNBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VwYXJhdG9ySXRlbXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gc2VwYXJhdG9ySXRlbXNBcnJheVtpXTtcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZmFzdGFNb25vbWVyc0FycmF5LnB1c2goZmFzdGFHYXBTeW1ib2whKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyB0aGUgY2FzZSBvZiBhIG11bHRpLWNoYXJhY3RlciBtb25vbWVyXG4gICAgICAgICAgY29uc3QgbW9ub21lciA9ICdbJyArIGl0ZW0gKyAnXSc7XG4gICAgICAgICAgZmFzdGFNb25vbWVyc0FycmF5LnB1c2gobW9ub21lcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFzdGFNb25vbWVyc0FycmF5LnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYXN0YU1vbm9tZXJzQXJyYXkuam9pbignJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ29udmVydCBIRUxNIGNvbHVtbiB0byBGQVNUQS9TRVBBUkFUT1JcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRndE5vdGF0aW9uICAgIFRhcmdldCBub3RhdGlvbjogRkFTVEEgb3IgU0VQQVJBVE9SXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0Z3RTZXBhcmF0b3IgICBPcHRpb25hbCB0YXJnZXQgc2VwYXJhdG9yIChmb3IgSEVMTSAtPlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHRndEdhcFN5bWJvbCAgIE9wdGlvbmFsIHRhcmdldCBnYXAgc3ltYm9sXG4gICAqIFNFUEFSQVRPUilcbiAgICogQHJldHVybiB7REcuQ29sdW1ufSBDb252ZXJ0ZWQgY29sdW1uXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRIZWxtKFxuICAgIHRndE5vdGF0aW9uOiBzdHJpbmcsXG4gICAgdGd0U2VwYXJhdG9yOiBzdHJpbmcgPSAnJyxcbiAgICB0Z3RHYXBTeW1ib2w6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICk6IERHLkNvbHVtbiB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBjb250YWluIGNhbGxzIG9mIGlzRG5hKCkgYW5kIGlzUm5hKCksIGZvclxuICAgIC8vIHNvdXJjZSBoZWxtIGNvbHVtbnMgbWF5IGNvbnRhaW4gUk5BLCBETkEgYW5kIFBUIGFjcm9zcyBkaWZmZXJlbnQgcm93c1xuICAgIGlmICh0Z3RHYXBTeW1ib2wgPT09IG51bGwpIHtcbiAgICAgIHRndEdhcFN5bWJvbCA9ICh0aGlzLnRvRmFzdGEodGd0Tm90YXRpb24gYXMgTk9UQVRJT04pKSA/XG4gICAgICAgIFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LkZBU1RBIDpcbiAgICAgICAgVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuU0VQQVJBVE9SO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRvU2VwYXJhdG9yKHRndE5vdGF0aW9uIGFzIE5PVEFUSU9OKSAmJiB0Z3RTZXBhcmF0b3IgPT09ICcnKVxuICAgICAgdGd0U2VwYXJhdG9yID0gdGhpcy5zZXBhcmF0b3I7XG5cbiAgICBjb25zdCBoZWxtV3JhcHBlcnNSZSA9IC8oUlxcKHxEXFwofFxcKXxQKS9nO1xuICAgIGNvbnN0IG5ld0NvbHVtbiA9IHRoaXMuZ2V0TmV3Q29sdW1uKHRndE5vdGF0aW9uIGFzIE5PVEFUSU9OKTtcbiAgICAvLyBhc3NpZ24gdGhlIHZhbHVlcyB0byB0aGUgZW1wdHkgY29sdW1uXG4gICAgbmV3Q29sdW1uLmluaXQoKGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBoZWxtUG9seW1lciA9IHRoaXMuY29sdW1uLmdldChpZHgpO1xuXG4gICAgICAvLyB3ZSBjYW5ub3QgdXNlIGlzRG5hKCkgb3IgaXNSbmEoKSBiZWNhdXNlIHNvdXJjZSBoZWxtIGNvbHVtbnMgY2FuXG4gICAgICAvLyBjb250YWluIEROQSwgUk5BIGFuZCBQVCBpbiBkaWZmZXJlbnQgY2VsbHMsIHNvIHRoZSBjb3JyZXNwb25kaW5nXG4gICAgICAvLyB0YWdzIGNhbm5vdCBiZSBzZXQgZm9yIHRoZSB3aG9sZSBjb2x1bW5cbiAgICAgIGNvbnN0IGlzTnVjbGVvdGlkZSA9IGhlbG1Qb2x5bWVyLnN0YXJ0c1dpdGgoJ0ROQScpIHx8IGhlbG1Qb2x5bWVyLnN0YXJ0c1dpdGgoJ1JOQScpO1xuXG4gICAgICAvLyBpdGVtcyBjYW4gYmUgbW9ub21lcnMgb3IgaGVsbXNcbiAgICAgIGNvbnN0IGhlbG1JdGVtc0FycmF5ID0gdGhpcy5zcGxpdHRlcihoZWxtUG9seW1lcik7XG4gICAgICBjb25zdCB0Z3RNb25vbWVyc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWxtSXRlbXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgaXRlbSA9IGhlbG1JdGVtc0FycmF5W2ldO1xuICAgICAgICBpZiAoaXNOdWNsZW90aWRlKVxuICAgICAgICAgIGl0ZW0gPSBpdGVtLnJlcGxhY2UoaGVsbVdyYXBwZXJzUmUsICcnKTtcbiAgICAgICAgaWYgKGl0ZW0gPT09IFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LkhFTE0pIHtcbiAgICAgICAgICB0Z3RNb25vbWVyc0FycmF5LnB1c2godGd0R2FwU3ltYm9sISk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50b0Zhc3RhKHRndE5vdGF0aW9uIGFzIE5PVEFUSU9OKSAmJiBpdGVtLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyB0aGUgY2FzZSBvZiBhIG11bHRpLWNoYXJhY3RlciBtb25vbWVyIGNvbnZlcnRlZCB0byBGQVNUQVxuICAgICAgICAgIGNvbnN0IG1vbm9tZXIgPSAnWycgKyBpdGVtICsgJ10nO1xuICAgICAgICAgIHRndE1vbm9tZXJzQXJyYXkucHVzaChtb25vbWVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0Z3RNb25vbWVyc0FycmF5LnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0Z3RNb25vbWVyc0FycmF5LmpvaW4odGd0U2VwYXJhdG9yKTtcbiAgICB9KTtcblxuICAgIC8vIFRBR1MuYWxpZ25lZCBpcyBtYW5kYXRvcnkgZm9yIGNvbHVtbnMgb2YgTk9UQVRJT04uRkFTVEEgYW5kIE5PVEFUSU9OLlNFUEFSQVRPUlxuICAgIGNvbnN0IHNwbGl0dGVyOiBTcGxpdHRlckZ1bmMgPSBnZXRTcGxpdHRlckZvckNvbHVtbihuZXdDb2x1bW4pO1xuICAgIGNvbnN0IHN0YXRzOiBTZXFDb2xTdGF0cyA9IGdldFN0YXRzKG5ld0NvbHVtbiwgNSwgc3BsaXR0ZXIpO1xuICAgIGNvbnN0IGFsaWduZWQgPSBzdGF0cy5zYW1lTGVuZ3RoID8gJ1NFUS5NU0EnIDogJ1NFUSc7XG4gICAgbmV3Q29sdW1uLnNldFRhZyhUQUdTLmFsaWduZWQsIGFsaWduZWQpO1xuXG4gICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEhlbG1Ub1NlcGFyYXRvcigpOiBERy5Db2x1bW4ge1xuICAgIC8vIFRPRE86IGltcGxlbWVudGF0aW9yZXR1cm4gdGhpcy5nZXROZXdDb2x1bW4oKTtcbiAgICByZXR1cm4gdGhpcy5nZXROZXdDb2x1bW4oTk9UQVRJT04uU0VQQVJBVE9SKTtcbiAgfVxuXG4gIC8qKiBEaXNwYXRjaGVyIG1ldGhvZCBmb3Igbm90YXRpb24gY29udmVyc2lvblxuICAgKlxuICAgKiBAcGFyYW0ge05PVEFUSU9OfSB0Z3ROb3RhdGlvbiAgIE5vdGF0aW9uIHdlIHdhbnQgdG8gY29udmVydCB0b1xuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHRndFNlcGFyYXRvciAgIFBvc3NpYmxlIHNlcGFyYXRvclxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59ICAgICAgICAgICAgICAgIENvbnZlcnRlZCBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBjb252ZXJ0KHRndE5vdGF0aW9uOiBOT1RBVElPTiwgdGd0U2VwYXJhdG9yOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IERHLkNvbHVtbiB7XG4gICAgLy8gcG9zc2libGUgZXhjZXB0aW9uc1xuICAgIGlmICh0aGlzLm5vdGF0aW9uID09PSB0Z3ROb3RhdGlvbilcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGd0IG5vdGF0aW9uIGlzIGludmFsaWQnKTtcbiAgICBpZiAodGhpcy50b1NlcGFyYXRvcih0Z3ROb3RhdGlvbikgJiYgdGd0U2VwYXJhdG9yID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0Z3Qgc2VwYXJhdG9yIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIGlmICh0aGlzLmlzRmFzdGEoKSAmJiB0aGlzLnRvU2VwYXJhdG9yKHRndE5vdGF0aW9uKSAmJiB0Z3RTZXBhcmF0b3IgIT09IG51bGwpXG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RmFzdGFUb1NlcGFyYXRvcih0Z3RTZXBhcmF0b3IpO1xuICAgIGVsc2UgaWYgKCh0aGlzLmlzRmFzdGEoKSB8fCB0aGlzLmlzU2VwYXJhdG9yKCkpICYmIHRoaXMudG9IZWxtKHRndE5vdGF0aW9uKSlcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb0hlbG0oKTtcbiAgICBlbHNlIGlmICh0aGlzLmlzU2VwYXJhdG9yKCkgJiYgdGhpcy50b0Zhc3RhKHRndE5vdGF0aW9uKSlcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRTZXBhcmF0b3JUb0Zhc3RhKCk7XG4gICAgZWxzZSBpZiAodGhpcy5pc0hlbG0oKSAmJiB0aGlzLnRvRmFzdGEodGd0Tm90YXRpb24pKSAvLyB0aGUgY2FzZSBvZiBIRUxNXG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0SGVsbSh0Z3ROb3RhdGlvbik7XG4gICAgZWxzZSAvLyB0aGlzLmlzSGVsbSgpICYmIHRoaXMudG9TZXBhcmF0b3IodGd0Tm90YXRpb24pXG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0SGVsbSh0Z3ROb3RhdGlvbiwgdGd0U2VwYXJhdG9yISk7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoY29sOiBERy5Db2x1bW4pIHtcbiAgICBzdXBlcihjb2wpO1xuICB9XG59XG4iXX0=
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90YXRpb24tY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm90YXRpb24tY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxRQUFRLEVBQTRDLE1BQU0saUJBQWlCLENBQUM7QUFFMUcsaUZBQWlGO0FBQ2pGLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZO0lBNlBqRCxZQUFtQixHQUFjO1FBQy9CLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQTdQTCxjQUFTLEdBQXdCLElBQUksQ0FBQztJQThQOUMsQ0FBQztJQTVQRCxJQUFjLFFBQVE7UUFDcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUk7WUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxPQUFPLENBQUMsY0FBd0IsSUFBYSxPQUFPLGNBQWMsaUNBQW1CLENBQUMsQ0FBQyxDQUFDO0lBRXhGLFdBQVcsQ0FBQyxjQUF3QixJQUFhLE9BQU8sY0FBYyx5Q0FBdUIsQ0FBQyxDQUFDLENBQUM7SUFFaEcsTUFBTSxDQUFDLGNBQXdCLElBQWEsT0FBTyxjQUFjLCtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUU3Rjs7Ozs7O09BTUc7SUFDSyx1QkFBdUIsQ0FBQyxTQUFpQixFQUFFLGlCQUFnQyxJQUFJO1FBQ3JGLElBQUksY0FBYyxLQUFLLElBQUk7WUFDekIsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUV6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxzQ0FBb0IsQ0FBQztRQUN4RCxzREFB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O0lBQ3hELENBQUM7Q0FLRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIERvIG5vdCBjaGFuZ2UgdGhlc2UgaW1wb3J0IGxpbmVzIHRvIG1hdGNoIGV4dGVybmFsIG1vZHVsZXMgaW4gd2VicGFjayBjb25maWd1cmF0aW9uICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQge1VuaXRzSGFuZGxlcn0gZnJvbSAnLi91bml0cy1oYW5kbGVyJztcbmltcG9ydCB7Z2V0U3BsaXR0ZXJGb3JDb2x1bW4sIGdldFN0YXRzLCBOT1RBVElPTiwgU2VxQ29sU3RhdHMsIFNwbGl0dGVyRnVuYywgVEFHU30gZnJvbSAnLi9tYWNyb21vbGVjdWxlJztcblxuLyoqIENsYXNzIGZvciBoYW5kbGluZyBjb252ZXJzaW9uIG9mIG5vdGF0aW9uIHN5c3RlbXMgaW4gTWFjcm9tb2xlY3VsZSBjb2x1bW5zICovXG5leHBvcnQgY2xhc3MgTm90YXRpb25Db252ZXJ0ZXIgZXh0ZW5kcyBVbml0c0hhbmRsZXIge1xuICBwcml2YXRlIF9zcGxpdHRlcjogU3BsaXR0ZXJGdW5jIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIGdldCBzcGxpdHRlcigpOiBTcGxpdHRlckZ1bmMge1xuICAgIGlmICh0aGlzLl9zcGxpdHRlciA9PT0gbnVsbClcbiAgICAgIHRoaXMuX3NwbGl0dGVyID0gZ2V0U3BsaXR0ZXJGb3JDb2x1bW4odGhpcy5jb2x1bW4pO1xuICAgIHJldHVybiB0aGlzLl9zcGxpdHRlcjtcbiAgfVxuXG4gIHB1YmxpYyB0b0Zhc3RhKHRhcmdldE5vdGF0aW9uOiBOT1RBVElPTik6IGJvb2xlYW4geyByZXR1cm4gdGFyZ2V0Tm90YXRpb24gPT09IE5PVEFUSU9OLkZBU1RBOyB9XG5cbiAgcHVibGljIHRvU2VwYXJhdG9yKHRhcmdldE5vdGF0aW9uOiBOT1RBVElPTik6IGJvb2xlYW4geyByZXR1cm4gdGFyZ2V0Tm90YXRpb24gPT09IE5PVEFUSU9OLlNFUEFSQVRPUjsgfVxuXG4gIHB1YmxpYyB0b0hlbG0odGFyZ2V0Tm90YXRpb246IE5PVEFUSU9OKTogYm9vbGVhbiB7IHJldHVybiB0YXJnZXROb3RhdGlvbiA9PT0gTk9UQVRJT04uSEVMTTsgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgTWFjcm9tb2xlY3VsZSBjb2x1bW4gZnJvbSBGQVNUQSB0byBTRVBBUkFUT1Igbm90YXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlcGFyYXRvciAgQSBzcGVjaWZpYyBzZXBhcmF0b3IgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFzdGFHYXBTeW1ib2wgIEdhcCBzeW1ib2wgaW4gRkFTVEEsICctJyBieSBkZWZhdWx0XG4gICAqIEByZXR1cm4ge0RHLkNvbHVtbn0gICAgICAgIEEgbmV3IGNvbHVtbiBpbiBTRVBBUkFUT1Igbm90YXRpb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydEZhc3RhVG9TZXBhcmF0b3Ioc2VwYXJhdG9yOiBzdHJpbmcsIGZhc3RhR2FwU3ltYm9sOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IERHLkNvbHVtbiB7XG4gICAgaWYgKGZhc3RhR2FwU3ltYm9sID09PSBudWxsKVxuICAgICAgZmFzdGFHYXBTeW1ib2wgPSB0aGlzLmRlZmF1bHRHYXBTeW1ib2w7XG5cbiAgICBjb25zdCBuZXdDb2x1bW4gPSB0aGlzLmdldE5ld0NvbHVtbihOT1RBVElPTi5TRVBBUkFUT1IpO1xuICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBuZXdseSBjcmVhdGVkIGVtcHR5IGNvbHVtblxuICAgIG5ld0NvbHVtbi5pbml0KChpZHg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgZmFzdGFQb2x5bWVyID0gdGhpcy5jb2x1bW4uZ2V0KGlkeCk7XG4gICAgICBjb25zdCBmYXN0YU1vbm9tZXJzQXJyYXkgPSB0aGlzLnNwbGl0dGVyKGZhc3RhUG9seW1lcik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZhc3RhTW9ub21lcnNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZmFzdGFNb25vbWVyc0FycmF5W2ldID09PSBmYXN0YUdhcFN5bWJvbClcbiAgICAgICAgICBmYXN0YU1vbm9tZXJzQXJyYXlbaV0gPSBVbml0c0hhbmRsZXIuX2RlZmF1bHRHYXBTeW1ib2xzRGljdC5TRVBBUkFUT1I7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFzdGFNb25vbWVyc0FycmF5LmpvaW4oc2VwYXJhdG9yKTtcbiAgICB9KTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuVU5JVFMsIE5PVEFUSU9OLlNFUEFSQVRPUik7XG4gICAgbmV3Q29sdW1uLnNldFRhZyhUQUdTLnNlcGFyYXRvciwgc2VwYXJhdG9yKTtcbiAgICByZXR1cm4gbmV3Q29sdW1uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd3JhcHBlciBzdHJpbmdzIGZvciBIRUxNLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlXG4gICAqIG1hY3JvbW9sZWN1bGUgKHBlcHRpZGUsIEROQSwgUk5BKVxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQXJyYXkgb2Ygd3JhcHBlcnNcbiAgICovXG4gIHByaXZhdGUgZ2V0SGVsbVdyYXBwZXJzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBwcmVmaXggPSAodGhpcy5pc0RuYSgpKSA/ICdETkExeycgOlxuICAgICAgKHRoaXMuaXNSbmEoKSkgPyAnUk5BMXsnIDpcbiAgICAgICAgKHRoaXMuaXNQZXB0aWRlKCkpID8gJ1BFUFRJREUxeycgOlxuICAgICAgICAgICdVbmtub3duJzsgLy8gdGhpcyBjYXNlIHNob3VsZCBiZSBoYW5kbGVkIGFzIGV4Y2VwdGlvbmFsXG5cbiAgICBpZiAocHJlZml4ID09PSAnVW5rbm93bicpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05laXRoZXIgcGVwdGlkZSwgbm9yIG51Y2xlb3RpZGUnKTtcblxuICAgIGNvbnN0IHBvc3RmaXggPSAnfSQkJCc7XG4gICAgY29uc3QgbGVmdFdyYXBwZXIgPSAodGhpcy5pc0RuYSgpKSA/ICdEKCcgOlxuICAgICAgKHRoaXMuaXNSbmEoKSkgPyAnUignIDogJyc7IC8vIG5vIHdyYXBwZXIgZm9yIHBlcHRpZGVzXG4gICAgY29uc3QgcmlnaHRXcmFwcGVyID0gKHRoaXMuaXNEbmEoKSB8fCB0aGlzLmlzUm5hKCkpID8gJylQJyA6ICcnOyAvLyBubyB3cmFwcGVyIGZvciBwZXB0aWRlc1xuICAgIHJldHVybiBbcHJlZml4LCBsZWZ0V3JhcHBlciwgcmlnaHRXcmFwcGVyLCBwb3N0Zml4XTtcbiAgfVxuXG4gIC8vIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBjb252ZXJ0aW5nIHN0cmluZ3MgdG8gSEVMTVxuICBwcml2YXRlIGNvbnZlcnRUb0hlbG1IZWxwZXIoXG4gICAgc291cmNlUG9seW1lcjogc3RyaW5nLFxuICAgIHNvdXJjZUdhcFN5bWJvbDogc3RyaW5nLFxuICAgIHByZWZpeDogc3RyaW5nLFxuICAgIGxlZnRXcmFwcGVyOiBzdHJpbmcsXG4gICAgcmlnaHRXcmFwcGVyOiBzdHJpbmcsXG4gICAgcG9zdGZpeDogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgbW9ub21lckFycmF5ID0gdGhpcy5zcGxpdHRlcihzb3VyY2VQb2x5bWVyKTtcbiAgICBjb25zdCBtb25vbWVySGVsbUFycmF5OiBzdHJpbmdbXSA9IG1vbm9tZXJBcnJheS5tYXAoKG1tOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtbSA9PT0gc291cmNlR2FwU3ltYm9sKVxuICAgICAgICByZXR1cm4gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuSEVMTTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGAke2xlZnRXcmFwcGVyfSR7bW19JHtyaWdodFdyYXBwZXJ9YDtcbiAgICB9KTtcbiAgICByZXR1cm4gYCR7cHJlZml4fSR7bW9ub21lckhlbG1BcnJheS5qb2luKCcuJyl9JHtwb3N0Zml4fWA7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIHN0cmluZyB3aXRoIFNFUEFSQVRPUi9GQVNUQSBub3RhdGlvbiB0byBIRUxNXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VQb2x5bWVyICBBIHN0cmluZyB0byBiZSBjb252ZXJ0ZWRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBzb3VyY2VHYXBTeW1ib2wgIEFuIG9wdGlvbmFsIGdhcCBzeW1ib2wsIHNldCB0b1xuICAgKiBkZWZhdWx0IHZhbHVlcyAoJy0nIGZvciBGQVNUQSBhbmQgJycgZm9yIFNFUEFSQVRPUikgdW5sZXNzIHNwZWNpZmllZFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICBUaGUgdGFyZ2V0IEhFTE0gc3RyaW5nXG4gICAqL1xuICBwdWJsaWMgY29udmVydFN0cmluZ1RvSGVsbShcbiAgICBzb3VyY2VQb2x5bWVyOiBzdHJpbmcsXG4gICAgc291cmNlR2FwU3ltYm9sOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICApOiBzdHJpbmcge1xuICAgIGlmIChzb3VyY2VHYXBTeW1ib2wgPT09IG51bGwpXG4gICAgICBzb3VyY2VHYXBTeW1ib2wgPSB0aGlzLmRlZmF1bHRHYXBTeW1ib2w7XG4gICAgY29uc3QgW3ByZWZpeCwgbGVmdFdyYXBwZXIsIHJpZ2h0V3JhcHBlciwgcG9zdGZpeF0gPSB0aGlzLmdldEhlbG1XcmFwcGVycygpO1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb0hlbG1IZWxwZXIoc291cmNlUG9seW1lciwgc291cmNlR2FwU3ltYm9sLCBwcmVmaXgsIGxlZnRXcmFwcGVyLCByaWdodFdyYXBwZXIsIHBvc3RmaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBjb2x1bW4gdG8gSEVMTVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHNvdXJjZUdhcFN5bWJvbFxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRUb0hlbG0oc291cmNlR2FwU3ltYm9sOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IERHLkNvbHVtbiB7XG4gICAgaWYgKHNvdXJjZUdhcFN5bWJvbCA9PT0gbnVsbClcbiAgICAgIHNvdXJjZUdhcFN5bWJvbCA9IHRoaXMuZGVmYXVsdEdhcFN5bWJvbDtcblxuICAgIGNvbnN0IFtwcmVmaXgsIGxlZnRXcmFwcGVyLCByaWdodFdyYXBwZXIsIHBvc3RmaXhdID0gdGhpcy5nZXRIZWxtV3JhcHBlcnMoKTtcblxuICAgIGNvbnN0IG5ld0NvbHVtbiA9IHRoaXMuZ2V0TmV3Q29sdW1uKE5PVEFUSU9OLkhFTE0pO1xuICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBlbXB0eSBjb2x1bW5cbiAgICBuZXdDb2x1bW4uaW5pdCgoaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZVBvbHltZXIgPSB0aGlzLmNvbHVtbi5nZXQoaWR4KTtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb0hlbG1IZWxwZXIoc291cmNlUG9seW1lciwgc291cmNlR2FwU3ltYm9sISwgcHJlZml4LCBsZWZ0V3JhcHBlciwgcmlnaHRXcmFwcGVyLCBwb3N0Zml4KTtcbiAgICB9KTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuVU5JVFMsIE5PVEFUSU9OLkhFTE0pO1xuICAgIHJldHVybiBuZXdDb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBTRVBBUkFUT1IgY29sdW1uIHRvIEZBU1RBIG5vdGF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gZmFzdGFHYXBTeW1ib2wgT3B0aW9uYWwgZ2FwIHN5bWJvbCBmb3IgRkFTVEFcbiAgICogQHJldHVybiB7REcuQ29sdW1ufSAgQ29udmVydGVkIGNvbHVtblxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0U2VwYXJhdG9yVG9GYXN0YShmYXN0YUdhcFN5bWJvbDogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiBERy5Db2x1bW4ge1xuICAgIGlmIChmYXN0YUdhcFN5bWJvbCA9PT0gbnVsbClcbiAgICAgIGZhc3RhR2FwU3ltYm9sID0gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuRkFTVEE7XG5cbiAgICBjb25zdCBuZXdDb2x1bW4gPSB0aGlzLmdldE5ld0NvbHVtbihOT1RBVElPTi5GQVNUQSk7XG4gICAgLy8gYXNzaWduIHRoZSB2YWx1ZXMgdG8gdGhlIGVtcHR5IGNvbHVtblxuICAgIG5ld0NvbHVtbi5pbml0KChpZHg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qgc2VwYXJhdG9yUG9seW1lciA9IHRoaXMuY29sdW1uLmdldChpZHgpO1xuICAgICAgLy8gaXRlbXMgY2FuIGJlIG1vbm9tZXJzIG9yIHNlcGFyYXRvcnNcbiAgICAgIGNvbnN0IHNlcGFyYXRvckl0ZW1zQXJyYXkgPSB0aGlzLnNwbGl0dGVyKHNlcGFyYXRvclBvbHltZXIpO1xuICAgICAgY29uc3QgZmFzdGFNb25vbWVyc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXBhcmF0b3JJdGVtc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzZXBhcmF0b3JJdGVtc0FycmF5W2ldO1xuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBmYXN0YU1vbm9tZXJzQXJyYXkucHVzaChmYXN0YUdhcFN5bWJvbCEpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIHRoZSBjYXNlIG9mIGEgbXVsdGktY2hhcmFjdGVyIG1vbm9tZXJcbiAgICAgICAgICBjb25zdCBtb25vbWVyID0gJ1snICsgaXRlbSArICddJztcbiAgICAgICAgICBmYXN0YU1vbm9tZXJzQXJyYXkucHVzaChtb25vbWVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmYXN0YU1vbm9tZXJzQXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhc3RhTW9ub21lcnNBcnJheS5qb2luKCcnKTtcbiAgICB9KTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuVU5JVFMsIE5PVEFUSU9OLkZBU1RBKTtcbiAgICByZXR1cm4gbmV3Q29sdW1uO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb252ZXJ0IEhFTE0gY29sdW1uIHRvIEZBU1RBL1NFUEFSQVRPUlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGd0Tm90YXRpb24gICAgVGFyZ2V0IG5vdGF0aW9uOiBGQVNUQSBvciBTRVBBUkFUT1JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRndFNlcGFyYXRvciAgIE9wdGlvbmFsIHRhcmdldCBzZXBhcmF0b3IgKGZvciBIRUxNIC0+XG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gdGd0R2FwU3ltYm9sICAgT3B0aW9uYWwgdGFyZ2V0IGdhcCBzeW1ib2xcbiAgICogU0VQQVJBVE9SKVxuICAgKiBAcmV0dXJuIHtERy5Db2x1bW59IENvbnZlcnRlZCBjb2x1bW5cbiAgICovXG4gIHByaXZhdGUgY29udmVydEhlbG0oXG4gICAgdGd0Tm90YXRpb246IHN0cmluZyxcbiAgICB0Z3RTZXBhcmF0b3I6IHN0cmluZyA9ICcnLFxuICAgIHRndEdhcFN5bWJvbDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgKTogREcuQ29sdW1uIHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGNvbnRhaW4gY2FsbHMgb2YgaXNEbmEoKSBhbmQgaXNSbmEoKSwgZm9yXG4gICAgLy8gc291cmNlIGhlbG0gY29sdW1ucyBtYXkgY29udGFpbiBSTkEsIEROQSBhbmQgUFQgYWNyb3NzIGRpZmZlcmVudCByb3dzXG4gICAgaWYgKHRndEdhcFN5bWJvbCA9PT0gbnVsbCkge1xuICAgICAgdGd0R2FwU3ltYm9sID0gKHRoaXMudG9GYXN0YSh0Z3ROb3RhdGlvbiBhcyBOT1RBVElPTikpID9cbiAgICAgICAgVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuRkFTVEEgOlxuICAgICAgICBVbml0c0hhbmRsZXIuX2RlZmF1bHRHYXBTeW1ib2xzRGljdC5TRVBBUkFUT1I7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9TZXBhcmF0b3IodGd0Tm90YXRpb24gYXMgTk9UQVRJT04pICYmIHRndFNlcGFyYXRvciA9PT0gJycpXG4gICAgICB0Z3RTZXBhcmF0b3IgPSB0aGlzLnNlcGFyYXRvcjtcblxuICAgIGNvbnN0IGhlbG1XcmFwcGVyc1JlID0gLyhSXFwofERcXCh8XFwpfFApL2c7XG4gICAgY29uc3QgbmV3Q29sdW1uID0gdGhpcy5nZXROZXdDb2x1bW4odGd0Tm90YXRpb24gYXMgTk9UQVRJT04pO1xuICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBlbXB0eSBjb2x1bW5cbiAgICBuZXdDb2x1bW4uaW5pdCgoaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGhlbG1Qb2x5bWVyID0gdGhpcy5jb2x1bW4uZ2V0KGlkeCk7XG5cbiAgICAgIC8vIHdlIGNhbm5vdCB1c2UgaXNEbmEoKSBvciBpc1JuYSgpIGJlY2F1c2Ugc291cmNlIGhlbG0gY29sdW1ucyBjYW5cbiAgICAgIC8vIGNvbnRhaW4gRE5BLCBSTkEgYW5kIFBUIGluIGRpZmZlcmVudCBjZWxscywgc28gdGhlIGNvcnJlc3BvbmRpbmdcbiAgICAgIC8vIHRhZ3MgY2Fubm90IGJlIHNldCBmb3IgdGhlIHdob2xlIGNvbHVtblxuICAgICAgY29uc3QgaXNOdWNsZW90aWRlID0gaGVsbVBvbHltZXIuc3RhcnRzV2l0aCgnRE5BJykgfHwgaGVsbVBvbHltZXIuc3RhcnRzV2l0aCgnUk5BJyk7XG5cbiAgICAgIC8vIGl0ZW1zIGNhbiBiZSBtb25vbWVycyBvciBoZWxtc1xuICAgICAgY29uc3QgaGVsbUl0ZW1zQXJyYXkgPSB0aGlzLnNwbGl0dGVyKGhlbG1Qb2x5bWVyKTtcbiAgICAgIGNvbnN0IHRndE1vbm9tZXJzQXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlbG1JdGVtc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBpdGVtID0gaGVsbUl0ZW1zQXJyYXlbaV07XG4gICAgICAgIGlmIChpc051Y2xlb3RpZGUpXG4gICAgICAgICAgaXRlbSA9IGl0ZW0ucmVwbGFjZShoZWxtV3JhcHBlcnNSZSwgJycpO1xuICAgICAgICBpZiAoaXRlbSA9PT0gVW5pdHNIYW5kbGVyLl9kZWZhdWx0R2FwU3ltYm9sc0RpY3QuSEVMTSkge1xuICAgICAgICAgIHRndE1vbm9tZXJzQXJyYXkucHVzaCh0Z3RHYXBTeW1ib2whKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRvRmFzdGEodGd0Tm90YXRpb24gYXMgTk9UQVRJT04pICYmIGl0ZW0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIHRoZSBjYXNlIG9mIGEgbXVsdGktY2hhcmFjdGVyIG1vbm9tZXIgY29udmVydGVkIHRvIEZBU1RBXG4gICAgICAgICAgY29uc3QgbW9ub21lciA9ICdbJyArIGl0ZW0gKyAnXSc7XG4gICAgICAgICAgdGd0TW9ub21lcnNBcnJheS5wdXNoKG1vbm9tZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRndE1vbm9tZXJzQXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRndE1vbm9tZXJzQXJyYXkuam9pbih0Z3RTZXBhcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLy8gVEFHUy5hbGlnbmVkIGlzIG1hbmRhdG9yeSBmb3IgY29sdW1ucyBvZiBOT1RBVElPTi5GQVNUQSBhbmQgTk9UQVRJT04uU0VQQVJBVE9SXG4gICAgY29uc3Qgc3BsaXR0ZXI6IFNwbGl0dGVyRnVuYyA9IGdldFNwbGl0dGVyRm9yQ29sdW1uKG5ld0NvbHVtbik7XG4gICAgY29uc3Qgc3RhdHM6IFNlcUNvbFN0YXRzID0gZ2V0U3RhdHMobmV3Q29sdW1uLCA1LCBzcGxpdHRlcik7XG4gICAgY29uc3QgYWxpZ25lZCA9IHN0YXRzLnNhbWVMZW5ndGggPyAnU0VRLk1TQScgOiAnU0VRJztcbiAgICBuZXdDb2x1bW4uc2V0VGFnKFRBR1MuYWxpZ25lZCwgYWxpZ25lZCk7XG5cbiAgICByZXR1cm4gbmV3Q29sdW1uO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SGVsbVRvU2VwYXJhdG9yKCk6IERHLkNvbHVtbiB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50YXRpb3JldHVybiB0aGlzLmdldE5ld0NvbHVtbigpO1xuICAgIHJldHVybiB0aGlzLmdldE5ld0NvbHVtbihOT1RBVElPTi5TRVBBUkFUT1IpO1xuICB9XG5cbiAgLyoqIERpc3BhdGNoZXIgbWV0aG9kIGZvciBub3RhdGlvbiBjb252ZXJzaW9uXG4gICAqXG4gICAqIEBwYXJhbSB7Tk9UQVRJT059IHRndE5vdGF0aW9uICAgTm90YXRpb24gd2Ugd2FudCB0byBjb252ZXJ0IHRvXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gdGd0U2VwYXJhdG9yICAgUG9zc2libGUgc2VwYXJhdG9yXG4gICAqIEByZXR1cm4ge0RHLkNvbHVtbn0gICAgICAgICAgICAgICAgQ29udmVydGVkIGNvbHVtblxuICAgKi9cbiAgcHVibGljIGNvbnZlcnQodGd0Tm90YXRpb246IE5PVEFUSU9OLCB0Z3RTZXBhcmF0b3I6IHN0cmluZyB8IG51bGwgPSBudWxsKTogREcuQ29sdW1uIHtcbiAgICAvLyBwb3NzaWJsZSBleGNlcHRpb25zXG4gICAgaWYgKHRoaXMubm90YXRpb24gPT09IHRndE5vdGF0aW9uKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0Z3Qgbm90YXRpb24gaXMgaW52YWxpZCcpO1xuICAgIGlmICh0aGlzLnRvU2VwYXJhdG9yKHRndE5vdGF0aW9uKSAmJiB0Z3RTZXBhcmF0b3IgPT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RndCBzZXBhcmF0b3IgaXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgaWYgKHRoaXMuaXNGYXN0YSgpICYmIHRoaXMudG9TZXBhcmF0b3IodGd0Tm90YXRpb24pICYmIHRndFNlcGFyYXRvciAhPT0gbnVsbClcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRGYXN0YVRvU2VwYXJhdG9yKHRndFNlcGFyYXRvcik7XG4gICAgZWxzZSBpZiAoKHRoaXMuaXNGYXN0YSgpIHx8IHRoaXMuaXNTZXBhcmF0b3IoKSkgJiYgdGhpcy50b0hlbG0odGd0Tm90YXRpb24pKVxuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvSGVsbSgpO1xuICAgIGVsc2UgaWYgKHRoaXMuaXNTZXBhcmF0b3IoKSAmJiB0aGlzLnRvRmFzdGEodGd0Tm90YXRpb24pKVxuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFNlcGFyYXRvclRvRmFzdGEoKTtcbiAgICBlbHNlIGlmICh0aGlzLmlzSGVsbSgpICYmIHRoaXMudG9GYXN0YSh0Z3ROb3RhdGlvbikpIC8vIHRoZSBjYXNlIG9mIEhFTE1cbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRIZWxtKHRndE5vdGF0aW9uKTtcbiAgICBlbHNlIC8vIHRoaXMuaXNIZWxtKCkgJiYgdGhpcy50b1NlcGFyYXRvcih0Z3ROb3RhdGlvbilcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRIZWxtKHRndE5vdGF0aW9uLCB0Z3RTZXBhcmF0b3IhKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb2w6IERHLkNvbHVtbikge1xuICAgIHN1cGVyKGNvbCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-atomic-level.d.ts","sourceRoot":"","sources":["to-atomic-level.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AA4GtC,wBAAsB,cAAc,CAClC,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,GACvE,OAAO,CAAC,IAAI,CAAC,CAyDf"}
|