occam-languages 3.0.4 → 3.0.8
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/lib/context/file.js +10 -15
- package/lib/context/release.js +10 -14
- package/lib/element.js +3 -3
- package/lib/pass/continuation.js +23 -28
- package/lib/pass/continuationZip.js +31 -38
- package/lib/utilities/breakPoint.js +4 -4
- package/lib/utilities/continuation.js +68 -115
- package/lib/utilities/verification.js +69 -67
- package/lib/utilities/verify.js +5 -5
- package/package.json +2 -3
- package/src/context/file.js +9 -17
- package/src/context/release.js +9 -15
- package/src/element.js +2 -2
- package/src/pass/continuation.js +31 -31
- package/src/pass/continuationZip.js +46 -53
- package/src/utilities/breakPoint.js +4 -3
- package/src/utilities/continuation.js +88 -164
- package/src/utilities/verification.js +84 -77
- package/src/utilities/verify.js +4 -4
- package/lib/utilities/async.js +0 -66
- package/src/utilities/async.js +0 -61
|
@@ -67,59 +67,43 @@ _export(exports, {
|
|
|
67
67
|
const _necessary = require("necessary");
|
|
68
68
|
const { filter: arrayFilter } = _necessary.arrayUtilities;
|
|
69
69
|
function one(array, callback, ...initialArguments) {
|
|
70
|
-
const
|
|
70
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
71
71
|
function next(index, ...nextArguments) {
|
|
72
72
|
if (index === length) {
|
|
73
|
-
|
|
74
|
-
return continuation(success, ...finalArguemnts);
|
|
73
|
+
return count === 1 ? forward(...nextArguments) : back();
|
|
75
74
|
}
|
|
76
75
|
const element = array[index];
|
|
77
|
-
return callback(element, ...initialArguments, (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const success = false, finalArguments = initialArguments; ///
|
|
82
|
-
return continuation(success, ...finalArguments);
|
|
83
|
-
}
|
|
84
|
-
return next(index + 1, ...callbackArguments);
|
|
76
|
+
return callback(element, ...initialArguments, ()=>next(index + 1, ...nextArguments), (...callbackArguments)=>{
|
|
77
|
+
count++;
|
|
78
|
+
if (count === 2) {
|
|
79
|
+
return back();
|
|
85
80
|
}
|
|
86
|
-
return next(index + 1, ...
|
|
81
|
+
return next(index + 1, ...callbackArguments);
|
|
87
82
|
});
|
|
88
83
|
}
|
|
89
84
|
let count = 0;
|
|
90
85
|
return next(index, ...initialArguments);
|
|
91
86
|
}
|
|
92
87
|
function some(array, callback, ...initialArguments) {
|
|
93
|
-
const
|
|
88
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length;
|
|
94
89
|
function next(index) {
|
|
95
90
|
if (index === length) {
|
|
96
|
-
|
|
97
|
-
return continuation(success, ...finalArguments);
|
|
91
|
+
return back();
|
|
98
92
|
}
|
|
99
93
|
const element = array[index];
|
|
100
|
-
return callback(element, ...initialArguments, (
|
|
101
|
-
if (success) {
|
|
102
|
-
const finalArguments = callbackArguments; //
|
|
103
|
-
return continuation(success, ...finalArguments);
|
|
104
|
-
}
|
|
105
|
-
return next(index + 1);
|
|
106
|
-
});
|
|
94
|
+
return callback(element, ...initialArguments, ()=>next(index + 1), forward);
|
|
107
95
|
}
|
|
96
|
+
const index = 0;
|
|
108
97
|
return next(index);
|
|
109
98
|
}
|
|
110
99
|
function each(array, callback, ...initialArguments) {
|
|
111
|
-
const
|
|
100
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
112
101
|
function next(index, ...nextArguments) {
|
|
113
102
|
if (index === length) {
|
|
114
|
-
|
|
115
|
-
return continuation(success, ...finalArguments);
|
|
103
|
+
return count !== 0 ? forward(...nextArguments) : back();
|
|
116
104
|
}
|
|
117
105
|
const element = array[index];
|
|
118
|
-
return callback(element, ...nextArguments,
|
|
119
|
-
if (!success) {
|
|
120
|
-
const finalArguments = initialArguments; ///
|
|
121
|
-
return continuation(success, ...finalArguments);
|
|
122
|
-
}
|
|
106
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
123
107
|
count++;
|
|
124
108
|
return next(index + 1, ...callbackArguments);
|
|
125
109
|
});
|
|
@@ -128,124 +112,104 @@ function each(array, callback, ...initialArguments) {
|
|
|
128
112
|
return next(index, ...initialArguments);
|
|
129
113
|
}
|
|
130
114
|
function every(array, callback, ...initialArguments) {
|
|
131
|
-
const
|
|
115
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
132
116
|
function next(index, ...nextArguments) {
|
|
133
117
|
if (index === length) {
|
|
134
|
-
|
|
135
|
-
return continuation(success, ...finalArguments);
|
|
118
|
+
return forward(...nextArguments);
|
|
136
119
|
}
|
|
137
120
|
const element = array[index];
|
|
138
|
-
return callback(element, ...nextArguments,
|
|
139
|
-
if (!success) {
|
|
140
|
-
const finalArguments = initialArguments; ///
|
|
141
|
-
return continuation(success, ...finalArguments);
|
|
142
|
-
}
|
|
121
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
143
122
|
return next(index + 1, ...callbackArguments);
|
|
144
123
|
});
|
|
145
124
|
}
|
|
146
125
|
return next(index, ...initialArguments);
|
|
147
126
|
}
|
|
148
127
|
function reduce(array, initialValue, callback, ...initialArguments) {
|
|
149
|
-
const
|
|
128
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
150
129
|
function next(index, value, ...nextArguments) {
|
|
151
130
|
if (index === length) {
|
|
152
|
-
|
|
153
|
-
return continuation(value, ...finalArguments);
|
|
131
|
+
return forward(value, ...nextArguments);
|
|
154
132
|
}
|
|
155
133
|
const element = array[index];
|
|
156
|
-
return callback(element, value, ...nextArguments, (value, ...callbackArguments)=>{
|
|
134
|
+
return callback(element, value, ...nextArguments, back, (value, ...callbackArguments)=>{
|
|
157
135
|
return next(index + 1, value, ...callbackArguments);
|
|
158
136
|
});
|
|
159
137
|
}
|
|
160
138
|
return next(index, initialValue, ...initialArguments);
|
|
161
139
|
}
|
|
162
140
|
function forEach(array, callback, ...initialArguments) {
|
|
163
|
-
const
|
|
141
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
164
142
|
function next(index, ...nextArguments) {
|
|
165
143
|
if (index === length) {
|
|
166
|
-
|
|
167
|
-
return continuation(...finalArguments);
|
|
144
|
+
return forward(...nextArguments);
|
|
168
145
|
}
|
|
169
146
|
const element = array[index];
|
|
170
|
-
return callback(element, ...nextArguments, (...callbackArguments)=>{
|
|
147
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
171
148
|
return next(index + 1, ...callbackArguments);
|
|
172
149
|
});
|
|
173
150
|
}
|
|
174
151
|
return next(index, ...initialArguments);
|
|
175
152
|
}
|
|
176
153
|
function forwardsEvery(array, callback, ...initialArguments) {
|
|
177
|
-
const
|
|
154
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
178
155
|
function next(index, ...nextArguments) {
|
|
179
156
|
if (index === length) {
|
|
180
|
-
|
|
181
|
-
return continuation(success, ...finalArguments);
|
|
157
|
+
return forward(...nextArguments);
|
|
182
158
|
}
|
|
183
159
|
const element = array[index];
|
|
184
|
-
return callback(element, ...nextArguments,
|
|
185
|
-
if (!success) {
|
|
186
|
-
const finalArguments = initialArguments; ///
|
|
187
|
-
return continuation(success, ...finalArguments);
|
|
188
|
-
}
|
|
160
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
189
161
|
return next(index + 1, ...callbackArguments);
|
|
190
162
|
});
|
|
191
163
|
}
|
|
192
164
|
return next(index, ...initialArguments);
|
|
193
165
|
}
|
|
194
166
|
function backwardsEvery(array, callback, ...initialArguments) {
|
|
195
|
-
const
|
|
167
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = length - 1;
|
|
196
168
|
function next(index, ...nextArguments) {
|
|
197
169
|
if (index === -1) {
|
|
198
|
-
|
|
199
|
-
return continuation(success, ...finalArguments);
|
|
170
|
+
return forward(...nextArguments);
|
|
200
171
|
}
|
|
201
172
|
const element = array[index];
|
|
202
|
-
return callback(element, ...nextArguments,
|
|
203
|
-
if (!success) {
|
|
204
|
-
const finalArguments = initialArguments; ///
|
|
205
|
-
return continuation(success, ...finalArguments);
|
|
206
|
-
}
|
|
173
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
207
174
|
return next(index - 1, ...callbackArguments);
|
|
208
175
|
});
|
|
209
176
|
}
|
|
210
177
|
return next(index, ...initialArguments);
|
|
211
178
|
}
|
|
212
179
|
function forwardsForEach(array, callback, ...initialArguments) {
|
|
213
|
-
const
|
|
180
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
214
181
|
function next(index, ...nextArguments) {
|
|
215
182
|
if (index === length) {
|
|
216
|
-
|
|
217
|
-
return continuation(...finalArguments);
|
|
183
|
+
return forward(...nextArguments);
|
|
218
184
|
}
|
|
219
185
|
const element = array[index];
|
|
220
|
-
return callback(element, ...nextArguments, (...callbackArguments)=>{
|
|
186
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
221
187
|
return next(index + 1, ...callbackArguments);
|
|
222
188
|
});
|
|
223
189
|
}
|
|
224
190
|
return next(index, ...initialArguments);
|
|
225
191
|
}
|
|
226
192
|
function backwardsForEach(array, callback, ...initialArguments) {
|
|
227
|
-
const
|
|
193
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = length - 1;
|
|
228
194
|
function next(index, ...nextArguments) {
|
|
229
195
|
if (index === -1) {
|
|
230
|
-
|
|
231
|
-
return continuation(...finalArguments);
|
|
196
|
+
return forward(...nextArguments);
|
|
232
197
|
}
|
|
233
198
|
const element = array[index];
|
|
234
|
-
return callback(element, ...nextArguments, (...callbackArguments)=>{
|
|
199
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
235
200
|
return next(index - 1, ...callbackArguments);
|
|
236
201
|
});
|
|
237
202
|
}
|
|
238
203
|
return next(index, ...initialArguments);
|
|
239
204
|
}
|
|
240
205
|
function filter(array, callback, ...initialArguments) {
|
|
241
|
-
const
|
|
206
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, deletedElements = [], index = length - 1;
|
|
242
207
|
function next(index, ...nextArguments) {
|
|
243
208
|
if (index === -1) {
|
|
244
|
-
|
|
245
|
-
return continuation(deletedElements, ...finalArguments);
|
|
209
|
+
return forward(deletedElements, ...nextArguments);
|
|
246
210
|
}
|
|
247
211
|
const element = array[index];
|
|
248
|
-
return callback(element, ...nextArguments, (passed, ...callbackArguments)=>{
|
|
212
|
+
return callback(element, ...nextArguments, back, (passed, ...callbackArguments)=>{
|
|
249
213
|
if (!passed) {
|
|
250
214
|
const startIndex = index, deleteCount = 1, deletedElement = element; ///
|
|
251
215
|
array.splice(startIndex, deleteCount);
|
|
@@ -257,61 +221,55 @@ function filter(array, callback, ...initialArguments) {
|
|
|
257
221
|
return next(index, ...initialArguments);
|
|
258
222
|
}
|
|
259
223
|
function prune(array, callback, ...initialArguments) {
|
|
260
|
-
const
|
|
261
|
-
function next(index) {
|
|
224
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
225
|
+
function next(index, ...nextArguments) {
|
|
262
226
|
if (index === length) {
|
|
263
|
-
const deletedElement = undefined
|
|
264
|
-
return
|
|
227
|
+
const deletedElement = undefined;
|
|
228
|
+
return forward(deletedElement, ...nextArguments);
|
|
265
229
|
}
|
|
266
230
|
const element = array[index];
|
|
267
|
-
return callback(element, ...
|
|
231
|
+
return callback(element, ...nextArguments, back, (passed, ...callbackArguments)=>{
|
|
268
232
|
if (!passed) {
|
|
269
|
-
const startIndex = index, deleteCount = 1, deletedElement = element
|
|
233
|
+
const startIndex = index, deleteCount = 1, deletedElement = element; ///
|
|
270
234
|
array.splice(startIndex, deleteCount);
|
|
271
|
-
return
|
|
235
|
+
return forward(deletedElement, ...callbackArguments);
|
|
272
236
|
}
|
|
273
|
-
return next(index + 1);
|
|
237
|
+
return next(index + 1, ...callbackArguments);
|
|
274
238
|
});
|
|
275
239
|
}
|
|
276
|
-
return next(index);
|
|
240
|
+
return next(index, ...initialArguments);
|
|
277
241
|
}
|
|
278
242
|
function extract(array, callback, ...initialArguments) {
|
|
279
|
-
const
|
|
280
|
-
function next(index) {
|
|
243
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
244
|
+
function next(index, ...nextArguments) {
|
|
281
245
|
if (index === length) {
|
|
282
|
-
const deletedElement = undefined
|
|
283
|
-
return
|
|
246
|
+
const deletedElement = undefined;
|
|
247
|
+
return forward(deletedElement, ...nextArguments);
|
|
284
248
|
}
|
|
285
249
|
const element = array[index];
|
|
286
|
-
return callback(element, ...
|
|
250
|
+
return callback(element, ...nextArguments, back, (passed, ...callbackArguments)=>{
|
|
287
251
|
if (passed) {
|
|
288
|
-
const startIndex = index, deleteCount = 1, deletedElement = element
|
|
252
|
+
const startIndex = index, deleteCount = 1, deletedElement = element; ///
|
|
289
253
|
array.splice(startIndex, deleteCount);
|
|
290
|
-
return
|
|
254
|
+
return forward(deletedElement, ...callbackArguments);
|
|
291
255
|
}
|
|
292
|
-
return next(index + 1);
|
|
256
|
+
return next(index + 1, ...callbackArguments);
|
|
293
257
|
});
|
|
294
258
|
}
|
|
295
|
-
return next(index);
|
|
259
|
+
return next(index, ...initialArguments);
|
|
296
260
|
}
|
|
297
261
|
function match(arrayA, arrayB, callback, ...initialArguments) {
|
|
298
|
-
const
|
|
262
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), arrayALength = arrayA.length, arrayBLength = arrayB.length;
|
|
299
263
|
if (arrayALength !== arrayBLength) {
|
|
300
|
-
|
|
301
|
-
return continuation(success, ...finalArguments);
|
|
264
|
+
return back();
|
|
302
265
|
}
|
|
303
266
|
const length = arrayALength, index = 0;
|
|
304
267
|
function next(index, ...nextArguments) {
|
|
305
268
|
if (index === length) {
|
|
306
|
-
|
|
307
|
-
return continuation(success, ...finalArguments);
|
|
269
|
+
return forward(...nextArguments);
|
|
308
270
|
}
|
|
309
271
|
const elementA = arrayA[index], elementB = arrayB[index];
|
|
310
|
-
return callback(elementA, elementB, ...nextArguments,
|
|
311
|
-
if (!success) {
|
|
312
|
-
const finalArguments = initialArguments; ///
|
|
313
|
-
return continuation(success, ...finalArguments);
|
|
314
|
-
}
|
|
272
|
+
return callback(elementA, elementB, ...nextArguments, back, (...callbackArguments)=>{
|
|
315
273
|
return next(index + 1, ...callbackArguments);
|
|
316
274
|
});
|
|
317
275
|
}
|
|
@@ -321,18 +279,16 @@ function resolve(arrayA, arrayB, callback, ...initialArguments) {
|
|
|
321
279
|
arrayA = [
|
|
322
280
|
...arrayA
|
|
323
281
|
];
|
|
324
|
-
const
|
|
282
|
+
const forward = initialArguments.pop(), back = initialArguments.pop();
|
|
325
283
|
function nextPass(...nextArguments) {
|
|
326
284
|
const length = arrayA.length; ///
|
|
327
285
|
if (length === 0) {
|
|
328
|
-
|
|
329
|
-
return continuation(success, ...finalArguments);
|
|
286
|
+
return forward(...nextArguments);
|
|
330
287
|
}
|
|
331
288
|
function nextElement(index, success, ...currentArguments) {
|
|
332
289
|
if (index === length) {
|
|
333
290
|
if (!success) {
|
|
334
|
-
|
|
335
|
-
return continuation(success, ...finalArguments);
|
|
291
|
+
return back();
|
|
336
292
|
}
|
|
337
293
|
arrayFilter(arrayA, (elementA)=>{
|
|
338
294
|
const arrayBIncludesElementA = arrayB.includes(elementA);
|
|
@@ -343,13 +299,10 @@ function resolve(arrayA, arrayB, callback, ...initialArguments) {
|
|
|
343
299
|
return nextPass(...currentArguments);
|
|
344
300
|
}
|
|
345
301
|
const elementA = arrayA[index];
|
|
346
|
-
return callback(elementA, ...currentArguments, (
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
return nextElement(index + 1, success, ...callbackArguments);
|
|
351
|
-
}
|
|
352
|
-
return nextElement(index + 1, success, ...currentArguments);
|
|
302
|
+
return callback(elementA, ...currentArguments, ()=>nextElement(index + 1, success, ...currentArguments), (...callbackArguments)=>{
|
|
303
|
+
const elementB = elementA; ///
|
|
304
|
+
arrayB.push(elementB);
|
|
305
|
+
return nextElement(index + 1, true, ...callbackArguments);
|
|
353
306
|
});
|
|
354
307
|
}
|
|
355
308
|
const index = 0, success = false;
|
|
@@ -387,4 +340,4 @@ const _default = {
|
|
|
387
340
|
exists
|
|
388
341
|
};
|
|
389
342
|
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaWx0ZXI6IGFycmF5RmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gKGNvdW50ID09PSAxKSxcbiAgICAgICAgZmluYWxBcmd1ZW1udHMgPSBzdWNjZXNzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0QXJndW1lbnRzIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VlbW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAoc3VjY2VzcywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIGNvdW50Kys7XG5cbiAgICAgICAgaWYgKGNvdW50ID09PSAyKSB7XG4gICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgIC8vL1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gZmFsc2UsXG4gICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmluaXRpYWxBcmd1bWVudHMsIChzdWNjZXNzLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy9cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IChjb3VudCAhPT0gMCksXG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gc3VjY2VzcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEFyZ3VtZW50cyA6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvdW50Kys7XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgbGV0IGNvdW50ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlKGFycmF5LCBpbml0aWFsVmFsdWUsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsdWUsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzLCAodmFsdWUsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIHZhbHVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgaW5pdGlhbFZhbHVlLCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBuZXh0QXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbiguLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IG5leHRBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gW10sXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBuZXh0QXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWxldGVkRWxlbWVudHMsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIChwYXNzZWQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaW5kZXgsIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgYXJyYXkuc3BsaWNlKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50KTtcblxuICAgICAgICBkZWxldGVkRWxlbWVudHMudW5zaGlmdChkZWxldGVkRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlbGV0ZWRFbGVtZW50LCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAocGFzc2VkLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQsIC8vL1xuICAgICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3QoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlbGV0ZWRFbGVtZW50LCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAocGFzc2VkLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaW5kZXgsIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudCwgLy8vXG4gICAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWxldGVkRWxlbWVudCwgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2goYXJyYXlBLCBhcnJheUIsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGg7XG5cbiAgaWYgKGFycmF5QUxlbmd0aCAhPT0gYXJyYXlCTGVuZ3RoKSB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IGZhbHNlLFxuICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBhcnJheUFMZW5ndGgsICAvLy9cbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRydWUsXG4gICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IG5leHRBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5QVtpbmRleF0sXG4gICAgICAgICAgZWxlbWVudEIgPSBhcnJheUJbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnRBLCBlbGVtZW50QiwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgYXJyYXlBID0gWyAgLy8vXG4gICAgLi4uYXJyYXlBXG4gIF07XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBmdW5jdGlvbiBuZXh0UGFzcyguLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyYXlBLmxlbmd0aDsgLy8vXG5cbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHRFbGVtZW50KGluZGV4LCBzdWNjZXNzLCAuLi5jdXJyZW50QXJndW1lbnRzKSB7XG4gICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheUZpbHRlcihhcnJheUEsIChlbGVtZW50QSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFycmF5QkluY2x1ZGVzRWxlbWVudEEgPSBhcnJheUIuaW5jbHVkZXMoZWxlbWVudEEpO1xuXG4gICAgICAgICAgaWYgKCFhcnJheUJJbmNsdWRlc0VsZW1lbnRBKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXh0UGFzcyguLi5jdXJyZW50QXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIC4uLmN1cnJlbnRBcmd1bWVudHMsIChwYXNzZWQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50QiA9IGVsZW1lbnRBLCAgLy8vXG4gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG5cbiAgICAgICAgICBhcnJheUIucHVzaChlbGVtZW50Qik7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXggKyAxLCBzdWNjZXNzLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXggKyAxLCBzdWNjZXNzLCAuLi5jdXJyZW50QXJndW1lbnRzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXgsIHN1Y2Nlc3MsIC4uLm5leHRBcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIG5leHRQYXNzKC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsKGNhbGxiYWNrcywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICByZXR1cm4gZXZlcnkoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGlzdHMoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBzb21lKGNhbGxiYWNrcywgKGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gIH0sIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uZSxcbiAgc29tZSxcbiAgZWFjaCxcbiAgZXZlcnksXG4gIHJlZHVjZSxcbiAgZm9yRWFjaCxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaCxcbiAgZmlsdGVyLFxuICBwcnVuZSxcbiAgZXh0cmFjdCxcbiAgbWF0Y2gsXG4gIHJlc29sdmUsXG4gIGFsbCxcbiAgZXhpc3RzXG59O1xuIl0sIm5hbWVzIjpbImFsbCIsImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRm9yRWFjaCIsImVhY2giLCJldmVyeSIsImV4aXN0cyIsImV4dHJhY3QiLCJmaWx0ZXIiLCJmb3JFYWNoIiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRm9yRWFjaCIsIm1hdGNoIiwib25lIiwicHJ1bmUiLCJyZWR1Y2UiLCJyZXNvbHZlIiwic29tZSIsImFycmF5RmlsdGVyIiwiYXJyYXlVdGlsaXRpZXMiLCJhcnJheSIsImNhbGxiYWNrIiwiaW5pdGlhbEFyZ3VtZW50cyIsImNvbnRpbnVhdGlvbiIsInBvcCIsImxlbmd0aCIsImluZGV4IiwibmV4dCIsIm5leHRBcmd1bWVudHMiLCJzdWNjZXNzIiwiY291bnQiLCJmaW5hbEFyZ3VlbW50cyIsImVsZW1lbnQiLCJjYWxsYmFja0FyZ3VtZW50cyIsImZpbmFsQXJndW1lbnRzIiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiLCJkZWxldGVkRWxlbWVudHMiLCJwYXNzZWQiLCJzdGFydEluZGV4IiwiZGVsZXRlQ291bnQiLCJkZWxldGVkRWxlbWVudCIsInNwbGljZSIsInVuc2hpZnQiLCJ1bmRlZmluZWQiLCJhcnJheUEiLCJhcnJheUIiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJlbGVtZW50QSIsImVsZW1lbnRCIiwibmV4dFBhc3MiLCJuZXh0RWxlbWVudCIsImN1cnJlbnRBcmd1bWVudHMiLCJhcnJheUJJbmNsdWRlc0VsZW1lbnRBIiwiaW5jbHVkZXMiLCJwdXNoIiwiY2FsbGJhY2tzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUF1ZWdCQTtlQUFBQTs7UUFuUkFDO2VBQUFBOztRQW1EQUM7ZUFBQUE7O1FBNE9oQjtlQUFBOztRQXhhZ0JDO2VBQUFBOztRQW1DQUM7ZUFBQUE7O1FBK1hBQztlQUFBQTs7UUE3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
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaWx0ZXI6IGFycmF5RmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiAoY291bnQgPT09IDEpID9cbiAgICAgICAgICAgICAgIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cykgOlxuICAgICAgICAgICAgICAgICBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAoKSA9PiBuZXh0KGluZGV4ICsgMSwgLi4ubmV4dEFyZ3VtZW50cyksICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgY291bnQrKztcblxuICAgICAgaWYgKGNvdW50ID09PSAyKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgbGV0IGNvdW50ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAoKSA9PiBuZXh0KGluZGV4ICsgMSksIGZvcndhcmQpO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gKGNvdW50ICE9PSAwKSA/XG4gICAgICAgICAgICAgICBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpIDpcbiAgICAgICAgICAgICAgICAgYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb3VudCsrO1xuXG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYXJyYXksIGluaXRpYWxWYWx1ZSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCB2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCh2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCB2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKHZhbHVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCB2YWx1ZSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGluaXRpYWxWYWx1ZSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBbXSxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChkZWxldGVkRWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKHBhc3NlZCwgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmICghcGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIGRlbGV0ZWRFbGVtZW50cy51bnNoaWZ0KGRlbGV0ZWRFbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChkZWxldGVkRWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrLCAocGFzc2VkLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGRlbGV0ZWRFbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssIChwYXNzZWQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGRlbGV0ZWRFbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2goYXJyYXlBLCBhcnJheUIsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYXJyYXlBTGVuZ3RoID0gYXJyYXlBLmxlbmd0aCxcbiAgICAgICAgYXJyYXlCTGVuZ3RoID0gYXJyYXlCLmxlbmd0aDtcblxuICBpZiAoYXJyYXlBTGVuZ3RoICE9PSBhcnJheUJMZW5ndGgpIHtcbiAgICByZXR1cm4gYmFjaygpO1xuICB9XG5cbiAgY29uc3QgbGVuZ3RoID0gYXJyYXlBTGVuZ3RoLCAgLy8vXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XSxcbiAgICAgICAgICBlbGVtZW50QiA9IGFycmF5QltpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIGVsZW1lbnRCLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgYXJyYXlBID0gWyAgLy8vXG4gICAgLi4uYXJyYXlBXG4gIF07XG5cbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGZ1bmN0aW9uIG5leHRQYXNzKC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBsZW5ndGggPSBhcnJheUEubGVuZ3RoOyAvLy9cblxuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHRFbGVtZW50KGluZGV4LCBzdWNjZXNzLCAuLi5jdXJyZW50QXJndW1lbnRzKSB7XG4gICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlGaWx0ZXIoYXJyYXlBLCAoZWxlbWVudEEpID0+IHtcbiAgICAgICAgICBjb25zdCBhcnJheUJJbmNsdWRlc0VsZW1lbnRBID0gYXJyYXlCLmluY2x1ZGVzKGVsZW1lbnRBKTtcblxuICAgICAgICAgIGlmICghYXJyYXlCSW5jbHVkZXNFbGVtZW50QSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV4dFBhc3MoLi4uY3VycmVudEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XTtcblxuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnRBLCAuLi5jdXJyZW50QXJndW1lbnRzLCAoKSA9PiBuZXh0RWxlbWVudChpbmRleCArIDEsIHN1Y2Nlc3MsIC4uLmN1cnJlbnRBcmd1bWVudHMpLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50QiA9IGVsZW1lbnRBOyAgLy8vXG5cbiAgICAgICAgICBhcnJheUIucHVzaChlbGVtZW50Qik7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXggKyAxLCB0cnVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIHJldHVybiBuZXh0RWxlbWVudChpbmRleCwgc3VjY2VzcywgLi4ubmV4dEFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gbmV4dFBhc3MoLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGwoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBldmVyeShjYWxsYmFja3MsIChjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXN0cyhjYWxsYmFja3MsIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgcmV0dXJuIHNvbWUoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25lLFxuICBzb21lLFxuICBlYWNoLFxuICBldmVyeSxcbiAgcmVkdWNlLFxuICBmb3JFYWNoLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoLFxuICBmaWx0ZXIsXG4gIHBydW5lLFxuICBleHRyYWN0LFxuICBtYXRjaCxcbiAgcmVzb2x2ZSxcbiAgYWxsLFxuICBleGlzdHNcbn07XG4iXSwibmFtZXMiOlsiYWxsIiwiYmFja3dhcmRzRXZlcnkiLCJiYWNrd2FyZHNGb3JFYWNoIiwiZWFjaCIsImV2ZXJ5IiwiZXhpc3RzIiwiZXh0cmFjdCIsImZpbHRlciIsImZvckVhY2giLCJmb3J3YXJkc0V2ZXJ5IiwiZm9yd2FyZHNGb3JFYWNoIiwibWF0Y2giLCJvbmUiLCJwcnVuZSIsInJlZHVjZSIsInJlc29sdmUiLCJzb21lIiwiYXJyYXlGaWx0ZXIiLCJhcnJheVV0aWxpdGllcyIsImFycmF5IiwiY2FsbGJhY2siLCJpbml0aWFsQXJndW1lbnRzIiwiZm9yd2FyZCIsInBvcCIsImJhY2siLCJsZW5ndGgiLCJpbmRleCIsIm5leHQiLCJuZXh0QXJndW1lbnRzIiwiY291bnQiLCJlbGVtZW50IiwiY2FsbGJhY2tBcmd1bWVudHMiLCJpbml0aWFsVmFsdWUiLCJ2YWx1ZSIsImRlbGV0ZWRFbGVtZW50cyIsInBhc3NlZCIsInN0YXJ0SW5kZXgiLCJkZWxldGVDb3VudCIsImRlbGV0ZWRFbGVtZW50Iiwic3BsaWNlIiwidW5zaGlmdCIsInVuZGVmaW5lZCIsImFycmF5QSIsImFycmF5QiIsImFycmF5QUxlbmd0aCIsImFycmF5Qkxlbmd0aCIsImVsZW1lbnRBIiwiZWxlbWVudEIiLCJuZXh0UGFzcyIsIm5leHRFbGVtZW50Iiwic3VjY2VzcyIsImN1cnJlbnRBcmd1bWVudHMiLCJhcnJheUJJbmNsdWRlc0VsZW1lbnRBIiwiaW5jbHVkZXMiLCJwdXNoIiwiY2FsbGJhY2tzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUEyWmdCQTtlQUFBQTs7UUFuUEFDO2VBQUFBOztRQTBDQUM7ZUFBQUE7O1FBcU5oQjtlQUFBOztRQTlXZ0JDO2VBQUFBOztRQTJCQUM7ZUFBQUE7O1FBNlVBQztlQUFBQTs7UUF6SEFDO2VBQUFBOztRQWpFQUM7ZUFBQUE7O1FBekdBQztlQUFBQTs7UUFxQkFDO2VBQUFBOztRQTBDQUM7ZUFBQUE7O1FBNElBQztlQUFBQTs7UUFuVUFDO2VBQUFBOztRQWlRQUM7ZUFBQUE7O1FBOUpBQztlQUFBQTs7UUE2UEFDO2VBQUFBOztRQWpVQUM7ZUFBQUE7OzsyQkFuQ2U7QUFFL0IsTUFBTSxFQUFFVCxRQUFRVSxXQUFXLEVBQUUsR0FBR0MseUJBQWM7QUFFdkMsU0FBU04sSUFBSU8sS0FBSyxFQUFFQyxRQUFRLEVBQUUsR0FBR0MsZ0JBQWdCO0lBQ3RELE1BQU1DLFVBQVVELGlCQUFpQkUsR0FBRyxJQUM5QkMsT0FBT0gsaUJBQWlCRSxHQUFHLElBQzNCRSxTQUFTTixNQUFNTSxNQUFNLEVBQ3JCQyxRQUFR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
|