@ironcode/vas-lib 0.0.17 → 0.0.18
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/cjs/lib/entity/vas-field.model.d.ts +2 -1
- package/cjs/lib/entity/vas-field.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-field.model.js +11 -3
- package/cjs/lib/entity/vas-field.model.js.map +1 -1
- package/cjs/lib/entity/vas-job.model.d.ts +48 -10
- package/cjs/lib/entity/vas-job.model.d.ts.map +1 -1
- package/cjs/lib/entity/vas-job.model.js +71 -10
- package/cjs/lib/entity/vas-job.model.js.map +1 -1
- package/esm2020/lib/entity/vas-field.model.mjs +12 -4
- package/esm2020/lib/entity/vas-job.model.mjs +72 -11
- package/fesm2015/ironcode-vas-lib.mjs +82 -13
- package/fesm2015/ironcode-vas-lib.mjs.map +1 -1
- package/fesm2020/ironcode-vas-lib.mjs +82 -13
- package/fesm2020/ironcode-vas-lib.mjs.map +1 -1
- package/lib/entity/vas-field.model.d.ts +2 -1
- package/lib/entity/vas-job.model.d.ts +48 -10
- package/package.json +1 -1
|
@@ -140,15 +140,67 @@ export class VasJobModel extends VasRestrictedAccountObjectModel {
|
|
|
140
140
|
/**
|
|
141
141
|
* This method will hydrate the `fields` property of the model. The reason for
|
|
142
142
|
* this is that we have different ways to store the field data. One way, is
|
|
143
|
-
* we store them as dynamic properties of the job.
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
143
|
+
* we store them as dynamic properties of the job e.g. job.foo.bar, the other
|
|
144
|
+
* is in an array of Field. The former is nice to work with in clients,
|
|
145
|
+
* whereas the latter more suited to relational database.
|
|
146
|
+
*
|
|
147
|
+
* A) job with dynamic properties, e.g.
|
|
148
|
+
* {
|
|
149
|
+
* id: <guid>,
|
|
150
|
+
* reference: "something"
|
|
151
|
+
* <other static job properties>...
|
|
152
|
+
* foo: {
|
|
153
|
+
* bar: "value"
|
|
154
|
+
* }
|
|
155
|
+
* }
|
|
156
|
+
*
|
|
157
|
+
* B) job with array of Field
|
|
158
|
+
* {
|
|
159
|
+
* id: <guid>,
|
|
160
|
+
* reference: "something"
|
|
161
|
+
* <other static job properties>...
|
|
162
|
+
* <will not have dynamic properties>...
|
|
163
|
+
* fields: [
|
|
164
|
+
* {
|
|
165
|
+
* id: <guid>,
|
|
166
|
+
* <other field properties>,
|
|
167
|
+
* value: "value"
|
|
168
|
+
* }
|
|
169
|
+
* ]
|
|
170
|
+
* }
|
|
171
|
+
*
|
|
172
|
+
* What this method does is given a VasJobModel that has been populated with
|
|
173
|
+
* a VasJobDto in form B (i.e. `.fields` are populated - usually from a VASAPI
|
|
174
|
+
* response), hydrate the dynamic properties of the model. NOTE: knowledge of
|
|
175
|
+
* the Form that was used to crate the Job is required because it will contain
|
|
176
|
+
* the Groups, which names are used in the hydrating
|
|
177
|
+
*
|
|
178
|
+
* @param {VasFormModel} formModel the VasFormModel that was used to create
|
|
179
|
+
* the job
|
|
180
|
+
* @return {void}
|
|
181
|
+
*/
|
|
182
|
+
hydrateDynamicProps(formModel) {
|
|
183
|
+
formModel.groups
|
|
184
|
+
.forEach(group => {
|
|
185
|
+
const p0 = group.name;
|
|
186
|
+
group.controls
|
|
187
|
+
.forEach(control => {
|
|
188
|
+
const p1 = control.name;
|
|
189
|
+
const f = this.fields.find(field => field.control === control.id);
|
|
190
|
+
if (!f) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
this.setValueByPath(f.value, [p0, p1]);
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* This method will hydrate the `fields` property of the model. The reason for
|
|
199
|
+
* this is that we have different ways to store the field data. One way, is
|
|
200
|
+
* we store them as dynamic properties of the job e.g. job.foo.bar, the other
|
|
201
|
+
* is in an array of Field. The former is nice to work with in clients,
|
|
202
|
+
* whereas the latter more suited to relational database.
|
|
203
|
+
*
|
|
152
204
|
* A) job with dynamic properties, e.g.
|
|
153
205
|
* {
|
|
154
206
|
* id: <guid>,
|
|
@@ -215,7 +267,7 @@ export class VasJobModel extends VasRestrictedAccountObjectModel {
|
|
|
215
267
|
* be generated, or to reuse an existing one from the map.
|
|
216
268
|
* @param {Array<string>} controlNames if a value is provided, it will be used
|
|
217
269
|
* to filter the fields that are returned.
|
|
218
|
-
* @return {
|
|
270
|
+
* @return {void}
|
|
219
271
|
*/
|
|
220
272
|
hydrateFields(formModel, controlFieldIdMap = new Map(), controlNames) {
|
|
221
273
|
const fields = [];
|
|
@@ -280,11 +332,20 @@ export class VasJobModel extends VasRestrictedAccountObjectModel {
|
|
|
280
332
|
return;
|
|
281
333
|
}
|
|
282
334
|
case 2: {
|
|
335
|
+
if (!this.$this[path[0]]) {
|
|
336
|
+
this.$this[path[0]] = {};
|
|
337
|
+
}
|
|
283
338
|
// eslint-disable-next-line max-len
|
|
284
339
|
this.$this[path[0]][path[1]] = value;
|
|
285
340
|
return;
|
|
286
341
|
}
|
|
287
342
|
case 3: {
|
|
343
|
+
if (!this.$this[path[0]]) {
|
|
344
|
+
this.$this[path[0]] = {};
|
|
345
|
+
}
|
|
346
|
+
if (!this.$this[path[0]][path[1]]) {
|
|
347
|
+
this.$this[path[0]][path[1]] = {};
|
|
348
|
+
}
|
|
288
349
|
// eslint-disable-next-line max-len
|
|
289
350
|
this.$this[path[0]][path[1]][path[2]] = value;
|
|
290
351
|
return;
|
|
@@ -442,4 +503,4 @@ export class VasJobModel extends VasRestrictedAccountObjectModel {
|
|
|
442
503
|
};
|
|
443
504
|
}
|
|
444
505
|
}
|
|
445
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFzLWpvYi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Zhcy1saWIvc3JjL2xpYi9lbnRpdHkvdmFzLWpvYi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2xELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBb0J4Rjs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsK0JBQStCO0lBQzlEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ0gsWUFDa0IsRUFBVSxFQUNWLE9BQWUsRUFDZixhQUFxQixFQUNyQixTQUFpQixFQUNqQixRQUFnQixFQUNoQixjQUFzQixFQUN0QixVQUFrQixFQUNsQixPQUFlLEVBQ2YsV0FBbUIsRUFDNUIsU0FBaUIsRUFDakIsT0FBZSxFQUNmLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixVQUFrQixFQUNsQixNQUFjLEVBQ2QsY0FBc0IsRUFDdEIsYUFBcUIsRUFDckIsYUFBcUIsRUFDckIsT0FBZSxFQUNmLE1BQTBCLEVBQzFCLEtBQXdCO1FBRS9CLEtBQUssQ0FDSCxFQUFFLEVBQ0YsT0FBTyxFQUNQLGFBQWEsRUFDYixTQUFTLEVBQ1QsUUFBUSxFQUNSLGNBQWMsRUFDZCxVQUFVLEVBQ1YsT0FBTyxFQUNQLFdBQVcsQ0FDWixDQUFDO1FBaENjLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2Ysa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQixVQUFLLEdBQUwsS0FBSyxDQUFtQjtJQWFqQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksaUJBQWlCO1FBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMxQyxPQUFPLE1BQU07YUFDVixtQkFBbUIsQ0FBQyxJQUFJLENBQUM7YUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sTUFBTSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxLQUFLO1FBQ2pCLE9BQU8sSUFBSSxXQUFXO1FBQ3BCLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQ1gsRUFBRSxFQUNGLEVBQUUsRUFDRixFQUFFLEVBQ0YsRUFBRSxFQUNGLEVBQUUsRUFDRixFQUFFLEVBQ0YsRUFBRSxFQUNGLEVBQUUsRUFDRixFQUFFLEVBQ0YsRUFBRSxFQUNGLEVBQUUsRUFDRixFQUFFLEVBQ0YsRUFBRSxFQUNGLEVBQUUsRUFDRixNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFDcEIsQ0FBQyxFQUNELEVBQUUsRUFDRixDQUFDLEVBQ0QsRUFBRSxFQUNGLEVBQUUsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBMEI7UUFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXO1FBQzNCLG1DQUFtQztRQUNuQyxNQUFNLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFDeEIsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQ3BCLE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSxFQUMxQixNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFDdEIsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQ3JCLE1BQU0sQ0FBQyxjQUFjLElBQUksRUFBRSxFQUMzQixNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFDdkIsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQ3BCLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRSxFQUN4QixNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFDdEIsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQ3BCLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxFQUN0QixNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFDcEIsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQ3ZCLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxFQUNuQixNQUFNLENBQUMsY0FBYyxJQUFJLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUM3QyxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUMsRUFDekIsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFLEVBQzFCLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUNuQixNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFDbkIsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQ25CLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFDekMsTUFBTTthQUNILElBQUksQ0FBQyxNQUFNLENBQUM7YUFDWixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzVDLE9BQU8sQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQ3ZCLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUksTUFBc0MsQ0FBQyxHQUFHLENBQUMsQ0FDaEUsQ0FBQztRQUNKLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxTQUF1QjtRQUMvQixNQUFNLE1BQU0sR0FBc0MsRUFBRSxDQUFDO1FBQ3JELFNBQVMsQ0FBQyxNQUFNO2FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2YsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQy9CLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO29CQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxVQUFVO1FBQ1IsSUFBSSxNQUFNLEdBQXNDLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsaUJBQWlCO2FBQ25CLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3JCLE1BQU07aUJBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDckIsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FDNUMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQ3pCLENBQUE7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNSLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQStFRztJQUNILGFBQWEsQ0FDWCxTQUF1QixFQUN2QixvQkFBeUMsSUFBSSxHQUFHLEVBQWtCLEVBQ2xFLFlBQTRCO1FBRTVCLE1BQU0sTUFBTSxHQUF1QixFQUFFLENBQUM7UUFDdEMsU0FBUyxDQUFDLE1BQU07YUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDZixLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFFL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUN2QyxPQUFPO2lCQUNSO2dCQUVELElBQUksWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hELE9BQU87aUJBQ1I7Z0JBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO29CQUNoQyxrRUFBa0U7b0JBQ2xFLDZDQUE2QztvQkFDN0MsRUFBRSxFQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDcEQsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO29CQUNyQixHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO29CQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3JCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtvQkFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUN4QixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUMzQjtpQkFDRixDQUFDLENBQUMsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FDWixPQUFpQixFQUFFO1FBRW5CLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsY0FBYyxDQUFDLEtBQXVCLEVBQUUsT0FBaUIsRUFBRTtRQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbkIsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDTixPQUFPO2FBQ1I7WUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNMLElBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLE9BQU87YUFDUjtZQUNELEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ04sbUNBQW1DO2dCQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBc0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQzNFLE9BQU87YUFDUjtZQUNELEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ04sbUNBQW1DO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBc0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQXNDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUMxSCxPQUFPO2FBQ1I7WUFDRCxPQUFPLENBQUMsQ0FBQztnQkFDUCxNQUFNLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2FBQzNDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSztRQUU3QixJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUNqQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDakMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2FBQ2xCLENBQUM7U0FDSDtRQUVELE1BQU0sR0FBRyxHQUFHLEVBQWlDLENBQUM7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzthQUNsRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVwQyxPQUFPLEdBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F5Qkc7SUFDSCxXQUFXLENBQ1QsS0FBYSxFQUNiLFVBQThCO1FBQzVCLGNBQWMsRUFBRSxDQUFDO0tBQ2xCO1FBR0QsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDdkMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDbEUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVwRCxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUU5QixJQUFJLFVBQVUsRUFBRSxTQUFTLEdBQVcsRUFBRSxDQUFDO1lBQ3ZDLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUNyQixVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQzdDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDOUM7cUJBQU07b0JBQ0wsVUFBVSxHQUFHLE1BQU0sQ0FBQztvQkFDcEIsU0FBUyxHQUFHLEVBQUUsQ0FBQztpQkFDaEI7Z0JBQ0QsVUFBVSxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN2QyxTQUFTLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDdEM7WUFDRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDckMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksU0FBUyxLQUFLLEtBQUssRUFBRTtnQkFDdkIsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN2RDtpQkFBTSxJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUU7Z0JBQ2pDLE1BQU0sR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDckU7aUJBQU0sSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUMzQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7b0JBQ25CLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxTQUFTLEVBQUU7d0JBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQ1gsYUFBYSxTQUFTLG1DQUFtQyxDQUMxRCxDQUFDO3dCQUNGLE1BQU0sR0FBRyxFQUFFLENBQUM7cUJBQ2I7eUJBQU07d0JBQ0wsTUFBTSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDOzZCQUM5RCxRQUFRLEVBQUUsQ0FBQztxQkFDZjtpQkFDRjtxQkFBTTtvQkFDTCxPQUFPLENBQUMsS0FBSyxDQUNYLGFBQWEsU0FBUyx5Q0FBeUMsQ0FDaEUsQ0FBQztvQkFDRixPQUFPLEVBQUUsQ0FBQztpQkFDWDthQUNGO2lCQUFNO2dCQUNMLE9BQU8sRUFBRSxDQUFDO2FBQ1g7WUFHRCxJQUFJLFVBQVUsSUFBSSxNQUFNLEVBQUU7Z0JBQ3hCLFFBQVEsVUFBVSxFQUFFO29CQUNsQixLQUFLLE1BQU0sQ0FBQyxDQUFDO3dCQUNYLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQzs2QkFDbEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7NkJBQ2pDLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7cUJBQzVCO29CQUNELE9BQU8sQ0FBQyxDQUFDO3dCQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLENBQUM7cUJBQy9DO2lCQUNGO2FBQ0Y7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFBQSxDQUFDO0lBRUY7O09BRUc7SUFDTSxRQUFRO1FBQ2YsT0FBTztZQUNMLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHO1lBQ2hDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUc7WUFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLElBQUksR0FBRztZQUM1QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxHQUFHO1lBQ3BDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUc7WUFDaEMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksR0FBRztZQUNsQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDO1lBQ3hDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUM7U0FDdkMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhc0ZpbGVEdG8gfSBmcm9tICcuL3Zhcy1maWxlLmR0byc7XG5pbXBvcnQgeyBVVUlEIH0gZnJvbSAnYW5ndWxhcjItdXVpZCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBnZXRWYWx1ZUJ5UGF0aCB9IGZyb20gJy4uL3V0aWxzL2dldC12YWx1ZS1ieS1wYXRoJztcbmltcG9ydCB7IFZhc0Jhc2VEdG8gfSBmcm9tICcuL3Zhcy1iYXNlLmR0byc7XG5pbXBvcnQgeyBWYXNGaWVsZER0bywgVmFzRmllbGREdG9WYWx1ZSB9IGZyb20gJy4vdmFzLWZpZWxkLmR0byc7XG5pbXBvcnQgeyBWYXNGaWVsZE1vZGVsIH0gZnJvbSAnLi92YXMtZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgVmFzRm9ybU1vZGVsIH0gZnJvbSAnLi92YXMtZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBWYXNKb2JEdG8gfSBmcm9tICcuL3Zhcy1qb2IuZHRvJztcbmltcG9ydCB7IFZhc1Jlc3RyaWN0ZWRBY2NvdW50T2JqZWN0TW9kZWwgfSBmcm9tICcuL3Zhcy1yZXN0cmljdGVkLWFjY291bnQtb2JqZWN0Lm1vZGVsJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFZhc0pvYk1vZGVsRHluYW1pY0ludGVyZmFjZSB7XG4gIFtzOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZVN5bnRheE9wdGlvbnMge1xuICAvLyBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBhZGp1c3QgYW55IGRhdGV0aW1lIHZhbHVlcyB0aGF0IGFyZSByZWZlcmVuY2VkXG4gIC8vIGluIHRoZSBzeW50YXggc3RyaW5nLiBTZWVcbiAgLy8gaHR0cHM6Ly9tb21lbnRqc2NvbS5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbW9tZW50LzAzLW1hbmlwdWxhdGluZy8wOS11dGMtb2Zmc2V0L1xuICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgYG1vbWVudGAgd2lsbCBoYW5kbGUgdGhlIHZhbHVlLlxuICB0aW1lWm9uZU9mZnNldDogbnVtYmVyLFxuICAvLyB0aGlzIGRpY3Rpb25hcnkgY2FuIGJlIHBhc3NlZCBpbiB0byBjb250YWluIG90aGVyIG9iamVjdHMgdG8gYmUgcmVmZXJlbmNlZFxuICAvLyBpbiB0aGUgc3ludGF4LiBGb3IgZXhhbXBsZSBpZiB3ZSBoYXZlIHtqb2IuZm9vfSB0aGlzIHdpbGwgcmVmZXJlbmNlIHRoZVxuICAvLyBqb2IncyBgZm9vYCBwcm9wZXJ0eSwgaG93ZXZlciBpZiB3ZSBoYXZlIFwicmVwb3J0TGF5b3V0LnRpdGxlXCIgdGhpcyB3aWxsXG4gIC8vIGV4cGVjdCB0byBmaW5kIGEgcHJvcGVydHkgb2YgYG9iamVjdHNgIGNhbGxlZCBgcmVwb3J0TGF5b3V0YCB3aGljaCB3aWxsXG4gIC8vIGhhdmUgYSBwcm9wZXJ0eSBjYWxsZWQgYHRpdGxlYFxuICBvYmplY3RzPzogUmVjb3JkPHN0cmluZywgUGFydGlhbDxWYXNCYXNlRHRvPiB8IFJlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+Pjtcbn1cblxuLyoqXG4gKiBKb2JNb2RlbFxuICovXG5leHBvcnQgY2xhc3MgVmFzSm9iTW9kZWwgZXh0ZW5kcyBWYXNSZXN0cmljdGVkQWNjb3VudE9iamVjdE1vZGVsIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3JlYXRlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VydmVyQ3JlYXRlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3JlYXRlZEJ5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RpZmllZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VydmVyTW9kaWZpZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGlmaWVkQnlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFjY291bnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFjY2Vzc0dyb3VwXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGpvYkRhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGpvYlN0YXR1c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gam9iVHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXNzaWduZWVJZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybUlkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lWm9uZU9mZnNldFxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVuZGluZ0ZpZWxkc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hpbGRNb2RpZmllZFxuICAgKiBAcGFyYW0ge251bWJlcn0gdmVyc2lvblxuICAgKiBAcGFyYW0ge0FycmF5PFZhc0ZpZWxkRHRvPn0gZmllbGRzXG4gICAqIEBwYXJhbSB7QXJyYXk8VmFzRmlsZUR0bz59IGZpbGVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb3ZlcnJpZGUgaWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY3JlYXRlZDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXJ2ZXJDcmVhdGVkOiBzdHJpbmcsXG4gICAgcHVibGljIG92ZXJyaWRlIGNyZWF0ZWRCeTogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBtb2RpZmllZDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXJ2ZXJNb2RpZmllZDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBtb2RpZmllZEJ5OiBzdHJpbmcsXG4gICAgcHVibGljIG92ZXJyaWRlIGFjY291bnQ6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWNjZXNzR3JvdXA6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVmZXJlbmNlOiBzdHJpbmcsXG4gICAgcHVibGljIGpvYkRhdGU6IHN0cmluZyxcbiAgICBwdWJsaWMgam9iU3RhdHVzOiBzdHJpbmcsXG4gICAgcHVibGljIGpvYlR5cGU6IHN0cmluZyxcbiAgICBwdWJsaWMgYXNzaWduZWVJZDogc3RyaW5nLFxuICAgIHB1YmxpYyBmb3JtSWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgdGltZVpvbmVPZmZzZXQ6IG51bWJlcixcbiAgICBwdWJsaWMgcGVuZGluZ0ZpZWxkczogbnVtYmVyLFxuICAgIHB1YmxpYyBjaGlsZE1vZGlmaWVkOiBzdHJpbmcsXG4gICAgcHVibGljIHZlcnNpb246IG51bWJlcixcbiAgICBwdWJsaWMgZmllbGRzOiBBcnJheTxWYXNGaWVsZER0bz4sXG4gICAgcHVibGljIGZpbGVzOiBBcnJheTxWYXNGaWxlRHRvPlxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIGlkLFxuICAgICAgY3JlYXRlZCxcbiAgICAgIHNlcnZlckNyZWF0ZWQsXG4gICAgICBjcmVhdGVkQnksXG4gICAgICBtb2RpZmllZCxcbiAgICAgIHNlcnZlck1vZGlmaWVkLFxuICAgICAgbW9kaWZpZWRCeSxcbiAgICAgIGFjY291bnQsXG4gICAgICBhY2Nlc3NHcm91cFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGlzIHdpdGggdGhlIGR5bmFtaWMgaW50ZXJmYWNlXG4gICAqIEByZXR1cm4ge1Zhc0pvYk1vZGVsRHluYW1pY0ludGVyZmFjZX1cbiAgICovXG4gIGdldCAkdGhpcygpOiBWYXNKb2JNb2RlbER5bmFtaWNJbnRlcmZhY2Uge1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBKb2IgZHluYW1pYyBwcm9wZXJ0aWVzIGkuZS4gdGhvc2UgdGhhdCBhcmUgYWRkZWQgYnkgdGhlXG4gICAqIGR5bmFtaWMgZm9ybXNcbiAgICovXG4gIGdldCBkeW5hbWljUHJvcGVydGllcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBuYXRpdmVQcm9wcyA9IHRoaXMuc3RhdGljUHJvcGVydGllcztcbiAgICByZXR1cm4gT2JqZWN0XG4gICAgICAuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKVxuICAgICAgLmZpbHRlcihwcm9wID0+ICFuYXRpdmVQcm9wcy5pbmNsdWRlcyhwcm9wKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgSm9iIHN0YXRpYyBwcm9wZXJ0aWVzIGkuZS4gdGhvc2UgdGhhdCBhcmUgZGVjbGFyZWQgYnlcbiAgICogdGhlIHR5cGVcbiAgICovXG4gIGdldCBzdGF0aWNQcm9wZXJ0aWVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhWYXNKb2JNb2RlbC5lbXB0eSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtWYXNKb2JNb2RlbH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZW1wdHkoKTogVmFzSm9iTW9kZWwge1xuICAgIHJldHVybiBuZXcgVmFzSm9iTW9kZWwoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuICAgICAgVVVJRC5VVUlEKCksXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgbW9tZW50KCkudXRjT2Zmc2V0KCksXG4gICAgICAwLFxuICAgICAgJycsXG4gICAgICAwLFxuICAgICAgW10sXG4gICAgICBbXVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtWYXNKb2JEdG99IGpvYkR0b1xuICAgKiBAcmV0dXJuIHtWYXNKb2JNb2RlbH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUR0byhqb2JEdG86IFBhcnRpYWw8VmFzSm9iRHRvPik6IFZhc0pvYk1vZGVsIHtcbiAgICBjb25zdCBtb2RlbCA9IG5ldyBWYXNKb2JNb2RlbChcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICBqb2JEdG8uaWQgfHwgVVVJRC5VVUlEKCksXG4gICAgICBqb2JEdG8uY3JlYXRlZCB8fCAnJyxcbiAgICAgIGpvYkR0by5zZXJ2ZXJDcmVhdGVkIHx8ICcnLFxuICAgICAgam9iRHRvLmNyZWF0ZWRCeSB8fCAnJyxcbiAgICAgIGpvYkR0by5tb2RpZmllZCB8fCAnJyxcbiAgICAgIGpvYkR0by5zZXJ2ZXJNb2RpZmllZCB8fCAnJyxcbiAgICAgIGpvYkR0by5tb2RpZmllZEJ5IHx8ICcnLFxuICAgICAgam9iRHRvLmFjY291bnQgfHwgJycsXG4gICAgICBqb2JEdG8uYWNjZXNzR3JvdXAgfHwgJycsXG4gICAgICBqb2JEdG8ucmVmZXJlbmNlIHx8ICcnLFxuICAgICAgam9iRHRvLmpvYkRhdGUgfHwgJycsXG4gICAgICBqb2JEdG8uam9iU3RhdHVzIHx8ICcnLFxuICAgICAgam9iRHRvLmpvYlR5cGUgfHwgJycsXG4gICAgICBqb2JEdG8uYXNzaWduZWVJZCB8fCAnJyxcbiAgICAgIGpvYkR0by5mb3JtSWQgfHwgJycsXG4gICAgICBqb2JEdG8udGltZVpvbmVPZmZzZXQgfHwgbW9tZW50KCkudXRjT2Zmc2V0KCksXG4gICAgICBqb2JEdG8ucGVuZGluZ0ZpZWxkcyB8fCAwLFxuICAgICAgam9iRHRvLmNoaWxkTW9kaWZpZWQgfHwgJycsXG4gICAgICBqb2JEdG8udmVyc2lvbiB8fCAwLFxuICAgICAgam9iRHRvLmZpZWxkcyB8fCBbXSxcbiAgICAgIGpvYkR0by5maWxlcyB8fCBbXVxuICAgICk7XG4gICAgY29uc3QgZW1wdHlLZXlzID0gbW9kZWwuc3RhdGljUHJvcGVydGllcztcbiAgICBPYmplY3RcbiAgICAgIC5rZXlzKGpvYkR0bylcbiAgICAgIC5maWx0ZXIoa2V5ID0+IGVtcHR5S2V5cy5pbmRleE9mKGtleSkgPT09IC0xKVxuICAgICAgLmZvckVhY2goKGtleTogc3RyaW5nKSA9PlxuICAgICAgICBtb2RlbC4kdGhpc1trZXldID0gKGpvYkR0byBhcyBWYXNKb2JNb2RlbER5bmFtaWNJbnRlcmZhY2UpW2tleV1cbiAgICAgICk7XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VmFzRm9ybU1vZGVsfSBmb3JtTW9kZWxcbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgVmFzRmllbGREdG9WYWx1ZT59XG4gICAqL1xuICBnZXRGaWVsZHMoZm9ybU1vZGVsOiBWYXNGb3JtTW9kZWwpOiBSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPiB7XG4gICAgY29uc3QgZmllbGRzOiB7W2tleTogc3RyaW5nXTogVmFzRmllbGREdG9WYWx1ZX0gPSB7fTtcbiAgICBmb3JtTW9kZWwuZ3JvdXBzXG4gICAgICAuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgIGdyb3VwLmNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICAgICAgKGZpZWxkcylbY29udHJvbC5yZXBvcnRUZW1wbGF0ZU5hbWVdID1cbiAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVCeVBhdGgoW2dyb3VwLm5hbWUsIGNvbnRyb2wubmFtZV0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBmaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCByZXR1cm4gYW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIHRoZSBuYW1lcyBvZiBhbGwgZmllbGRzIGluIHRoZSBqb2IgYnV0XG4gICAqIHdpdGggdGhlIFwiZmllbGRzLlwiIHBhcnQgcmVtb3ZlZC4gVGhpcyBtZXRob2QgaXMgc2ltaWxhciB0byBgZ2V0RmllbGRzYFxuICAgKiBleGNlcHQgdGhhdCB0aGlzIG1ldGhvZCB3aWxsIG9ubHkgcmV0dXJuIHZhbHVlcyB0aGF0IGFyZSBzZXQgd2hlcmVhc1xuICAgKiBgZ2V0RmllbGRzYCB3aWxsIHJldHVybiBhIHByb3BlcnR5IHJlZ2FyZGxlc3MgKGJlY2F1c2UgaXQgdXNlcyB0aGUgZm9ybSB0b1xuICAgKiBkcml2ZSB0aGUgbG9naWMpXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+fVxuICAgKi9cbiAgZ2V0RmllbGRzMigpOiBSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPiB7XG4gICAgbGV0IGZpZWxkczoge1trZXk6IHN0cmluZ106IFZhc0ZpZWxkRHRvVmFsdWV9ID0ge307XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllc1xuICAgICAgLmZvckVhY2goKGdyb3VwTmFtZSkgPT4ge1xuICAgICAgICBPYmplY3RcbiAgICAgICAgICAua2V5cyh0aGlzLiR0aGlzW2dyb3VwTmFtZV0pXG4gICAgICAgICAgLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbE5hbWVTaG9ydCA9IGNvbnRyb2xOYW1lLnJlcGxhY2UoL2ZpZWxkc1xcLi8sICcnKTtcbiAgICAgICAgICAgIGZpZWxkc1tjb250cm9sTmFtZVNob3J0XSA9IHRoaXMuZ2V0VmFsdWVCeVBhdGgoXG4gICAgICAgICAgICAgIFtncm91cE5hbWUsIGNvbnRyb2xOYW1lXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICB9LCB7fSlcbiAgICByZXR1cm4gZmllbGRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgaHlkcmF0ZSB0aGUgYGZpZWxkc2AgcHJvcGVydHkgb2YgdGhlIG1vZGVsLiBUaGUgcmVhc29uIGZvclxuICAgKiB0aGlzIGlzIHRoYXQgd2UgaGF2ZSBkaWZmZXJlbnQgd2F5cyB0byBzdG9yZSB0aGUgZmllbGQgZGF0YS4gT25lIHdheSwgaXNcbiAgICogd2Ugc3RvcmUgdGhlbSBhcyBkeW5hbWljIHByb3BlcnRpZXMgb2YgdGhlIGpvYi4gRm9yIGV4YW1wbGUgam9iLmZvby5iYXIsXG4gICAqIHdoZXJlIGBmb29gIGlzIHRoZSBuYW1lIG9mIGEgR3JvdXAsIGFuZCBgYmFyYCBpcyB0aGUgbmFtZSBvZiBhIGNvbnRyb2wuXG4gICAqIFRodXMsIHdoZW4gd2UgY3JlYXRlIGEgam9iIHVzaW5nIGEgZm9ybSBpbiB0aGUgY2xpZW50LCB0aGUgam9iIG9iamVjdCB3aWxsXG4gICAqIGhhdmUgaXRzIHN0YXRpYyBwcm9wZXJ0aWVzIChpZCwgYWNjb3VudCwgcmVmZXJlbmNlIGV0YyksIGFuZCBhbHNvIGEgbnVtYmVyXG4gICAqIG9mIGR5bmFtaWMgcHJvcGVydGllcyBkZXRlcm1pbmVkIGJ5IHRoZSBHcm91cHMgYW5kIENvbnRyb2xzLiBUaGlzIGtpbmQgb2ZcbiAgICogb2JqZWN0IGlzIG5pY2UgdG8gd29yayB3aXRoIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gSG93ZXZlciwgdGhlIGFwaVxuICAgKiB3b3JrcyBkaWZmZXJlbnRseS4gSW4gdGhlIEFQSSBhIEpvYiBpcyBhIHJlY29yZCwgYW5kIHJlZmVyZW5jZXMgYSBudW1iZXIgb2ZcbiAgICogRmllbGQgcmVjb3Jkcy4gRWFjaCBGaWVsZCBzdG9yZXMgdGhlIHZhbHVlLiBDb21wYXJpbmcgdGhlc2UgdHdvIG1vZGVscyB3ZVxuICAgKiBoYXZlOlxuICAgKiBBKSBqb2Igd2l0aCBkeW5hbWljIHByb3BlcnRpZXMsIGUuZy5cbiAgICoge1xuICAgKiAgIGlkOiA8Z3VpZD4sXG4gICAqICAgcmVmZXJlbmNlOiBcInNvbWV0aGluZ1wiXG4gICAqICAgPG90aGVyIHN0YXRpYyBqb2IgcHJvcGVydGllcz4uLi5cbiAgICogICBmb286IHtcbiAgICogICAgIGJhcjogXCJ2YWx1ZVwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEIpIGpvYiB3aXRoIGZpZWxkc1xuICAgKiB7XG4gICAqICAgaWQ6IDxndWlkPixcbiAgICogICByZWZlcmVuY2U6IFwic29tZXRoaW5nXCJcbiAgICogICA8b3RoZXIgc3RhdGljIGpvYiBwcm9wZXJ0aWVzPi4uLlxuICAgKiAgIDx3aWxsIG5vdCBoYXZlIGR5bmFtaWMgcHJvcGVydGllcz4uLi5cbiAgICogICBmaWVsZHM6IFtcbiAgICogICAgIHtcbiAgICogICAgICAgaWQ6IDxndWlkPixcbiAgICogICAgICAgPG90aGVyIGZpZWxkIHByb3BlcnRpZXM+LFxuICAgKiAgICAgICB2YWx1ZTogXCJ2YWx1ZVwiXG4gICAqICAgICB9XG4gICAqICAgXVxuICAgKiB9XG4gICAqXG4gICAqIFNvLCB3aGF0IHRoaXMgbWV0aG9kIGRvZXMgaXMgZ2l2ZW4gYSBKb2JNb2RlbCBpbiB0aGUgZm9ybSBvZiBBLCByZWFkIGFsbFxuICAgKiBvZiB0aG9zZSBkeW5hbWljIHByb3BlcnRpZXMgYW5kIHNldCB0aGVtIGludG8gYGZpZWxkc2AuIERvaW5nIHRoaXMgcmVxdWlyZXNcbiAgICoga25vd2xlZGdlIG9mIHRoZSBGb3JtIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoZSBqb2IuIE1vcmVvdmVyLCBzaW5jZSB0aGVcbiAgICogZHluYW1pYyBwcm9wZXJ0aWVzIGRvIG5vdCBjb250YWluIHRoZSBpZHMgb2YgdGhlIGZpZWxkcywgd2UgYWxzbyBhbGxvdyB0b1xuICAgKiBwYXNzIGluIGEgYGNvbnRyb2xGaWVsZElkTWFwYC4gVGhpcyBtYXAgc3RvcmVzIHRoZSBtYXBwaW5nIGJldHdlZW4gQ29udHJvbFxuICAgKiBhbmQgdGhlIEZpZWxkIHRoYXQgd2FzIGNyZWF0ZWQgaW4gdGhlIEpvYiB0byBzdG9yZSB0aGUgdmFsdWUgZm9yIHRoYXRcbiAgICogQ29udHJvbC4gVGhpcyBpcyB1c2VmdWwsIGlmIGZvciBleGFtcGxlIHlvdSB3YW50IHRvIGNvbXBhcmUgYSBKb2IgaW4gZm9ybSBBXG4gICAqIHdpdGggYSBKb2IgaW4gZm9ybSBCLCBmb3IgZXhhbXBsZSBpZiB5b3Ugd2FudCB0byB1cGRhdGUgdGhlIEpvYiBvbiB0aGUgQVBJXG4gICAqIHdpdGggYSBKb2IgdGhhdCB3YXMgc2F2ZWQgYnkgYSBjbGllbnQgaW4gZm9ybSBBLlxuICAgKlxuICAgKiBFLmcuXG4gICAqIENsaWVudCAtPiBBUEk6IGNsaWVudCByZXF1ZXN0cyBmb3JtXG4gICAqIFVzZXIgLT4gQ2xpZW50OiB1c2VyIGZpbGxzIGluIHRoZSBmb3JtIGFuZCBzdWJtaXRzXG4gICAqIENsaWVudCAtPiBGaXJlc3RvcmU6IGNsaWVudCBzYXZlcyB0aGUgSm9iIGluIGZvcm0gQSBpLmUuIGR5bmFtaWMgcHJvcHNcbiAgICogRmlyZXN0b3JlIC0+IEZ1bmN0aW9uOiBBIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCB0byBzeW5jIHRoZSBqb2IgdG8gdGhlIEFQSVxuICAgKiBGdW5jdGlvbiAtPiBBUEk6IEZ1bmN0aW9uIGNoZWNrcyBpZiBqb2IgYWxyZWFkeSBleGlzdHMsIGl0IHJlY2VpdmVzIDQwNFxuICAgKiBGdW5jdGlvbiAtPiBGdW5jdGlvbjogVGhlIGZ1bmN0aW9uIGNhbGxzIGBoeWRyYXRlRmllbGRzKC4uLilgXG4gICAqIEZ1bmN0aW9uIC0+IEFQSTogVGhlIGZ1bmN0aW9uIFBPU1QgdGhlIEpvYiB0byAvam9ic1xuICAgKiBGdW5jdGlvbiAtPiBBUEk6IFRoZSBmdW5jdGlvbiBQT1NUIGVhY2ggZmllbGQgdG8gL2ZpZWxkc1xuICAgKlxuICAgKiBTaW1pbGFybHksIGlmIHRoZSB1c2VyIHVwZGF0ZXMgdGhlIGpvYlxuICAgKiBDbGllbnQgLT4gQVBJOiBjbGllbnQgcmVxdWVzdHMgZm9ybVxuICAgKiBVc2VyIC0+IENsaWVudDogdXNlciBmaWxscyBpbiB0aGUgZm9ybSBhbmQgc3VibWl0cyBhbiB1cGRhdGVcbiAgICogQ2xpZW50IC0+IEZpcmVzdG9yZTogY2xpZW50IHNhdmVzIHRoZSBKb2IgaW4gZm9ybSBBIGkuZS4gZHluYW1pYyBwcm9wc1xuICAgKiBGaXJlc3RvcmUgLT4gRnVuY3Rpb246IEEgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHRvIHN5bmMgdGhlIGpvYiB0byB0aGUgQVBJXG4gICAqIEZ1bmN0aW9uIC0+IEFQSTogRnVuY3Rpb24gY2hlY2tzIGlmIGpvYiBhbHJlYWR5IGV4aXN0cywgaXQgcmVjZWl2ZXMgMjAwXG4gICAqIEZ1bmN0aW9uIC0+IEZ1bmN0aW9uOiBUaGUgZnVuY3Rpb24gY2FsbHMgYGh5ZHJhdGVGaWVsZHMoLi4uKWAgcGFzc2luZyBpblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcCBpcyBtYWRlIGJ5IGl0ZXJhdGluZyBvdmVyIHRoZSBmaWVsZHMgaXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkIGZyb20gdGhlIEFQSSBhbmQgc3RvcmluZyB0aGUgbWFwcGluZ3NcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gY29udHJvbElkIGFuZCBmaWVsZElkIGZvciBlYWNoIGZpZWxkXG4gICAqIEZ1bmN0aW9uIC0+IEFQSTogVGhlIGZ1bmN0aW9uIFBBVENIIHRoZSBKb2IgdG8gL2pvYnNcbiAgICogRnVuY3Rpb24gLT4gQVBJOiBUaGUgZnVuY3Rpb24gUE9TVC9QQVRDSCBlYWNoIGZpZWxkIHRvIC9maWVsZHNcbiAgICogdHJlYXRlZCBhcyBuZXdcbiAgICpcbiAgICogQHBhcmFtIHtWYXNGb3JtTW9kZWx9IGZvcm1Nb2RlbCB0aGUgVmFzRm9ybU1vZGVsIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlXG4gICAqIHRoZSBqb2JcbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSBjb250cm9sRmllbGRJZE1hcCBhIG1hcHBpbmcgb2YgY29udHJvbCB0b1xuICAgKiBmaWVsZCBpZHMuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIG5ldyBpZCBmb3IgdGhlIGZpZWxkIHNob3VsZFxuICAgKiBiZSBnZW5lcmF0ZWQsIG9yIHRvIHJldXNlIGFuIGV4aXN0aW5nIG9uZSBmcm9tIHRoZSBtYXAuXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gY29udHJvbE5hbWVzIGlmIGEgdmFsdWUgaXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgdXNlZFxuICAgKiB0byBmaWx0ZXIgdGhlIGZpZWxkcyB0aGF0IGFyZSByZXR1cm5lZC5cbiAgICogQHJldHVybiB7QXJyYXk8VmFzRmllbGREdG8+fVxuICAgKi9cbiAgaHlkcmF0ZUZpZWxkcyhcbiAgICBmb3JtTW9kZWw6IFZhc0Zvcm1Nb2RlbCxcbiAgICBjb250cm9sRmllbGRJZE1hcDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCksXG4gICAgY29udHJvbE5hbWVzPzogQXJyYXk8c3RyaW5nPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZHM6IEFycmF5PFZhc0ZpZWxkRHRvPiA9IFtdO1xuICAgIGZvcm1Nb2RlbC5ncm91cHNcbiAgICAgIC5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgZ3JvdXAuY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcblxuICAgICAgICAgIGlmICghY29udHJvbC5uYW1lLnN0YXJ0c1dpdGgoJ2ZpZWxkcy4nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb250cm9sTmFtZXMgJiYgIWNvbnRyb2xOYW1lcy5pbmNsdWRlcyhjb250cm9sLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmllbGRzLnB1c2goVmFzRmllbGRNb2RlbC5mcm9tRHRvKHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjb250cm9sSWQgZXhpc3RzIGluIHRoZSBtYXAsIHVzZSB0aGUgYXNzb2NpYXRlZCBmaWVsZElkLFxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGdlbmVyYXRlIGEgbmV3IGlkIGZvciB0aGUgZmllbGQuXG4gICAgICAgICAgICBpZDogY29udHJvbEZpZWxkSWRNYXAuZ2V0KGNvbnRyb2wuaWQpIHx8IFVVSUQuVVVJRCgpLFxuICAgICAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgICAgICAgam9iOiB0aGlzLmlkLFxuICAgICAgICAgICAgY3JlYXRlZEJ5OiB0aGlzLmNyZWF0ZWRCeSxcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcbiAgICAgICAgICAgIG1vZGlmaWVkQnk6IHRoaXMubW9kaWZpZWRCeSxcbiAgICAgICAgICAgIG1vZGlmaWVkOiB0aGlzLm1vZGlmaWVkLFxuICAgICAgICAgICAgY29udHJvbDogY29udHJvbC5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlQnlQYXRoKFxuICAgICAgICAgICAgICBbZ3JvdXAubmFtZSwgY29udHJvbC5uYW1lXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcbiAgfVxuXG4gIC8qKlxuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggcGF0aCBzZWdtZW50c1xuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgZ2V0VmFsdWVCeVBhdGg8VCBleHRlbmRzIFZhc0ZpZWxkRHRvVmFsdWU+KFxuICAgIHBhdGg6IHN0cmluZ1tdID0gW11cbiAgKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGdldFZhbHVlQnlQYXRoKHBhdGgsIHRoaXMuJHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgdmVyeSBub24gc29waGlzdGljYXRlZCB3YXkgdG8gc2V0IHZhbHVlcyBpbiB0aGUgam9iIHZpYSBwYXRoc1xuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogc2V0VmFsdWVCeVBhdGgoJ3ZhbHVlJywgWydmb28nLCAnYmFyJ10pO1xuICAgKlxuICAgKiB3aWxsIG1ha2UgcmVzdWx0cyBpbiBqb2JcbiAgICoge1xuICAgKiAgIGZvbzoge1xuICAgKiAgICAgYmFyOiAndmFsdWUnXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSB0aGUgdmFsdWUgdG8gc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggcGF0aCBzZWdtZW50c1xuICAgKi9cbiAgc2V0VmFsdWVCeVBhdGgodmFsdWU6IFZhc0ZpZWxkRHRvVmFsdWUsIHBhdGg6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHBhdGgubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAxOiB7XG4gICAgICAgICh0aGlzIGFzIGFueSlbcGF0aFswXV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAyOiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICh0aGlzLiR0aGlzW3BhdGhbMF1dIGFzIFJlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+KVtwYXRoWzFdXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIDM6IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgKCh0aGlzLiR0aGlzW3BhdGhbMF1dIGFzIFJlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+KVtwYXRoWzFdXSBhcyBSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPilbcGF0aFsyXV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBFcnJvcigncGF0aCBoYXMgdG9vIG1hbnkgc2VnbWVudHMnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBzdGF0aWNPbmx5IGlmIHRydWUsIHdpbGwgb25seSBvdXRwdXQgdmFsdWVzIGZvciB0aGUgc3RhdGljXG4gICAqIHByb3BlcnRpZXMgaW4gdGhlIGR0b1xuICAgKiBAcmV0dXJuIHtWYXNKb2JEdG99XG4gICAqL1xuICBwdWJsaWMgdG9EdG8oc3RhdGljT25seSA9IGZhbHNlKTogVmFzSm9iRHRvIHtcblxuICAgIGlmIChzdGF0aWNPbmx5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgY3JlYXRlZDogdGhpcy5jcmVhdGVkLFxuICAgICAgICBjcmVhdGVkQnk6IHRoaXMuY3JlYXRlZEJ5LFxuICAgICAgICBtb2RpZmllZDogdGhpcy5tb2RpZmllZCxcbiAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5tb2RpZmllZEJ5LFxuICAgICAgICBzZXJ2ZXJDcmVhdGVkOiB0aGlzLnNlcnZlckNyZWF0ZWQsXG4gICAgICAgIHNlcnZlck1vZGlmaWVkOiB0aGlzLnNlcnZlck1vZGlmaWVkLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICAgIGFjY2Vzc0dyb3VwOiB0aGlzLmFjY2Vzc0dyb3VwLFxuICAgICAgICByZWZlcmVuY2U6IHRoaXMucmVmZXJlbmNlLFxuICAgICAgICBqb2JEYXRlOiB0aGlzLmpvYkRhdGUsXG4gICAgICAgIGpvYlN0YXR1czogdGhpcy5qb2JTdGF0dXMsXG4gICAgICAgIGpvYlR5cGU6IHRoaXMuam9iVHlwZSxcbiAgICAgICAgYXNzaWduZWVJZDogdGhpcy5hc3NpZ25lZUlkLFxuICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICB0aW1lWm9uZU9mZnNldDogdGhpcy50aW1lWm9uZU9mZnNldCxcbiAgICAgICAgcGVuZGluZ0ZpZWxkczogdGhpcy5wZW5kaW5nRmllbGRzLFxuICAgICAgICBjaGlsZE1vZGlmaWVkOiB0aGlzLmNoaWxkTW9kaWZpZWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyxcbiAgICAgICAgZmlsZXM6IHRoaXMuZmlsZXNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZHRvID0ge30gYXMgVmFzSm9iTW9kZWxEeW5hbWljSW50ZXJmYWNlO1xuICAgIFsuLi50aGlzLnN0YXRpY1Byb3BlcnRpZXMsIC4uLnRoaXMuZHluYW1pY1Byb3BlcnRpZXNdXG4gICAgICAuZm9yRWFjaChwcm9wID0+XG4gICAgICAgIChkdG8pW3Byb3BdID0gdGhpcy4kdGhpc1twcm9wXSk7XG5cbiAgICByZXR1cm4gZHRvIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIHBhcnNlIGEgc3ludGF4IHRoYXQgYWxsb3dzIHVzIHRvIGJ1aWxkIHN0cmluZ3MgZnJvbSB0aGVcbiAgICogdmFsdWVzIG9mIGZyb20gdGhlIGpvYiBtb2RlbC4gRm9yIGV4YW1wbGUgaWYgdGhlIGpvYiBtb2RlbCB3YXM6XG4gICAqXG4gICAqIHtcbiAgICogICBmb286ICdiYXInXG4gICAqIH1cbiAgICpcbiAgICogYW5kIHdlIHBhc3MgXCJpIGFtIGZvbyB7Zm9vfVwiLCB0aGUgcmVzdWx0IHdvdWxkIGJlOlxuICAgKlxuICAgKiBcImkgYW0gZm9vIGJhclwiXG4gICAqXG4gICAqIHdlIGNhbiBhbHNvIHVzZSBtb21lbnQgdG8gcGFyc2UgZGF0ZXMsIGZvciBleGFtcGxlIGlmIHRoZSBqb2IgbW9kZWwgd2FzOlxuICAgKlxuICAgKiB7XG4gICAqICAgY3JlYXRlZDogXCIyMDIyLTAxLTAxVDAwOjAwOjAwKzAwMDBcIlxuICAgKiB9XG4gICAqXG4gICAqIGFuZCB3ZSBwYXNzIFwie2NyZWF0ZWR8ZGF0ZTpZWS1NTS1ERH1cIiwgdGhlIHJlc3VsdCB3b3VsZCBiZTpcbiAgICpcbiAgICogXCIyMDIyLTAxLTAxXCJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIGEgc3RyaW5nIHdpdGggdGhlIHN5bnRheFxuICAgKiBAcGFyYW0ge1BhcnNlU3ludGF4T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSByZXN1bHRzIG9mIHBhcnNpbmcgdGhlIHN5bnRheCBvbiB0aGlzIGpvYlxuICAgKi9cbiAgcGFyc2VTeW50YXgoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBQYXJzZVN5bnRheE9wdGlvbnMgPSB7XG4gICAgICB0aW1lWm9uZU9mZnNldDogMFxuICAgIH1cbiAgKTogc3RyaW5nIHtcblxuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKHtbXn1dKn0pL2csIChtYXRjaDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzeW50YXggPSB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XG5cbiAgICAgIGxldCBba2V5LCBmaWx0ZXJdID0gc3ludGF4LnNwbGl0KCd8Jyk7XG4gICAgICBrZXkgPSAoa2V5IHx8ICcnKS50cmltKCk7XG4gICAgICBmaWx0ZXIgPSAoZmlsdGVyIHx8ICcnKS50cmltKClcblxuICAgICAgbGV0IGZpbHRlck5hbWUsIGZpbHRlckFyZzogc3RyaW5nID0gJyc7XG4gICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHNwbGl0SW5kZXggPSBmaWx0ZXIuaW5kZXhPZignOicpO1xuICAgICAgICBpZiAoc3BsaXRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBmaWx0ZXJOYW1lID0gZmlsdGVyLnN1YnN0cmluZygwLCBzcGxpdEluZGV4KTtcbiAgICAgICAgICBmaWx0ZXJBcmcgPSBmaWx0ZXIuc3Vic3RyaW5nKHNwbGl0SW5kZXggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXJOYW1lID0gZmlsdGVyO1xuICAgICAgICAgIGZpbHRlckFyZyA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGZpbHRlck5hbWUgPSAoZmlsdGVyTmFtZSB8fCAnJykudHJpbSgpO1xuICAgICAgICBmaWx0ZXJBcmcgPSAoZmlsdGVyQXJnIHx8ICcnKS50cmltKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXRoID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICBjb25zdCBvYmplY3RLZXkgPSBwYXRoLnNoaWZ0KCkgfHwgJyc7XG4gICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICBpZiAob2JqZWN0S2V5ID09PSAnam9iJykge1xuICAgICAgICByZXN1bHQgPSAodGhpcy5nZXRWYWx1ZUJ5UGF0aChwYXRoKSB8fCAnJykudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0S2V5ID09PSAnZmllbGRzJykge1xuICAgICAgICByZXN1bHQgPSAoZ2V0VmFsdWVCeVBhdGgocGF0aCwgdGhpcy5nZXRGaWVsZHMyKCkpIHx8ICcnKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChvYmplY3RLZXkubGVuZ3RoKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm9iamVjdHMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5vYmplY3RzW29iamVjdEtleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgICAgICAgYG9iamVjdEtleSAke29iamVjdEtleX0gaXMgbm90IHByZXNlbnQgaW4gb3B0aW9ucy5vYmplY3RgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChnZXRWYWx1ZUJ5UGF0aChwYXRoLCBvcHRpb25zLm9iamVjdHNbb2JqZWN0S2V5XSkgfHwgJycpXG4gICAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAgICAgYG9iamVjdEtleSAke29iamVjdEtleX0gd2FzIHVzZWQgYnV0IG9wdGlvbnMub2JqZWN0IGlzIG5vdCBzZXRgXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuXG4gICAgICBpZiAoZmlsdGVyTmFtZSAmJiByZXN1bHQpIHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXJOYW1lKSB7XG4gICAgICAgICAgY2FzZSAnZGF0ZSc6IHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQocmVzdWx0KVxuICAgICAgICAgICAgICAudXRjT2Zmc2V0KG9wdGlvbnMudGltZVpvbmVPZmZzZXQpXG4gICAgICAgICAgICAgIC5mb3JtYXQoZmlsdGVyQXJnIHx8ICcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCd1bmtub3duIGZpbHRlciAlcycsIGZpbHRlck5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pLnRyaW0oKTtcbiAgfTtcblxuICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKi9cbiAgb3ZlcnJpZGUgdG9BcGlEdG8oKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci50b0FwaUR0bygpLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLnJlZmVyZW5jZSB8fCAnficsXG4gICAgICBqb2JEYXRlOiB0aGlzLmpvYkRhdGUgfHwgJ34nLFxuICAgICAgam9iVHlwZTogdGhpcy5qb2JUeXBlIHx8ICd+JyxcbiAgICAgIGFjY2Vzc0dyb3VwOiB0aGlzLmFjY2Vzc0dyb3VwIHx8ICd+JyxcbiAgICAgIGpvYlN0YXR1czogdGhpcy5qb2JTdGF0dXMgfHwgJ34nLFxuICAgICAgYXNzaWduZWVJZDogdGhpcy5hc3NpZ25lZUlkIHx8ICd+JyxcbiAgICAgIHRpbWVab25lT2Zmc2V0OiB0aGlzLnRpbWVab25lT2Zmc2V0IHx8IDAsXG4gICAgICBwZW5kaW5nRmllbGRzOiB0aGlzLnBlbmRpbmdGaWVsZHMgfHwgMCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
506
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFzLWpvYi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Zhcy1saWIvc3JjL2xpYi9lbnRpdHkvdmFzLWpvYi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2xELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBb0J4Rjs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsK0JBQStCO0lBQzlEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ0gsWUFDa0IsRUFBVSxFQUNWLE9BQWUsRUFDZixhQUFxQixFQUNyQixTQUFpQixFQUNqQixRQUFnQixFQUNoQixjQUFzQixFQUN0QixVQUFrQixFQUNsQixPQUFlLEVBQ2YsV0FBbUIsRUFDNUIsU0FBaUIsRUFDakIsT0FBZSxFQUNmLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixVQUFrQixFQUNsQixNQUFjLEVBQ2QsY0FBc0IsRUFDdEIsYUFBcUIsRUFDckIsYUFBcUIsRUFDckIsT0FBZSxFQUNmLE1BQTBCLEVBQzFCLEtBQXdCO1FBRS9CLEtBQUssQ0FDSCxFQUFFLEVBQ0YsT0FBTyxFQUNQLGFBQWEsRUFDYixTQUFTLEVBQ1QsUUFBUSxFQUNSLGNBQWMsRUFDZCxVQUFVLEVBQ1YsT0FBTyxFQUNQLFdBQVcsQ0FDWixDQUFDO1FBaENjLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2Ysa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixh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Q0FBQyxDQUFDO3FCQUMvQztpQkFDRjthQUNGO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDWixDQUFDO0lBQUEsQ0FBQztJQUVGOztPQUVHO0lBQ00sUUFBUTtRQUNmLE9BQU87WUFDTCxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksR0FBRztZQUNoQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxHQUFHO1lBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUc7WUFDNUIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksR0FBRztZQUNwQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHO1lBQ2hDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUc7WUFDbEMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQztZQUN4QyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYXNGaWxlRHRvIH0gZnJvbSAnLi92YXMtZmlsZS5kdG8nO1xuaW1wb3J0IHsgVVVJRCB9IGZyb20gJ2FuZ3VsYXIyLXV1aWQnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZ2V0VmFsdWVCeVBhdGggfSBmcm9tICcuLi91dGlscy9nZXQtdmFsdWUtYnktcGF0aCc7XG5pbXBvcnQgeyBWYXNCYXNlRHRvIH0gZnJvbSAnLi92YXMtYmFzZS5kdG8nO1xuaW1wb3J0IHsgVmFzRmllbGREdG8sIFZhc0ZpZWxkRHRvVmFsdWUgfSBmcm9tICcuL3Zhcy1maWVsZC5kdG8nO1xuaW1wb3J0IHsgVmFzRmllbGRNb2RlbCB9IGZyb20gJy4vdmFzLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IFZhc0Zvcm1Nb2RlbCB9IGZyb20gJy4vdmFzLWZvcm0ubW9kZWwnO1xuaW1wb3J0IHsgVmFzSm9iRHRvIH0gZnJvbSAnLi92YXMtam9iLmR0byc7XG5pbXBvcnQgeyBWYXNSZXN0cmljdGVkQWNjb3VudE9iamVjdE1vZGVsIH0gZnJvbSAnLi92YXMtcmVzdHJpY3RlZC1hY2NvdW50LW9iamVjdC5tb2RlbCc7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBWYXNKb2JNb2RlbER5bmFtaWNJbnRlcmZhY2Uge1xuICBbczogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgUmVjb3JkPHN0cmluZywgVmFzRmllbGREdG9WYWx1ZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VTeW50YXhPcHRpb25zIHtcbiAgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gYWRqdXN0IGFueSBkYXRldGltZSB2YWx1ZXMgdGhhdCBhcmUgcmVmZXJlbmNlZFxuICAvLyBpbiB0aGUgc3ludGF4IHN0cmluZy4gU2VlXG4gIC8vIGh0dHBzOi8vbW9tZW50anNjb20ucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L21vbWVudC8wMy1tYW5pcHVsYXRpbmcvMDktdXRjLW9mZnNldC9cbiAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IGBtb21lbnRgIHdpbGwgaGFuZGxlIHRoZSB2YWx1ZS5cbiAgdGltZVpvbmVPZmZzZXQ6IG51bWJlcixcbiAgLy8gdGhpcyBkaWN0aW9uYXJ5IGNhbiBiZSBwYXNzZWQgaW4gdG8gY29udGFpbiBvdGhlciBvYmplY3RzIHRvIGJlIHJlZmVyZW5jZWRcbiAgLy8gaW4gdGhlIHN5bnRheC4gRm9yIGV4YW1wbGUgaWYgd2UgaGF2ZSB7am9iLmZvb30gdGhpcyB3aWxsIHJlZmVyZW5jZSB0aGVcbiAgLy8gam9iJ3MgYGZvb2AgcHJvcGVydHksIGhvd2V2ZXIgaWYgd2UgaGF2ZSBcInJlcG9ydExheW91dC50aXRsZVwiIHRoaXMgd2lsbFxuICAvLyBleHBlY3QgdG8gZmluZCBhIHByb3BlcnR5IG9mIGBvYmplY3RzYCBjYWxsZWQgYHJlcG9ydExheW91dGAgd2hpY2ggd2lsbFxuICAvLyBoYXZlIGEgcHJvcGVydHkgY2FsbGVkIGB0aXRsZWBcbiAgb2JqZWN0cz86IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8VmFzQmFzZUR0bz4gfCBSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPj47XG59XG5cbi8qKlxuICogSm9iTW9kZWxcbiAqL1xuZXhwb3J0IGNsYXNzIFZhc0pvYk1vZGVsIGV4dGVuZHMgVmFzUmVzdHJpY3RlZEFjY291bnRPYmplY3RNb2RlbCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNyZWF0ZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlcnZlckNyZWF0ZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNyZWF0ZWRCeVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kaWZpZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlcnZlck1vZGlmaWVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RpZmllZEJ5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY2NvdW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY2Nlc3NHcm91cFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBqb2JEYXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBqb2JTdGF0dXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGpvYlR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFzc2lnbmVlSWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1JZFxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZVpvbmVPZmZzZXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBlbmRpbmdGaWVsZHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoaWxkTW9kaWZpZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZlcnNpb25cbiAgICogQHBhcmFtIHtBcnJheTxWYXNGaWVsZER0bz59IGZpZWxkc1xuICAgKiBAcGFyYW0ge0FycmF5PFZhc0ZpbGVEdG8+fSBmaWxlc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG92ZXJyaWRlIGlkOiBzdHJpbmcsXG4gICAgcHVibGljIG92ZXJyaWRlIGNyZWF0ZWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2VydmVyQ3JlYXRlZDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBjcmVhdGVkQnk6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgbW9kaWZpZWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2VydmVyTW9kaWZpZWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgbW9kaWZpZWRCeTogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBhY2NvdW50OiBzdHJpbmcsXG4gICAgcHVibGljIG92ZXJyaWRlIGFjY2Vzc0dyb3VwOiBzdHJpbmcsXG4gICAgcHVibGljIHJlZmVyZW5jZTogc3RyaW5nLFxuICAgIHB1YmxpYyBqb2JEYXRlOiBzdHJpbmcsXG4gICAgcHVibGljIGpvYlN0YXR1czogc3RyaW5nLFxuICAgIHB1YmxpYyBqb2JUeXBlOiBzdHJpbmcsXG4gICAgcHVibGljIGFzc2lnbmVlSWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgZm9ybUlkOiBzdHJpbmcsXG4gICAgcHVibGljIHRpbWVab25lT2Zmc2V0OiBudW1iZXIsXG4gICAgcHVibGljIHBlbmRpbmdGaWVsZHM6IG51bWJlcixcbiAgICBwdWJsaWMgY2hpbGRNb2RpZmllZDogc3RyaW5nLFxuICAgIHB1YmxpYyB2ZXJzaW9uOiBudW1iZXIsXG4gICAgcHVibGljIGZpZWxkczogQXJyYXk8VmFzRmllbGREdG8+LFxuICAgIHB1YmxpYyBmaWxlczogQXJyYXk8VmFzRmlsZUR0bz5cbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBpZCxcbiAgICAgIGNyZWF0ZWQsXG4gICAgICBzZXJ2ZXJDcmVhdGVkLFxuICAgICAgY3JlYXRlZEJ5LFxuICAgICAgbW9kaWZpZWQsXG4gICAgICBzZXJ2ZXJNb2RpZmllZCxcbiAgICAgIG1vZGlmaWVkQnksXG4gICAgICBhY2NvdW50LFxuICAgICAgYWNjZXNzR3JvdXBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhpcyB3aXRoIHRoZSBkeW5hbWljIGludGVyZmFjZVxuICAgKiBAcmV0dXJuIHtWYXNKb2JNb2RlbER5bmFtaWNJbnRlcmZhY2V9XG4gICAqL1xuICBnZXQgJHRoaXMoKTogVmFzSm9iTW9kZWxEeW5hbWljSW50ZXJmYWNlIHtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgSm9iIGR5bmFtaWMgcHJvcGVydGllcyBpLmUuIHRob3NlIHRoYXQgYXJlIGFkZGVkIGJ5IHRoZVxuICAgKiBkeW5hbWljIGZvcm1zXG4gICAqL1xuICBnZXQgZHluYW1pY1Byb3BlcnRpZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgbmF0aXZlUHJvcHMgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXM7XG4gICAgcmV0dXJuIE9iamVjdFxuICAgICAgLmdldE93blByb3BlcnR5TmFtZXModGhpcylcbiAgICAgIC5maWx0ZXIocHJvcCA9PiAhbmF0aXZlUHJvcHMuaW5jbHVkZXMocHJvcCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIEpvYiBzdGF0aWMgcHJvcGVydGllcyBpLmUuIHRob3NlIHRoYXQgYXJlIGRlY2xhcmVkIGJ5XG4gICAqIHRoZSB0eXBlXG4gICAqL1xuICBnZXQgc3RhdGljUHJvcGVydGllcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoVmFzSm9iTW9kZWwuZW1wdHkoKSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VmFzSm9iTW9kZWx9XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGVtcHR5KCk6IFZhc0pvYk1vZGVsIHtcbiAgICByZXR1cm4gbmV3IFZhc0pvYk1vZGVsKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgIFVVSUQuVVVJRCgpLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgIG1vbWVudCgpLnV0Y09mZnNldCgpLFxuICAgICAgMCxcbiAgICAgICcnLFxuICAgICAgMCxcbiAgICAgIFtdLFxuICAgICAgW11cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VmFzSm9iRHRvfSBqb2JEdG9cbiAgICogQHJldHVybiB7VmFzSm9iTW9kZWx9XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21EdG8oam9iRHRvOiBQYXJ0aWFsPFZhc0pvYkR0bz4pOiBWYXNKb2JNb2RlbCB7XG4gICAgY29uc3QgbW9kZWwgPSBuZXcgVmFzSm9iTW9kZWwoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuICAgICAgam9iRHRvLmlkIHx8IFVVSUQuVVVJRCgpLFxuICAgICAgam9iRHRvLmNyZWF0ZWQgfHwgJycsXG4gICAgICBqb2JEdG8uc2VydmVyQ3JlYXRlZCB8fCAnJyxcbiAgICAgIGpvYkR0by5jcmVhdGVkQnkgfHwgJycsXG4gICAgICBqb2JEdG8ubW9kaWZpZWQgfHwgJycsXG4gICAgICBqb2JEdG8uc2VydmVyTW9kaWZpZWQgfHwgJycsXG4gICAgICBqb2JEdG8ubW9kaWZpZWRCeSB8fCAnJyxcbiAgICAgIGpvYkR0by5hY2NvdW50IHx8ICcnLFxuICAgICAgam9iRHRvLmFjY2Vzc0dyb3VwIHx8ICcnLFxuICAgICAgam9iRHRvLnJlZmVyZW5jZSB8fCAnJyxcbiAgICAgIGpvYkR0by5qb2JEYXRlIHx8ICcnLFxuICAgICAgam9iRHRvLmpvYlN0YXR1cyB8fCAnJyxcbiAgICAgIGpvYkR0by5qb2JUeXBlIHx8ICcnLFxuICAgICAgam9iRHRvLmFzc2lnbmVlSWQgfHwgJycsXG4gICAgICBqb2JEdG8uZm9ybUlkIHx8ICcnLFxuICAgICAgam9iRHRvLnRpbWVab25lT2Zmc2V0IHx8IG1vbWVudCgpLnV0Y09mZnNldCgpLFxuICAgICAgam9iRHRvLnBlbmRpbmdGaWVsZHMgfHwgMCxcbiAgICAgIGpvYkR0by5jaGlsZE1vZGlmaWVkIHx8ICcnLFxuICAgICAgam9iRHRvLnZlcnNpb24gfHwgMCxcbiAgICAgIGpvYkR0by5maWVsZHMgfHwgW10sXG4gICAgICBqb2JEdG8uZmlsZXMgfHwgW11cbiAgICApO1xuICAgIGNvbnN0IGVtcHR5S2V5cyA9IG1vZGVsLnN0YXRpY1Byb3BlcnRpZXM7XG4gICAgT2JqZWN0XG4gICAgICAua2V5cyhqb2JEdG8pXG4gICAgICAuZmlsdGVyKGtleSA9PiBlbXB0eUtleXMuaW5kZXhPZihrZXkpID09PSAtMSlcbiAgICAgIC5mb3JFYWNoKChrZXk6IHN0cmluZykgPT5cbiAgICAgICAgbW9kZWwuJHRoaXNba2V5XSA9IChqb2JEdG8gYXMgVmFzSm9iTW9kZWxEeW5hbWljSW50ZXJmYWNlKVtrZXldXG4gICAgICApO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Zhc0Zvcm1Nb2RlbH0gZm9ybU1vZGVsXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+fVxuICAgKi9cbiAgZ2V0RmllbGRzKGZvcm1Nb2RlbDogVmFzRm9ybU1vZGVsKTogUmVjb3JkPHN0cmluZywgVmFzRmllbGREdG9WYWx1ZT4ge1xuICAgIGNvbnN0IGZpZWxkczoge1trZXk6IHN0cmluZ106IFZhc0ZpZWxkRHRvVmFsdWV9ID0ge307XG4gICAgZm9ybU1vZGVsLmdyb3Vwc1xuICAgICAgLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICBncm91cC5jb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgICAgIChmaWVsZHMpW2NvbnRyb2wucmVwb3J0VGVtcGxhdGVOYW1lXSA9XG4gICAgICAgICAgICB0aGlzLmdldFZhbHVlQnlQYXRoKFtncm91cC5uYW1lLCBjb250cm9sLm5hbWVdKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gZmllbGRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpbGwgcmV0dXJuIGFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0aGUgbmFtZXMgb2YgYWxsIGZpZWxkcyBpbiB0aGUgam9iIGJ1dFxuICAgKiB3aXRoIHRoZSBcImZpZWxkcy5cIiBwYXJ0IHJlbW92ZWQuIFRoaXMgbWV0aG9kIGlzIHNpbWlsYXIgdG8gYGdldEZpZWxkc2BcbiAgICogZXhjZXB0IHRoYXQgdGhpcyBtZXRob2Qgd2lsbCBvbmx5IHJldHVybiB2YWx1ZXMgdGhhdCBhcmUgc2V0IHdoZXJlYXNcbiAgICogYGdldEZpZWxkc2Agd2lsbCByZXR1cm4gYSBwcm9wZXJ0eSByZWdhcmRsZXNzIChiZWNhdXNlIGl0IHVzZXMgdGhlIGZvcm0gdG9cbiAgICogZHJpdmUgdGhlIGxvZ2ljKVxuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPn1cbiAgICovXG4gIGdldEZpZWxkczIoKTogUmVjb3JkPHN0cmluZywgVmFzRmllbGREdG9WYWx1ZT4ge1xuICAgIGxldCBmaWVsZHM6IHtba2V5OiBzdHJpbmddOiBWYXNGaWVsZER0b1ZhbHVlfSA9IHt9O1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXNcbiAgICAgIC5mb3JFYWNoKChncm91cE5hbWUpID0+IHtcbiAgICAgICAgT2JqZWN0XG4gICAgICAgICAgLmtleXModGhpcy4kdGhpc1tncm91cE5hbWVdKVxuICAgICAgICAgIC5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xOYW1lU2hvcnQgPSBjb250cm9sTmFtZS5yZXBsYWNlKC9maWVsZHNcXC4vLCAnJyk7XG4gICAgICAgICAgICBmaWVsZHNbY29udHJvbE5hbWVTaG9ydF0gPSB0aGlzLmdldFZhbHVlQnlQYXRoKFxuICAgICAgICAgICAgICBbZ3JvdXBOYW1lLCBjb250cm9sTmFtZV1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgfSwge30pXG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGh5ZHJhdGUgdGhlIGBmaWVsZHNgIHByb3BlcnR5IG9mIHRoZSBtb2RlbC4gVGhlIHJlYXNvbiBmb3JcbiAgICogdGhpcyBpcyB0aGF0IHdlIGhhdmUgZGlmZmVyZW50IHdheXMgdG8gc3RvcmUgdGhlIGZpZWxkIGRhdGEuIE9uZSB3YXksIGlzXG4gICAqIHdlIHN0b3JlIHRoZW0gYXMgZHluYW1pYyBwcm9wZXJ0aWVzIG9mIHRoZSBqb2IgZS5nLiBqb2IuZm9vLmJhciwgdGhlIG90aGVyXG4gICAqIGlzIGluIGFuIGFycmF5IG9mIEZpZWxkLiBUaGUgZm9ybWVyIGlzIG5pY2UgdG8gd29yayB3aXRoIGluIGNsaWVudHMsXG4gICAqIHdoZXJlYXMgdGhlIGxhdHRlciBtb3JlIHN1aXRlZCB0byByZWxhdGlvbmFsIGRhdGFiYXNlLlxuICAgKlxuICAgKiBBKSBqb2Igd2l0aCBkeW5hbWljIHByb3BlcnRpZXMsIGUuZy5cbiAgICoge1xuICAgKiAgIGlkOiA8Z3VpZD4sXG4gICAqICAgcmVmZXJlbmNlOiBcInNvbWV0aGluZ1wiXG4gICAqICAgPG90aGVyIHN0YXRpYyBqb2IgcHJvcGVydGllcz4uLi5cbiAgICogICBmb286IHtcbiAgICogICAgIGJhcjogXCJ2YWx1ZVwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEIpIGpvYiB3aXRoIGFycmF5IG9mIEZpZWxkXG4gICAqIHtcbiAgICogICBpZDogPGd1aWQ+LFxuICAgKiAgIHJlZmVyZW5jZTogXCJzb21ldGhpbmdcIlxuICAgKiAgIDxvdGhlciBzdGF0aWMgam9iIHByb3BlcnRpZXM+Li4uXG4gICAqICAgPHdpbGwgbm90IGhhdmUgZHluYW1pYyBwcm9wZXJ0aWVzPi4uLlxuICAgKiAgIGZpZWxkczogW1xuICAgKiAgICAge1xuICAgKiAgICAgICBpZDogPGd1aWQ+LFxuICAgKiAgICAgICA8b3RoZXIgZmllbGQgcHJvcGVydGllcz4sXG4gICAqICAgICAgIHZhbHVlOiBcInZhbHVlXCJcbiAgICogICAgIH1cbiAgICogICBdXG4gICAqIH1cbiAgICpcbiAgICogV2hhdCB0aGlzIG1ldGhvZCBkb2VzIGlzIGdpdmVuIGEgVmFzSm9iTW9kZWwgdGhhdCBoYXMgYmVlbiBwb3B1bGF0ZWQgd2l0aFxuICAgKiBhIFZhc0pvYkR0byBpbiBmb3JtIEIgKGkuZS4gYC5maWVsZHNgIGFyZSBwb3B1bGF0ZWQgLSB1c3VhbGx5IGZyb20gYSBWQVNBUElcbiAgICogcmVzcG9uc2UpLCBoeWRyYXRlIHRoZSBkeW5hbWljIHByb3BlcnRpZXMgb2YgdGhlIG1vZGVsLiBOT1RFOiBrbm93bGVkZ2Ugb2ZcbiAgICogdGhlIEZvcm0gdGhhdCB3YXMgdXNlZCB0byBjcmF0ZSB0aGUgSm9iIGlzIHJlcXVpcmVkIGJlY2F1c2UgaXQgd2lsbCBjb250YWluXG4gICAqIHRoZSBHcm91cHMsIHdoaWNoIG5hbWVzIGFyZSB1c2VkIGluIHRoZSBoeWRyYXRpbmdcbiAgICpcbiAgICogQHBhcmFtIHtWYXNGb3JtTW9kZWx9IGZvcm1Nb2RlbCB0aGUgVmFzRm9ybU1vZGVsIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlXG4gICAqIHRoZSBqb2JcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIGh5ZHJhdGVEeW5hbWljUHJvcHMoXG4gICAgZm9ybU1vZGVsOiBWYXNGb3JtTW9kZWxcbiAgKTogdm9pZCB7XG4gICAgZm9ybU1vZGVsLmdyb3Vwc1xuICAgICAgLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICBjb25zdCBwMCA9IGdyb3VwLm5hbWU7XG4gICAgICAgIGdyb3VwLmNvbnRyb2xzXG4gICAgICAgICAgLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwMSA9IGNvbnRyb2wubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGYgPSB0aGlzLmZpZWxkcy5maW5kKGZpZWxkID0+IGZpZWxkLmNvbnRyb2wgPT09IGNvbnRyb2wuaWQpO1xuICAgICAgICAgICAgaWYgKCFmKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVCeVBhdGgoZi52YWx1ZSwgW3AwLCBwMV0pO1xuICAgICAgICAgIH0pXG4gICAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgaHlkcmF0ZSB0aGUgYGZpZWxkc2AgcHJvcGVydHkgb2YgdGhlIG1vZGVsLiBUaGUgcmVhc29uIGZvclxuICAgKiB0aGlzIGlzIHRoYXQgd2UgaGF2ZSBkaWZmZXJlbnQgd2F5cyB0byBzdG9yZSB0aGUgZmllbGQgZGF0YS4gT25lIHdheSwgaXNcbiAgICogd2Ugc3RvcmUgdGhlbSBhcyBkeW5hbWljIHByb3BlcnRpZXMgb2YgdGhlIGpvYiBlLmcuIGpvYi5mb28uYmFyLCB0aGUgb3RoZXJcbiAgICogaXMgaW4gYW4gYXJyYXkgb2YgRmllbGQuIFRoZSBmb3JtZXIgaXMgbmljZSB0byB3b3JrIHdpdGggaW4gY2xpZW50cyxcbiAgICogd2hlcmVhcyB0aGUgbGF0dGVyIG1vcmUgc3VpdGVkIHRvIHJlbGF0aW9uYWwgZGF0YWJhc2UuXG4gICAqXG4gICAqIEEpIGpvYiB3aXRoIGR5bmFtaWMgcHJvcGVydGllcywgZS5nLlxuICAgKiB7XG4gICAqICAgaWQ6IDxndWlkPixcbiAgICogICByZWZlcmVuY2U6IFwic29tZXRoaW5nXCJcbiAgICogICA8b3RoZXIgc3RhdGljIGpvYiBwcm9wZXJ0aWVzPi4uLlxuICAgKiAgIGZvbzoge1xuICAgKiAgICAgYmFyOiBcInZhbHVlXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQikgam9iIHdpdGggZmllbGRzXG4gICAqIHtcbiAgICogICBpZDogPGd1aWQ+LFxuICAgKiAgIHJlZmVyZW5jZTogXCJzb21ldGhpbmdcIlxuICAgKiAgIDxvdGhlciBzdGF0aWMgam9iIHByb3BlcnRpZXM+Li4uXG4gICAqICAgPHdpbGwgbm90IGhhdmUgZHluYW1pYyBwcm9wZXJ0aWVzPi4uLlxuICAgKiAgIGZpZWxkczogW1xuICAgKiAgICAge1xuICAgKiAgICAgICBpZDogPGd1aWQ+LFxuICAgKiAgICAgICA8b3RoZXIgZmllbGQgcHJvcGVydGllcz4sXG4gICAqICAgICAgIHZhbHVlOiBcInZhbHVlXCJcbiAgICogICAgIH1cbiAgICogICBdXG4gICAqIH1cbiAgICpcbiAgICogU28sIHdoYXQgdGhpcyBtZXRob2QgZG9lcyBpcyBnaXZlbiBhIEpvYk1vZGVsIGluIHRoZSBmb3JtIG9mIEEsIHJlYWQgYWxsXG4gICAqIG9mIHRob3NlIGR5bmFtaWMgcHJvcGVydGllcyBhbmQgc2V0IHRoZW0gaW50byBgZmllbGRzYC4gRG9pbmcgdGhpcyByZXF1aXJlc1xuICAgKiBrbm93bGVkZ2Ugb2YgdGhlIEZvcm0gdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhlIGpvYi4gTW9yZW92ZXIsIHNpbmNlIHRoZVxuICAgKiBkeW5hbWljIHByb3BlcnRpZXMgZG8gbm90IGNvbnRhaW4gdGhlIGlkcyBvZiB0aGUgZmllbGRzLCB3ZSBhbHNvIGFsbG93IHRvXG4gICAqIHBhc3MgaW4gYSBgY29udHJvbEZpZWxkSWRNYXBgLiBUaGlzIG1hcCBzdG9yZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBDb250cm9sXG4gICAqIGFuZCB0aGUgRmllbGQgdGhhdCB3YXMgY3JlYXRlZCBpbiB0aGUgSm9iIHRvIHN0b3JlIHRoZSB2YWx1ZSBmb3IgdGhhdFxuICAgKiBDb250cm9sLiBUaGlzIGlzIHVzZWZ1bCwgaWYgZm9yIGV4YW1wbGUgeW91IHdhbnQgdG8gY29tcGFyZSBhIEpvYiBpbiBmb3JtIEFcbiAgICogd2l0aCBhIEpvYiBpbiBmb3JtIEIsIGZvciBleGFtcGxlIGlmIHlvdSB3YW50IHRvIHVwZGF0ZSB0aGUgSm9iIG9uIHRoZSBBUElcbiAgICogd2l0aCBhIEpvYiB0aGF0IHdhcyBzYXZlZCBieSBhIGNsaWVudCBpbiBmb3JtIEEuXG4gICAqXG4gICAqIEUuZy5cbiAgICogQ2xpZW50IC0+IEFQSTogY2xpZW50IHJlcXVlc3RzIGZvcm1cbiAgICogVXNlciAtPiBDbGllbnQ6IHVzZXIgZmlsbHMgaW4gdGhlIGZvcm0gYW5kIHN1Ym1pdHNcbiAgICogQ2xpZW50IC0+IEZpcmVzdG9yZTogY2xpZW50IHNhdmVzIHRoZSBKb2IgaW4gZm9ybSBBIGkuZS4gZHluYW1pYyBwcm9wc1xuICAgKiBGaXJlc3RvcmUgLT4gRnVuY3Rpb246IEEgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHRvIHN5bmMgdGhlIGpvYiB0byB0aGUgQVBJXG4gICAqIEZ1bmN0aW9uIC0+IEFQSTogRnVuY3Rpb24gY2hlY2tzIGlmIGpvYiBhbHJlYWR5IGV4aXN0cywgaXQgcmVjZWl2ZXMgNDA0XG4gICAqIEZ1bmN0aW9uIC0+IEZ1bmN0aW9uOiBUaGUgZnVuY3Rpb24gY2FsbHMgYGh5ZHJhdGVGaWVsZHMoLi4uKWBcbiAgICogRnVuY3Rpb24gLT4gQVBJOiBUaGUgZnVuY3Rpb24gUE9TVCB0aGUgSm9iIHRvIC9qb2JzXG4gICAqIEZ1bmN0aW9uIC0+IEFQSTogVGhlIGZ1bmN0aW9uIFBPU1QgZWFjaCBmaWVsZCB0byAvZmllbGRzXG4gICAqXG4gICAqIFNpbWlsYXJseSwgaWYgdGhlIHVzZXIgdXBkYXRlcyB0aGUgam9iXG4gICAqIENsaWVudCAtPiBBUEk6IGNsaWVudCByZXF1ZXN0cyBmb3JtXG4gICAqIFVzZXIgLT4gQ2xpZW50OiB1c2VyIGZpbGxzIGluIHRoZSBmb3JtIGFuZCBzdWJtaXRzIGFuIHVwZGF0ZVxuICAgKiBDbGllbnQgLT4gRmlyZXN0b3JlOiBjbGllbnQgc2F2ZXMgdGhlIEpvYiBpbiBmb3JtIEEgaS5lLiBkeW5hbWljIHByb3BzXG4gICAqIEZpcmVzdG9yZSAtPiBGdW5jdGlvbjogQSBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgdG8gc3luYyB0aGUgam9iIHRvIHRoZSBBUElcbiAgICogRnVuY3Rpb24gLT4gQVBJOiBGdW5jdGlvbiBjaGVja3MgaWYgam9iIGFscmVhZHkgZXhpc3RzLCBpdCByZWNlaXZlcyAyMDBcbiAgICogRnVuY3Rpb24gLT4gRnVuY3Rpb246IFRoZSBmdW5jdGlvbiBjYWxscyBgaHlkcmF0ZUZpZWxkcyguLi4pYCBwYXNzaW5nIGluXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFwIGlzIG1hZGUgYnkgaXRlcmF0aW5nIG92ZXIgdGhlIGZpZWxkcyBpdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQgZnJvbSB0aGUgQVBJIGFuZCBzdG9yaW5nIHRoZSBtYXBwaW5nc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiBjb250cm9sSWQgYW5kIGZpZWxkSWQgZm9yIGVhY2ggZmllbGRcbiAgICogRnVuY3Rpb24gLT4gQVBJOiBUaGUgZnVuY3Rpb24gUEFUQ0ggdGhlIEpvYiB0byAvam9ic1xuICAgKiBGdW5jdGlvbiAtPiBBUEk6IFRoZSBmdW5jdGlvbiBQT1NUL1BBVENIIGVhY2ggZmllbGQgdG8gL2ZpZWxkc1xuICAgKiB0cmVhdGVkIGFzIG5ld1xuICAgKlxuICAgKiBAcGFyYW0ge1Zhc0Zvcm1Nb2RlbH0gZm9ybU1vZGVsIHRoZSBWYXNGb3JtTW9kZWwgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGVcbiAgICogdGhlIGpvYlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIHN0cmluZz59IGNvbnRyb2xGaWVsZElkTWFwIGEgbWFwcGluZyBvZiBjb250cm9sIHRvXG4gICAqIGZpZWxkIGlkcy4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGEgbmV3IGlkIGZvciB0aGUgZmllbGQgc2hvdWxkXG4gICAqIGJlIGdlbmVyYXRlZCwgb3IgdG8gcmV1c2UgYW4gZXhpc3Rpbmcgb25lIGZyb20gdGhlIG1hcC5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBjb250cm9sTmFtZXMgaWYgYSB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkXG4gICAqIHRvIGZpbHRlciB0aGUgZmllbGRzIHRoYXQgYXJlIHJldHVybmVkLlxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgaHlkcmF0ZUZpZWxkcyhcbiAgICBmb3JtTW9kZWw6IFZhc0Zvcm1Nb2RlbCxcbiAgICBjb250cm9sRmllbGRJZE1hcDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCksXG4gICAgY29udHJvbE5hbWVzPzogQXJyYXk8c3RyaW5nPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZHM6IEFycmF5PFZhc0ZpZWxkRHRvPiA9IFtdO1xuICAgIGZvcm1Nb2RlbC5ncm91cHNcbiAgICAgIC5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgZ3JvdXAuY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcblxuICAgICAgICAgIGlmICghY29udHJvbC5uYW1lLnN0YXJ0c1dpdGgoJ2ZpZWxkcy4nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb250cm9sTmFtZXMgJiYgIWNvbnRyb2xOYW1lcy5pbmNsdWRlcyhjb250cm9sLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmllbGRzLnB1c2goVmFzRmllbGRNb2RlbC5mcm9tRHRvKHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjb250cm9sSWQgZXhpc3RzIGluIHRoZSBtYXAsIHVzZSB0aGUgYXNzb2NpYXRlZCBmaWVsZElkLFxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGdlbmVyYXRlIGEgbmV3IGlkIGZvciB0aGUgZmllbGQuXG4gICAgICAgICAgICBpZDogY29udHJvbEZpZWxkSWRNYXAuZ2V0KGNvbnRyb2wuaWQpIHx8IFVVSUQuVVVJRCgpLFxuICAgICAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgICAgICAgam9iOiB0aGlzLmlkLFxuICAgICAgICAgICAgY3JlYXRlZEJ5OiB0aGlzLmNyZWF0ZWRCeSxcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcbiAgICAgICAgICAgIG1vZGlmaWVkQnk6IHRoaXMubW9kaWZpZWRCeSxcbiAgICAgICAgICAgIG1vZGlmaWVkOiB0aGlzLm1vZGlmaWVkLFxuICAgICAgICAgICAgY29udHJvbDogY29udHJvbC5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlQnlQYXRoKFxuICAgICAgICAgICAgICBbZ3JvdXAubmFtZSwgY29udHJvbC5uYW1lXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcbiAgfVxuXG4gIC8qKlxuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggcGF0aCBzZWdtZW50c1xuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgZ2V0VmFsdWVCeVBhdGg8VCBleHRlbmRzIFZhc0ZpZWxkRHRvVmFsdWU+KFxuICAgIHBhdGg6IHN0cmluZ1tdID0gW11cbiAgKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGdldFZhbHVlQnlQYXRoKHBhdGgsIHRoaXMuJHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgdmVyeSBub24gc29waGlzdGljYXRlZCB3YXkgdG8gc2V0IHZhbHVlcyBpbiB0aGUgam9iIHZpYSBwYXRoc1xuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogc2V0VmFsdWVCeVBhdGgoJ3ZhbHVlJywgWydmb28nLCAnYmFyJ10pO1xuICAgKlxuICAgKiB3aWxsIG1ha2UgcmVzdWx0cyBpbiBqb2JcbiAgICoge1xuICAgKiAgIGZvbzoge1xuICAgKiAgICAgYmFyOiAndmFsdWUnXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSB0aGUgdmFsdWUgdG8gc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggcGF0aCBzZWdtZW50c1xuICAgKi9cbiAgc2V0VmFsdWVCeVBhdGgodmFsdWU6IFZhc0ZpZWxkRHRvVmFsdWUsIHBhdGg6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHBhdGgubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAxOiB7XG4gICAgICAgICh0aGlzIGFzIGFueSlbcGF0aFswXV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAyOiB7XG4gICAgICAgIGlmICghdGhpcy4kdGhpc1twYXRoWzBdXSkge1xuICAgICAgICAgIHRoaXMuJHRoaXNbcGF0aFswXV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAodGhpcy4kdGhpc1twYXRoWzBdXSBhcyBSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPilbcGF0aFsxXV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIGlmICghdGhpcy4kdGhpc1twYXRoWzBdXSkge1xuICAgICAgICAgIHRoaXMuJHRoaXNbcGF0aFswXV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISh0aGlzLiR0aGlzW3BhdGhbMF1dIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3BhdGhbMV1dKSB7XG4gICAgICAgICAgKHRoaXMuJHRoaXNbcGF0aFswXV0gYXMgUmVjb3JkPHN0cmluZywgYW55PilbcGF0aFsxXV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAoKHRoaXMuJHRoaXNbcGF0aFswXV0gYXMgUmVjb3JkPHN0cmluZywgVmFzRmllbGREdG9WYWx1ZT4pW3BhdGhbMV1dIGFzIFJlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+KVtwYXRoWzJdXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IEVycm9yKCdwYXRoIGhhcyB0b28gbWFueSBzZWdtZW50cycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXRpY09ubHkgaWYgdHJ1ZSwgd2lsbCBvbmx5IG91dHB1dCB2YWx1ZXMgZm9yIHRoZSBzdGF0aWNcbiAgICogcHJvcGVydGllcyBpbiB0aGUgZHRvXG4gICAqIEByZXR1cm4ge1Zhc0pvYkR0b31cbiAgICovXG4gIHB1YmxpYyB0b0R0byhzdGF0aWNPbmx5ID0gZmFsc2UpOiBWYXNKb2JEdG8ge1xuXG4gICAgaWYgKHN0YXRpY09ubHkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXG4gICAgICAgIGNyZWF0ZWRCeTogdGhpcy5jcmVhdGVkQnksXG4gICAgICAgIG1vZGlmaWVkOiB0aGlzLm1vZGlmaWVkLFxuICAgICAgICBtb2RpZmllZEJ5OiB0aGlzLm1vZGlmaWVkQnksXG4gICAgICAgIHNlcnZlckNyZWF0ZWQ6IHRoaXMuc2VydmVyQ3JlYXRlZCxcbiAgICAgICAgc2VydmVyTW9kaWZpZWQ6IHRoaXMuc2VydmVyTW9kaWZpZWQsXG4gICAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgICAgYWNjZXNzR3JvdXA6IHRoaXMuYWNjZXNzR3JvdXAsXG4gICAgICAgIHJlZmVyZW5jZTogdGhpcy5yZWZlcmVuY2UsXG4gICAgICAgIGpvYkRhdGU6IHRoaXMuam9iRGF0ZSxcbiAgICAgICAgam9iU3RhdHVzOiB0aGlzLmpvYlN0YXR1cyxcbiAgICAgICAgam9iVHlwZTogdGhpcy5qb2JUeXBlLFxuICAgICAgICBhc3NpZ25lZUlkOiB0aGlzLmFzc2lnbmVlSWQsXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHRpbWVab25lT2Zmc2V0OiB0aGlzLnRpbWVab25lT2Zmc2V0LFxuICAgICAgICBwZW5kaW5nRmllbGRzOiB0aGlzLnBlbmRpbmdGaWVsZHMsXG4gICAgICAgIGNoaWxkTW9kaWZpZWQ6IHRoaXMuY2hpbGRNb2RpZmllZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgICBmaWVsZHM6IHRoaXMuZmllbGRzLFxuICAgICAgICBmaWxlczogdGhpcy5maWxlc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkdG8gPSB7fSBhcyBWYXNKb2JNb2RlbER5bmFtaWNJbnRlcmZhY2U7XG4gICAgWy4uLnRoaXMuc3RhdGljUHJvcGVydGllcywgLi4udGhpcy5keW5hbWljUHJvcGVydGllc11cbiAgICAgIC5mb3JFYWNoKHByb3AgPT5cbiAgICAgICAgKGR0bylbcHJvcF0gPSB0aGlzLiR0aGlzW3Byb3BdKTtcblxuICAgIHJldHVybiBkdG8gYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgcGFyc2UgYSBzeW50YXggdGhhdCBhbGxvd3MgdXMgdG8gYnVpbGQgc3RyaW5ncyBmcm9tIHRoZVxuICAgKiB2YWx1ZXMgb2YgZnJvbSB0aGUgam9iIG1vZGVsLiBGb3IgZXhhbXBsZSBpZiB0aGUgam9iIG1vZGVsIHdhczpcbiAgICpcbiAgICoge1xuICAgKiAgIGZvbzogJ2JhcidcbiAgICogfVxuICAgKlxuICAgKiBhbmQgd2UgcGFzcyBcImkgYW0gZm9vIHtmb299XCIsIHRoZSByZXN1bHQgd291bGQgYmU6XG4gICAqXG4gICAqIFwiaSBhbSBmb28gYmFyXCJcbiAgICpcbiAgICogd2UgY2FuIGFsc28gdXNlIG1vbWVudCB0byBwYXJzZSBkYXRlcywgZm9yIGV4YW1wbGUgaWYgdGhlIGpvYiBtb2RlbCB3YXM6XG4gICAqXG4gICAqIHtcbiAgICogICBjcmVhdGVkOiBcIjIwMjItMDEtMDFUMDA6MDA6MDArMDAwMFwiXG4gICAqIH1cbiAgICpcbiAgICogYW5kIHdlIHBhc3MgXCJ7Y3JlYXRlZHxkYXRlOllZLU1NLUREfVwiLCB0aGUgcmVzdWx0IHdvdWxkIGJlOlxuICAgKlxuICAgKiBcIjIwMjItMDEtMDFcIlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgYSBzdHJpbmcgd2l0aCB0aGUgc3ludGF4XG4gICAqIEBwYXJhbSB7UGFyc2VTeW50YXhPcHRpb25zfSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHJlc3VsdHMgb2YgcGFyc2luZyB0aGUgc3ludGF4IG9uIHRoaXMgam9iXG4gICAqL1xuICBwYXJzZVN5bnRheChcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFBhcnNlU3ludGF4T3B0aW9ucyA9IHtcbiAgICAgIHRpbWVab25lT2Zmc2V0OiAwXG4gICAgfVxuICApOiBzdHJpbmcge1xuXG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oe1tefV0qfSkvZywgKG1hdGNoOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHN5bnRheCA9IHRva2VuLnN1YnN0cmluZygxLCB0b2tlbi5sZW5ndGggLSAxKTtcblxuICAgICAgbGV0IFtrZXksIGZpbHRlcl0gPSBzeW50YXguc3BsaXQoJ3wnKTtcbiAgICAgIGtleSA9IChrZXkgfHwgJycpLnRyaW0oKTtcbiAgICAgIGZpbHRlciA9IChmaWx0ZXIgfHwgJycpLnRyaW0oKVxuXG4gICAgICBsZXQgZmlsdGVyTmFtZSwgZmlsdGVyQXJnOiBzdHJpbmcgPSAnJztcbiAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRJbmRleCA9IGZpbHRlci5pbmRleE9mKCc6Jyk7XG4gICAgICAgIGlmIChzcGxpdEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXIuc3Vic3RyaW5nKDAsIHNwbGl0SW5kZXgpO1xuICAgICAgICAgIGZpbHRlckFyZyA9IGZpbHRlci5zdWJzdHJpbmcoc3BsaXRJbmRleCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXI7XG4gICAgICAgICAgZmlsdGVyQXJnID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZmlsdGVyTmFtZSA9IChmaWx0ZXJOYW1lIHx8ICcnKS50cmltKCk7XG4gICAgICAgIGZpbHRlckFyZyA9IChmaWx0ZXJBcmcgfHwgJycpLnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhdGggPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgIGNvbnN0IG9iamVjdEtleSA9IHBhdGguc2hpZnQoKSB8fCAnJztcbiAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgIGlmIChvYmplY3RLZXkgPT09ICdqb2InKSB7XG4gICAgICAgIHJlc3VsdCA9ICh0aGlzLmdldFZhbHVlQnlQYXRoKHBhdGgpIHx8ICcnKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChvYmplY3RLZXkgPT09ICdmaWVsZHMnKSB7XG4gICAgICAgIHJlc3VsdCA9IChnZXRWYWx1ZUJ5UGF0aChwYXRoLCB0aGlzLmdldEZpZWxkczIoKSkgfHwgJycpLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKG9iamVjdEtleS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMub2JqZWN0cykge1xuICAgICAgICAgIGlmIChvcHRpb25zLm9iamVjdHNbb2JqZWN0S2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAgICAgICBgb2JqZWN0S2V5ICR7b2JqZWN0S2V5fSBpcyBub3QgcHJlc2VudCBpbiBvcHRpb25zLm9iamVjdGBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQgPSAnJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gKGdldFZhbHVlQnlQYXRoKHBhdGgsIG9wdGlvbnMub2JqZWN0c1tvYmplY3RLZXldKSB8fCAnJylcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXG4gICAgICAgICAgICBgb2JqZWN0S2V5ICR7b2JqZWN0S2V5fSB3YXMgdXNlZCBidXQgb3B0aW9ucy5vYmplY3QgaXMgbm90IHNldGBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG5cbiAgICAgIGlmIChmaWx0ZXJOYW1lICYmIHJlc3VsdCkge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlck5hbWUpIHtcbiAgICAgICAgICBjYXNlICdkYXRlJzoge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChyZXN1bHQpXG4gICAgICAgICAgICAgIC51dGNPZmZzZXQob3B0aW9ucy50aW1lWm9uZU9mZnNldClcbiAgICAgICAgICAgICAgLmZvcm1hdChmaWx0ZXJBcmcgfHwgJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ3Vua25vd24gZmlsdGVyICVzJywgZmlsdGVyTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkudHJpbSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqL1xuICBvdmVycmlkZSB0b0FwaUR0bygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLnRvQXBpRHRvKCksXG4gICAgICByZWZlcmVuY2U6IHRoaXMucmVmZXJlbmNlIHx8ICd+JyxcbiAgICAgIGpvYkRhdGU6IHRoaXMuam9iRGF0ZSB8fCAnficsXG4gICAgICBqb2JUeXBlOiB0aGlzLmpvYlR5cGUgfHwgJ34nLFxuICAgICAgYWNjZXNzR3JvdXA6IHRoaXMuYWNjZXNzR3JvdXAgfHwgJ34nLFxuICAgICAgam9iU3RhdHVzOiB0aGlzLmpvYlN0YXR1cyB8fCAnficsXG4gICAgICBhc3NpZ25lZUlkOiB0aGlzLmFzc2lnbmVlSWQgfHwgJ34nLFxuICAgICAgdGltZVpvbmVPZmZzZXQ6IHRoaXMudGltZVpvbmVPZmZzZXQgfHwgMCxcbiAgICAgIHBlbmRpbmdGaWVsZHM6IHRoaXMucGVuZGluZ0ZpZWxkcyB8fCAwLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -439,7 +439,7 @@ class VasFieldModel extends VasJobDataModel {
|
|
|
439
439
|
* @return {VasFieldModel}
|
|
440
440
|
*/
|
|
441
441
|
static fromDto(fieldDto) {
|
|
442
|
-
return new VasFieldModel(fieldDto.id || UUID.UUID(), fieldDto.created || '', fieldDto.serverCreated || '', fieldDto.createdBy || '', fieldDto.modified || '', fieldDto.serverModified || '', fieldDto.modifiedBy || '', fieldDto.account || '', fieldDto.job || '', fieldDto.control || '', fieldDto.fieldJobPointers || [], fieldDto.value || '', fieldDto.version || 0);
|
|
442
|
+
return new VasFieldModel(fieldDto.id || UUID.UUID(), fieldDto.created || '', fieldDto.serverCreated || '', fieldDto.createdBy || '', fieldDto.modified || '', fieldDto.serverModified || '', fieldDto.modifiedBy || '', fieldDto.account || '', fieldDto.job || '', fieldDto.control || '', fieldDto.fieldJobPointers || [], this.fromApiValue(fieldDto.value) || '', fieldDto.version || 0);
|
|
443
443
|
}
|
|
444
444
|
/**
|
|
445
445
|
* @return {VasFieldDto}
|
|
@@ -465,7 +465,7 @@ class VasFieldModel extends VasJobDataModel {
|
|
|
465
465
|
* @return {object}
|
|
466
466
|
*/
|
|
467
467
|
toApiDto() {
|
|
468
|
-
return Object.assign(Object.assign({}, super.toApiDto()), { control: this.control, value: this.
|
|
468
|
+
return Object.assign(Object.assign({}, super.toApiDto()), { control: this.control, value: this.toApiValue(this.value) });
|
|
469
469
|
}
|
|
470
470
|
/**
|
|
471
471
|
* Prepares the value to be sent to the API. The api will only accept strings,
|
|
@@ -475,7 +475,7 @@ class VasFieldModel extends VasJobDataModel {
|
|
|
475
475
|
* @return {string | number | boolean}
|
|
476
476
|
* @protected
|
|
477
477
|
*/
|
|
478
|
-
|
|
478
|
+
toApiValue(value) {
|
|
479
479
|
switch (typeof value) {
|
|
480
480
|
case 'object': {
|
|
481
481
|
return JSON.stringify(value);
|
|
@@ -494,6 +494,14 @@ class VasFieldModel extends VasJobDataModel {
|
|
|
494
494
|
}
|
|
495
495
|
}
|
|
496
496
|
}
|
|
497
|
+
static fromApiValue(value) {
|
|
498
|
+
try {
|
|
499
|
+
return JSON.parse(value);
|
|
500
|
+
}
|
|
501
|
+
catch (e) {
|
|
502
|
+
return value;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
497
505
|
}
|
|
498
506
|
|
|
499
507
|
/**
|
|
@@ -1094,15 +1102,67 @@ class VasJobModel extends VasRestrictedAccountObjectModel {
|
|
|
1094
1102
|
/**
|
|
1095
1103
|
* This method will hydrate the `fields` property of the model. The reason for
|
|
1096
1104
|
* this is that we have different ways to store the field data. One way, is
|
|
1097
|
-
* we store them as dynamic properties of the job.
|
|
1098
|
-
*
|
|
1099
|
-
*
|
|
1100
|
-
*
|
|
1101
|
-
*
|
|
1102
|
-
*
|
|
1103
|
-
*
|
|
1104
|
-
*
|
|
1105
|
-
*
|
|
1105
|
+
* we store them as dynamic properties of the job e.g. job.foo.bar, the other
|
|
1106
|
+
* is in an array of Field. The former is nice to work with in clients,
|
|
1107
|
+
* whereas the latter more suited to relational database.
|
|
1108
|
+
*
|
|
1109
|
+
* A) job with dynamic properties, e.g.
|
|
1110
|
+
* {
|
|
1111
|
+
* id: <guid>,
|
|
1112
|
+
* reference: "something"
|
|
1113
|
+
* <other static job properties>...
|
|
1114
|
+
* foo: {
|
|
1115
|
+
* bar: "value"
|
|
1116
|
+
* }
|
|
1117
|
+
* }
|
|
1118
|
+
*
|
|
1119
|
+
* B) job with array of Field
|
|
1120
|
+
* {
|
|
1121
|
+
* id: <guid>,
|
|
1122
|
+
* reference: "something"
|
|
1123
|
+
* <other static job properties>...
|
|
1124
|
+
* <will not have dynamic properties>...
|
|
1125
|
+
* fields: [
|
|
1126
|
+
* {
|
|
1127
|
+
* id: <guid>,
|
|
1128
|
+
* <other field properties>,
|
|
1129
|
+
* value: "value"
|
|
1130
|
+
* }
|
|
1131
|
+
* ]
|
|
1132
|
+
* }
|
|
1133
|
+
*
|
|
1134
|
+
* What this method does is given a VasJobModel that has been populated with
|
|
1135
|
+
* a VasJobDto in form B (i.e. `.fields` are populated - usually from a VASAPI
|
|
1136
|
+
* response), hydrate the dynamic properties of the model. NOTE: knowledge of
|
|
1137
|
+
* the Form that was used to crate the Job is required because it will contain
|
|
1138
|
+
* the Groups, which names are used in the hydrating
|
|
1139
|
+
*
|
|
1140
|
+
* @param {VasFormModel} formModel the VasFormModel that was used to create
|
|
1141
|
+
* the job
|
|
1142
|
+
* @return {void}
|
|
1143
|
+
*/
|
|
1144
|
+
hydrateDynamicProps(formModel) {
|
|
1145
|
+
formModel.groups
|
|
1146
|
+
.forEach(group => {
|
|
1147
|
+
const p0 = group.name;
|
|
1148
|
+
group.controls
|
|
1149
|
+
.forEach(control => {
|
|
1150
|
+
const p1 = control.name;
|
|
1151
|
+
const f = this.fields.find(field => field.control === control.id);
|
|
1152
|
+
if (!f) {
|
|
1153
|
+
return;
|
|
1154
|
+
}
|
|
1155
|
+
this.setValueByPath(f.value, [p0, p1]);
|
|
1156
|
+
});
|
|
1157
|
+
});
|
|
1158
|
+
}
|
|
1159
|
+
/**
|
|
1160
|
+
* This method will hydrate the `fields` property of the model. The reason for
|
|
1161
|
+
* this is that we have different ways to store the field data. One way, is
|
|
1162
|
+
* we store them as dynamic properties of the job e.g. job.foo.bar, the other
|
|
1163
|
+
* is in an array of Field. The former is nice to work with in clients,
|
|
1164
|
+
* whereas the latter more suited to relational database.
|
|
1165
|
+
*
|
|
1106
1166
|
* A) job with dynamic properties, e.g.
|
|
1107
1167
|
* {
|
|
1108
1168
|
* id: <guid>,
|
|
@@ -1169,7 +1229,7 @@ class VasJobModel extends VasRestrictedAccountObjectModel {
|
|
|
1169
1229
|
* be generated, or to reuse an existing one from the map.
|
|
1170
1230
|
* @param {Array<string>} controlNames if a value is provided, it will be used
|
|
1171
1231
|
* to filter the fields that are returned.
|
|
1172
|
-
* @return {
|
|
1232
|
+
* @return {void}
|
|
1173
1233
|
*/
|
|
1174
1234
|
hydrateFields(formModel, controlFieldIdMap = new Map(), controlNames) {
|
|
1175
1235
|
const fields = [];
|
|
@@ -1234,11 +1294,20 @@ class VasJobModel extends VasRestrictedAccountObjectModel {
|
|
|
1234
1294
|
return;
|
|
1235
1295
|
}
|
|
1236
1296
|
case 2: {
|
|
1297
|
+
if (!this.$this[path[0]]) {
|
|
1298
|
+
this.$this[path[0]] = {};
|
|
1299
|
+
}
|
|
1237
1300
|
// eslint-disable-next-line max-len
|
|
1238
1301
|
this.$this[path[0]][path[1]] = value;
|
|
1239
1302
|
return;
|
|
1240
1303
|
}
|
|
1241
1304
|
case 3: {
|
|
1305
|
+
if (!this.$this[path[0]]) {
|
|
1306
|
+
this.$this[path[0]] = {};
|
|
1307
|
+
}
|
|
1308
|
+
if (!this.$this[path[0]][path[1]]) {
|
|
1309
|
+
this.$this[path[0]][path[1]] = {};
|
|
1310
|
+
}
|
|
1242
1311
|
// eslint-disable-next-line max-len
|
|
1243
1312
|
this.$this[path[0]][path[1]][path[2]] = value;
|
|
1244
1313
|
return;
|