occam-verify-cli 1.0.839 → 1.0.841
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/bounded.js +2 -2
- package/lib/utilities/element.js +9 -9
- package/package.json +1 -1
- package/src/context/bounded.js +1 -1
- package/src/utilities/element.js +13 -13
package/lib/context/bounded.js
CHANGED
|
@@ -121,7 +121,7 @@ class BoundedContext extends _context.default {
|
|
|
121
121
|
assignment(context);
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
|
-
|
|
124
|
+
addDeclaredVariable(declaredVariable) {
|
|
125
125
|
const context = this, declaredVariableString = declaredVariable.getString();
|
|
126
126
|
context.trace(`Adding the '${declaredVariableString}' declared variable to the proof context...`);
|
|
127
127
|
this.declaredVariables.push(declaredVariable);
|
|
@@ -239,4 +239,4 @@ class BoundedContext extends _context.default {
|
|
|
239
239
|
}
|
|
240
240
|
const _default = BoundedContext;
|
|
241
241
|
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JvdW5kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgZmluZEVxdWl2YWxlbmNlQnlUZXJtLCBlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHksIHNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VxdWl2YWxlbmNlc1wiO1xuXG5jb25zdCB7IGxhc3QsIGZpbHRlciB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNsYXNzIEJvdW5kZWRDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBkZWNsYXJlZEp1ZGdlbWVudHMsIG1ldGFMZXZlbEFzc3VtcHRpb25zLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmFzc2lnbm1lbnRzID0gYXNzaWdubWVudHM7XG4gICAgdGhpcy5lcXVpdmFsZW5jZXMgPSBlcXVpdmFsZW5jZXM7XG4gICAgdGhpcy5kZWNsYXJlZFZhcmlhYmxlcyA9IGRlY2xhcmVkVmFyaWFibGVzO1xuICAgIHRoaXMuZGVjbGFyZWRKdWRnZW1lbnRzID0gZGVjbGFyZWRKdWRnZW1lbnRzO1xuICAgIHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMgPSBtZXRhTGV2ZWxBc3N1bXB0aW9ucztcbiAgICB0aGlzLnN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0QXNzaWdubWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWdubWVudHM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZXMoKSB7XG4gICAgbGV0IGVxdWl2YWxlbmNlcztcblxuICAgIGxldCBjb250ZXh0O1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTtcblxuICAgIGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIGVxdWl2YWxlbmNlcyA9IG1lcmdlRXF1aXZhbGVuY2VzKHRoaXMuZXF1aXZhbGVuY2VzLCBlcXVpdmFsZW5jZXMsIGNvbnRleHQpOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKSB7XG4gICAgbGV0IGRlY2xhcmVkVmFyaWFibGVzO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBjb250ZXh0LmdldERlY2xhcmVkVmFyaWFibGVzKCk7XG5cbiAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtcbiAgICAgIC4uLnRoaXMuZGVjbGFyZWRWYXJpYWJsZXMsXG4gICAgICAuLi5kZWNsYXJlZFZhcmlhYmxlc1xuICAgIF07XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZEp1ZGdlbWVudHMoKSB7XG4gICAgbGV0IGRlY2xhcmVkSnVkZ2VtZW50cztcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGRlY2xhcmVkSnVkZ2VtZW50cyA9IGNvbnRleHQuZ2V0RGVjbGFyZWRKdWRnZW1lbnRzKCk7XG5cbiAgICBkZWNsYXJlZEp1ZGdlbWVudHMgPSBbIC8vL1xuICAgICAgLi4udGhpcy5kZWNsYXJlZEp1ZGdlbWVudHMsXG4gICAgICAuLi5kZWNsYXJlZEp1ZGdlbWVudHNcbiAgICBdXG5cbiAgICByZXR1cm4gZGVjbGFyZWRKdWRnZW1lbnRzO1xuICB9XG5cbiAgZ2V0TWV0YUxldmVsQXNzdW1wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGxldCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFsgIC8vL1xuICAgICAgLi4uc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyxcbiAgICAgIC4uLnRoaXMuc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICByZXR1cm4gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFByb29mQXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25zID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucy5maWx0ZXIoKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uaXNQcm9vZkFzc2VydGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0TGFzdFN0ZXAoKSB7XG4gICAgbGV0IGxhc3RTdGVwID0gbnVsbDtcblxuICAgIGNvbnN0IHByb29mQXNzZXJ0aW9ucyA9IHRoaXMuZ2V0UHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25zTGVuZ3RoID0gcHJvb2ZBc3NlcnRpb25zLmxlbmd0aDtcblxuICAgIGlmIChwcm9vZkFzc2VydGlvbnNMZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBsYXN0UHJvb2ZBc3NlcnRpb24gPSBsYXN0KHByb29mQXNzZXJ0aW9ucyk7XG5cbiAgICAgIGxhc3RTdGVwID0gbGFzdFByb29mQXNzZXJ0aW9uOyAgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RTdGVwO1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgbGV0IG1ldGFMZXZlbCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbmEgIT09IG51bGwpIHtcbiAgICAgIG1ldGFMZXZlbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgbWV0YUxldmVsID0gY29udGV4dC5pc01ldGFMZXZlbCgpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhTGV2ZWw7XG4gIH1cblxuICBhZGRFcXVhbGl0eShlcXVhbGl0eSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBwcm9vZiBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVJlbGZleGl2ZSA9IGVxdWFsaXR5LmlzUmVmbGV4aXZlKCk7XG5cbiAgICBpZiAoIWVxdWFsaXR5UmVsZmV4aXZlKSB7XG4gICAgICBjb25zdCBlcXVpdmFsZW5jZSA9IGVxdWl2YWxlbmNlc0Zyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gbWVyZ2VFcXVpdmFsZW5jZXModGhpcy5lcXVpdmFsZW5jZXMsIGVxdWl2YWxlbmNlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSByZWZsZXhpdmUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBoYXMgbm90IGJlZW4gYWRkZWQgdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gICAgfVxuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgdGhpcy5hc3NpZ25tZW50cy5wdXNoKGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYXNzaWduQXNzaWdubWVudHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy5hc3NpZ25tZW50cy5mb3JFYWNoKChhc3NpZ25tZW50KSA9PiB7XG4gICAgICBhc3NpZ25tZW50KGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkREVjbGFyZWRWYXJpYWJsZShkZWNsYXJlZFZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVTdHJpbmcgPSBkZWNsYXJlZFZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtkZWNsYXJlZFZhcmlhYmxlU3RyaW5nfScgZGVjbGFyZWQgdmFyaWFibGUgdG8gdGhlIHByb29mIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMucHVzaChkZWNsYXJlZFZhcmlhYmxlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtkZWNsYXJlZFZhcmlhYmxlU3RyaW5nfScgZGVjbGFyZWQgdmFyaWFibGUgdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGREZWNsYXJlZEp1ZGdlbWVudChkZWNsYXJlZEp1ZGdlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZWNsYXJlZEp1ZGdlbWVudFN0cmluZyA9IGRlY2xhcmVkSnVkZ2VtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtkZWNsYXJlZEp1ZGdlbWVudFN0cmluZ30nIGRlY2xhcmVkIGp1ZGdlbWVudCB0byB0aGUgcHJvb2YgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5kZWNsYXJlZEp1ZGdlbWVudHMucHVzaChkZWNsYXJlZEp1ZGdlbWVudCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZGVjbGFyZWRKdWRnZW1lbnRTdHJpbmd9JyBkZWNsYXJlZCBqdWRnZW1lbnQgdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRNZXRhTGV2ZWxBc3N1bXB0aW9uKG1ldGFMZXZlbEFzc3VtcHRpb24pIHtcbiAgICBpZiAodGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgc3VwZXIuYWRkTWV0YUxldmVsQXNzdW1wdGlvbihtZXRhTGV2ZWxBc3N1bXB0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uQSA9IG1ldGFMZXZlbEFzc3VtcHRpb24sIC8vL1xuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmcgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nfScgbWV0YS1sZXZlbCBhc3N1bXB0aW9uIHRvIHRoZSBwcm9vZiBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uQiA9IHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMuZmluZCgobWV0YUxldmVsQXNzdW1wdGlvbikgPT4ge1xuICAgICAgY29uc3QgbWV0YUxldmVsQXNzdW1wdGlvbkIgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uLCAvLy9cbiAgICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CID0gbWV0YUxldmVsQXNzdW1wdGlvbkEuaXNFcXVhbFRvKG1ldGFMZXZlbEFzc3VtcHRpb25CKTtcblxuICAgICAgaWYgKG1ldGFMZXZlbEFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAobWV0YUxldmVsQXNzdW1wdGlvbkIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHttZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nfScgbWV0YUxldmVsQXNzdW1wdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBwcm9vZiBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25zLnB1c2gobWV0YUxldmVsQXNzdW1wdGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke21ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmd9JyBtZXRhLWxldmVsIGFzc3VtcHRpb24gdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZyA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHRvIHRoZSBwcm9vZiBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLnN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMucHVzaChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIG9yIHByb29mIGFzc2VydGlvbiB0byB0aGUgcHJvb2YgY29udGV4dC5gKTtcbiAgfVxuXG4gIGNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHByb29mQXNzZXJ0aW9ucyA9IHRoaXMuZ2V0UHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uID0gcHJvb2ZBc3NlcnRpb25zLnNvbWUoKHByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24gPSBwcm9vZkFzc2VydGlvbi5jb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24odGVybSwgcHJvcGVydHlSZWxhdGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uO1xuICB9XG5cbiAgZmluZEVxdWl2YWxlbmNlQnlUZXJtKHRlcm0pIHsgcmV0dXJuIGZpbmRFcXVpdmFsZW5jZUJ5VGVybSh0aGlzLmVxdWl2YWxlbmNlcywgdGVybSk7IH1cblxuICBmaW5kSnVkZ2VtZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZWNsYXJlZEp1ZGdlbWVudHMgPSB0aGlzLmdldEp1ZGdlbWVudHMoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBkZWNsYXJlZEp1ZGdlbWVudHMuZmluZCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGp1ZGdlbWVudC5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZXMgPSB0aGlzLmdldERlY2xhcmVkVmFyaWFibGVzKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGVzLmZpbmQoKGRlY2xhcmVkVmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciA9IGRlY2xhcmVkVmFyaWFibGUuY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgICAgICBpZiAodmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZWNsYXJlZEp1ZGdlbWVudHMgPSB0aGlzLmdldEp1ZGdlbWVudHMoKTtcblxuICAgIGZpbHRlcihkZWNsYXJlZEp1ZGdlbWVudHMsIChqdWRnZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0ganVkZ2VtZW50Lm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkSnVkZ2VtZW50cztcbiAgfVxuXG4gIGZpbmRNZXRhTGV2ZWxBc3N1bXB0aW9uQnlNZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSkge1xuICAgIGxldCBtZXRhTGV2ZWxBc3N1bXB0aW9uO1xuXG4gICAgaWYgKHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMgPT09IG51bGwpIHtcbiAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb24gPSBzdXBlci5maW5kTWV0YUxldmVsQXNzdW1wdGlvbkJ5TWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucy5maW5kKChtZXRhTGV2ZWxBc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IG1ldGFMZXZlbEFzc3VtcHRpb24ubWF0Y2hNZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9uO1xuICB9XG5cbiAgaXNKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBqdWRnZW1lbnQgPSB0aGlzLmZpbmRKdWRnZW1lbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAganVkZ2VtZW50UHJlc2VudCA9IChqdWRnZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc0RlY2xhcmVkVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZSA9IHRoaXMuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVQcmVzZW50ID0gKGRlY2xhcmVkVmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNUZXJtR3JvdW5kZWQodGVybSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSB0aGlzLmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICAgIGdyb3VuZGVkVGVybXMgPSBbXSxcbiAgICAgICAgICBkZWZpbmVkVmFyaWFibGVzID0gW107XG5cbiAgICBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzKGVxdWl2YWxlbmNlcywgZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICBjb25zdCB0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSA9IGdyb3VuZGVkVGVybXMuc29tZSgoZ3JvdW5kZWRUZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91bmRlZFRlcm1Ob2RlID0gZ3JvdW5kZWRUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICAgIGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKGdyb3VuZGVkVGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdW5kZWRUZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGVybUdyb3VuZGVkID0gdGVybU1hdGNoZXNHcm91bmRlZFRlcm07IC8vL1xuXG4gICAgcmV0dXJuIHRlcm1Hcm91bmRlZDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTWV0YUxldmVsQXNzdW1wdGlvbnMobWV0YUxldmVsQXNzdW1wdGlvbnMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3NpZ25tZW50cyA9IFtdLFxuICAgICAgICAgIGVxdWl2YWxlbmNlcyA9IFtdLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRKdWRnZW1lbnRzID0gW10sXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIGJvdW5kZWRDb250ZXh0ID0gbmV3IEJvdW5kZWRDb250ZXh0KGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBkZWNsYXJlZEp1ZGdlbWVudHMsIG1ldGFMZXZlbEFzc3VtcHRpb25zLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKTtcblxuICAgIHJldHVybiBib3VuZGVkQ29udGV4dDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb3VuZGVkQ29udGV4dDsiXSwibmFtZXMiOlsibGFzdCIsImZpbHRlciIsImFycmF5VXRpbGl0aWVzIiwiQm91bmRlZENvbnRleHQiLCJDb250ZXh0IiwiY29udGV4dCIsImFzc2lnbm1lbnRzIiwiZXF1aXZhbGVuY2VzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJkZWNsYXJlZEp1ZGdlbWVudHMiLCJtZXRhTGV2ZWxBc3N1bXB0aW9ucyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJnZXRBc3NpZ25tZW50cyIsImdldEVxdWl2YWxlbmNlcyIsImdldENvbnRleHQiLCJtZXJnZUVxdWl2YWxlbmNlcyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZ2V0RGVjbGFyZWRKdWRnZW1lbnRzIiwiZ2V0TWV0YUxldmVsQXNzdW1wdGlvbnMiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0UHJvb2ZBc3NlcnRpb25zIiwicHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24iLCJpc1Byb29mQXNzZXJ0aW9uIiwiZ2V0TGFzdFN0ZXAiLCJsYXN0U3RlcCIsInByb29mQXNzZXJ0aW9uc0xlbmd0aCIsImxlbmd0aCIsImxhc3RQcm9vZkFzc2VydGlvbiIsImlzTWV0YUxldmVsIiwibWV0YUxldmVsIiwibWV0YUxldmVsQXNzdW1wdGlvbmEiLCJhZGRFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVxdWFsaXR5UmVsZmV4aXZlIiwiaXNSZWZsZXhpdmUiLCJlcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlc0Zyb21FcXVhbGl0eSIsImRlYnVnIiwiYWRkQXNzaWdubWVudCIsImFzc2lnbm1lbnQiLCJwdXNoIiwiYXNzaWduQXNzaWdubWVudHMiLCJmb3JFYWNoIiwiYWRkREVjbGFyZWRWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlU3RyaW5nIiwiYWRkRGVjbGFyZWRKdWRnZW1lbnQiLCJkZWNsYXJlZEp1ZGdlbWVudCIsImRlY2xhcmVkSnVkZ2VtZW50U3RyaW5nIiwiYWRkTWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb24iLCJtZXRhTGV2ZWxBc3N1bXB0aW9uQSIsIm1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmciLCJtZXRhTGV2ZWxBc3N1bXB0aW9uQiIsImZpbmQiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQiIsImlzRXF1YWxUbyIsImFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZyIsImNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbiIsInRlcm0iLCJwcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwic29tZSIsInByb29mQXNzZXJ0aW9uIiwiZmluZEVxdWl2YWxlbmNlQnlUZXJtIiwiZmluZEp1ZGdlbWVudEJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRKdWRnZW1lbnRzIiwianVkZ2VtZW50IiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyIiwiY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllciIsImZpbmRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGFMZXZlbEFzc3VtcHRpb25CeU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwiaXNKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwianVkZ2VtZW50UHJlc2VudCIsImlzRGVjbGFyZWRWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGVQcmVzZW50IiwiaXNUZXJtR3JvdW5kZWQiLCJncm91bmRlZFRlcm1zIiwiZGVmaW5lZFZhcmlhYmxlcyIsInNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMiLCJ0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSIsImdyb3VuZGVkVGVybSIsImdyb3VuZGVkVGVybU5vZGUiLCJnZXROb2RlIiwiZ3JvdW5kZWRUZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwidGVybUdyb3VuZGVkIiwiZnJvbU1ldGFMZXZlbEFzc3VtcHRpb25zIiwiYm91bmRlZENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQTZWQTs7O2VBQUE7OzsyQkEzVitCO2dFQUVYOzhCQUV5Rzs7Ozs7O0FBRTdILE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxNQUFNLEVBQUUsR0FBR0MseUJBQWM7QUFFdkMsTUFBTUMsdUJBQXVCQyxnQkFBTztJQUNsQyxZQUFZQyxPQUFPLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxpQkFBaUIsRUFBRUMsa0JBQWtCLEVBQUVDLG9CQUFvQixFQUFFQyx5QkFBeUIsQ0FBRTtRQUN0SSxLQUFLLENBQUNOO1FBRU4sSUFBSSxDQUFDQyxXQUFXLEdBQUdB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
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JvdW5kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgZmluZEVxdWl2YWxlbmNlQnlUZXJtLCBlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHksIHNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VxdWl2YWxlbmNlc1wiO1xuXG5jb25zdCB7IGxhc3QsIGZpbHRlciB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNsYXNzIEJvdW5kZWRDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBkZWNsYXJlZEp1ZGdlbWVudHMsIG1ldGFMZXZlbEFzc3VtcHRpb25zLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmFzc2lnbm1lbnRzID0gYXNzaWdubWVudHM7XG4gICAgdGhpcy5lcXVpdmFsZW5jZXMgPSBlcXVpdmFsZW5jZXM7XG4gICAgdGhpcy5kZWNsYXJlZFZhcmlhYmxlcyA9IGRlY2xhcmVkVmFyaWFibGVzO1xuICAgIHRoaXMuZGVjbGFyZWRKdWRnZW1lbnRzID0gZGVjbGFyZWRKdWRnZW1lbnRzO1xuICAgIHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMgPSBtZXRhTGV2ZWxBc3N1bXB0aW9ucztcbiAgICB0aGlzLnN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0QXNzaWdubWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWdubWVudHM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZXMoKSB7XG4gICAgbGV0IGVxdWl2YWxlbmNlcztcblxuICAgIGxldCBjb250ZXh0O1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTtcblxuICAgIGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIGVxdWl2YWxlbmNlcyA9IG1lcmdlRXF1aXZhbGVuY2VzKHRoaXMuZXF1aXZhbGVuY2VzLCBlcXVpdmFsZW5jZXMsIGNvbnRleHQpOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKSB7XG4gICAgbGV0IGRlY2xhcmVkVmFyaWFibGVzO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBjb250ZXh0LmdldERlY2xhcmVkVmFyaWFibGVzKCk7XG5cbiAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtcbiAgICAgIC4uLnRoaXMuZGVjbGFyZWRWYXJpYWJsZXMsXG4gICAgICAuLi5kZWNsYXJlZFZhcmlhYmxlc1xuICAgIF07XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZEp1ZGdlbWVudHMoKSB7XG4gICAgbGV0IGRlY2xhcmVkSnVkZ2VtZW50cztcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGRlY2xhcmVkSnVkZ2VtZW50cyA9IGNvbnRleHQuZ2V0RGVjbGFyZWRKdWRnZW1lbnRzKCk7XG5cbiAgICBkZWNsYXJlZEp1ZGdlbWVudHMgPSBbIC8vL1xuICAgICAgLi4udGhpcy5kZWNsYXJlZEp1ZGdlbWVudHMsXG4gICAgICAuLi5kZWNsYXJlZEp1ZGdlbWVudHNcbiAgICBdXG5cbiAgICByZXR1cm4gZGVjbGFyZWRKdWRnZW1lbnRzO1xuICB9XG5cbiAgZ2V0TWV0YUxldmVsQXNzdW1wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGxldCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFsgIC8vL1xuICAgICAgLi4uc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyxcbiAgICAgIC4uLnRoaXMuc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICByZXR1cm4gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFByb29mQXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25zID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucy5maWx0ZXIoKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uaXNQcm9vZkFzc2VydGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0TGFzdFN0ZXAoKSB7XG4gICAgbGV0IGxhc3RTdGVwID0gbnVsbDtcblxuICAgIGNvbnN0IHByb29mQXNzZXJ0aW9ucyA9IHRoaXMuZ2V0UHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25zTGVuZ3RoID0gcHJvb2ZBc3NlcnRpb25zLmxlbmd0aDtcblxuICAgIGlmIChwcm9vZkFzc2VydGlvbnNMZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBsYXN0UHJvb2ZBc3NlcnRpb24gPSBsYXN0KHByb29mQXNzZXJ0aW9ucyk7XG5cbiAgICAgIGxhc3RTdGVwID0gbGFzdFByb29mQXNzZXJ0aW9uOyAgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RTdGVwO1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgbGV0IG1ldGFMZXZlbCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbmEgIT09IG51bGwpIHtcbiAgICAgIG1ldGFMZXZlbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgbWV0YUxldmVsID0gY29udGV4dC5pc01ldGFMZXZlbCgpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhTGV2ZWw7XG4gIH1cblxuICBhZGRFcXVhbGl0eShlcXVhbGl0eSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBwcm9vZiBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVJlbGZleGl2ZSA9IGVxdWFsaXR5LmlzUmVmbGV4aXZlKCk7XG5cbiAgICBpZiAoIWVxdWFsaXR5UmVsZmV4aXZlKSB7XG4gICAgICBjb25zdCBlcXVpdmFsZW5jZSA9IGVxdWl2YWxlbmNlc0Zyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gbWVyZ2VFcXVpdmFsZW5jZXModGhpcy5lcXVpdmFsZW5jZXMsIGVxdWl2YWxlbmNlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSByZWZsZXhpdmUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBoYXMgbm90IGJlZW4gYWRkZWQgdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gICAgfVxuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgdGhpcy5hc3NpZ25tZW50cy5wdXNoKGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYXNzaWduQXNzaWdubWVudHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy5hc3NpZ25tZW50cy5mb3JFYWNoKChhc3NpZ25tZW50KSA9PiB7XG4gICAgICBhc3NpZ25tZW50KGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRGVjbGFyZWRWYXJpYWJsZShkZWNsYXJlZFZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVTdHJpbmcgPSBkZWNsYXJlZFZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtkZWNsYXJlZFZhcmlhYmxlU3RyaW5nfScgZGVjbGFyZWQgdmFyaWFibGUgdG8gdGhlIHByb29mIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMucHVzaChkZWNsYXJlZFZhcmlhYmxlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtkZWNsYXJlZFZhcmlhYmxlU3RyaW5nfScgZGVjbGFyZWQgdmFyaWFibGUgdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGREZWNsYXJlZEp1ZGdlbWVudChkZWNsYXJlZEp1ZGdlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZWNsYXJlZEp1ZGdlbWVudFN0cmluZyA9IGRlY2xhcmVkSnVkZ2VtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtkZWNsYXJlZEp1ZGdlbWVudFN0cmluZ30nIGRlY2xhcmVkIGp1ZGdlbWVudCB0byB0aGUgcHJvb2YgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5kZWNsYXJlZEp1ZGdlbWVudHMucHVzaChkZWNsYXJlZEp1ZGdlbWVudCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZGVjbGFyZWRKdWRnZW1lbnRTdHJpbmd9JyBkZWNsYXJlZCBqdWRnZW1lbnQgdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRNZXRhTGV2ZWxBc3N1bXB0aW9uKG1ldGFMZXZlbEFzc3VtcHRpb24pIHtcbiAgICBpZiAodGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgc3VwZXIuYWRkTWV0YUxldmVsQXNzdW1wdGlvbihtZXRhTGV2ZWxBc3N1bXB0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uQSA9IG1ldGFMZXZlbEFzc3VtcHRpb24sIC8vL1xuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmcgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nfScgbWV0YS1sZXZlbCBhc3N1bXB0aW9uIHRvIHRoZSBwcm9vZiBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uQiA9IHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMuZmluZCgobWV0YUxldmVsQXNzdW1wdGlvbikgPT4ge1xuICAgICAgY29uc3QgbWV0YUxldmVsQXNzdW1wdGlvbkIgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uLCAvLy9cbiAgICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CID0gbWV0YUxldmVsQXNzdW1wdGlvbkEuaXNFcXVhbFRvKG1ldGFMZXZlbEFzc3VtcHRpb25CKTtcblxuICAgICAgaWYgKG1ldGFMZXZlbEFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAobWV0YUxldmVsQXNzdW1wdGlvbkIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHttZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nfScgbWV0YUxldmVsQXNzdW1wdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBwcm9vZiBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25zLnB1c2gobWV0YUxldmVsQXNzdW1wdGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke21ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmd9JyBtZXRhLWxldmVsIGFzc3VtcHRpb24gdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZyA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHRvIHRoZSBwcm9vZiBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLnN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMucHVzaChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIG9yIHByb29mIGFzc2VydGlvbiB0byB0aGUgcHJvb2YgY29udGV4dC5gKTtcbiAgfVxuXG4gIGNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHByb29mQXNzZXJ0aW9ucyA9IHRoaXMuZ2V0UHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uID0gcHJvb2ZBc3NlcnRpb25zLnNvbWUoKHByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24gPSBwcm9vZkFzc2VydGlvbi5jb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24odGVybSwgcHJvcGVydHlSZWxhdGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uO1xuICB9XG5cbiAgZmluZEVxdWl2YWxlbmNlQnlUZXJtKHRlcm0pIHsgcmV0dXJuIGZpbmRFcXVpdmFsZW5jZUJ5VGVybSh0aGlzLmVxdWl2YWxlbmNlcywgdGVybSk7IH1cblxuICBmaW5kSnVkZ2VtZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZWNsYXJlZEp1ZGdlbWVudHMgPSB0aGlzLmdldEp1ZGdlbWVudHMoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBkZWNsYXJlZEp1ZGdlbWVudHMuZmluZCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGp1ZGdlbWVudC5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZXMgPSB0aGlzLmdldERlY2xhcmVkVmFyaWFibGVzKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGVzLmZpbmQoKGRlY2xhcmVkVmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciA9IGRlY2xhcmVkVmFyaWFibGUuY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgICAgICBpZiAodmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZWNsYXJlZEp1ZGdlbWVudHMgPSB0aGlzLmdldEp1ZGdlbWVudHMoKTtcblxuICAgIGZpbHRlcihkZWNsYXJlZEp1ZGdlbWVudHMsIChqdWRnZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0ganVkZ2VtZW50Lm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkSnVkZ2VtZW50cztcbiAgfVxuXG4gIGZpbmRNZXRhTGV2ZWxBc3N1bXB0aW9uQnlNZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSkge1xuICAgIGxldCBtZXRhTGV2ZWxBc3N1bXB0aW9uO1xuXG4gICAgaWYgKHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMgPT09IG51bGwpIHtcbiAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb24gPSBzdXBlci5maW5kTWV0YUxldmVsQXNzdW1wdGlvbkJ5TWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucy5maW5kKChtZXRhTGV2ZWxBc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IG1ldGFMZXZlbEFzc3VtcHRpb24ubWF0Y2hNZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9uO1xuICB9XG5cbiAgaXNKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBqdWRnZW1lbnQgPSB0aGlzLmZpbmRKdWRnZW1lbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAganVkZ2VtZW50UHJlc2VudCA9IChqdWRnZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc0RlY2xhcmVkVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZSA9IHRoaXMuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVQcmVzZW50ID0gKGRlY2xhcmVkVmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNUZXJtR3JvdW5kZWQodGVybSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSB0aGlzLmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICAgIGdyb3VuZGVkVGVybXMgPSBbXSxcbiAgICAgICAgICBkZWZpbmVkVmFyaWFibGVzID0gW107XG5cbiAgICBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzKGVxdWl2YWxlbmNlcywgZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICBjb25zdCB0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSA9IGdyb3VuZGVkVGVybXMuc29tZSgoZ3JvdW5kZWRUZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91bmRlZFRlcm1Ob2RlID0gZ3JvdW5kZWRUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICAgIGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKGdyb3VuZGVkVGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdW5kZWRUZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGVybUdyb3VuZGVkID0gdGVybU1hdGNoZXNHcm91bmRlZFRlcm07IC8vL1xuXG4gICAgcmV0dXJuIHRlcm1Hcm91bmRlZDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTWV0YUxldmVsQXNzdW1wdGlvbnMobWV0YUxldmVsQXNzdW1wdGlvbnMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3NpZ25tZW50cyA9IFtdLFxuICAgICAgICAgIGVxdWl2YWxlbmNlcyA9IFtdLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRKdWRnZW1lbnRzID0gW10sXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIGJvdW5kZWRDb250ZXh0ID0gbmV3IEJvdW5kZWRDb250ZXh0KGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBkZWNsYXJlZEp1ZGdlbWVudHMsIG1ldGFMZXZlbEFzc3VtcHRpb25zLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKTtcblxuICAgIHJldHVybiBib3VuZGVkQ29udGV4dDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb3VuZGVkQ29udGV4dDsiXSwibmFtZXMiOlsibGFzdCIsImZpbHRlciIsImFycmF5VXRpbGl0aWVzIiwiQm91bmRlZENvbnRleHQiLCJDb250ZXh0IiwiY29udGV4dCIsImFzc2lnbm1lbnRzIiwiZXF1aXZhbGVuY2VzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJkZWNsYXJlZEp1ZGdlbWVudHMiLCJtZXRhTGV2ZWxBc3N1bXB0aW9ucyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJnZXRBc3NpZ25tZW50cyIsImdldEVxdWl2YWxlbmNlcyIsImdldENvbnRleHQiLCJtZXJnZUVxdWl2YWxlbmNlcyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZ2V0RGVjbGFyZWRKdWRnZW1lbnRzIiwiZ2V0TWV0YUxldmVsQXNzdW1wdGlvbnMiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0UHJvb2ZBc3NlcnRpb25zIiwicHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24iLCJpc1Byb29mQXNzZXJ0aW9uIiwiZ2V0TGFzdFN0ZXAiLCJsYXN0U3RlcCIsInByb29mQXNzZXJ0aW9uc0xlbmd0aCIsImxlbmd0aCIsImxhc3RQcm9vZkFzc2VydGlvbiIsImlzTWV0YUxldmVsIiwibWV0YUxldmVsIiwibWV0YUxldmVsQXNzdW1wdGlvbmEiLCJhZGRFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVxdWFsaXR5UmVsZmV4aXZlIiwiaXNSZWZsZXhpdmUiLCJlcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlc0Zyb21FcXVhbGl0eSIsImRlYnVnIiwiYWRkQXNzaWdubWVudCIsImFzc2lnbm1lbnQiLCJwdXNoIiwiYXNzaWduQXNzaWdubWVudHMiLCJmb3JFYWNoIiwiYWRkRGVjbGFyZWRWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlU3RyaW5nIiwiYWRkRGVjbGFyZWRKdWRnZW1lbnQiLCJkZWNsYXJlZEp1ZGdlbWVudCIsImRlY2xhcmVkSnVkZ2VtZW50U3RyaW5nIiwiYWRkTWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb24iLCJtZXRhTGV2ZWxBc3N1bXB0aW9uQSIsIm1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmciLCJtZXRhTGV2ZWxBc3N1bXB0aW9uQiIsImZpbmQiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQiIsImlzRXF1YWxUbyIsImFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZyIsImNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbiIsInRlcm0iLCJwcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwic29tZSIsInByb29mQXNzZXJ0aW9uIiwiZmluZEVxdWl2YWxlbmNlQnlUZXJtIiwiZmluZEp1ZGdlbWVudEJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRKdWRnZW1lbnRzIiwianVkZ2VtZW50IiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyIiwiY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllciIsImZpbmRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGFMZXZlbEFzc3VtcHRpb25CeU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwiaXNKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwianVkZ2VtZW50UHJlc2VudCIsImlzRGVjbGFyZWRWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGVQcmVzZW50IiwiaXNUZXJtR3JvdW5kZWQiLCJncm91bmRlZFRlcm1zIiwiZGVmaW5lZFZhcmlhYmxlcyIsInNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMiLCJ0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSIsImdyb3VuZGVkVGVybSIsImdyb3VuZGVkVGVybU5vZGUiLCJnZXROb2RlIiwiZ3JvdW5kZWRUZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwidGVybUdyb3VuZGVkIiwiZnJvbU1ldGFMZXZlbEFzc3VtcHRpb25zIiwiYm91bmRlZENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQTZWQTs7O2VBQUE7OzsyQkEzVitCO2dFQUVYOzhCQUV5Rzs7Ozs7O0FBRTdILE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxNQUFNLEVBQUUsR0FBR0MseUJBQWM7QUFFdkMsTUFBTUMsdUJBQXVCQyxnQkFBTztJQUNsQyxZQUFZQyxPQUFPLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxpQkFBaUIsRUFBRUMsa0JBQWtCLEVBQUVDLG9CQUFvQixFQUFFQyx5QkFBeUIsQ0FBRTtRQUN0SSxLQUFLLENBQUNOO1FBRU4sSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLGlCQUFpQixHQUFHQTtRQUN6QixJQUFJLENBQUNDLGtCQUFrQixHQUFHQTtRQUMxQixJQUFJLENBQUNDLG9CQUFvQixHQUFHQTtRQUM1QixJQUFJLENBQUNDLHlCQUF5QixHQUFHQTtJQUNuQztJQUVBQyxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQ04sV0FBVztJQUN6QjtJQUVBTyxrQkFBa0I7UUFDaEIsSUFBSU47UUFFSixJQUFJRjtRQUVKQSxVQUFVLElBQUksQ0FBQ1MsVUFBVTtRQUV6QlAsZUFBZUYsUUFBUVEsZUFBZTtRQUV0Q1IsVUFBVSxJQUFJLEVBQUUsR0FBRztRQUVuQkUsZUFBZVEsSUFBQUEsK0JBQWlCLEVBQUMsSUFBSSxDQUFDUixZQUFZLEVBQUVBLGNBQWNGLFVBQVcsR0FBRztRQUVoRixPQUFPRTtJQUNUO0lBRUFTLHVCQUF1QjtRQUNyQixJQUFJUjtRQUVKLE1BQU1ILFVBQVUsSUFBSSxDQUFDUyxVQUFVO1FBRS9CTixvQkFBb0JILFFBQVFXLG9CQUFvQjtRQUVoRFIsb0JBQW9CO2VBQ2YsSUFBSSxDQUFDQSxpQkFBaUI7ZUFDdEJBO1NBQ0o7UUFFRCxPQUFPQTtJQUNUO0lBRUFTLHdCQUF3QjtRQUN0QixJQUFJUjtRQUVKLE1BQU1KLFVBQVUsSUFBSSxDQUFDUyxVQUFVO1FBRS9CTCxxQkFBcUJKLFFBQVFZLHFCQUFxQjtRQUVsRFIscUJBQXFCO2VBQ2hCLElBQUksQ0FBQ0Esa0JBQWtCO2VBQ3ZCQTtTQUNKO1FBRUQsT0FBT0E7SUFDVDtJQUVBUywwQkFBMEI7UUFDeEIsT0FBTyxJQUFJLENBQUNSLG9CQUFvQjtJQUNsQztJQUVBUywrQkFBK0I7UUFDN0IsSUFBSVI7UUFFSixNQUFNTixVQUFVLElBQUksQ0FBQ1MsVUFBVTtRQUUvQkgsNEJBQTRCTixRQUFRYyw0QkFBNEI7UUFFaEVSLDRCQUE0QjtlQUN2QkE7ZUFDQSxJQUFJLENBQUNBLHlCQUF5QjtTQUNsQztRQUVELE9BQU9BO0lBQ1Q7SUFFQVMscUJBQXFCO1FBQ25CLE1BQU1ULDRCQUE0QixJQUFJLENBQUNRLDRCQUE0QixJQUM3REUsa0JBQWtCViwwQkFBMEJWLE1BQU0sQ0FBQyxDQUFDcUI7WUFDbEQsTUFBTUMseUNBQXlDRCx5QkFBeUJFLGdCQUFnQjtZQUV4RixJQUFJRCx3Q0FBd0M7Z0JBQzFDLE9BQU87WUFDVDtRQUNGO1FBRU4sT0FBT0Y7SUFDVDtJQUVBSSxjQUFjO1FBQ1osSUFBSUMsV0FBVztRQUVmLE1BQU1MLGtCQUFrQixJQUFJLENBQUNELGtCQUFrQixJQUN6Q08sd0JBQXdCTixnQkFBZ0JPLE1BQU07UUFFcEQsSUFBSUQsd0JBQXdCLEdBQUc7WUFDN0IsTUFBTUUscUJBQXFCN0IsS0FBS3FCO1lBRWhDSyxXQUFXRyxvQkFBcUIsR0FBRztRQUNyQztRQUVBLE9BQU9IO0lBQ1Q7SUFFQUksY0FBYztRQUNaLElBQUlDLFlBQVk7UUFFaEIsSUFBSSxJQUFJLENBQUNDLG9CQUFvQixLQUFLLE1BQU07WUFDdENELFlBQVk7UUFDZCxPQUFPO1lBQ0wsTUFBTTFCLFVBQVUsSUFBSSxDQUFDUyxVQUFVO1lBRS9CaUIsWUFBWTFCLFFBQVF5QixXQUFXO1FBQ2pDO1FBRUEsT0FBT0M7SUFDVDtJQUVBRSxZQUFZQyxRQUFRLEVBQUU7UUFDcEIsTUFBTTdCLFVBQVUsSUFBSSxFQUNkOEIsaUJBQWlCRCxTQUFTRSxTQUFTO1FBRXpDL0IsUUFBUWdDLEtBQUssQ0FBQyxDQUFDLFlBQVksRUFBRUYsZUFBZSxrQ0FBa0MsQ0FBQztRQUUvRSxNQUFNRyxvQkFBb0JKLFNBQVNLLFdBQVc7UUFFOUMsSUFBSSxDQUFDRCxtQkFBbUI7WUFDdEIsTUFBTUUsY0FBY0MsSUFBQUEsc0NBQXdCLEVBQUNQLFVBQVU3QjtZQUV2RCxJQUFJLENBQUNFLFlBQVksR0FBR1EsSUFBQUEsK0JBQWlCLEVBQUMsSUFBSSxDQUFDUixZQUFZLEVBQUVpQyxhQUFhbkM7WUFFdEVBLFFBQVFxQyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVQLGVBQWUsZ0NBQWdDLENBQUM7UUFDakYsT0FBTztZQUNMOUIsUUFBUXFDLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRVAsZUFBZSxtREFBbUQsQ0FBQztRQUNyRztJQUNGO0lBRUFRLGNBQWNDLFVBQVUsRUFBRTtRQUN4QixJQUFJLENBQUN0QyxXQUFXLENBQUN1QyxJQUFJLENBQUNEO0lBQ3hCO0lBRUFFLG9CQUFvQjtRQUNsQixNQUFNekMsVUFBVSxJQUFJLEVBQUUsR0FBRztRQUV6QixJQUFJLENBQUNDLFdBQVcsQ0FBQ3lDLE9BQU8sQ0FBQyxDQUFDSDtZQUN4QkEsV0FBV3ZDO1FBQ2I7SUFDRjtJQUVBMkMsb0JBQW9CQyxnQkFBZ0IsRUFBRTtRQUNwQyxNQUFNNUMsVUFBVSxJQUFJLEVBQ2Q2Qyx5QkFBeUJELGlCQUFpQmIsU0FBUztRQUV6RC9CLFFBQVFnQyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUVhLHVCQUF1QiwyQ0FBMkMsQ0FBQztRQUVoRyxJQUFJLENBQUMxQyxpQkFBaUIsQ0FBQ3FDLElBQUksQ0FBQ0k7UUFFNUI1QyxRQUFRcUMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFUSx1QkFBdUIseUNBQXlDLENBQUM7SUFDbEc7SUFFQUMscUJBQXFCQyxpQkFBaUIsRUFBRTtRQUN0QyxNQUFNL0MsVUFBVSxJQUFJLEVBQ2RnRCwwQkFBMEJELGtCQUFrQmhCLFNBQVM7UUFFM0QvQixRQUFRZ0MsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFZ0Isd0JBQXdCLDRDQUE0QyxDQUFDO1FBRWxHLElBQUksQ0FBQzVDLGtCQUFrQixDQUFDb0MsSUFBSSxDQUFDTztRQUU3Qi9DLFFBQVFxQyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVXLHdCQUF3QiwwQ0FBMEMsQ0FBQztJQUNwRztJQUVBQyx1QkFBdUJDLG1CQUFtQixFQUFFO1FBQzFDLElBQUksSUFBSSxDQUFDN0Msb0JBQW9CLEtBQUssTUFBTTtZQUN0QyxLQUFLLENBQUM0Qyx1QkFBdUJDO1lBRTdCO1FBQ0Y7UUFFQSxNQUFNbEQsVUFBVSxJQUFJLEVBQ2RtRCx1QkFBdUJELHFCQUN2QkUsNEJBQTRCRixvQkFBb0JuQixTQUFTO1FBRS9EL0IsUUFBUWdDLEtBQUssQ0FBQyxDQUFDLFlBQVksRUFBRW9CLDBCQUEwQiwrQ0FBK0MsQ0FBQztRQUV2RyxNQUFNQyx1QkFBdUIsSUFBSSxDQUFDaEQsb0JBQW9CLENBQUNpRCxJQUFJLENBQUMsQ0FBQ0o7WUFDM0QsTUFBTUcsdUJBQXVCSCxxQkFDdkJLLHlDQUF5Q0oscUJBQXFCSyxTQUFTLENBQUNIO1lBRTlFLElBQUlFLHdDQUF3QztnQkFDMUMsT0FBTztZQUNUO1FBQ0YsTUFBTTtRQUVOLElBQUlGLHlCQUF5QixNQUFNO1lBQ2pDckQsUUFBUXFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRWUsMEJBQTBCLGtFQUFrRSxDQUFDO1FBQ3JILE9BQU87WUFDTCxJQUFJLENBQUMvQyxvQkFBb0IsQ0FBQ21DLElBQUksQ0FBQ1U7UUFDakM7UUFFQWxELFFBQVFxQyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVlLDBCQUEwQiw2Q0FBNkMsQ0FBQztJQUN6RztJQUVBSyw0QkFBNEJ4Qyx3QkFBd0IsRUFBRTtRQUNwRCxNQUFNakIsVUFBVSxJQUFJLEVBQ2QwRCxpQ0FBaUN6Qyx5QkFBeUJjLFNBQVM7UUFFekUvQixRQUFRZ0MsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFMEIsK0JBQStCLHFEQUFxRCxDQUFDO1FBRWxILElBQUksQ0FBQ3BELHlCQUF5QixDQUFDa0MsSUFBSSxDQUFDdkI7UUFFcENqQixRQUFRcUMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFcUIsK0JBQStCLG1EQUFtRCxDQUFDO0lBQ3BIO0lBRUFDLCtCQUErQkMsSUFBSSxFQUFFQyxnQkFBZ0IsRUFBRTtRQUNyRCxNQUFNN0QsVUFBVSxJQUFJLEVBQ2RnQixrQkFBa0IsSUFBSSxDQUFDRCxrQkFBa0IsSUFDekMrQyxvQ0FBb0M5QyxnQkFBZ0IrQyxJQUFJLENBQUMsQ0FBQ0M7WUFDeEQsTUFBTUYsb0NBQW9DRSxlQUFlTCw4QkFBOEIsQ0FBQ0MsTUFBTUMsa0JBQWtCN0Q7WUFFaEgsSUFBSThELG1DQUFtQztnQkFDckMsT0FBTztZQUNUO1FBQ0Y7UUFFTixPQUFPQTtJQUNUO0lBRUFHLHNCQUFzQkwsSUFBSSxFQUFFO1FBQUUsT0FBT0ssSUFBQUEsbUNBQXFCLEVBQUMsSUFBSSxDQUFDL0QsWUFBWSxFQUFFMEQ7SUFBTztJQUVyRk0sZ0NBQWdDQyxnQkFBZ0IsRUFBRTtRQUNoRCxNQUFNL0QscUJBQXFCLElBQUksQ0FBQ2dFLGFBQWEsSUFDdkNDLFlBQVlqRSxtQkFBbUJrRCxJQUFJLENBQUMsQ0FBQ2U7WUFDbkMsTUFBTUMsMEJBQTBCRCxVQUFVRSxxQkFBcUIsQ0FBQ0o7WUFFaEUsSUFBSUcseUJBQXlCO2dCQUMzQixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Q7SUFDVDtJQUVBRyx5Q0FBeUNDLGtCQUFrQixFQUFFO1FBQzNELE1BQU10RSxvQkFBb0IsSUFBSSxDQUFDUSxvQkFBb0IsSUFDN0NpQyxtQkFBbUJ6QyxrQkFBa0JtRCxJQUFJLENBQUMsQ0FBQ1Y7WUFDekMsTUFBTThCLHVDQUF1QzlCLGlCQUFpQitCLHlCQUF5QixDQUFDRjtZQUV4RixJQUFJQyxzQ0FBc0M7Z0JBQ3hDLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFWixPQUFPOUI7SUFDVDtJQUVBZ0MsaUNBQWlDVCxnQkFBZ0IsRUFBRTtRQUNqRCxNQUFNL0QscUJBQXFCLElBQUksQ0FBQ2dFLGFBQWE7UUFFN0N4RSxPQUFPUSxvQkFBb0IsQ0FBQ2lFO1lBQzFCLE1BQU1DLDBCQUEwQkQsVUFBVUUscUJBQXFCLENBQUNKO1lBRWhFLElBQUlHLHlCQUF5QjtnQkFDM0IsT0FBTztZQUNUO1FBQ0Y7UUFFQSxPQUFPbEU7SUFDVDtJQUVBeUUsaURBQWlEQyx1QkFBdUIsRUFBRTtRQUN4RSxJQUFJNUI7UUFFSixJQUFJLElBQUksQ0FBQzdDLG9CQUFvQixLQUFLLE1BQU07WUFDdEM2QyxzQkFBc0IsS0FBSyxDQUFDMkIsaURBQWlEQztRQUMvRSxPQUFPO1lBQ0w1QixzQkFBc0IsSUFBSSxDQUFDN0Msb0JBQW9CLENBQUNpRCxJQUFJLENBQUMsQ0FBQ0o7Z0JBQ3BELE1BQU02QixpQ0FBaUM3QixvQkFBb0I4Qiw0QkFBNEIsQ0FBQ0Y7Z0JBRXhGLElBQUlDLGdDQUFnQztvQkFDbEMsT0FBTztnQkFDVDtZQUNGLE1BQU07UUFDUjtRQUVBLE9BQU83QjtJQUNUO0lBRUErQixxQ0FBcUNkLGdCQUFnQixFQUFFO1FBQ3JELE1BQU1FLFlBQVksSUFBSSxDQUFDSCwrQkFBK0IsQ0FBQ0MsbUJBQ2pEZSxtQkFBb0JiLGNBQWM7UUFFeEMsT0FBT2E7SUFDVDtJQUVBQyw4Q0FBOENWLGtCQUFrQixFQUFFO1FBQ2hFLE1BQU03QixtQkFBbUIsSUFBSSxDQUFDNEIsd0NBQXdDLENBQUNDLHFCQUNqRVcsMEJBQTJCeEMscUJBQXFCO1FBRXRELE9BQU93QztJQUNUO0lBRUFDLGVBQWV6QixJQUFJLEVBQUU7UUFDbkIsTUFBTTVELFVBQVUsSUFBSSxFQUNkRSxlQUFlLElBQUksQ0FBQ00sZUFBZSxJQUNuQzhFLGdCQUFnQixFQUFFLEVBQ2xCQyxtQkFBbUIsRUFBRTtRQUUzQkMsSUFBQUEsc0RBQXdDLEVBQUN0RixjQUFjb0YsZUFBZUMsa0JBQWtCdkY7UUFFeEYsTUFBTXlGLDBCQUEwQkgsY0FBY3ZCLElBQUksQ0FBQyxDQUFDMkI7WUFDNUMsTUFBTUMsbUJBQW1CRCxhQUFhRSxPQUFPLElBQ3ZDQywwQkFBMEJqQyxLQUFLa0MsYUFBYSxDQUFDSDtZQUVuRCxJQUFJRSx5QkFBeUI7Z0JBQzNCLE9BQU87WUFDVDtRQUNGLElBQ0FFLGVBQWVOLHlCQUF5QixHQUFHO1FBRWpELE9BQU9NO0lBQ1Q7SUFFQSxPQUFPQyx5QkFBeUIzRixvQkFBb0IsRUFBRUwsT0FBTyxFQUFFO1FBQzdELE1BQU1DLGNBQWMsRUFBRSxFQUNoQkMsZUFBZSxFQUFFLEVBQ2pCQyxvQkFBb0IsRUFBRSxFQUN0QkMscUJBQXFCLEVBQUUsRUFDdkJFLDRCQUE0QixFQUFFLEVBQzlCMkYsaUJBQWlCLElBQUluRyxlQUFlRSxTQUFTQyxhQUFhQyxjQUFjQyxtQkFBbUJDLG9CQUFvQkMsc0JBQXNCQztRQUUzSSxPQUFPMkY7SUFDVDtBQUNGO01BRUEsV0FBZW5HIn0=
|
package/lib/utilities/element.js
CHANGED
|
@@ -1045,10 +1045,6 @@ function nameFromParaneterNode(parameterNode, context) {
|
|
|
1045
1045
|
const name = parameterNode.getName();
|
|
1046
1046
|
return name;
|
|
1047
1047
|
}
|
|
1048
|
-
function nameFromTypePrefixNode(typePrefixNode, context) {
|
|
1049
|
-
const typePrefixName = typePrefixNode.getTypePrefixName(), name = typePrefixName; ///
|
|
1050
|
-
return name;
|
|
1051
|
-
}
|
|
1052
1048
|
function superTypesFromTypeNode(typeNode, context) {
|
|
1053
1049
|
const superTypes = null;
|
|
1054
1050
|
return superTypes;
|
|
@@ -1081,6 +1077,10 @@ function termsFromSignatureNode(signatureNode, context) {
|
|
|
1081
1077
|
const termNodes = signatureNode.getAssumptionNodes(), terms = termsFromTermNodes(termNodes, context);
|
|
1082
1078
|
return terms;
|
|
1083
1079
|
}
|
|
1080
|
+
function nameFromTypePrefixNode(typePrefixNode, context) {
|
|
1081
|
+
const typePrefixName = typePrefixNode.getTypePrefixName(), name = typePrefixName; ///
|
|
1082
|
+
return name;
|
|
1083
|
+
}
|
|
1084
1084
|
function provisionalFromTypeNode(typeNode, context) {
|
|
1085
1085
|
const provisional = null;
|
|
1086
1086
|
return provisional;
|
|
@@ -1674,6 +1674,10 @@ function frameSubstitutionFromStatementSubstitutionNode(statementSubstitutionNod
|
|
|
1674
1674
|
}
|
|
1675
1675
|
return frameSubstitution;
|
|
1676
1676
|
}
|
|
1677
|
+
function metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context) {
|
|
1678
|
+
const metaLevelAssumptions = [];
|
|
1679
|
+
return metaLevelAssumptions;
|
|
1680
|
+
}
|
|
1677
1681
|
function replacementReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context) {
|
|
1678
1682
|
const { Reference } = _elements.default, replacementReferenceNode = referenceSubstitutionNode.getReplacementReferenceNode(), replacementReferenceString = context.nodeAsString(replacementReferenceNode), replacementReference = Reference.fromReferenceString(replacementReferenceString, context);
|
|
1679
1683
|
return replacementReference;
|
|
@@ -1682,10 +1686,6 @@ function replacementStatementFromStatementSubstitutionNode(statementSubstitution
|
|
|
1682
1686
|
const replacementStatementNode = statementSubstitutionNode.getReplacementStatementNode(), replacementStatement = statementFromStatementNode(replacementStatementNode, context);
|
|
1683
1687
|
return replacementStatement;
|
|
1684
1688
|
}
|
|
1685
|
-
function metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context) {
|
|
1686
|
-
const metaLevelAssumptions = [];
|
|
1687
|
-
return metaLevelAssumptions;
|
|
1688
|
-
}
|
|
1689
1689
|
function termsFromTermNodes(termNodes, context) {
|
|
1690
1690
|
const terms = termNodes.map((termNode)=>{
|
|
1691
1691
|
const term = termFromTermNode(termNode, context);
|
|
@@ -1764,4 +1764,4 @@ function stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context) {
|
|
|
1764
1764
|
return stepsOrSubproofs;
|
|
1765
1765
|
}
|
|
1766
1766
|
|
|
1767
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlO1xuXG4gIGlmICh0eXBlTm9kZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gICAgdHlwZSA9IGJhc2VUeXBlOyAgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBub2RlID0gdHlwZU5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJlZml4TmFtZSA9IHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gbm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0eXBlU3RyaW5nID0gdHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSxcbiAgICAgICAgICBzdHJpbmcgPSB0eXBlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSdWxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSxcbiAgICAgICAgbm9kZSA9IHJ1bGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IHJ1bGVTdHJpbmcsICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBydWxlID0gbmV3IFJ1bGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHByb29mLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKTtcblxuICByZXR1cm4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXJyb3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXJyb3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgpO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gbGVtbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW1tYSA9IG5ldyBMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9vZiA9IG5ldyBQcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IGF4aW9tTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IFtdLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBheGlvbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2lzTm9kZXMgPSBzZWN0aW9uTm9kZS5nZXRIeXBvdGhlc2lzTm9kZXMoKSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCksXG4gICAgICAgIGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCBheGlvbSwgbGVtbWEsIHRoZW9yZW0sIGNvbmplY3R1cmUpLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Tm9kZS5nZXRQcm9wZXJ0eU5hbWUoKSxcbiAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IHByb3BlcnR5TmFtZTsgIC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5ID0gbmV3IFByb3BlcnR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lLCBub21pbmFsVHlwZU5hbWUpO1xuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbnMgPSBbXTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgaWRlbnRpZmllciwgcHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmcsICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBuZXcgRGVkdWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtcyk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG1ldGF2YXJpYWJsZSwgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBqdWRnZW1lbnQgPSBuZXcgSnVkZ2VtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBmcmFtZSwgYXNzdW1wdGlvbik7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYUZyb21NZXRhTGVtbWFOb2RlKG1ldGFMZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGFMZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zID0gbWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0RlZHVjdGlvbkFuZE1ldGFMZXZlbEFzc3VtcHRpb25zKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgbWV0YUxldmVsQXNzdW1wdGlvbnMpLFxuICAgICAgICBub2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGFMZW1tYSA9IG5ldyBNZXRhTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIG1ldGFMZXZlbEFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gbWV0YUxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUsIGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tSlNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSHlwb3Roc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGh5cG90aGVzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGh5cG9odGVzaXMgPSBuZXcgSHlwb3Roc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlcml2YXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeCA9IG5ldyBUeXBlUHJlZml4KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdXBwb3NpdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1aXZhbGVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1aXZhbGVuY2VOb2RlLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBzdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZzsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXF1aXZhbGVuY2UgPSBuZXcgRXF1aXZhbGVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHRlcm1zKTtcblxuICByZXR1cm4gZXF1aXZhbGVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdGhlb3JlbUZyb21NZXRhdGhlb3JlbU5vZGUobWV0YXRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGF0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbnMgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zRGVkdWN0aW9uQW5kTWV0YUxldmVsQXNzdW1wdGlvbnMobGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyksXG4gICAgICAgIG5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXRoZW9yZW0gPSBuZXcgTWV0YXRoZW9yZW0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIG1ldGFMZXZlbEFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gbWV0YXRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGFUeXBlID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lLCB0ZXJtLCB0eXBlLCBtZXRhVHlwZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YkRlcml2YXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YkRlcml2YXRpb24gPSBuZXcgU3ViRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gbmV3IFR5cGVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZUNhbGwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IG5ldyBQcm9jZWR1cmVDYWxsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBwYXJhbWV0ZXJzLCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwID0gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcE9yU3VicHJvb2YgPSAoc3RlcCB8fCBzdWJwcm9vZik7XG5cbiAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG5lZ2F0ZWQgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIGZyYW1lLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eVJlbGF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5UmVsYXRpb24gPSBuZXcgUHJvcGVydHlSZWxhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgcHJvcGVydHkpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbENvbnRleHRGcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZ2VuZXJhbENvbnRleHQsIHRhcmdldFRlcm0sIHJlcGxhY2VtZW50VGVybSk7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxDb250ZXh0RnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGdlbmVyYWxDb250ZXh0LCB0YXJnZXRGcmFtZSwgcmVwbGFjZW1lbnRGcmFtZSk7XG5cbiAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5QXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gbmV3IFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIGZyYW1lLCBuZWdhdGVkLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2F0aXNmaWVzQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBuZXcgU2F0aXNmaWVzQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVlbmNlID0gbmV3IFByb2NlZHVyZVJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKSxcbiAgICAgICAgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxldmVsQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gbmV3IE1ldGFMZXZlbEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gbmV3IFR5cGVQcmVmaXhEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZVByZWZpeCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb21iaW5hdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGNvbWJpbmF0b3IpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2ltcGxlVHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IG5ldyBTaW1wbGVUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gc2ltcGxlVHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxDb250ZXh0RnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IHRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbiA9IG5ldyBSZWZlcmVuY2VTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGdlbmVyYWxDb250ZXh0LCB0YXJnZXRSZWZlcmVuY2UsIHJlcGxhY2VtZW50UmVmZXJlbmNlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuXG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbENvbnRleHRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVzb2x2ZWQgPSByZXNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZ2VuZXJhbENvbnRleHQsIHJlc29sdmVkLCBzdWJzdGl0dXRpb24sIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbmV3IENvbnN0cnVjdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGxleFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbXBsZXhUeXBlRGVjbGFyYXRpb24gPSBuZXcgQ29tcGxleFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiBjb21wbGV4VHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9wZXJ0eU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHN0ZXBOb2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKTtcblxuICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVzID0gbnVsbDtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHByZWZpeE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbmNsdXNpb25Ob2RlID0gcnVsZU5vZGUuZ2V0Q29uY2x1c2lvbk5vZGUoKSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGhlb3JlbSA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRUaGVvcmVtTm9kZSgpO1xuXG4gIGlmICh0aGVvcmVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZXJpdmF0aW9uTm9kZSA9IHByb29mTm9kZS5nZXREZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBvY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBlcXVpdmFsZW5jZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmFpYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YXZhcmFpYmxlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlbU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBoeXBvdGhlc2lzTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc3VicHJvb2ZOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50OyAvLy9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViRGVyaXZhdGlvbk5vZGUgPSBzdWJwcm9vZk5vZGUuZ2V0U3ViRGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgc3ViRGVydmlhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdWJEZXJ2aWF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gbWV0YXZhcmlhYmxlU3RyaW5nLCAvLy9cbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0ZXBOb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3VicHJvb2ZPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLmlzU3VicHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUpIHtcbiAgICBjb25zdCBzdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRhcmdldFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRhcmdldFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRQcm9vZk5vZGUoKSxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbE5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiB5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tSlNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzaWduYXR1cmVOb2RlID0gc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21KU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhc2lzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZWZlcmVuY2VOb2RlID0gc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUodGFyZ2V0RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0RnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZU5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1Jlc29sdmVkKCk7XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSBudWxsO1xuXG4gIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmFsQ29udGV4dEZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IG51bGw7XG5cbiAgcmV0dXJuIGdlbmVyYWxDb250ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYWxDb250ZXh0RnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBudWxsO1xuXG4gIHJldHVybiBnZW5lcmFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChmcmFtZVN1YnN0aXR1dGlvbiB8fCB0ZXJtU3Vic3RpdHV0aW9uKTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhbENvbnRleHRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gbnVsbDtcblxuICByZXR1cm4gZ2VuZXJhbENvbnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmFsQ29udGV4dEZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBudWxsO1xuXG4gIHJldHVybiBnZW5lcmFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcodGFyZ2V0UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHRhcmdldFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSh0YXJnZXRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUocmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb25zID0gW107XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCB0ZXJtcyA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7XG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGVzID0gdHlwZXNOb2RlLmdldFR5cGVOb2RlcygpLFxuICAgICAgICB0eXBlcyA9IHR5cGVOb2Rlcy5tYXAoKHR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiB0eXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxzID0gbGFiZWxOb2Rlcy5tYXAoKGxhYmVsTm9kZSkgPT4ge1xuICAgIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIGxhYmVsU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobGFiZWxOb2RlKSxcbiAgICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VzID0gcHJlbWlzZU5vZGVzLm1hcCgocHJlbWlzZU5vZGUpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlID0gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IGh5cG90aGVzaXNOb2Rlcy5tYXAoKGh5cG90aGVzZU5vZGUpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzID0gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gZGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gc3ViRGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJheGlvbUZyb21TZWN0aW9uTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21KdWRnZW1lbnROb2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dEZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dEZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhbENvbnRleHRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYWxDb250ZXh0RnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSIsImp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwibGVtbWFGcm9tTGVtbWFOb2RlIiwibGVtbWFGcm9tU2VjdGlvbk5vZGUiLCJtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25Gcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwibmFtZUZyb21Qcm9wZXJ0eU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21UeXBlUHJlZml4Tm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwibm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByZWZpeE5hbWVGcm9tVHlwZU5vZGUiLCJwcmVtaXNlRnJvbVByZW1pc2VOb2RlIiwicHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzIiwicHJlbWlzZXNGcm9tUnVsZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9vZkZyb21Qcm9vZk5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsInByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN0ZXBGcm9tU3RlcE5vZGUiLCJzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21NZXRhdmFyaWFibGVOb2RlIiwidGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsIlR5cGUiLCJlbGVtZW50cyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJsaW5lSW5kZXgiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RlcCIsInJ1bGVOb2RlIiwiUnVsZSIsInByb29mIiwibGFiZWxzIiwicHJlbWlzZXMiLCJjb25jbHVzaW9uIiwicnVsZVN0cmluZyIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwicnVsZSIsImxhYmVsTm9kZSIsIkxhYmVsIiwibWV0YXZhcmlhYmxlIiwibGFiZWwiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwibGVtbWFOb2RlIiwiTGVtbWEiLCJ0b3BMZXZlbEFzc3NlcnRpb25Ob2RlIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsInRvcExldmVsQXNzc2VydGlvblN0cmluZyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNlY3Rpb25Ob2RlIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwidGhlb3JlbSIsImNvbmplY3R1cmUiLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uIiwiU2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByb2NlZHVyZUNhbGwiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwicHJvcGVydHlOb2RlIiwiUHJvcGVydHkiLCJwcm9wZXJ0eU5hbWUiLCJnZXRQcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInByb3BlcnR5UmVsYXRpb25zIiwidmFyaWFibGUiLCJzdWJwcm9vZk5vZGUiLCJTdWJwcm9vZiIsInN1YkRlcml2YXRpb24iLCJzdWJwcm9vZlN0cmluZyIsInN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24iLCJzdWJwcm9vZiIsImVxdWFsaXR5Tm9kZSIsIkVxdWFsaXR5IiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJlcXVhbGl0eSIsImRlZHVjdGlvbk5vZGUiLCJEZWR1Y3Rpb24iLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50Iiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInRvcExldmVsTWV0YUFzc2VydGlvbiIsImp1ZGdlbWVudE5vZGUiLCJKdWRnZW1lbnQiLCJhc3N1bXB0aW9uIiwianVkZ2VtZW50IiwibWV0YUxlbW1hTm9kZSIsIk1ldGFMZW1tYSIsIm1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbnMiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyIsIm1ldGFMZW1tYSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJnZXROYW1lIiwiZ2V0SWRlbnRpZmllciIsInBhcmFtZXRlciIsImh5cG90aGVzZU5vZGUiLCJIeXBvdGhzaXMiLCJoeXBvaHRlc2lzIiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29tYmluYXRvck5vZGUiLCJDb21iaW5hdG9yIiwiY29tYmluYXRvciIsImNvbmNsdXNpb25Ob2RlIiwiQ29uY2x1c2lvbiIsImRlcml2YXRpb25Ob2RlIiwiRGVyaXZhdGlvbiIsInN0ZXBzT3JTdWJwcm9vZnMiLCJ0eXBlUHJlZml4Tm9kZSIsIlR5cGVQcmVmaXgiLCJ0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImVxdWl2YWxlbmNlTm9kZSIsIkVxdWl2YWxlbmNlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImVxdWl2YWxlbmNlIiwibWV0YXRoZW9yZW1Ob2RlIiwiTWV0YXRoZW9yZW0iLCJtZXRhdGhlb3JlbSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwibmVnYXRlZCIsImlzTmVnYXRlZCIsImRlZmluZWRBc3NlcnRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uTm9kZSIsIlByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJUZXJtU3Vic3RpdHV0aW9uIiwiZ2VuZXJhbENvbnRleHQiLCJ0YXJnZXRUZXJtIiwicmVwbGFjZW1lbnRUZXJtIiwidGVybVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsIkZyYW1lU3Vic3RpdHV0aW9uIiwidGFyZ2V0RnJhbWUiLCJyZXBsYWNlbWVudEZyYW1lIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnRzIiwic3VicHJvb2ZBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsIlNhdGlzZmllc0Fzc2VydGlvbiIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJQcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVlbmNlIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwiZ2V0VHlwZU5vZGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0VmFyaWFibGVOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwiTWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwiVHlwZVByZWZpeERlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsIkNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJTaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJzaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwidGFyZ2V0UmVmZXJlbmNlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJzdWJzdGl0dXRpb24iLCJ0YXJnZXRTdGF0ZW1lbnQiLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsInN0YXRlbWVudFN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsIkNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJnZXRQcm9vZk5vZGUiLCJsYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlcyIsInByZW1pc2VOb2RlcyIsImdldFByZW1pc2VOb2RlcyIsImdldEF4aW9tTm9kZSIsImdldExlbW1hTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlU3RyaW5nIiwiZnJvbVJlZmVyZW5jZVN0cmluZyIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwidGVybU5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJvY25zdHJ1Y3Rvck5vZGUiLCJnZXRUZXJtTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsImdldFRlcm1Ob2RlcyIsIm1ldGF2YXJhaWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidHlwZW1Ob2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldENvbmplY3R1cmVOb2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJnZXRFcXVhbGl0eU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJnZXRKdWRnZW1lbnROb2RlIiwic3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUiLCJpc1N0ZXBOb2RlIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJjb25jbHVzaW5vTm9kZSIsImh5cG90aGVzaXNOb2RlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJzdXBwb3NpdGlvbk5vZGVzIiwiZ2V0U3VwcG9zaXRpb25Ob2RlcyIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVydmlhdGlvbiIsIm1ldGF2YXJpYWJsZVN0cmluZyIsImdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUiLCJnZXRUeXBlQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlIiwiaXNTdWJwcm9vZk5vZGUiLCJwYXJhbWV0ZXJOb2RlcyIsImdldFBhcmFtZXRlck5vZGVzIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldExhYmVsTm9kZSIsImxhYmVsU3RyaW5nIiwiZnJvbUxhYmVsU3RyaW5nIiwiZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJ5cG90aGVzZXMiLCJzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiaXNSZXNvbHZlZCIsImdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsInR5cGVzTm9kZSIsImdldFR5cGVzTm9kZSIsInR5cGVzIiwiZ2V0VHlwZVByZWZpeE5vZGUiLCJnZXRDb21iaW5hdG9yTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwicmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRSZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFByb3BlcnR5UmVsYXRpb25Ob2RlIiwiZ2V0Q29uc3RydWN0b3JOb2RlIiwidGFyZ2V0UmVmZXJlbmNlTm9kZSIsImdldFRhcmdldFJlZmVyZW5jZU5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VTdHJpbmciLCJ0YXJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsImdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwibWFwIiwidHlwZU5vZGVzIiwiZ2V0VHlwZU5vZGVzIiwiaHlwb3RoZXNpcyIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFvZmdCQTtlQUFBQTs7UUFpekJBQztlQUFBQTs7UUF3MEJBQztlQUFBQTs7UUEzL0JBQztlQUFBQTs7UUE5OEJBQztlQUFBQTs7UUFvekJBQztlQUFBQTs7UUE3SkFDO2VBQUFBOztRQXNrQ0FDO2VBQUFBOztRQW44Q0FDO2VB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
|
|
1767
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlO1xuXG4gIGlmICh0eXBlTm9kZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gICAgdHlwZSA9IGJhc2VUeXBlOyAgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBub2RlID0gdHlwZU5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJlZml4TmFtZSA9IHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gbm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0eXBlU3RyaW5nID0gdHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSxcbiAgICAgICAgICBzdHJpbmcgPSB0eXBlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSdWxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSxcbiAgICAgICAgbm9kZSA9IHJ1bGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IHJ1bGVTdHJpbmcsICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBydWxlID0gbmV3IFJ1bGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHByb29mLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKTtcblxuICByZXR1cm4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXJyb3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXJyb3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgpO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gbGVtbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW1tYSA9IG5ldyBMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9vZiA9IG5ldyBQcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IGF4aW9tTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IFtdLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBheGlvbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2lzTm9kZXMgPSBzZWN0aW9uTm9kZS5nZXRIeXBvdGhlc2lzTm9kZXMoKSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCksXG4gICAgICAgIGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCBheGlvbSwgbGVtbWEsIHRoZW9yZW0sIGNvbmplY3R1cmUpLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Tm9kZS5nZXRQcm9wZXJ0eU5hbWUoKSxcbiAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IHByb3BlcnR5TmFtZTsgIC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5ID0gbmV3IFByb3BlcnR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lLCBub21pbmFsVHlwZU5hbWUpO1xuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbnMgPSBbXTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgaWRlbnRpZmllciwgcHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmcsICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBuZXcgRGVkdWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtcyk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG1ldGF2YXJpYWJsZSwgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBqdWRnZW1lbnQgPSBuZXcgSnVkZ2VtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBmcmFtZSwgYXNzdW1wdGlvbik7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYUZyb21NZXRhTGVtbWFOb2RlKG1ldGFMZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGFMZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zID0gbWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0RlZHVjdGlvbkFuZE1ldGFMZXZlbEFzc3VtcHRpb25zKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgbWV0YUxldmVsQXNzdW1wdGlvbnMpLFxuICAgICAgICBub2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGFMZW1tYSA9IG5ldyBNZXRhTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIG1ldGFMZXZlbEFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gbWV0YUxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUsIGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tSlNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSHlwb3Roc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGh5cG90aGVzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGh5cG9odGVzaXMgPSBuZXcgSHlwb3Roc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlcml2YXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeCA9IG5ldyBUeXBlUHJlZml4KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdXBwb3NpdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1aXZhbGVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1aXZhbGVuY2VOb2RlLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBzdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZzsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXF1aXZhbGVuY2UgPSBuZXcgRXF1aXZhbGVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHRlcm1zKTtcblxuICByZXR1cm4gZXF1aXZhbGVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdGhlb3JlbUZyb21NZXRhdGhlb3JlbU5vZGUobWV0YXRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGF0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbnMgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zRGVkdWN0aW9uQW5kTWV0YUxldmVsQXNzdW1wdGlvbnMobGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyksXG4gICAgICAgIG5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXRoZW9yZW0gPSBuZXcgTWV0YXRoZW9yZW0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIG1ldGFMZXZlbEFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gbWV0YXRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGFUeXBlID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lLCB0ZXJtLCB0eXBlLCBtZXRhVHlwZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YkRlcml2YXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YkRlcml2YXRpb24gPSBuZXcgU3ViRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gbmV3IFR5cGVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZUNhbGwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IG5ldyBQcm9jZWR1cmVDYWxsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBwYXJhbWV0ZXJzLCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwID0gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcE9yU3VicHJvb2YgPSAoc3RlcCB8fCBzdWJwcm9vZik7XG5cbiAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG5lZ2F0ZWQgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIGZyYW1lLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eVJlbGF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5UmVsYXRpb24gPSBuZXcgUHJvcGVydHlSZWxhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgcHJvcGVydHkpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbENvbnRleHRGcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZ2VuZXJhbENvbnRleHQsIHRhcmdldFRlcm0sIHJlcGxhY2VtZW50VGVybSk7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxDb250ZXh0RnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGdlbmVyYWxDb250ZXh0LCB0YXJnZXRGcmFtZSwgcmVwbGFjZW1lbnRGcmFtZSk7XG5cbiAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5QXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gbmV3IFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIGZyYW1lLCBuZWdhdGVkLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2F0aXNmaWVzQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBuZXcgU2F0aXNmaWVzQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVlbmNlID0gbmV3IFByb2NlZHVyZVJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKSxcbiAgICAgICAgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxldmVsQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gbmV3IE1ldGFMZXZlbEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gbmV3IFR5cGVQcmVmaXhEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZVByZWZpeCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb21iaW5hdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGNvbWJpbmF0b3IpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2ltcGxlVHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IG5ldyBTaW1wbGVUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gc2ltcGxlVHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxDb250ZXh0RnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IHRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbiA9IG5ldyBSZWZlcmVuY2VTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGdlbmVyYWxDb250ZXh0LCB0YXJnZXRSZWZlcmVuY2UsIHJlcGxhY2VtZW50UmVmZXJlbmNlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuXG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbENvbnRleHRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVzb2x2ZWQgPSByZXNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZ2VuZXJhbENvbnRleHQsIHJlc29sdmVkLCBzdWJzdGl0dXRpb24sIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbmV3IENvbnN0cnVjdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGxleFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbXBsZXhUeXBlRGVjbGFyYXRpb24gPSBuZXcgQ29tcGxleFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiBjb21wbGV4VHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9wZXJ0eU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHN0ZXBOb2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKTtcblxuICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVzID0gbnVsbDtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHByZWZpeE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbmNsdXNpb25Ob2RlID0gcnVsZU5vZGUuZ2V0Q29uY2x1c2lvbk5vZGUoKSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGhlb3JlbSA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRUaGVvcmVtTm9kZSgpO1xuXG4gIGlmICh0aGVvcmVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZXJpdmF0aW9uTm9kZSA9IHByb29mTm9kZS5nZXREZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBvY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBlcXVpdmFsZW5jZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmFpYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YXZhcmFpYmxlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlbU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBoeXBvdGhlc2lzTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc3VicHJvb2ZOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50OyAvLy9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViRGVyaXZhdGlvbk5vZGUgPSBzdWJwcm9vZk5vZGUuZ2V0U3ViRGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgc3ViRGVydmlhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdWJEZXJ2aWF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gbWV0YXZhcmlhYmxlU3RyaW5nLCAvLy9cbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0ZXBOb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3VicHJvb2ZPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLmlzU3VicHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUpIHtcbiAgICBjb25zdCBzdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRhcmdldFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRhcmdldFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRQcm9vZk5vZGUoKSxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbE5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiB5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tSlNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzaWduYXR1cmVOb2RlID0gc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21KU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhc2lzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZWZlcmVuY2VOb2RlID0gc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUodGFyZ2V0RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0RnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZU5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1Jlc29sdmVkKCk7XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSBudWxsO1xuXG4gIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmFsQ29udGV4dEZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IG51bGw7XG5cbiAgcmV0dXJuIGdlbmVyYWxDb250ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYWxDb250ZXh0RnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBudWxsO1xuXG4gIHJldHVybiBnZW5lcmFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChmcmFtZVN1YnN0aXR1dGlvbiB8fCB0ZXJtU3Vic3RpdHV0aW9uKTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhbENvbnRleHRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gbnVsbDtcblxuICByZXR1cm4gZ2VuZXJhbENvbnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmFsQ29udGV4dEZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBudWxsO1xuXG4gIHJldHVybiBnZW5lcmFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcodGFyZ2V0UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHRhcmdldFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSh0YXJnZXRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YUxldmVsQXNzdW1wdGlvbnMgPSBbXTtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCB0ZXJtcyA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7XG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGVzID0gdHlwZXNOb2RlLmdldFR5cGVOb2RlcygpLFxuICAgICAgICB0eXBlcyA9IHR5cGVOb2Rlcy5tYXAoKHR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiB0eXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxzID0gbGFiZWxOb2Rlcy5tYXAoKGxhYmVsTm9kZSkgPT4ge1xuICAgIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIGxhYmVsU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobGFiZWxOb2RlKSxcbiAgICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VzID0gcHJlbWlzZU5vZGVzLm1hcCgocHJlbWlzZU5vZGUpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlID0gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IGh5cG90aGVzaXNOb2Rlcy5tYXAoKGh5cG90aGVzZU5vZGUpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzID0gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gZGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gc3ViRGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJheGlvbUZyb21TZWN0aW9uTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21KdWRnZW1lbnROb2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dEZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dEZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhbENvbnRleHRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYWxDb250ZXh0RnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSIsImp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwibGVtbWFGcm9tTGVtbWFOb2RlIiwibGVtbWFGcm9tU2VjdGlvbk5vZGUiLCJtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25Gcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwibmFtZUZyb21Qcm9wZXJ0eU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21UeXBlUHJlZml4Tm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwibm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByZWZpeE5hbWVGcm9tVHlwZU5vZGUiLCJwcmVtaXNlRnJvbVByZW1pc2VOb2RlIiwicHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzIiwicHJlbWlzZXNGcm9tUnVsZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9vZkZyb21Qcm9vZk5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsInByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN0ZXBGcm9tU3RlcE5vZGUiLCJzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21NZXRhdmFyaWFibGVOb2RlIiwidGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsIlR5cGUiLCJlbGVtZW50cyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJsaW5lSW5kZXgiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RlcCIsInJ1bGVOb2RlIiwiUnVsZSIsInByb29mIiwibGFiZWxzIiwicHJlbWlzZXMiLCJjb25jbHVzaW9uIiwicnVsZVN0cmluZyIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwicnVsZSIsImxhYmVsTm9kZSIsIkxhYmVsIiwibWV0YXZhcmlhYmxlIiwibGFiZWwiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwibGVtbWFOb2RlIiwiTGVtbWEiLCJ0b3BMZXZlbEFzc3NlcnRpb25Ob2RlIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsInRvcExldmVsQXNzc2VydGlvblN0cmluZyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNlY3Rpb25Ob2RlIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwidGhlb3JlbSIsImNvbmplY3R1cmUiLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uIiwiU2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByb2NlZHVyZUNhbGwiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwicHJvcGVydHlOb2RlIiwiUHJvcGVydHkiLCJwcm9wZXJ0eU5hbWUiLCJnZXRQcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInByb3BlcnR5UmVsYXRpb25zIiwidmFyaWFibGUiLCJzdWJwcm9vZk5vZGUiLCJTdWJwcm9vZiIsInN1YkRlcml2YXRpb24iLCJzdWJwcm9vZlN0cmluZyIsInN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24iLCJzdWJwcm9vZiIsImVxdWFsaXR5Tm9kZSIsIkVxdWFsaXR5IiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJlcXVhbGl0eSIsImRlZHVjdGlvbk5vZGUiLCJEZWR1Y3Rpb24iLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50Iiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInRvcExldmVsTWV0YUFzc2VydGlvbiIsImp1ZGdlbWVudE5vZGUiLCJKdWRnZW1lbnQiLCJhc3N1bXB0aW9uIiwianVkZ2VtZW50IiwibWV0YUxlbW1hTm9kZSIsIk1ldGFMZW1tYSIsIm1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbnMiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyIsIm1ldGFMZW1tYSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJnZXROYW1lIiwiZ2V0SWRlbnRpZmllciIsInBhcmFtZXRlciIsImh5cG90aGVzZU5vZGUiLCJIeXBvdGhzaXMiLCJoeXBvaHRlc2lzIiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29tYmluYXRvck5vZGUiLCJDb21iaW5hdG9yIiwiY29tYmluYXRvciIsImNvbmNsdXNpb25Ob2RlIiwiQ29uY2x1c2lvbiIsImRlcml2YXRpb25Ob2RlIiwiRGVyaXZhdGlvbiIsInN0ZXBzT3JTdWJwcm9vZnMiLCJ0eXBlUHJlZml4Tm9kZSIsIlR5cGVQcmVmaXgiLCJ0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImVxdWl2YWxlbmNlTm9kZSIsIkVxdWl2YWxlbmNlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImVxdWl2YWxlbmNlIiwibWV0YXRoZW9yZW1Ob2RlIiwiTWV0YXRoZW9yZW0iLCJtZXRhdGhlb3JlbSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwibmVnYXRlZCIsImlzTmVnYXRlZCIsImRlZmluZWRBc3NlcnRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uTm9kZSIsIlByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJUZXJtU3Vic3RpdHV0aW9uIiwiZ2VuZXJhbENvbnRleHQiLCJ0YXJnZXRUZXJtIiwicmVwbGFjZW1lbnRUZXJtIiwidGVybVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsIkZyYW1lU3Vic3RpdHV0aW9uIiwidGFyZ2V0RnJhbWUiLCJyZXBsYWNlbWVudEZyYW1lIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnRzIiwic3VicHJvb2ZBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsIlNhdGlzZmllc0Fzc2VydGlvbiIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJQcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVlbmNlIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwiZ2V0VHlwZU5vZGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0VmFyaWFibGVOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwiTWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwiVHlwZVByZWZpeERlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsIkNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJTaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJzaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwidGFyZ2V0UmVmZXJlbmNlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJzdWJzdGl0dXRpb24iLCJ0YXJnZXRTdGF0ZW1lbnQiLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsInN0YXRlbWVudFN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsIkNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJnZXRQcm9vZk5vZGUiLCJsYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlcyIsInByZW1pc2VOb2RlcyIsImdldFByZW1pc2VOb2RlcyIsImdldEF4aW9tTm9kZSIsImdldExlbW1hTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlU3RyaW5nIiwiZnJvbVJlZmVyZW5jZVN0cmluZyIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwidGVybU5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJvY25zdHJ1Y3Rvck5vZGUiLCJnZXRUZXJtTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsImdldFRlcm1Ob2RlcyIsIm1ldGF2YXJhaWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidHlwZW1Ob2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldENvbmplY3R1cmVOb2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJnZXRFcXVhbGl0eU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJnZXRKdWRnZW1lbnROb2RlIiwic3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUiLCJpc1N0ZXBOb2RlIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJjb25jbHVzaW5vTm9kZSIsImh5cG90aGVzaXNOb2RlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJzdXBwb3NpdGlvbk5vZGVzIiwiZ2V0U3VwcG9zaXRpb25Ob2RlcyIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVydmlhdGlvbiIsIm1ldGF2YXJpYWJsZVN0cmluZyIsImdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUiLCJnZXRUeXBlQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlIiwiaXNTdWJwcm9vZk5vZGUiLCJwYXJhbWV0ZXJOb2RlcyIsImdldFBhcmFtZXRlck5vZGVzIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldExhYmVsTm9kZSIsImxhYmVsU3RyaW5nIiwiZnJvbUxhYmVsU3RyaW5nIiwiZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJ5cG90aGVzZXMiLCJzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiaXNSZXNvbHZlZCIsImdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsInR5cGVzTm9kZSIsImdldFR5cGVzTm9kZSIsInR5cGVzIiwiZ2V0VHlwZVByZWZpeE5vZGUiLCJnZXRDb21iaW5hdG9yTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwicmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRSZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFByb3BlcnR5UmVsYXRpb25Ob2RlIiwiZ2V0Q29uc3RydWN0b3JOb2RlIiwidGFyZ2V0UmVmZXJlbmNlTm9kZSIsImdldFRhcmdldFJlZmVyZW5jZU5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VTdHJpbmciLCJ0YXJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsImdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwibWFwIiwidHlwZU5vZGVzIiwiZ2V0VHlwZU5vZGVzIiwiaHlwb3RoZXNpcyIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFvZmdCQTtlQUFBQTs7UUFpekJBQztlQUFBQTs7UUF3MEJBQztlQUFBQTs7UUEzL0JBQztlQUFBQTs7UUE5OEJBQztlQUFBQTs7UUFvekJBQztlQUFBQTs7UUE3SkFDO2VBQUFBOztRQXNrQ0FDO2VBQUFBOztRQW44Q0FDO2VB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
|
package/package.json
CHANGED
package/src/context/bounded.js
CHANGED
package/src/utilities/element.js
CHANGED
|
@@ -1045,13 +1045,6 @@ export function nameFromParaneterNode(parameterNode, context) {
|
|
|
1045
1045
|
return name;
|
|
1046
1046
|
}
|
|
1047
1047
|
|
|
1048
|
-
export function nameFromTypePrefixNode(typePrefixNode, context) {
|
|
1049
|
-
const typePrefixName = typePrefixNode.getTypePrefixName(),
|
|
1050
|
-
name = typePrefixName; ///
|
|
1051
|
-
|
|
1052
|
-
return name;
|
|
1053
|
-
}
|
|
1054
|
-
|
|
1055
1048
|
export function superTypesFromTypeNode(typeNode, context) {
|
|
1056
1049
|
const superTypes = null;
|
|
1057
1050
|
|
|
@@ -1104,6 +1097,13 @@ export function termsFromSignatureNode(signatureNode, context) {
|
|
|
1104
1097
|
return terms;
|
|
1105
1098
|
}
|
|
1106
1099
|
|
|
1100
|
+
export function nameFromTypePrefixNode(typePrefixNode, context) {
|
|
1101
|
+
const typePrefixName = typePrefixNode.getTypePrefixName(),
|
|
1102
|
+
name = typePrefixName; ///
|
|
1103
|
+
|
|
1104
|
+
return name;
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
1107
|
export function provisionalFromTypeNode(typeNode, context) {
|
|
1108
1108
|
const provisional = null;
|
|
1109
1109
|
|
|
@@ -2060,6 +2060,12 @@ export function frameSubstitutionFromStatementSubstitutionNode(statementSubstitu
|
|
|
2060
2060
|
return frameSubstitution;
|
|
2061
2061
|
}
|
|
2062
2062
|
|
|
2063
|
+
export function metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context) {
|
|
2064
|
+
const metaLevelAssumptions = [];
|
|
2065
|
+
|
|
2066
|
+
return metaLevelAssumptions;
|
|
2067
|
+
}
|
|
2068
|
+
|
|
2063
2069
|
export function replacementReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context) {
|
|
2064
2070
|
const { Reference } = elements,
|
|
2065
2071
|
replacementReferenceNode = referenceSubstitutionNode.getReplacementReferenceNode(),
|
|
@@ -2076,12 +2082,6 @@ export function replacementStatementFromStatementSubstitutionNode(statementSubst
|
|
|
2076
2082
|
return replacementStatement;
|
|
2077
2083
|
}
|
|
2078
2084
|
|
|
2079
|
-
export function metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context) {
|
|
2080
|
-
const metaLevelAssumptions = [];
|
|
2081
|
-
|
|
2082
|
-
return metaLevelAssumptions;
|
|
2083
|
-
}
|
|
2084
|
-
|
|
2085
2085
|
export function termsFromTermNodes(termNodes, context) {
|
|
2086
2086
|
const terms = termNodes.map((termNode) => {
|
|
2087
2087
|
const term = termFromTermNode(termNode, context);
|