@sapui5/sap.fe.test 1.116.0 → 1.117.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/CollaborationClient.js +18 -3
- package/src/sap/fe/test/CollaborationClient.ts +33 -6
- package/src/sap/fe/test/FeMocks.js +2 -1
- package/src/sap/fe/test/FeMocks.ts +2 -0
- package/src/sap/fe/test/JestTemplatingHelper.js +33 -2
- package/src/sap/fe/test/JestTemplatingHelper.ts +39 -0
- package/src/sap/fe/test/UI5MockHelper.js +4 -1
- package/src/sap/fe/test/UI5MockHelper.ts +3 -0
- package/src/sap/fe/test/Utils.js +1 -2
- package/src/sap/fe/test/api/CollaborationAPI.js +36 -5
- package/src/sap/fe/test/api/CollaborationAPI.ts +44 -8
- package/src/sap/fe/test/builder/MdcTableBuilder.js +4 -0
- package/src/sap/fe/test/library-preload.js +95 -11
- package/src/sap/fe/test/library-preload.js.map +1 -1
- package/src/sap/fe/test/library.js +1 -1
- package/src/sap/fe/test/manifest.json +1 -1
package/package.json
CHANGED
package/src/sap/fe/test/.library
CHANGED
|
@@ -61,12 +61,27 @@ sap.ui.define(["sap/fe/core/controllerextensions/collaboration/CollaborationComm
|
|
|
61
61
|
},
|
|
62
62
|
iCheckDefaultUserRemovedLock: function (sPropertyPath) {
|
|
63
63
|
return OpaBuilder.create(this).check(function () {
|
|
64
|
-
|
|
64
|
+
// Check that we have received an UNLOCK without a CHANGE
|
|
65
|
+
return !CollaborationAPI.checkReceived({
|
|
66
|
+
userID: "DEFAULT_USER",
|
|
67
|
+
userAction: Activity.Change,
|
|
68
|
+
clientContent: sPropertyPath
|
|
69
|
+
}, false) && CollaborationAPI.checkReceived({
|
|
65
70
|
userID: "DEFAULT_USER",
|
|
66
71
|
userAction: Activity.Unlock,
|
|
67
72
|
clientContent: sPropertyPath
|
|
68
73
|
});
|
|
69
|
-
}).description(`Remote session received unlock
|
|
74
|
+
}).description(`Remote session received unlock without change notification for${sPropertyPath}`).execute();
|
|
75
|
+
},
|
|
76
|
+
iCheckValueIsLockedByDefaultUser: function (sPropertyPath) {
|
|
77
|
+
return OpaBuilder.create(this).check(function () {
|
|
78
|
+
return CollaborationAPI.checkLockedByOther(sPropertyPath);
|
|
79
|
+
}).description(`On remote session, property ${sPropertyPath} is currently locked by another user`).execute();
|
|
80
|
+
},
|
|
81
|
+
iCheckValueIsNotLockedByDefaultUser: function (sPropertyPath) {
|
|
82
|
+
return OpaBuilder.create(this).check(function () {
|
|
83
|
+
return !CollaborationAPI.checkLockedByOther(sPropertyPath);
|
|
84
|
+
}).description(`On remote session, property ${sPropertyPath} is not locked by another user`).execute();
|
|
70
85
|
},
|
|
71
86
|
iCheckDefaultUserLeftDraft: function () {
|
|
72
87
|
return OpaBuilder.create(this).check(function () {
|
|
@@ -98,4 +113,4 @@ sap.ui.define(["sap/fe/core/controllerextensions/collaboration/CollaborationComm
|
|
|
98
113
|
}
|
|
99
114
|
return CollaborationClient;
|
|
100
115
|
}, false);
|
|
101
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aW9uQ2xpZW50Iiwib1BhZ2VEZWZpbml0aW9uIiwic0FwcElkIiwiYXBwSWQiLCJzQ29tcG9uZW50SWQiLCJjb21wb25lbnRJZCIsInZpZXdJZCIsImFjdGlvbnMiLCJpRW50ZXJEcmFmdCIsInVzZXJJRCIsInVzZXJOYW1lIiwiT3BhQnVpbGRlciIsImNyZWF0ZSIsImhhc0lkIiwiZG8iLCJ2aWV3Iiwib0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIkNvbGxhYm9yYXRpb25BUEkiLCJlbnRlckRyYWZ0IiwiZGVzY3JpcHRpb24iLCJleGVjdXRlIiwiaUxlYXZlRHJhZnQiLCJsZWF2ZURyYWZ0IiwiaUxvY2tQcm9wZXJ0eUZvckVkaXRpb24iLCJzUHJvcGVydHlQYXRoIiwibG9ja0ZpZWxkIiwiaVVubG9ja1Byb3BlcnR5Rm9yRWRpdGlvbiIsInVubG9ja0ZpZWxkIiwiaVVwZGF0ZVByb3BlcnR5VmFsdWUiLCJ2YWx1ZSIsInVwZGF0ZVByb3BlcnR5VmFsdWUiLCJpRGlzY2FyZERyYWZ0IiwiZGlzY2FyZERyYWZ0IiwiaURlbGV0ZU9iamVjdCIsIm9iamVjdFBhdGgiLCJkZWxldGVPYmplY3QiLCJhc3NlcnRpb25zIiwiaUNoZWNrRGVmYXVsdFVzZXJDaGFuZ2VkVmFsdWUiLCJjaGVjayIsImNoZWNrUmVjZWl2ZWQiLCJ1c2VyQWN0aW9uIiwiQWN0aXZpdHkiLCJDaGFuZ2UiLCJjbGllbnRDb250ZW50IiwiaUNoZWNrRGVmYXVsdFVzZXJSZW1vdmVkTG9jayIsIlVubG9jayIsImlDaGVja0RlZmF1bHRVc2VyTGVmdERyYWZ0IiwiTGVhdmUiLCJpQ2hlY2tEZWZhdWx0VXNlckVudGVyZWREcmFmdCIsIkpvaW4iLCJpQ2hlY2tEZWZhdWx0VXNlckNyZWF0ZWREb2N1bWVudCIsInNEb2N1bWVudFBhdGgiLCJDcmVhdGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbGxhYm9yYXRpb25DbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbkFQSSBmcm9tIFwic2FwL2ZlL3Rlc3QvYXBpL0NvbGxhYm9yYXRpb25BUElcIjtcbmltcG9ydCB0eXBlIE9wYTUgZnJvbSBcInNhcC91aS90ZXN0L09wYTVcIjtcbmltcG9ydCBPcGFCdWlsZGVyIGZyb20gXCJzYXAvdWkvdGVzdC9PcGFCdWlsZGVyXCI7XG5cbmZ1bmN0aW9uIENvbGxhYm9yYXRpb25DbGllbnQob1BhZ2VEZWZpbml0aW9uOiB7IGFwcElkOiBzdHJpbmc7IGNvbXBvbmVudElkOiBzdHJpbmcgfSkge1xuXHRjb25zdCBzQXBwSWQgPSBvUGFnZURlZmluaXRpb24uYXBwSWQsXG5cdFx0c0NvbXBvbmVudElkID0gb1BhZ2VEZWZpbml0aW9uLmNvbXBvbmVudElkLFxuXHRcdHZpZXdJZCA9IGAke3NBcHBJZH06OiR7c0NvbXBvbmVudElkfWA7XG5cblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiB7XG5cdFx0XHRpRW50ZXJEcmFmdDogZnVuY3Rpb24gKHVzZXJJRDogc3RyaW5nLCB1c2VyTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBPcGFCdWlsZGVyLmNyZWF0ZSh0aGlzIGFzIGFueSBhcyBPcGE1KVxuXHRcdFx0XHRcdC5oYXNJZCh2aWV3SWQpXG5cdFx0XHRcdFx0LmRvKGZ1bmN0aW9uICh2aWV3OiBhbnkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRcdFx0Q29sbGFib3JhdGlvbkFQSS5lbnRlckRyYWZ0KG9Db250ZXh0LCB1c2VySUQsIHVzZXJOYW1lKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC52aWV3SWQoXCJcIilcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oXCJSZW1vdGUgc2Vzc2lvbiBlbnRlcmluZyBkcmFmdFwiKVxuXHRcdFx0XHRcdC5leGVjdXRlKCk7XG5cdFx0XHR9LFxuXG5cdFx0XHRpTGVhdmVEcmFmdDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gT3BhQnVpbGRlci5jcmVhdGUodGhpcyBhcyBhbnkgYXMgT3BhNSlcblx0XHRcdFx0XHQuZG8oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Q29sbGFib3JhdGlvbkFQSS5sZWF2ZURyYWZ0KCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oXCJSZW1vdGUgc2Vzc2lvbiBsZWF2aW5nIGRyYWZ0XCIpXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH0sXG5cblx0XHRcdGlMb2NrUHJvcGVydHlGb3JFZGl0aW9uOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBPcGFCdWlsZGVyLmNyZWF0ZSh0aGlzIGFzIGFueSBhcyBPcGE1KVxuXHRcdFx0XHRcdC5kbyhmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRDb2xsYWJvcmF0aW9uQVBJLmxvY2tGaWVsZChzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5kZXNjcmlwdGlvbihgUmVtb3RlIHNlc3Npb24gbG9ja2luZyBwcm9wZXJ0eSAke3NQcm9wZXJ0eVBhdGh9YClcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fSxcblxuXHRcdFx0aVVubG9ja1Byb3BlcnR5Rm9yRWRpdGlvbjogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gT3BhQnVpbGRlci5jcmVhdGUodGhpcyBhcyBhbnkgYXMgT3BhNSlcblx0XHRcdFx0XHQuZG8oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Q29sbGFib3JhdGlvbkFQSS51bmxvY2tGaWVsZCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uKFwiUmVtb3RlIHNlc3Npb24gdW5sb2NraW5nIHByb3BlcnR5IFwiKVxuXHRcdFx0XHRcdC5leGVjdXRlKCk7XG5cdFx0XHR9LFxuXG5cdFx0XHRpVXBkYXRlUHJvcGVydHlWYWx1ZTogZnVuY3Rpb24gKHNQcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gT3BhQnVpbGRlci5jcmVhdGUodGhpcyBhcyBhbnkgYXMgT3BhNSlcblx0XHRcdFx0XHQuZG8oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Q29sbGFib3JhdGlvbkFQSS51cGRhdGVQcm9wZXJ0eVZhbHVlKHNQcm9wZXJ0eVBhdGgsIHZhbHVlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5kZXNjcmlwdGlvbihgUmVtb3RlIHNlc3Npb24gdXBkYXRpbmcgcHJvcGVydHkgJHtzUHJvcGVydHlQYXRofSB3aXRoICR7dmFsdWV9YClcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fSxcblxuXHRcdFx0aURpc2NhcmREcmFmdDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gT3BhQnVpbGRlci5jcmVhdGUodGhpcyBhcyBhbnkgYXMgT3BhNSlcblx0XHRcdFx0XHQuZG8oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Q29sbGFib3JhdGlvbkFQSS5kaXNjYXJkRHJhZnQoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5kZXNjcmlwdGlvbihcIlJlbW90ZSBzZXNzaW9uIGRpc2NhcmRpbmcgZHJhZnRcIilcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fSxcblxuXHRcdFx0aURlbGV0ZU9iamVjdDogZnVuY3Rpb24gKG9iamVjdFBhdGg6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gT3BhQnVpbGRlci5jcmVhdGUodGhpcyBhcyBhbnkgYXMgT3BhNSlcblx0XHRcdFx0XHQuZG8oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Q29sbGFib3JhdGlvbkFQSS5kZWxldGVPYmplY3Qob2JqZWN0UGF0aCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oYFJlbW90ZSBzZXNzaW9uIGRlbGV0aW5nIG9iamVjdCAke29iamVjdFBhdGh9YClcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0YXNzZXJ0aW9uczoge1xuXHRcdFx0aUNoZWNrRGVmYXVsdFVzZXJDaGFuZ2VkVmFsdWU6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmNoZWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBDb2xsYWJvcmF0aW9uQVBJLmNoZWNrUmVjZWl2ZWQoe1xuXHRcdFx0XHRcdFx0XHR1c2VySUQ6IFwiREVGQVVMVF9VU0VSXCIsXG5cdFx0XHRcdFx0XHRcdHVzZXJBY3Rpb246IEFjdGl2aXR5LkNoYW5nZSxcblx0XHRcdFx0XHRcdFx0Y2xpZW50Q29udGVudDogc1Byb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oYFJlbW90ZSBzZXNzaW9uIHJlY2VpdmVkIGNoYW5nZSBub3RpZmljYXRpb24gZm9yJHtzUHJvcGVydHlQYXRofSBjaGFuZ2VkYClcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fSxcblx0XHRcdGlDaGVja0RlZmF1bHRVc2VyUmVtb3ZlZExvY2s6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmNoZWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBDb2xsYWJvcmF0aW9uQVBJLmNoZWNrUmVjZWl2ZWQoe1xuXHRcdFx0XHRcdFx0XHR1c2VySUQ6IFwiREVGQVVMVF9VU0VSXCIsXG5cdFx0XHRcdFx0XHRcdHVzZXJBY3Rpb246IEFjdGl2aXR5LlVubG9jayxcblx0XHRcdFx0XHRcdFx0Y2xpZW50Q29udGVudDogc1Byb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oYFJlbW90ZSBzZXNzaW9uIHJlY2VpdmVkIHVubG9jayAgbm90aWZpY2F0aW9uIGZvciR7c1Byb3BlcnR5UGF0aH1gKVxuXHRcdFx0XHRcdC5leGVjdXRlKCk7XG5cdFx0XHR9LFxuXHRcdFx0aUNoZWNrRGVmYXVsdFVzZXJMZWZ0RHJhZnQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmNoZWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBDb2xsYWJvcmF0aW9uQVBJLmNoZWNrUmVjZWl2ZWQoeyB1c2VySUQ6IFwiREVGQVVMVF9VU0VSXCIsIHVzZXJBY3Rpb246IEFjdGl2aXR5LkxlYXZlIH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uKFwiUmVtb3RlIHNlc3Npb24gcmVjZWl2ZWQgbm90aWZpY2F0aW9uIG9uIGRlZmF1bHQgdXNlciBsZWF2aW5nIHRoZSBkcmFmdCBzZXNzaW9uXCIpXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH0sXG5cblx0XHRcdGlDaGVja0RlZmF1bHRVc2VyRW50ZXJlZERyYWZ0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBPcGFCdWlsZGVyLmNyZWF0ZSh0aGlzIGFzIGFueSBhcyBPcGE1KVxuXHRcdFx0XHRcdC5jaGVjayhmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gQ29sbGFib3JhdGlvbkFQSS5jaGVja1JlY2VpdmVkKHsgdXNlcklEOiBcIkRFRkFVTFRfVVNFUlwiLCB1c2VyQWN0aW9uOiBBY3Rpdml0eS5Kb2luIH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uKFwiUmVtb3RlIHNlc3Npb24gcmVjZWl2ZWQgbm90aWZpY2F0aW9uIG9uIGRlZmF1bHQgdXNlciBlbnRlcmluZyB0aGUgZHJhZnQgc2Vzc2lvblwiKVxuXHRcdFx0XHRcdC5leGVjdXRlKCk7XG5cdFx0XHR9LFxuXG5cdFx0XHRpQ2hlY2tEZWZhdWx0VXNlckNyZWF0ZWREb2N1bWVudDogZnVuY3Rpb24gKHNEb2N1bWVudFBhdGg/OiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmNoZWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBDb2xsYWJvcmF0aW9uQVBJLmNoZWNrUmVjZWl2ZWQoe1xuXHRcdFx0XHRcdFx0XHR1c2VySUQ6IFwiREVGQVVMVF9VU0VSXCIsXG5cdFx0XHRcdFx0XHRcdHVzZXJBY3Rpb246IEFjdGl2aXR5LkNyZWF0ZSxcblx0XHRcdFx0XHRcdFx0Y2xpZW50Q29udGVudDogc0RvY3VtZW50UGF0aFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oXG5cdFx0XHRcdFx0XHRzRG9jdW1lbnRQYXRoXG5cdFx0XHRcdFx0XHRcdD8gYFJlbW90ZSBzZXNzaW9uIHJlY2VpdmVkIGNyZWF0ZSBub3RpZmljYXRpb24gZm9yICR7c0RvY3VtZW50UGF0aH1gXG5cdFx0XHRcdFx0XHRcdDogXCJSZW1vdGUgc2Vzc2lvbiByZWNlaXZlZCBjcmVhdGUgbm90aWZpY2F0aW9uXCJcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbGxhYm9yYXRpb25DbGllbnQ7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7O0VBS0EsU0FBU0EsbUJBQW1CLENBQUNDLGVB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
|
|
116
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aW9uQ2xpZW50Iiwib1BhZ2VEZWZpbml0aW9uIiwic0FwcElkIiwiYXBwSWQiLCJzQ29tcG9uZW50SWQiLCJjb21wb25lbnRJZCIsInZpZXdJZCIsImFjdGlvbnMiLCJpRW50ZXJEcmFmdCIsInVzZXJJRCIsInVzZXJOYW1lIiwiT3BhQnVpbGRlciIsImNyZWF0ZSIsImhhc0lkIiwiZG8iLCJ2aWV3Iiwib0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIkNvbGxhYm9yYXRpb25BUEkiLCJlbnRlckRyYWZ0IiwiZGVzY3JpcHRpb24iLCJleGVjdXRlIiwiaUxlYXZlRHJhZnQiLCJsZWF2ZURyYWZ0IiwiaUxvY2tQcm9wZXJ0eUZvckVkaXRpb24iLCJzUHJvcGVydHlQYXRoIiwibG9ja0ZpZWxkIiwiaVVubG9ja1Byb3BlcnR5Rm9yRWRpdGlvbiIsInVubG9ja0ZpZWxkIiwiaVVwZGF0ZVByb3BlcnR5VmFsdWUiLCJ2YWx1ZSIsInVwZGF0ZVByb3BlcnR5VmFsdWUiLCJpRGlzY2FyZERyYWZ0IiwiZGlzY2FyZERyYWZ0IiwiaURlbGV0ZU9iamVjdCIsIm9iamVjdFBhdGgiLCJkZWxldGVPYmplY3QiLCJhc3NlcnRpb25zIiwiaUNoZWNrRGVmYXVsdFVzZXJDaGFuZ2VkVmFsdWUiLCJjaGVjayIsImNoZWNrUmVjZWl2ZWQiLCJ1c2VyQWN0aW9uIiwiQWN0aXZpdHkiLCJDaGFuZ2UiLCJjbGllbnRDb250ZW50IiwiaUNoZWNrRGVmYXVsdFVzZXJSZW1vdmVkTG9jayIsIlVubG9jayIsImlDaGVja1ZhbHVlSXNMb2NrZWRCeURlZmF1bHRVc2VyIiwiY2hlY2tMb2NrZWRCeU90aGVyIiwiaUNoZWNrVmFsdWVJc05vdExvY2tlZEJ5RGVmYXVsdFVzZXIiLCJpQ2hlY2tEZWZhdWx0VXNlckxlZnREcmFmdCIsIkxlYXZlIiwiaUNoZWNrRGVmYXVsdFVzZXJFbnRlcmVkRHJhZnQiLCJKb2luIiwiaUNoZWNrRGVmYXVsdFVzZXJDcmVhdGVkRG9jdW1lbnQiLCJzRG9jdW1lbnRQYXRoIiwiQ3JlYXRlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb2xsYWJvcmF0aW9uQ2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25BUEkgZnJvbSBcInNhcC9mZS90ZXN0L2FwaS9Db2xsYWJvcmF0aW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBPcGE1IGZyb20gXCJzYXAvdWkvdGVzdC9PcGE1XCI7XG5pbXBvcnQgT3BhQnVpbGRlciBmcm9tIFwic2FwL3VpL3Rlc3QvT3BhQnVpbGRlclwiO1xuXG5mdW5jdGlvbiBDb2xsYWJvcmF0aW9uQ2xpZW50KG9QYWdlRGVmaW5pdGlvbjogeyBhcHBJZDogc3RyaW5nOyBjb21wb25lbnRJZDogc3RyaW5nIH0pIHtcblx0Y29uc3Qgc0FwcElkID0gb1BhZ2VEZWZpbml0aW9uLmFwcElkLFxuXHRcdHNDb21wb25lbnRJZCA9IG9QYWdlRGVmaW5pdGlvbi5jb21wb25lbnRJZCxcblx0XHR2aWV3SWQgPSBgJHtzQXBwSWR9Ojoke3NDb21wb25lbnRJZH1gO1xuXG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczoge1xuXHRcdFx0aUVudGVyRHJhZnQ6IGZ1bmN0aW9uICh1c2VySUQ6IHN0cmluZywgdXNlck5hbWU6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gT3BhQnVpbGRlci5jcmVhdGUodGhpcyBhcyBhbnkgYXMgT3BhNSlcblx0XHRcdFx0XHQuaGFzSWQodmlld0lkKVxuXHRcdFx0XHRcdC5kbyhmdW5jdGlvbiAodmlldzogYW55KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0XHRcdENvbGxhYm9yYXRpb25BUEkuZW50ZXJEcmFmdChvQ29udGV4dCwgdXNlcklELCB1c2VyTmFtZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQudmlld0lkKFwiXCIpXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uKFwiUmVtb3RlIHNlc3Npb24gZW50ZXJpbmcgZHJhZnRcIilcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fSxcblxuXHRcdFx0aUxlYXZlRHJhZnQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmRvKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdENvbGxhYm9yYXRpb25BUEkubGVhdmVEcmFmdCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uKFwiUmVtb3RlIHNlc3Npb24gbGVhdmluZyBkcmFmdFwiKVxuXHRcdFx0XHRcdC5leGVjdXRlKCk7XG5cdFx0XHR9LFxuXG5cdFx0XHRpTG9ja1Byb3BlcnR5Rm9yRWRpdGlvbjogZnVuY3Rpb24gKHNQcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gT3BhQnVpbGRlci5jcmVhdGUodGhpcyBhcyBhbnkgYXMgT3BhNSlcblx0XHRcdFx0XHQuZG8oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Q29sbGFib3JhdGlvbkFQSS5sb2NrRmllbGQoc1Byb3BlcnR5UGF0aCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oYFJlbW90ZSBzZXNzaW9uIGxvY2tpbmcgcHJvcGVydHkgJHtzUHJvcGVydHlQYXRofWApXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH0sXG5cblx0XHRcdGlVbmxvY2tQcm9wZXJ0eUZvckVkaXRpb246IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmRvKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdENvbGxhYm9yYXRpb25BUEkudW5sb2NrRmllbGQoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5kZXNjcmlwdGlvbihcIlJlbW90ZSBzZXNzaW9uIHVubG9ja2luZyBwcm9wZXJ0eSBcIilcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fSxcblxuXHRcdFx0aVVwZGF0ZVByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmRvKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdENvbGxhYm9yYXRpb25BUEkudXBkYXRlUHJvcGVydHlWYWx1ZShzUHJvcGVydHlQYXRoLCB2YWx1ZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oYFJlbW90ZSBzZXNzaW9uIHVwZGF0aW5nIHByb3BlcnR5ICR7c1Byb3BlcnR5UGF0aH0gd2l0aCAke3ZhbHVlfWApXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH0sXG5cblx0XHRcdGlEaXNjYXJkRHJhZnQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmRvKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdENvbGxhYm9yYXRpb25BUEkuZGlzY2FyZERyYWZ0KCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oXCJSZW1vdGUgc2Vzc2lvbiBkaXNjYXJkaW5nIGRyYWZ0XCIpXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH0sXG5cblx0XHRcdGlEZWxldGVPYmplY3Q6IGZ1bmN0aW9uIChvYmplY3RQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmRvKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdENvbGxhYm9yYXRpb25BUEkuZGVsZXRlT2JqZWN0KG9iamVjdFBhdGgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uKGBSZW1vdGUgc2Vzc2lvbiBkZWxldGluZyBvYmplY3QgJHtvYmplY3RQYXRofWApXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGFzc2VydGlvbnM6IHtcblx0XHRcdGlDaGVja0RlZmF1bHRVc2VyQ2hhbmdlZFZhbHVlOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBPcGFCdWlsZGVyLmNyZWF0ZSh0aGlzIGFzIGFueSBhcyBPcGE1KVxuXHRcdFx0XHRcdC5jaGVjayhmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gQ29sbGFib3JhdGlvbkFQSS5jaGVja1JlY2VpdmVkKHtcblx0XHRcdFx0XHRcdFx0dXNlcklEOiBcIkRFRkFVTFRfVVNFUlwiLFxuXHRcdFx0XHRcdFx0XHR1c2VyQWN0aW9uOiBBY3Rpdml0eS5DaGFuZ2UsXG5cdFx0XHRcdFx0XHRcdGNsaWVudENvbnRlbnQ6IHNQcm9wZXJ0eVBhdGhcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uKGBSZW1vdGUgc2Vzc2lvbiByZWNlaXZlZCBjaGFuZ2Ugbm90aWZpY2F0aW9uIGZvciR7c1Byb3BlcnR5UGF0aH0gY2hhbmdlZGApXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH0sXG5cdFx0XHRpQ2hlY2tEZWZhdWx0VXNlclJlbW92ZWRMb2NrOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBPcGFCdWlsZGVyLmNyZWF0ZSh0aGlzIGFzIGFueSBhcyBPcGE1KVxuXHRcdFx0XHRcdC5jaGVjayhmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHQvLyBDaGVjayB0aGF0IHdlIGhhdmUgcmVjZWl2ZWQgYW4gVU5MT0NLIHdpdGhvdXQgYSBDSEFOR0Vcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdCFDb2xsYWJvcmF0aW9uQVBJLmNoZWNrUmVjZWl2ZWQoXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dXNlcklEOiBcIkRFRkFVTFRfVVNFUlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dXNlckFjdGlvbjogQWN0aXZpdHkuQ2hhbmdlLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xpZW50Q29udGVudDogc1Byb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdFx0KSAmJlxuXHRcdFx0XHRcdFx0XHRDb2xsYWJvcmF0aW9uQVBJLmNoZWNrUmVjZWl2ZWQoe1xuXHRcdFx0XHRcdFx0XHRcdHVzZXJJRDogXCJERUZBVUxUX1VTRVJcIixcblx0XHRcdFx0XHRcdFx0XHR1c2VyQWN0aW9uOiBBY3Rpdml0eS5VbmxvY2ssXG5cdFx0XHRcdFx0XHRcdFx0Y2xpZW50Q29udGVudDogc1Byb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5kZXNjcmlwdGlvbihgUmVtb3RlIHNlc3Npb24gcmVjZWl2ZWQgdW5sb2NrIHdpdGhvdXQgY2hhbmdlIG5vdGlmaWNhdGlvbiBmb3Ike3NQcm9wZXJ0eVBhdGh9YClcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fSxcblx0XHRcdGlDaGVja1ZhbHVlSXNMb2NrZWRCeURlZmF1bHRVc2VyOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBPcGFCdWlsZGVyLmNyZWF0ZSh0aGlzIGFzIHVua25vd24gYXMgT3BhNSlcblx0XHRcdFx0XHQuY2hlY2soZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIENvbGxhYm9yYXRpb25BUEkuY2hlY2tMb2NrZWRCeU90aGVyKHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uKGBPbiByZW1vdGUgc2Vzc2lvbiwgcHJvcGVydHkgJHtzUHJvcGVydHlQYXRofSBpcyBjdXJyZW50bHkgbG9ja2VkIGJ5IGFub3RoZXIgdXNlcmApXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH0sXG5cdFx0XHRpQ2hlY2tWYWx1ZUlzTm90TG9ja2VkQnlEZWZhdWx0VXNlcjogZnVuY3Rpb24gKHNQcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gT3BhQnVpbGRlci5jcmVhdGUodGhpcyBhcyB1bmtub3duIGFzIE9wYTUpXG5cdFx0XHRcdFx0LmNoZWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiAhQ29sbGFib3JhdGlvbkFQSS5jaGVja0xvY2tlZEJ5T3RoZXIoc1Byb3BlcnR5UGF0aCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oYE9uIHJlbW90ZSBzZXNzaW9uLCBwcm9wZXJ0eSAke3NQcm9wZXJ0eVBhdGh9IGlzIG5vdCBsb2NrZWQgYnkgYW5vdGhlciB1c2VyYClcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fSxcblx0XHRcdGlDaGVja0RlZmF1bHRVc2VyTGVmdERyYWZ0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBPcGFCdWlsZGVyLmNyZWF0ZSh0aGlzIGFzIGFueSBhcyBPcGE1KVxuXHRcdFx0XHRcdC5jaGVjayhmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gQ29sbGFib3JhdGlvbkFQSS5jaGVja1JlY2VpdmVkKHsgdXNlcklEOiBcIkRFRkFVTFRfVVNFUlwiLCB1c2VyQWN0aW9uOiBBY3Rpdml0eS5MZWF2ZSB9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5kZXNjcmlwdGlvbihcIlJlbW90ZSBzZXNzaW9uIHJlY2VpdmVkIG5vdGlmaWNhdGlvbiBvbiBkZWZhdWx0IHVzZXIgbGVhdmluZyB0aGUgZHJhZnQgc2Vzc2lvblwiKVxuXHRcdFx0XHRcdC5leGVjdXRlKCk7XG5cdFx0XHR9LFxuXG5cdFx0XHRpQ2hlY2tEZWZhdWx0VXNlckVudGVyZWREcmFmdDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gT3BhQnVpbGRlci5jcmVhdGUodGhpcyBhcyBhbnkgYXMgT3BhNSlcblx0XHRcdFx0XHQuY2hlY2soZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIENvbGxhYm9yYXRpb25BUEkuY2hlY2tSZWNlaXZlZCh7IHVzZXJJRDogXCJERUZBVUxUX1VTRVJcIiwgdXNlckFjdGlvbjogQWN0aXZpdHkuSm9pbiB9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5kZXNjcmlwdGlvbihcIlJlbW90ZSBzZXNzaW9uIHJlY2VpdmVkIG5vdGlmaWNhdGlvbiBvbiBkZWZhdWx0IHVzZXIgZW50ZXJpbmcgdGhlIGRyYWZ0IHNlc3Npb25cIilcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fSxcblxuXHRcdFx0aUNoZWNrRGVmYXVsdFVzZXJDcmVhdGVkRG9jdW1lbnQ6IGZ1bmN0aW9uIChzRG9jdW1lbnRQYXRoPzogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBPcGFCdWlsZGVyLmNyZWF0ZSh0aGlzIGFzIGFueSBhcyBPcGE1KVxuXHRcdFx0XHRcdC5jaGVjayhmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gQ29sbGFib3JhdGlvbkFQSS5jaGVja1JlY2VpdmVkKHtcblx0XHRcdFx0XHRcdFx0dXNlcklEOiBcIkRFRkFVTFRfVVNFUlwiLFxuXHRcdFx0XHRcdFx0XHR1c2VyQWN0aW9uOiBBY3Rpdml0eS5DcmVhdGUsXG5cdFx0XHRcdFx0XHRcdGNsaWVudENvbnRlbnQ6IHNEb2N1bWVudFBhdGhcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uKFxuXHRcdFx0XHRcdFx0c0RvY3VtZW50UGF0aFxuXHRcdFx0XHRcdFx0XHQ/IGBSZW1vdGUgc2Vzc2lvbiByZWNlaXZlZCBjcmVhdGUgbm90aWZpY2F0aW9uIGZvciAke3NEb2N1bWVudFBhdGh9YFxuXHRcdFx0XHRcdFx0XHQ6IFwiUmVtb3RlIHNlc3Npb24gcmVjZWl2ZWQgY3JlYXRlIG5vdGlmaWNhdGlvblwiXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC5leGVjdXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xsYWJvcmF0aW9uQ2xpZW50O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7OztFQUtBLFNBQVNBLG1CQUFtQixDQUFDQyxlQUF1RCxFQUFFO0lBQ3JGLE1BQU1DLE1BQU0sR0FBR0QsZUFBZSxDQUFDRSxLQUFLO01BQ25DQyxZQUFZLEdBQUdILGVBQWUsQ0FBQ0ksV0FBVztNQUMxQ0MsTUFBTSxHQUFJLEdBQUVKLE1BQU8sS0FBSUUsWUFBYSxFQUFDO0lBRXRDLE9BQU87TUFDTkcsT0FBTyxFQUFFO1FBQ1JDLFdBQVcsRUFBRSxVQUFVQyxNQUFjLEVBQUVDLFFBQWdCLEVBQUU7VUFDeEQsT0FBT0MsVUFBVSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFnQixDQUMzQ0MsS0FBSyxDQUFDUCxNQUFNLENBQUMsQ0FDYlEsRUFBRSxDQUFDLFVBQVVDLElBQVMsRUFBRTtZQUN4QixNQUFNQyxRQUFRLEdBQUdELElBQUksQ0FBQ0UsaUJBQWlCLEVBQUU7WUFDekNDLGdCQUFnQixDQUFDQyxVQUFVLENBQUNILFFBQVEsRUFBRVAsTUFBTSxFQUFFQyxRQUFRLENBQUM7VUFDeEQsQ0FBQyxDQUFDLENBQ0RKLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FDVmMsV0FBVyxDQUFDLCtCQUErQixDQUFDLENBQzVDQyxPQUFPLEVBQUU7UUFDWixDQUFDO1FBRURDLFdBQVcsRUFBRSxZ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
|
|
@@ -92,13 +92,40 @@ function CollaborationClient(oPageDefinition: { appId: string; componentId: stri
|
|
|
92
92
|
iCheckDefaultUserRemovedLock: function (sPropertyPath: string) {
|
|
93
93
|
return OpaBuilder.create(this as any as Opa5)
|
|
94
94
|
.check(function () {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
// Check that we have received an UNLOCK without a CHANGE
|
|
96
|
+
return (
|
|
97
|
+
!CollaborationAPI.checkReceived(
|
|
98
|
+
{
|
|
99
|
+
userID: "DEFAULT_USER",
|
|
100
|
+
userAction: Activity.Change,
|
|
101
|
+
clientContent: sPropertyPath
|
|
102
|
+
},
|
|
103
|
+
false
|
|
104
|
+
) &&
|
|
105
|
+
CollaborationAPI.checkReceived({
|
|
106
|
+
userID: "DEFAULT_USER",
|
|
107
|
+
userAction: Activity.Unlock,
|
|
108
|
+
clientContent: sPropertyPath
|
|
109
|
+
})
|
|
110
|
+
);
|
|
111
|
+
})
|
|
112
|
+
.description(`Remote session received unlock without change notification for${sPropertyPath}`)
|
|
113
|
+
.execute();
|
|
114
|
+
},
|
|
115
|
+
iCheckValueIsLockedByDefaultUser: function (sPropertyPath: string) {
|
|
116
|
+
return OpaBuilder.create(this as unknown as Opa5)
|
|
117
|
+
.check(function () {
|
|
118
|
+
return CollaborationAPI.checkLockedByOther(sPropertyPath);
|
|
119
|
+
})
|
|
120
|
+
.description(`On remote session, property ${sPropertyPath} is currently locked by another user`)
|
|
121
|
+
.execute();
|
|
122
|
+
},
|
|
123
|
+
iCheckValueIsNotLockedByDefaultUser: function (sPropertyPath: string) {
|
|
124
|
+
return OpaBuilder.create(this as unknown as Opa5)
|
|
125
|
+
.check(function () {
|
|
126
|
+
return !CollaborationAPI.checkLockedByOther(sPropertyPath);
|
|
100
127
|
})
|
|
101
|
-
.description(`
|
|
128
|
+
.description(`On remote session, property ${sPropertyPath} is not locked by another user`)
|
|
102
129
|
.execute();
|
|
103
130
|
},
|
|
104
131
|
iCheckDefaultUserLeftDraft: function () {
|
|
@@ -10,6 +10,7 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
|
|
|
10
10
|
function mockListReportController() {
|
|
11
11
|
// manually add ListReportController.controller functions since I am unable to import the prototype
|
|
12
12
|
const listReport = {
|
|
13
|
+
_getApplyAutomaticallyOnVariant: jest.fn(),
|
|
13
14
|
_getFilterBarControl: jest.fn(),
|
|
14
15
|
_getControls: jest.fn(),
|
|
15
16
|
_isFilterBarHidden: jest.fn(),
|
|
@@ -51,4 +52,4 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
|
|
|
51
52
|
_exports.mockFilterBar = mockFilterBar;
|
|
52
53
|
return _exports;
|
|
53
54
|
}, false);
|
|
54
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2NrTGlzdFJlcG9ydENvbnRyb2xsZXIiLCJsaXN0UmVwb3J0IiwiX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCIsImplc3QiLCJmbiIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiX2dldENvbnRyb2xzIiwiX2lzRmlsdGVyQmFySGlkZGVuIiwiX2lzTXVsdGlNb2RlIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJfaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRUYWJsZSIsImdldEV4dGVuc2lvbkFQSSIsImdldENoYXJ0Q29udHJvbCIsImVkaXRGbG93IiwibW9jayIsIkVkaXRGbG93IiwiT2JqZWN0IiwiYXNzaWduIiwiUGFnZUNvbnRyb2xsZXIiLCJtb2NrT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJvYmplY3RQYWdlIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJtb2NrQ29udGV4dEZvckV4dGVuc2lvbiIsImV4dGVuc2lvbiIsImNvbnRyb2xsZXIiLCJiYXNlIiwidmlldyIsImdldFZpZXciLCJtb2NrZWRCYXNlIiwibW9ja0ZpbHRlckJhciIsImZpbHRlckJhciIsIkZpbHRlckJhciIsIndhaXRGb3JJbml0aWFsaXphdGlvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmVNb2Nrcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1vY2tlZEluc3RhbmNlLCBVSTVJbnN0YW5jZVR5cGUsIFdpdGhNb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCB7IG1vY2sgfSBmcm9tIFwiQHNhcC11eC9qZXN0LW1vY2stdWk1L2Rpc3QvZ2VuZXJpY1wiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5cbmludGVyZmFjZSBDb21tb25Db250cm9sbGVyVHlwZSB7XG5cdGdldEV4dGVuc2lvbkFQSTogYW55O1xuXHRlZGl0RmxvdzogV2l0aE1vY2s8RWRpdEZsb3c+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSB7XG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sOiBhbnk7XG5cdF9nZXRDb250cm9sczogYW55O1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW46IGFueTtcblx0X2lzTXVsdGlNb2RlOiBhbnk7XG5cdF9nZXRNdWx0aU1vZGVDb250cm9sOiBhbnk7XG5cdF9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbDogYW55O1xuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9uczogYW55O1xuXHRfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2g6IGFueTtcblx0X2dldFRhYmxlOiBhbnk7XG5cdGdldENoYXJ0Q29udHJvbDogYW55O1xuXHRfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50OiBCb29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFBhZ2VDb250cm9sbGVyVHlwZSB7XG5cdGdldFN0aWNreUVkaXRNb2RlOiBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrTGlzdFJlcG9ydENvbnRyb2xsZXIoKTogV2l0aE1vY2s8Q29udHJvbGxlciAmIFBhZ2VDb250cm9sbGVyICYgTGlzdFJlcG9ydENvbnRyb2xsZXJUeXBlICYgQ29tbW9uQ29udHJvbGxlclR5cGU+IHtcblx0Ly8gbWFudWFsbHkgYWRkIExpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIgZnVuY3Rpb25zIHNpbmNlIEkgYW0gdW5hYmxlIHRvIGltcG9ydCB0aGUgcHJvdG90eXBlXG5cdGNvbnN0IGxpc3RSZXBvcnQ6IE1vY2tlZEluc3RhbmNlPExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlPiA9IHtcblx0XHRfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50OiBqZXN0LmZuKCksXG5cdFx0X2dldEZpbHRlckJhckNvbnRyb2w6IGplc3QuZm4oKSxcblx0XHRfZ2V0Q29udHJvbHM6IGplc3QuZm4oKSxcblx0XHRfaXNGaWx0ZXJCYXJIaWRkZW46IGplc3QuZm4oKSxcblx0XHRfaXNNdWx0aU1vZGU6IGplc3QuZm4oKSxcblx0XHRfZ2V0TXVsdGlNb2RlQ29udHJvbDogamVzdC5mbigpLFxuXHRcdF9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbDogamVzdC5mbigpLFxuXHRcdF9oYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBqZXN0LmZuKCksXG5cdFx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoOiBqZXN0LmZuKCksXG5cdFx0X2dldFRhYmxlOiBqZXN0LmZuKCksXG5cdFx0Z2V0RXh0ZW5zaW9uQVBJOiBqZXN0LmZuKCksXG5cdFx0Z2V0Q2hhcnRDb250cm9sOiBqZXN0LmZuKCksXG5cdFx0ZWRpdEZsb3c6IG1vY2soRWRpdEZsb3cpIGFzIGFueVxuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihtb2NrKFBhZ2VDb250cm9sbGVyKSBhcyBhbnksIGxpc3RSZXBvcnQpIGFzIFdpdGhNb2NrPFxuXHRcdENvbnRyb2xsZXIgJiBQYWdlQ29udHJvbGxlciAmIExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlXG5cdD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrT2JqZWN0UGFnZUNvbnRyb2xsZXIoKTogV2l0aE1vY2s8Q29udHJvbGxlciAmIFBhZ2VDb250cm9sbGVyICYgT2JqZWN0UGFnZUNvbnRyb2xsZXJUeXBlICYgQ29tbW9uQ29udHJvbGxlclR5cGU+IHtcblx0Ly8gbWFudWFsbHkgYWRkIExpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIgZnVuY3Rpb25zIHNpbmNlIEkgYW0gdW5hYmxlIHRvIGltcG9ydCB0aGUgcHJvdG90eXBlXG5cdGNvbnN0IG9iamVjdFBhZ2U6IE1vY2tlZEluc3RhbmNlPE9iamVjdFBhZ2VDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlPiA9IHtcblx0XHRnZXRTdGlja3lFZGl0TW9kZTogamVzdC5mbigpLFxuXHRcdGdldEV4dGVuc2lvbkFQSTogamVzdC5mbigpLFxuXHRcdGVkaXRGbG93OiBtb2NrKEVkaXRGbG93KSBhcyBhbnlcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obW9jayhQYWdlQ29udHJvbGxlcikgYXMgYW55LCBvYmplY3RQYWdlKSBhcyBXaXRoTW9jazxcblx0XHRDb250cm9sbGVyICYgUGFnZUNvbnRyb2xsZXIgJiBPYmplY3RQYWdlQ29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZVxuXHQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja0NvbnRleHRGb3JFeHRlbnNpb248RVhUIGV4dGVuZHMgb2JqZWN0LCBCQVNFIGV4dGVuZHMgb2JqZWN0Pihcblx0ZXh0ZW5zaW9uOiBFWFQsXG5cdGNvbnRyb2xsZXI6IFdpdGhNb2NrPENvbnRyb2xsZXI+LFxuXHRiYXNlPzogQkFTRVxuKTogV2l0aE1vY2s8RVhUICYgVUk1SW5zdGFuY2VUeXBlPEJBU0U+PiB7XG5cdGNvbnN0IHZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKTtcblx0KGV4dGVuc2lvbiBhcyBhbnkpLmdldFZpZXcgPSAoKSA9PiB2aWV3O1xuXHRjb25zdCBtb2NrZWRCYXNlID0gbW9jayhiYXNlIHx8IHt9KTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obW9ja2VkQmFzZSwgZXh0ZW5zaW9uKSBhcyBXaXRoTW9jazxFWFQgJiBVSTVJbnN0YW5jZVR5cGU8QkFTRT4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja0ZpbHRlckJhcigpOiBXaXRoTW9jazxcblx0RmlsdGVyQmFyICYgeyB3YWl0Rm9ySW5pdGlhbGl6YXRpb246IEZ1bmN0aW9uOyBfYlNlYXJjaFRyaWdnZXJlZDogQm9vbGVhbjsgX2dldENvbmRpdGlvbk1vZGVsOiBGdW5jdGlvbiB9XG4+IHtcblx0Y29uc3QgZmlsdGVyQmFyID0gbW9jayhGaWx0ZXJCYXIpIGFzIFdpdGhNb2NrPFxuXHRcdEZpbHRlckJhciAmIHsgd2FpdEZvckluaXRpYWxpemF0aW9uOiBGdW5jdGlvbjsgX2JTZWFyY2hUcmlnZ2VyZWQ6IEJvb2xlYW47IF9nZXRDb25kaXRpb25Nb2RlbDogRnVuY3Rpb24gfVxuXHQ+O1xuXHRmaWx0ZXJCYXIubW9jay53YWl0Rm9ySW5pdGlhbGl6YXRpb24gPSBqZXN0LmZuKCk7XG5cdHJldHVybiBmaWx0ZXJCYXI7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQThCTyxTQUFTQSx3QkFBd0IsR0FBNEY7SUFDbkk7SUFDQSxNQUFNQyxVQUEyRSxHQUFHO01BQ25GQywrQkFBK0IsRUFBRUMsSUFBSSxDQUFDQyxFQUFFLEVBQUU7TUFDMUNDLG9CQUFvQixFQUFFRixJQUFJLENBQUNDLEVBQUUsRUFBRTtNQUMvQkUsWUFBWSxFQUFFSCxJQUFJLENBQUNDLEVBQUUsRUFBRTtNQUN2Qkcsa0JBQWtCLEVBQUVKLElBQUksQ0FBQ0MsRUFBRSxFQUFFO01BQzdCSSxZQUFZLEVBQUVMLElBQUksQ0FBQ0MsRUFBRSxFQUFFO01BQ3ZCSyxvQkFBb0IsRUFBRU4sSUFBSSxDQUFDQyxFQUFFLEVBQUU7TUFDL0JNLDJCQUEyQixFQUFFUCxJQUFJLENBQUNDLEVBQUUsRUFBRTtNQUN0Q08sdUJBQXVCLEVBQUVSLElBQUksQ0FBQ0MsRUFBRSxFQUFFO01BQ2xDUSx3QkFBd0IsRUFBRVQsSUFBSSxDQUFDQyxFQUFFLEVBQUU7TUFDbkNTLFNBQVMsRUFBRVYsSUFBSSxDQUFDQyxFQUFFLEVBQUU7TUFDcEJVLGVBQWUsRUFBRVgsSUFBSSxDQUFDQyxFQUFFLEVBQUU7TUFDMUJXLGVBQWUsRUFBRVosSUFBSSxDQUFDQyxFQUFFLEVBQUU7TUFDMUJZLFFBQVEsRUFBRUMsSUFBSSxDQUFDQyxRQUFRO0lBQ3hCLENBQUM7SUFDRCxPQUFPQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDSSxjQUFjLENBQUMsRUFBU3BCLFVBQVUsQ0FBQztFQUc5RDtFQUFDO0VBRU0sU0FBU3FCLHdCQUF3QixHQUE0RjtJQUNuSTtJQUNBLE1BQU1DLFVBQTJFLEdBQUc7TUFDbkZDLGlCQUFpQixFQUFFckIsSUFBSSxDQUFDQyxFQUFFLEVBQUU7TUFDNUJVLGVBQWUsRUFBRVgsSUFBSSxDQUFDQyxFQUFFLEVBQUU7TUFDMUJZLFFBQVEsRUFBRUMsSUFBSSxDQUFDQyxRQUFRO0lBQ3hCLENBQUM7SUFDRCxPQUFPQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDSSxjQUFjLENBQUMsRUFBU0UsVUFBVSxDQUFDO0VBRzlEO0VBQUM7RUFFTSxTQUFTRSx1QkFBdUIsQ0FDdENDLFNBQWMsRUFDZEMsVUFBZ0MsRUFDaENDLElBQVcsRUFDNkI7SUFDeEMsTUFBTUMsSUFBSSxHQUFHRixVQUFVLENBQUNHLE9BQU8sRUFBRTtJQUNoQ0osU0FBUyxDQUFTSSxPQUFPLEdBQUcsTUFBTUQsSUFBSTtJQUN2QyxNQUFNRSxVQUFVLEdBQUdkLElBQUksQ0FBQ1csSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25DLE9BQU9ULE1BQU0sQ0FBQ0MsTUFBTSxDQUFDVyxVQUFVLEVBQUVMLFNBQVMsQ0FBQztFQUM1QztFQUFDO0VBRU0sU0FBU00sYUFBYSxHQUUzQjtJQUNELE1BQU1DLFNBQVMsR0FBR2hCLElBQUksQ0FBQ2lCLFNBQVMsQ0FFL0I7SUFDREQsU0FBUyxDQUFDaEIsSUFBSSxDQUFDa0IscUJBQXFCLEdBQUdoQyxJQUFJLENBQUNDLEVBQUUsRUFBRTtJQUNoRCxPQUFPNkIsU0FBUztFQUNqQjtFQUFDO0VBQUE7QUFBQSJ9
|
|
@@ -21,6 +21,7 @@ export interface ListReportControllerType {
|
|
|
21
21
|
_shouldAutoTriggerSearch: any;
|
|
22
22
|
_getTable: any;
|
|
23
23
|
getChartControl: any;
|
|
24
|
+
_getApplyAutomaticallyOnVariant: Boolean;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
export interface ObjectPageControllerType {
|
|
@@ -30,6 +31,7 @@ export interface ObjectPageControllerType {
|
|
|
30
31
|
export function mockListReportController(): WithMock<Controller & PageController & ListReportControllerType & CommonControllerType> {
|
|
31
32
|
// manually add ListReportController.controller functions since I am unable to import the prototype
|
|
32
33
|
const listReport: MockedInstance<ListReportControllerType & CommonControllerType> = {
|
|
34
|
+
_getApplyAutomaticallyOnVariant: jest.fn(),
|
|
33
35
|
_getFilterBarControl: jest.fn(),
|
|
34
36
|
_getControls: jest.fn(),
|
|
35
37
|
_isFilterBarHidden: jest.fn(),
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["@sap/cds-compiler", "fs", "@prettier/plugin-xml", "path", "prettier", "sap/base/Log", "sap/base/util/LoaderExtensions", "sap/base/util/merge", "sap/fe/core/converters/ConverterContext", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/core/TemplateModel", "sap/fe/test/UI5MockHelper", "sap/ui/base/BindingParser", "sap/ui/base/ManagedObjectMetadata", "sap/ui/core/Component", "sap/ui/core/InvisibleText", "sap/ui/core/util/serializer/Serializer", "sap/ui/core/util/XMLPreprocessor", "sap/ui/fl/apply/_internal/flexState/FlexState", "sap/ui/fl/apply/_internal/preprocessors/XmlPreprocessor", "sap/ui/fl/initial/_internal/Storage", "sap/ui/fl/Utils", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "sap/ui/model/odata/v4/ODataMetaModel", "xpath", "./JestFlexibilityHelper"], function (compiler, fs, plugin, path, prettier, Log, LoaderExtensions, merge, ConverterContext, SideEffectsFactory, TemplateModel, UI5MockHelper, BindingParser, ManagedObjectMetadata, Component, InvisibleText, Serializer, XMLPreprocessor, FlexState, XmlPreprocessor, AppStorage, Utils, JSONModel, _MetadataRequestor, ODataMetaModel, xpath, JestFlexibilityHelper) {
|
|
5
|
+
sap.ui.define(["@sap/cds-compiler", "fs", "@prettier/plugin-xml", "path", "prettier", "sap/base/Log", "sap/base/util/LoaderExtensions", "sap/base/util/merge", "sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor", "sap/fe/core/converters/ConverterContext", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/core/TemplateModel", "sap/fe/test/UI5MockHelper", "sap/ui/base/BindingParser", "sap/ui/base/ManagedObject", "sap/ui/base/ManagedObjectMetadata", "sap/ui/core/Component", "sap/ui/core/InvisibleText", "sap/ui/core/util/serializer/Serializer", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/XMLTemplateProcessor", "sap/ui/fl/apply/_internal/flexState/FlexState", "sap/ui/fl/apply/_internal/preprocessors/XmlPreprocessor", "sap/ui/fl/initial/_internal/Storage", "sap/ui/fl/Utils", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "sap/ui/model/odata/v4/ODataMetaModel", "xpath", "./JestFlexibilityHelper"], function (compiler, fs, plugin, path, prettier, Log, LoaderExtensions, merge, BuildingBlockTemplateProcessor, ConverterContext, SideEffectsFactory, TemplateModel, UI5MockHelper, BindingParser, ManagedObject, ManagedObjectMetadata, Component, InvisibleText, Serializer, XMLPreprocessor, XMLTemplateProcessor, FlexState, XmlPreprocessor, AppStorage, Utils, JSONModel, _MetadataRequestor, ODataMetaModel, xpath, JestFlexibilityHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var createFlexibilityChangesObject = JestFlexibilityHelper.createFlexibilityChangesObject;
|
|
10
10
|
var createMockResourceModel = UI5MockHelper.createMockResourceModel;
|
|
11
|
+
var parseXMLString = BuildingBlockTemplateProcessor.parseXMLString;
|
|
11
12
|
var format = prettier.format;
|
|
12
13
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
13
14
|
const formatXml = require("xml-formatter");
|
|
@@ -623,6 +624,36 @@ sap.ui.define(["@sap/cds-compiler", "fs", "@prettier/plugin-xml", "path", "prett
|
|
|
623
624
|
};
|
|
624
625
|
}
|
|
625
626
|
_exports.createAwaiter = createAwaiter;
|
|
627
|
+
function renderBuildingBlockWithModels(buildingBlock, models) {
|
|
628
|
+
return ManagedObject.runWithPreprocessors(() => {
|
|
629
|
+
return buildingBlock.getContent();
|
|
630
|
+
}, {
|
|
631
|
+
settings: function (controlSettings) {
|
|
632
|
+
controlSettings.models = models;
|
|
633
|
+
return controlSettings;
|
|
634
|
+
}
|
|
635
|
+
});
|
|
636
|
+
}
|
|
637
|
+
_exports.renderBuildingBlockWithModels = renderBuildingBlockWithModels;
|
|
638
|
+
function registerMockFragments() {
|
|
639
|
+
for (var _len2 = arguments.length, fragments = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
640
|
+
fragments[_key2] = arguments[_key2];
|
|
641
|
+
}
|
|
642
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
643
|
+
const originalLoadTemplate = XMLTemplateProcessor.loadTemplatePromise;
|
|
644
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
645
|
+
const loadTemplateStub = jest.spyOn(XMLTemplateProcessor, "loadTemplatePromise");
|
|
646
|
+
loadTemplateStub.mockImplementation((templateName, extension) => {
|
|
647
|
+
for (const fragment of fragments) {
|
|
648
|
+
if (fragment.name === templateName) {
|
|
649
|
+
return parseXMLString(fragment.content)[0];
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
return originalLoadTemplate(templateName, extension);
|
|
653
|
+
});
|
|
654
|
+
return loadTemplateStub;
|
|
655
|
+
}
|
|
656
|
+
_exports.registerMockFragments = registerMockFragments;
|
|
626
657
|
return _exports;
|
|
627
658
|
}, false);
|
|
628
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRYbWwiLCJyZXF1aXJlIiwiTG9nIiwic2V0TGV2ZWwiLCJqZXN0Iiwic2V0VGltZW91dCIsIm5hbWVTcGFjZU1hcCIsIm1hY3JvcyIsIm1hY3JvIiwibWFjcm9GaWVsZCIsIm1hY3JvZGF0YSIsImxvZyIsInVuaXR0ZXN0IiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJtZGNhdCIsIm1kY0ZpZWxkIiwibWRjVGFibGUiLCJ1IiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJfZ2V0VGVtcGxhdGVkU2VsZWN0b3IiLCJ4bWxkb20iLCJzZWxlY3RvciIsInJvb3RQYXRoIiwibm9kZU5hbWUiLCJzdGFydHNXaXRoIiwiX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MiLCJzTWV0YWRhdGFVcmwiLCJtQmluZGluZ0NvbnRleHRzIiwibU1vZGVscyIsImZha2VTaWRlRWZmZWN0U2VydmljZSIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJoYXNPd25Qcm9wZXJ0eSIsIk9iamVjdCIsImFzc2lnbiIsImNvbnZlcnRlckNvbnRleHQiLCJUZW1wbGF0ZU1vZGVsIiwia2V5cyIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsInNldHRpbmdzIiwibW9kZWxzIiwibWV0YU1vZGVsIiwiYmluZGluZ0NvbnRleHRzIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZm4iLCJnZXREaWFnbm9zdGljcyIsInVuZGVmaW5lZCIsIm1vY2tSZXR1cm5WYWx1ZSIsInNLZXkiLCJleHBlY3QiLCJnZXRPYmplY3QiLCJ0b0JlRGVmaW5lZCIsIm9Nb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiX3JlbW92ZUNvbW1lbnRGcm9tWG1sIiwieG1sIiwiZmlsdGVyIiwibm9kZSIsInR5cGUiLCJfbG9hZFJlc291cmNlVmlldyIsInZpZXdOYW1lIiwibmFtZSIsInJlcGxhY2UiLCJ2aWV3IiwiTG9hZGVyRXh0ZW5zaW9ucyIsImxvYWRSZXNvdXJjZSIsImRvY3VtZW50RWxlbWVudCIsInJ1blhQYXRoUXVlcnkiLCJleHRlbmQiLCJ0b0hhdmVDb250cm9sIiwibm9kZXMiLCJtZXNzYWdlIiwib3V0cHV0WG1sIiwic2VyaWFsaXplWE1MIiwicGFzcyIsImxlbmd0aCIsInRvTm90SGF2ZUNvbnRyb2wiLCJ0b0hhdmVUZW1wbGF0aW5nRXJyb3JzIiwieG1sVGV4dCIsImJhc2U2NEVudHJpZXMiLCJtYXRjaCIsImVycm9yTWVzc2FnZXMiLCJtYXAiLCJhdG9iIiwic2xpY2UiLCJqb2luIiwiZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCIsInhtbFN0cmluZyIsIkFycmF5IiwiaXNBcnJheSIsInhtbEZvcm1hdHRlZCIsImZvcm1hdFhNTCIsImdldENvbnRyb2xBdHRyaWJ1dGUiLCJjb250cm9sU2VsZWN0b3IiLCJhdHRyaWJ1dGVOYW1lIiwieG1sRG9tIiwic2VyaWFsaXplciIsIndpbmRvdyIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImZvcm1hdCIsInBhcnNlciIsInhtbFdoaXRlc3BhY2VTZW5zaXRpdml0eSIsInBsdWdpbnMiLCJwbHVnaW4iLCJjb21waWxlQ0RTIiwiY2RzVXJsIiwib3B0aW9ucyIsImNkc1N0cmluZyIsImZzIiwicmVhZEZpbGVTeW5jIiwiZWRteENvbnRlbnQiLCJjZHMyZWRteCIsImRpciIsInBhdGgiLCJyZXNvbHZlIiwiYWxsT3B0aW9ucyIsImVudHJpZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiZWRteEZpbGVOYW1lIiwicmVkdWNlIiwiZmlsZW5hbWUiLCJvcHRpb25LZXkiLCJvcHRpb25WYWx1ZSIsInRvU3RyaW5nIiwiYmFzZW5hbWUiLCJlZG14RmlsZVBhdGgiLCJta2RpclN5bmMiLCJyZWN1cnNpdmUiLCJ3cml0ZUZpbGVTeW5jIiwiY2RzIiwic2VydmljZSIsInNvdXJjZXMiLCJpbmNsdWRlcyIsImNzbiIsImNvbXBpbGVyIiwiY29tcGlsZVNvdXJjZXMiLCJlZG14T3B0aW9ucyIsIm9kYXRhRm9yZWlnbktleXMiLCJvZGF0YUZvcm1hdCIsIm9kYXRhQ29udGFpbm1lbnQiLCJlZG14IiwidG8iLCJFcnJvciIsImdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UiLCJvU2VydmljZUNvbnRleHQiLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJvSmVzdFNpZGVFZmZlY3RzU2VydmljZSIsImdldEludGVyZmFjZSIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImdldEZha2VEaWFnbm9zdGljcyIsImlzc3VlcyIsImFkZElzc3VlIiwiaXNzdWVDYXRlZ29yeSIsImlzc3VlU2V2ZXJpdHkiLCJkZXRhaWxzIiwicHVzaCIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwiY29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFNldHRpbmdzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0cyIsImVzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIm1ldGFNb2RlbENhY2hlIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJwcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJjb250ZXh0TG9jYXRpb24iLCJldmFsdWF0ZUJpbmRpbmciLCJiaW5kaW5nU3RyaW5nIiwiYmluZGluZ0VsZW1lbnQiLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsImFyZ3MiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbnRlbnQiLCJtb2RlbCIsImdldFRleHQiLCJURVNUVklFV0lEIiwiYXBwbHlGbGV4Q2hhbmdlcyIsImZsZXhDaGFuZ2VzIiwicmVzdWx0WE1MIiwicXVlcnlTZWxlY3RvckFsbCIsImlkIiwiY2hhbmdlcyIsImNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdCIsImFwcElkIiwib01hbmlmZXN0IiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwib0FwcENvbXBvbmVudCIsImdldENvbXBvbmVudERhdGEiLCJnZXRNYW5pZmVzdE9iamVjdCIsImdldEVudHJ5IiwiZ2V0TG9jYWxJZCIsInNJZCIsInNweU9uIiwiQXBwU3RvcmFnZSIsIlByb21pc2UiLCJDb21wb25lbnQiLCJVdGlscyIsIkZsZXhTdGF0ZSIsImluaXRpYWxpemUiLCJjb21wb25lbnRJZCIsIlhtbFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJjaGFuZ2VzQXBwbGllZCIsImdldENoYW5nZXNGcm9tWE1MIiwidG9CZSIsInZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyIsImZsYXRNYXAiLCJlIiwiYXR0cmlidXRlcyIsImF0dHIiLCJnZXRUZW1wbGF0aW5nUmVzdWx0IiwieG1sSW5wdXQiLCJjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCIsInRlbXBsYXRlZFhtbCIsIkRPTVBhcnNlciIsInhtbERvYyIsInBhcnNlRnJvbVN0cmluZyIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIlhNTFByZXByb2Nlc3NvciIsImZpcnN0RWxlbWVudENoaWxkIiwiZ2V0VGVtcGxhdGVkWE1MIiwidGVtcGxhdGVkWE1MIiwic2VyaWFsaWVkWE1MIiwibm90IiwicHJvY2Vzc1ZpZXciLCJvVmlld0RvY3VtZW50Iiwib1ByZXByb2Nlc3NlZFZpZXciLCJhc0VsZW1lbnQiLCJhc1N0cmluZyIsIm91dGVySFRNTCIsInByb2Nlc3NGcmFnbWVudCIsInRlc3REYXRhIiwiaW5wdXRYbWwiLCJpbnB1dERvYyIsImpzb25Nb2RlbCIsInNldERhdGEiLCJyZXN1bHREb2MiLCJmcmFnbWVudHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImZyYWdtZW50IiwiaW5uZXJIVE1MIiwieG1sUmVzdWx0IiwiY2hpbGRyZW4iLCJzZXJpYWxpemVDb250cm9sIiwiY29udHJvbFRvU2VyaWFsaXplIiwidGFiQ291bnQiLCJnZXRUYWIiLCJ0b0FkZCIsInRhYiIsImkiLCJzZXJpYWxpemVEZWxlZ2F0ZSIsInN0YXJ0Iiwic0FnZ3JlZ2F0aW9uTmFtZSIsImNvbnRyb2xEZXRhaWwiLCJnZXRQYXJlbnQiLCJpbmRleEluUGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJpbmRleE9mIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZW5kIiwibWlkZGxlIiwiZ2V0SWQiLCJNYW5hZ2VkT2JqZWN0TWV0YWRhdGEiLCJpc0dlbmVyYXRlZElkIiwib0NvbnRyb2xLZXkiLCJtUHJvcGVydGllcyIsIm1CaW5kaW5nSW5mb3MiLCJiaW5kaW5nRGV0YWlsIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1Bc3NvY2lhdGlvbnMiLCJtRXZlbnRSZWdpc3RyeSIsInN0YXJ0QWdncmVnYXRpb24iLCJzTmFtZSIsIm91dCIsImVuZEFnZ3JlZ2F0aW9uIiwiY29udHJvbFRvUmVuZGVyIiwiU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsImNyZWF0ZUF3YWl0ZXIiLCJmblJlc29sdmUiLCJteVByb21pc2UiLCJwcm9taXNlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJKZXN0VGVtcGxhdGluZ0hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCAqIGFzIHBsdWdpbiBmcm9tIFwiQHByZXR0aWVyL3BsdWdpbi14bWxcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB0eXBlIHsgT3B0aW9ucyB9IGZyb20gXCJwcmV0dGllclwiO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBMb2FkZXJFeHRlbnNpb25zIGZyb20gXCJzYXAvYmFzZS91dGlsL0xvYWRlckV4dGVuc2lvbnNcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncywgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL3Rlc3QvVUk1TW9ja0hlbHBlclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0TWV0YWRhdGFcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3NlcmlhbGl6ZXIvU2VyaWFsaXplclwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBGbGV4U3RhdGUgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvZmxleFN0YXRlL0ZsZXhTdGF0ZVwiO1xuaW1wb3J0IFhtbFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9wcmVwcm9jZXNzb3JzL1htbFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEFwcFN0b3JhZ2UgZnJvbSBcInNhcC91aS9mbC9pbml0aWFsL19pbnRlcm5hbC9TdG9yYWdlXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC91aS9mbC9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01ldGFNb2RlbFwiO1xuaW1wb3J0IF9NZXRhZGF0YVJlcXVlc3RvciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L2xpYi9fTWV0YWRhdGFSZXF1ZXN0b3JcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdCB9IGZyb20gXCIuL0plc3RGbGV4aWJpbGl0eUhlbHBlclwiO1xuXG50eXBlIFByZVByb2Nlc3NvclNldHRpbmdzVHlwZSA9IHtcblx0bW9kZWxzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB8IE9EYXRhTWV0YU1vZGVsO1xuXHR9O1xuXHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRbbmFtZTogc3RyaW5nXTogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0fTtcbn07XG5cbnR5cGUgSmVzdFRlbXBsYXRlZFZpZXcgPSB7XG5cdGFzRWxlbWVudDogRWxlbWVudCB8IHVuZGVmaW5lZDtcblx0YXNTdHJpbmc6IHN0cmluZztcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBmb3JtYXRYbWwgPSByZXF1aXJlKFwieG1sLWZvcm1hdHRlclwiKTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwID0ge1xuXHRtYWNyb3M6IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRtYWNybzogXCJzYXAuZmUubWFjcm9zXCIsXG5cdG1hY3JvRmllbGQ6IFwic2FwLmZlLm1hY3Jvcy5maWVsZFwiLFxuXHRtYWNyb2RhdGE6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRsb2c6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHR1bml0dGVzdDogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9wcmVwcm9jZXNzb3JleHRlbnNpb24vc2FwLmZlLnVuaXR0ZXN0aW5nLzFcIixcblx0Y29udHJvbDogXCJzYXAuZmUuY29yZS5jb250cm9sc1wiLFxuXHRjb250cm9sczogXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzXCIsXG5cdGNvcmU6IFwic2FwLnVpLmNvcmVcIixcblx0ZHQ6IFwic2FwLnVpLmR0XCIsXG5cdG06IFwic2FwLm1cIixcblx0ZjogXCJzYXAudWkubGF5b3V0LmZvcm1cIixcblx0Zmw6IFwic2FwLnVpLmZsXCIsXG5cdGludGVybmFsTWFjcm86IFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbFwiLFxuXHRtZGM6IFwic2FwLnVpLm1kY1wiLFxuXHRtZGNhdDogXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXJcIixcblx0bWRjRmllbGQ6IFwic2FwLnVpLm1kYy5maWVsZFwiLFxuXHRtZGNUYWJsZTogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdHU6IFwic2FwLnVpLnVuaWZpZWRcIixcblx0bWFjcm9NaWNyb0NoYXJ0OiBcInNhcC5mZS5tYWNyb3MubWljcm9jaGFydFwiLFxuXHRtaWNyb0NoYXJ0OiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdG1hY3JvVGFibGU6IFwic2FwLmZlLm1hY3Jvcy50YWJsZVwiXG59O1xuY29uc3Qgc2VsZWN0ID0geHBhdGgudXNlTmFtZXNwYWNlcyhuYW1lU3BhY2VNYXApO1xuXG5jb25zdCBkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlID0geyBjb21wdXRlRmllbGRHcm91cElkczogKCkgPT4gW10gfTtcblxuZnVuY3Rpb24gX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbTogTm9kZSwgc2VsZWN0b3I6IHN0cmluZyk6IHN0cmluZyB7XG5cdC8qKlxuXHQgKiBpZiBhIHJvb3QgZWxlbWVudCBoYXMgYmVlbiBhZGRlZCBkdXJpbmcgdGhlIHRlbXBsYXRpbmcgYnkgb3VyIEplc3QgVGVtcGxhdGluZyBtZXRob2RzXG5cdCAqIHRoZSByb290IGVsZW1lbnQgaXMgYWRkZWQgdG8gdGhlIHNlbGVjdG9yIHBhdGguXG5cdCAqL1xuXHRjb25zdCByb290UGF0aCA9IFwiL3Jvb3RcIjtcblx0cmV0dXJuIGAke3htbGRvbS5ub2RlTmFtZSA9PT0gXCJyb290XCIgJiYgIXNlbGVjdG9yLnN0YXJ0c1dpdGgocm9vdFBhdGgpID8gcm9vdFBhdGggOiBcIlwifSR7c2VsZWN0b3J9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MoXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbik6IFByb21pc2U8UHJlUHJvY2Vzc29yU2V0dGluZ3NUeXBlPiB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblxuXHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cdGlmICghbU1vZGVscy5oYXNPd25Qcm9wZXJ0eShcImNvbnZlcnRlckNvbnRleHRcIikpIHtcblx0XHRtTW9kZWxzID0gT2JqZWN0LmFzc2lnbihtTW9kZWxzLCB7IGNvbnZlcnRlckNvbnRleHQ6IG5ldyBUZW1wbGF0ZU1vZGVsKHt9LCBvTWV0YU1vZGVsKSB9KTtcblx0fVxuXG5cdE9iamVjdC5rZXlzKG1Nb2RlbHMpLmZvckVhY2goZnVuY3Rpb24gKHNNb2RlbE5hbWUpIHtcblx0XHRpZiAobU1vZGVsc1tzTW9kZWxOYW1lXSAmJiBtTW9kZWxzW3NNb2RlbE5hbWVdLmlzVGVtcGxhdGVNb2RlbCkge1xuXHRcdFx0bU1vZGVsc1tzTW9kZWxOYW1lXSA9IG5ldyBUZW1wbGF0ZU1vZGVsKG1Nb2RlbHNbc01vZGVsTmFtZV0uZGF0YSwgb01ldGFNb2RlbCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBzZXR0aW5nczogYW55ID0ge1xuXHRcdG1vZGVsczogT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHR9LFxuXHRcdFx0bU1vZGVsc1xuXHRcdCksXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fSxcblx0XHRhcHBDb21wb25lbnQ6IHsgZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlOiBqZXN0LmZuKCksIGdldERpYWdub3N0aWNzOiAoKSA9PiB1bmRlZmluZWQgfVxuXHR9O1xuXG5cdHNldHRpbmdzLmFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UubW9ja1JldHVyblZhbHVlKGZha2VTaWRlRWZmZWN0U2VydmljZSA/PyBkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblx0Ly9JbmplY3QgbW9kZWxzIGFuZCBiaW5kaW5nQ29udGV4dHNcblx0T2JqZWN0LmtleXMobUJpbmRpbmdDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdC8qIEFzc2VydCB0byBtYWtlIHN1cmUgdGhlIGFubm90YXRpb25zIGFyZSBpbiB0aGUgdGVzdCBtZXRhZGF0YSAtPiBhdm9pZCBtaXNsZWFkaW5nIHRlc3RzICovXG5cdFx0ZXhwZWN0KHR5cGVvZiBvTWV0YU1vZGVsLmdldE9iamVjdChtQmluZGluZ0NvbnRleHRzW3NLZXldKSkudG9CZURlZmluZWQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSBtTW9kZWxzW3NLZXldIHx8IG9NZXRhTW9kZWw7XG5cdFx0c2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW3NLZXldID0gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pOyAvL1ZhbHVlIGlzIHNQYXRoXG5cdFx0c2V0dGluZ3MubW9kZWxzW3NLZXldID0gb01vZGVsO1xuXHR9KTtcblx0cmV0dXJuIHNldHRpbmdzO1xufVxuXG5mdW5jdGlvbiBfcmVtb3ZlQ29tbWVudEZyb21YbWwoeG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gZm9ybWF0WG1sKHhtbCwge1xuXHRcdGZpbHRlcjogKG5vZGU6IGFueSkgPT4gbm9kZS50eXBlICE9PSBcIkNvbW1lbnRcIlxuXHR9KTtcbn1cblxuZnVuY3Rpb24gX2xvYWRSZXNvdXJjZVZpZXcodmlld05hbWU6IHN0cmluZyk6IEVsZW1lbnQge1xuXHRjb25zdCBuYW1lID0gdmlld05hbWUucmVwbGFjZSgvXFwuL2csIFwiL1wiKSArIFwiLnZpZXcueG1sXCI7XG5cdGNvbnN0IHZpZXcgPSBMb2FkZXJFeHRlbnNpb25zLmxvYWRSZXNvdXJjZShuYW1lKTtcblx0cmV0dXJuIHZpZXcuZG9jdW1lbnRFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgcnVuWFBhdGhRdWVyeSA9IGZ1bmN0aW9uIChzZWxlY3Rvcjogc3RyaW5nLCB4bWxkb206IE5vZGUgfCB1bmRlZmluZWQpIHtcblx0cmV0dXJuIHNlbGVjdChzZWxlY3RvciwgeG1sZG9tKTtcbn07XG5cbmV4cGVjdC5leHRlbmQoe1xuXHR0b0hhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbSwgc2VsZWN0b3IpLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYGRpZCBub3QgZmluZCBjb250cm9scyBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA+PSAxXG5cdFx0fTtcblx0fSxcblx0dG9Ob3RIYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBUaGVyZSBpcyBhIGNvbnRyb2wgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPT09IDBcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogQ2hlY2tzIGZvciBlcnJvcnMgaW4gYHhtbGAgY3JlYXRlZCBkdXJpbmcgdGVtcGxhdGluZyBvZiBhbiBYTUwgc3RyaW5nIG9yXG5cdCAqIGFuIFhNTCBub2RlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrZXMgZm9yIHRoZSB4bWwgZXJyb3JzIGNyZWF0ZWQgYnkgdGhlXG5cdCAqIGZ1bmN0aW9uIFtCdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3IuY3JlYXRlRXJyb3JYTUxde0BsaW5rIHNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLkJ1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvciNjcmVhdGVFcnJvclhNTH0uXG5cdCAqXG5cdCAqIEBwYXJhbSB4bWwgWE1MIFN0cmluZyBvciBYTUwgTm9kZSB0byBiZSB0ZXN0ZWQgZm9yIGVycm9yc1xuXHQgKiBAcmV0dXJucyBKZXN0IE1hdGNoZXIgcmVzdWx0IG9iamVjdFxuXHQgKi9cblx0dG9IYXZlVGVtcGxhdGluZ0Vycm9ycyh4bWw6IHN0cmluZyB8IE5vZGUpIHtcblx0XHRjb25zdCB4bWxUZXh0ID0gdHlwZW9mIHhtbCA9PT0gXCJzdHJpbmdcIiA/IHhtbCA6IHNlcmlhbGl6ZVhNTCh4bWwpO1xuXHRcdGNvbnN0IGJhc2U2NEVudHJpZXM6IHN0cmluZ1tdID0geG1sVGV4dC5tYXRjaCgvQkJGXFwuYmFzZTY0RGVjb2RlXFwoJyhbXiddKiknXFwpL2dtKSB8fCAoW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gYmFzZTY0RW50cmllcy5tYXAoKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBhdG9iKG1lc3NhZ2UubWF0Y2goLygnW14nXSopLyk/LlswXT8uc2xpY2UoMSkgfHwgXCJcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9KTtcblx0XHRpZiAoZXJyb3JNZXNzYWdlcy5sZW5ndGggPD0gMCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bWVzc2FnZTogKCkgPT4gYFhNTCBUZW1wbGF0aW5nIHdpdGhvdXQgZXJyb3JzYCxcblx0XHRcdFx0cGFzczogZmFsc2Vcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1lc3NhZ2U6ICgpID0+IGVycm9yTWVzc2FnZXMuam9pbihcIlxcblwiKSxcblx0XHRcdFx0cGFzczogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cbn0pO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG5cdGlmIChBcnJheS5pc0FycmF5KHhtbFN0cmluZykpIHtcblx0XHR4bWxTdHJpbmcgPSB4bWxTdHJpbmcuam9pbihcIlwiKTtcblx0fVxuXHRsZXQgeG1sRm9ybWF0dGVkID0gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG5cdHhtbEZvcm1hdHRlZCA9IHhtbEZvcm1hdHRlZC5yZXBsYWNlKC91aWQtLWlkLVswLTldezEzfS1bMC05XXsxLDN9L2csIFwidWlkLS1pZFwiKTtcblx0cmV0dXJuIHhtbEZvcm1hdHRlZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoJHtfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sRG9tLCBjb250cm9sU2VsZWN0b3IpfS9AJHthdHRyaWJ1dGVOYW1lfSlgO1xuXHRyZXR1cm4gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKTtcbn07XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBwYXJ0cyBvciB0aGUgY29tcGxldGUgZ2l2ZW4gWE1MIERPTSB0byBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHhtbERvbSBET00gbm9kZSB0aGF0IGlzIHRvIGJlIHNlcmlhbGl6ZWQuXG4gKiBAcGFyYW0gc2VsZWN0b3IgT3B0aW9uYWwgc2VsZWN0b3Igb2Ygc3ViIG5vZGVzXG4gKiBAcmV0dXJucyBYTUwgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlLCBzZWxlY3Rvcj86IHN0cmluZykge1xuXHRjb25zdCBzZXJpYWxpemVyID0gbmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKCk7XG5cdGxldCB4bWxTdHJpbmc6IHN0cmluZztcblx0aWYgKHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pIGFzIE5vZGVbXTtcblx0XHR4bWxTdHJpbmcgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcobm9kZSkpLmpvaW4oXCJcXG5cIik7XG5cdH0gZWxzZSB7XG5cdFx0eG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRYTUwgPSBmdW5jdGlvbiAoeG1sU3RyaW5nOiBzdHJpbmcpIHtcblx0cmV0dXJuIGZvcm1hdCh4bWxTdHJpbmcsIHtcblx0XHRwYXJzZXI6IFwieG1sXCIsXG5cdFx0eG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5OiBcImlnbm9yZVwiLFxuXHRcdHBsdWdpbnM6IFtwbHVnaW5dXG5cdH0gYXMgT3B0aW9ucyAmIHsgeG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5OiBcImlnbm9yZVwiIHwgXCJzdHJpY3RcIiB9KTtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBhIENEUyBmaWxlIGludG8gYW4gRURNWCBmaWxlLlxuICpcbiAqIEBwYXJhbSBjZHNVcmwgVGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQ0RTIGRlZmluaXRpb24uIFRoaXMgZmlsZSBtdXN0IGRlY2xhcmUgdGhlIG5hbWVzcGFjZVxuICogc2FwLmZlLnRlc3QgYW5kIGEgc2VydmljZSBKZXN0U2VydmljZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIEVETVggb3V0cHV0XG4gKiBAcmV0dXJucyBUaGUgcGF0aCBvZiB0aGUgZ2VuZXJhdGVkIEVETVhcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBpbGVDRFMgPSBmdW5jdGlvbiAoY2RzVXJsOiBzdHJpbmcsIG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGNkc1N0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjZHNVcmwsIFwidXRmLThcIik7XG5cdGNvbnN0IGVkbXhDb250ZW50ID0gY2RzMmVkbXgoY2RzU3RyaW5nLCBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIsIG9wdGlvbnMpO1xuXHRjb25zdCBkaXIgPSBwYXRoLnJlc29sdmUoY2RzVXJsLCBcIi4uXCIsIFwiZ2VuXCIpO1xuXG5cdC8vIElmIHRoZSBjYWxsZXIgcHJvdmlkZWQgQ0RTIGNvbXBpbGVyIG9wdGlvbnM6IEluY2x1ZGUgdGhlbSBpbiB0aGUgZmlsZW5hbWUuIFRoaXMgcHJldmVudHMgdW5wcmVkaWN0YWJsZSByZXN1bHRzIGlmIHRoZSBzYW1lIENEUyBzb3VyY2Vcblx0Ly8gZmlsZSBpcyB1c2VkIHNpbXVsdGFuZW91c2x5IHdpdGggYSBkaWZmZXJlbnQgc2V0IG9mIG9wdGlvbnMgKGUuZy4gaW4gYSB0ZXN0IHJ1bm5pbmcgaW4gcGFyYWxsZWwpXG5cdGNvbnN0IGFsbE9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zKTtcblx0YWxsT3B0aW9ucy5zb3J0KChhLCBiKSA9PiBiWzBdLmxvY2FsZUNvbXBhcmUoYVswXSkpO1xuXG5cdGNvbnN0IGVkbXhGaWxlTmFtZSA9XG5cdFx0YWxsT3B0aW9ucy5yZWR1Y2UoXG5cdFx0XHQoZmlsZW5hbWUsIFtvcHRpb25LZXksIG9wdGlvblZhbHVlXSkgPT4gYCR7ZmlsZW5hbWV9IyR7b3B0aW9uS2V5fT0ke29wdGlvblZhbHVlLnRvU3RyaW5nKCl9I2AsXG5cdFx0XHRwYXRoLmJhc2VuYW1lKGNkc1VybCkucmVwbGFjZShcIi5jZHNcIiwgXCJcIilcblx0XHQpICsgXCIueG1sXCI7XG5cblx0Y29uc3QgZWRteEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGRpciwgZWRteEZpbGVOYW1lKTtcblxuXHRmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRmcy53cml0ZUZpbGVTeW5jKGVkbXhGaWxlUGF0aCwgZWRteENvbnRlbnQpO1xuXHRyZXR1cm4gZWRteEZpbGVQYXRoO1xufTtcblxuLyoqXG4gKiBDb21waWxlIENEUyB0byBFRE1YLlxuICpcbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gYmUgY29tcGlsZWQuIERlZmF1bHRzIHRvIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlID0gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBzb3VyY2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBcInNvdXJjZS5jZHNcIjogY2RzIH07XG5cblx0Ly8gYWxsb3cgdG8gaW5jbHVkZSBzdHVmZiBmcm9tIEBzYXAvY2RzL2NvbW1vblxuXHRpZiAoY2RzLmluY2x1ZGVzKFwiJ0BzYXAvY2RzL2NvbW1vbidcIikpIHtcblx0XHRzb3VyY2VzW1wiY29tbW9uLmNkc1wiXSA9IGZzLnJlYWRGaWxlU3luYyhyZXF1aXJlLnJlc29sdmUoXCJAc2FwL2Nkcy9jb21tb24uY2RzXCIpLCBcInV0Zi04XCIpO1xuXHR9XG5cblx0Y29uc3QgY3NuID0gY29tcGlsZXIuY29tcGlsZVNvdXJjZXMoc291cmNlcywge30pO1xuXG5cdGNvbnN0IGVkbXhPcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7XG5cdFx0b2RhdGFGb3JlaWduS2V5czogdHJ1ZSxcblx0XHRvZGF0YUZvcm1hdDogXCJzdHJ1Y3R1cmVkXCIsXG5cdFx0b2RhdGFDb250YWlubWVudDogdHJ1ZSxcblx0XHQuLi5vcHRpb25zLFxuXHRcdHNlcnZpY2U6IHNlcnZpY2Vcblx0fTtcblxuXHRjb25zdCBlZG14ID0gY29tcGlsZXIudG8uZWRteChjc24sIGVkbXhPcHRpb25zKTtcblx0aWYgKCFlZG14KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb21waWxhdGlvbiBmYWlsZWQuIEhpbnQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSBDRFMgbW9kZWwgZGVmaW5lcyBzZXJ2aWNlICR7c2VydmljZX0uYCk7XG5cdH1cblx0cmV0dXJuIGVkbXg7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogUHJvbWlzZTxhbnk+IHtcblx0Y29uc3Qgb1NlcnZpY2VDb250ZXh0ID0geyBzY29wZU9iamVjdDoge30sIHNjb3BlVHlwZTogXCJcIiwgc2V0dGluZ3M6IHt9IH0gYXMgU2VydmljZUNvbnRleHQ8YW55Pjtcblx0cmV0dXJuIG5ldyBTaWRlRWZmZWN0c0ZhY3RvcnkoKS5jcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQpLnRoZW4oZnVuY3Rpb24gKG9TZXJ2aWNlSW5zdGFuY2U6IGFueSkge1xuXHRcdGNvbnN0IG9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlID0gb1NlcnZpY2VJbnN0YW5jZS5nZXRJbnRlcmZhY2UoKTtcblx0XHRvSmVzdFNpZGVFZmZlY3RzU2VydmljZS5nZXRDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2NvcGVPYmplY3Q6IHtcblx0XHRcdFx0XHRnZXRNb2RlbDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0Z2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9NZXRhTW9kZWw7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0cmV0dXJuIG9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlO1xuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlRGlhZ25vc3RpY3MgPSBmdW5jdGlvbiAoKTogSURpYWdub3N0aWNzIHtcblx0Y29uc3QgaXNzdWVzOiBhbnlbXSA9IFtdO1xuXHRyZXR1cm4ge1xuXHRcdGFkZElzc3VlKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0aXNzdWVzLnB1c2goe1xuXHRcdFx0XHRpc3N1ZUNhdGVnb3J5LFxuXHRcdFx0XHRpc3N1ZVNldmVyaXR5LFxuXHRcdFx0XHRkZXRhaWxzXG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGdldElzc3VlcygpOiBhbnlbXSB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzO1xuXHRcdH0sXG5cdFx0Y2hlY2tJZklzc3VlRXhpc3RzKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcy5maW5kKChpc3N1ZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXNzdWUuaXNzdWVDYXRlZ29yeSA9PT0gaXNzdWVDYXRlZ29yeSAmJiBpc3N1ZS5pc3N1ZVNldmVyaXR5ID09PSBpc3N1ZVNldmVyaXR5ICYmIGlzc3VlLmRldGFpbHMgPT09IGRldGFpbHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0bWFuaWZlc3RTZXR0aW5nczogTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1xuKSB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlZFR5cGVzLmVudGl0eVNldHMuZmluZCgoZXMpID0+IGVzLm5hbWUgPT09IG1hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0KTtcblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eShlbnRpdHlTZXQgYXMgRW50aXR5U2V0LCBjb252ZXJ0ZWRUeXBlcywgZW50aXR5U2V0KTtcblx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0KGNvbnZlcnRlZFR5cGVzLCBtYW5pZmVzdFNldHRpbmdzLCBnZXRGYWtlRGlhZ25vc3RpY3MoKSwgbWVyZ2UsIGRhdGFNb2RlbFBhdGgpO1xufTtcbmNvbnN0IG1ldGFNb2RlbENhY2hlOiBhbnkgPSB7fTtcbmV4cG9ydCBjb25zdCBnZXRNZXRhTW9kZWwgPSBhc3luYyBmdW5jdGlvbiAoc01ldGFkYXRhVXJsOiBzdHJpbmcpIHtcblx0Y29uc3Qgb1JlcXVlc3RvciA9IF9NZXRhZGF0YVJlcXVlc3Rvci5jcmVhdGUoe30sIFwiNC4wXCIsIHVuZGVmaW5lZCwge30pO1xuXHRpZiAoIW1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbmV3IChPRGF0YU1ldGFNb2RlbCBhcyBhbnkpKG9SZXF1ZXN0b3IsIHNNZXRhZGF0YVVybCwgdW5kZWZpbmVkLCBudWxsKTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHByb3BlcnR5PzogUHJvcGVydHkgfCBFbnRpdHlTZXQgfCBBbnlBbm5vdGF0aW9uXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoIHtcblx0Y29uc3QgdGFyZ2V0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHR0YXJnZXRPYmplY3Q6IHByb3BlcnR5LFxuXHRcdHRhcmdldEVudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHR0YXJnZXRQYXRoLmNvbnRleHRMb2NhdGlvbiA9IHRhcmdldFBhdGg7XG5cdHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nU3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKGJpbmRpbmdTdHJpbmcpO1xuXHRyZXR1cm4gYmluZGluZ0VsZW1lbnQuZm9ybWF0dGVyLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG59O1xuXG50eXBlIE1vZGVsQ29udGVudCA9IHtcblx0W25hbWU6IHN0cmluZ106IGFueTtcbn07XG5cbi8qKlxuICogRXZhbHVhdGUgYSBiaW5kaW5nIGFnYWluc3QgYSBtb2RlbC5cbiAqXG4gKiBAcGFyYW0gYmluZGluZ1N0cmluZyBUaGUgYmluZGluZyBzdHJpbmcuXG4gKiBAcGFyYW0gbW9kZWxDb250ZW50IENvbnRlbnQgb2YgdGhlIGRlZmF1bHQgbW9kZWwgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIG5hbWVkTW9kZWxzQ29udGVudCBDb250ZW50cyBvZiBhZGRpdGlvbmFsLCBuYW1lZCBtb2RlbHMgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIGV2YWx1YXRlZCBiaW5kaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsKFxuXHRiaW5kaW5nU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsQ29udGVudDogTW9kZWxDb250ZW50LFxuXHRuYW1lZE1vZGVsc0NvbnRlbnQ/OiB7IFttb2RlbE5hbWU6IHN0cmluZ106IE1vZGVsQ29udGVudCB9XG4pOiBzdHJpbmcge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0Y29uc3QgdGV4dCA9IG5ldyBJbnZpc2libGVUZXh0KCk7XG5cdHRleHQuYmluZFByb3BlcnR5KFwidGV4dFwiLCBiaW5kaW5nRWxlbWVudCk7XG5cblx0Y29uc3QgZGVmYXVsdE1vZGVsID0gbmV3IEpTT05Nb2RlbChtb2RlbENvbnRlbnQpO1xuXHR0ZXh0LnNldE1vZGVsKGRlZmF1bHRNb2RlbCk7XG5cdHRleHQuc2V0QmluZGluZ0NvbnRleHQoZGVmYXVsdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSk7XG5cblx0aWYgKG5hbWVkTW9kZWxzQ29udGVudCkge1xuXHRcdGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVkTW9kZWxzQ29udGVudCkpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gbmV3IEpTT05Nb2RlbChjb250ZW50KTtcblx0XHRcdHRleHQuc2V0TW9kZWwobW9kZWwsIG5hbWUpO1xuXHRcdFx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksIG5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0ZXh0LmdldFRleHQoKTtcbn1cblxuY29uc3QgVEVTVFZJRVdJRCA9IFwidGVzdFZpZXdJZFwiO1xuXG5jb25zdCBhcHBseUZsZXhDaGFuZ2VzID0gYXN5bmMgZnVuY3Rpb24gKGZsZXhDaGFuZ2VzOiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9LCBvTWV0YU1vZGVsOiBNZXRhTW9kZWwsIHJlc3VsdFhNTDogYW55KSB7XG5cdC8vIHByZWZpeCBJZHNcblx0Wy4uLnJlc3VsdFhNTC5xdWVyeVNlbGVjdG9yQWxsKFwiW2lkXVwiKV0uZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdG5vZGUuaWQgPSBgJHtURVNUVklFV0lEfS0tJHtub2RlLmlkfWA7XG5cdH0pO1xuXHRjb25zdCBjaGFuZ2VzID0gY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0KFRFU1RWSUVXSUQsIGZsZXhDaGFuZ2VzKTtcblx0Y29uc3QgYXBwSWQgPSBcInNvbWVDb21wb25lbnRcIjtcblx0Y29uc3Qgb01hbmlmZXN0ID0ge1xuXHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRpZDogYXBwSWQsXG5cdFx0XHR0eXBlOiBcImFwcGxpY2F0aW9uXCIsXG5cdFx0XHRjcm9zc05hdmlnYXRpb246IHtcblx0XHRcdFx0b3V0Ym91bmRzOiBbXVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0ge1xuXHRcdGdldERpYWdub3N0aWNzOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKGdldEZha2VEaWFnbm9zdGljcygpKSxcblx0XHRnZXRNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRNZXRhTW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUob01ldGFNb2RlbClcblx0XHR9KSxcblx0XHRnZXRDb21wb25lbnREYXRhOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHt9KSxcblx0XHRnZXRNYW5pZmVzdE9iamVjdDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRFbnRyeTogZnVuY3Rpb24gKG5hbWU6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gKG9NYW5pZmVzdCBhcyBhbnkpW25hbWVdO1xuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdGdldExvY2FsSWQ6IGplc3QuZm4oKHNJZCkgPT4gc0lkKVxuXHR9IGFzIHVua25vd24gYXMgQXBwQ29tcG9uZW50O1xuXHQvL2Zha2UgY2hhbmdlc1xuXHRqZXN0LnNweU9uKEFwcFN0b3JhZ2UsIFwibG9hZEZsZXhEYXRhXCIpLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoY2hhbmdlcykpO1xuXHRqZXN0LnNweU9uKENvbXBvbmVudCwgXCJnZXRcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRqZXN0LnNweU9uKFV0aWxzLCBcImdldEFwcENvbXBvbmVudEZvckNvbnRyb2xcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRhd2FpdCBGbGV4U3RhdGUuaW5pdGlhbGl6ZSh7XG5cdFx0Y29tcG9uZW50SWQ6IGFwcElkXG5cdH0pO1xuXHRyZXN1bHRYTUwgPSBhd2FpdCBYbWxQcmVwcm9jZXNzb3IucHJvY2VzcyhyZXN1bHRYTUwsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIsIGNvbXBvbmVudElkOiBhcHBJZCwgaWQ6IFRFU1RWSUVXSUQgfSk7XG5cblx0Ly9Bc3NlcnQgdGhhdCBhbGwgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZFxuXHRjb25zdCBjaGFuZ2VzQXBwbGllZCA9IGdldENoYW5nZXNGcm9tWE1MKHJlc3VsdFhNTCk7XG5cdGV4cGVjdChjaGFuZ2VzQXBwbGllZC5sZW5ndGgpLnRvQmUoZmxleENoYW5nZXM/LmNoYW5nZXM/Lmxlbmd0aCA/PyAwICsgZmxleENoYW5nZXM/LnZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz8ubGVuZ3RoID8/IDApO1xuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENoYW5nZXNGcm9tWE1MID0gKHhtbDogYW55KSA9PlxuXHRbLi4ueG1sLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpXVxuXHRcdC5mbGF0TWFwKChlKSA9PiBbLi4uZS5hdHRyaWJ1dGVzXS5tYXAoKGEpID0+IGEubmFtZSkpXG5cdFx0LmZpbHRlcigoYXR0cikgPT4gYXR0ci5pbmNsdWRlcyhcInNhcC51aS5mbC5hcHBsaWVkQ2hhbmdlc1wiKSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93blxuKSB7XG5cdGlmICghbU1vZGVsc1tcInNhcC5mZS5pMThuXCJdKSB7XG5cdFx0bU1vZGVsc1tcInNhcC5mZS5pMThuXCJdID0gY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwoKTtcblx0fVxuXG5cdGNvbnN0IHRlbXBsYXRlZFhtbCA9IGA8cm9vdD4ke3htbElucHV0fTwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRlbXBsYXRlZFhtbCwgXCJ0ZXh0L3htbFwiKTtcblx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0gYXdhaXQgX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3Moc01ldGFkYXRhVXJsLCBtQmluZGluZ0NvbnRleHRzLCBtTW9kZWxzLCBmYWtlU2lkZUVmZmVjdFNlcnZpY2UpO1xuXG5cdC8vVGhpcyBjb250ZXh0IGZvciBtYWNybyB0ZXN0aW5nXG5cdGlmIChvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXSkge1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbXCJ0aGlzXCJdID0gb1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cblx0bGV0IHJlc3VsdFhNTCA9IChhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyh4bWxEb2MuZmlyc3RFbGVtZW50Q2hpbGQhLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncykpIGFzIGFueTtcblxuXHRpZiAoZmxleENoYW5nZXMpIHtcblx0XHQvLyBhcHBseSBmbGV4IGNoYW5nZXNcblx0XHRyZXN1bHRYTUwgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzLCBvTWV0YU1vZGVsLCByZXN1bHRYTUwpO1xuXHR9XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbikge1xuXHRjb25zdCB0ZW1wbGF0ZWRYTUwgPSBhd2FpdCBnZXRUZW1wbGF0aW5nUmVzdWx0KHhtbElucHV0LCBzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMsIGZsZXhDaGFuZ2VzLCBmYWtlU2lkZUVmZmVjdFNlcnZpY2UpO1xuXHRjb25zdCBzZXJpYWxpZWRYTUwgPSBzZXJpYWxpemVYTUwodGVtcGxhdGVkWE1MKTtcblx0ZXhwZWN0KHNlcmlhbGllZFhNTCkubm90LnRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMoKTtcblx0cmV0dXJuIHNlcmlhbGllZFhNTDtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIHZpZXcgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqXG4gKiBAcGFyYW0gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdmlldyB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0gc01ldGFkYXRhVXJsIFVybCBvZiB0aGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0gbUJpbmRpbmdDb250ZXh0cyBNYXAgb2YgdGhlIGJpbmRpbmdDb250ZXh0cyB0byBzZXQgb24gdGhlIG1vZGVscy5cbiAqIEBwYXJhbSBtTW9kZWxzIE1hcCBvZiB0aGUgbW9kZWxzLlxuICogQHBhcmFtIGZsZXhDaGFuZ2VzIE9iamVjdCB3aXRoIFVJIGNoYW5nZXMgbGlrZSAnY2hhbmdlcycgb3IgJ3ZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcydcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCB2aWV3IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoXG5cdG5hbWU6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9XG4pOiBQcm9taXNlPEplc3RUZW1wbGF0ZWRWaWV3PiB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0Y29uc3Qgb1ZpZXdEb2N1bWVudCA9IF9sb2FkUmVzb3VyY2VWaWV3KG5hbWUpO1xuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSBhd2FpdCBfYnVpbGRQcmVQcm9jZXNzb3JTZXR0aW5ncyhzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMpO1xuXHRsZXQgb1ByZXByb2Nlc3NlZFZpZXcgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhvVmlld0RvY3VtZW50LCB7IG5hbWU6IG5hbWUgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcblx0aWYgKGZsZXhDaGFuZ2VzKSB7XG5cdFx0b1ByZXByb2Nlc3NlZFZpZXcgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzID8/IFtdLCBvTWV0YU1vZGVsLCBvUHJlcHJvY2Vzc2VkVmlldyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRhc0VsZW1lbnQ6IG9QcmVwcm9jZXNzZWRWaWV3LFxuXHRcdGFzU3RyaW5nOiBfcmVtb3ZlQ29tbWVudEZyb21YbWwob1ByZXByb2Nlc3NlZFZpZXc/Lm91dGVySFRNTCB8fCBcIlwiKVxuXHR9O1xufVxuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCBYTUwgZnJhZ21lbnQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqXG4gKiBAcGFyYW0gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHRlc3REYXRhIFRlc3QgZGF0YSBjb25zaXN0aW5nXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgZnJhZ21lbnQgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJhZ21lbnQobmFtZTogc3RyaW5nLCB0ZXN0RGF0YTogeyBbbW9kZWw6IHN0cmluZ106IG9iamVjdCB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgaW5wdXRYbWwgPSBgPHJvb3Q+PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwiJHtuYW1lfVwiIHR5cGU9XCJYTUxcIiB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIiAvPjwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9LFxuXHRcdGFwcENvbXBvbmVudDogeyBnZXRTaWRlRWZmZWN0c1NlcnZpY2U6IGplc3QuZm4oKSwgZ2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvLyBleGVjdXRlIHRoZSBwcmUtcHJvY2Vzc29yXG5cdGNvbnN0IHJlc3VsdERvYyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGlucHV0RG9jLmZpcnN0RWxlbWVudENoaWxkLCB7IG5hbWUgfSwgc2V0dGluZ3MpO1xuXG5cdC8vIGV4Y2x1ZGUgbmVzdGVkIGZyYWdtZW50cyBmcm9tIHRlc3Qgc25hcHNob3RzXG5cdGNvbnN0IGZyYWdtZW50cyA9IHJlc3VsdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNvcmU6RnJhZ21lbnRcIikgYXMgYW55O1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIF9yZW1vdmVDb21tZW50RnJvbVhtbCh4bWxSZXN1bHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbChjb250cm9sVG9TZXJpYWxpemU6IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10pIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0ZnVuY3Rpb24gZ2V0VGFiKHRvQWRkOiBudW1iZXIgPSAwKSB7XG5cdFx0bGV0IHRhYiA9IFwiXCI7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0YWJDb3VudCArIHRvQWRkOyBpKyspIHtcblx0XHRcdHRhYiArPSBcIlxcdFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFiO1xuXHR9XG5cdGNvbnN0IHNlcmlhbGl6ZURlbGVnYXRlID0ge1xuXHRcdHN0YXJ0OiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBjb250cm9sRGV0YWlsID0gXCJcIjtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLmdldFBhcmVudCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW5kZXhJblBhcmVudCA9IChjb250cm9sLmdldFBhcmVudCgpLmdldEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUpIGFzIE1hbmFnZWRPYmplY3RbXSk/LmluZGV4T2Y/Lihjb250cm9sKTtcblx0XHRcdFx0XHRpZiAoaW5kZXhJblBhcmVudCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCxcXG4ke2dldFRhYigpfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sRGV0YWlsICs9IGAke2NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9KGA7XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFwifSlcIjtcblx0XHR9LFxuXHRcdG1pZGRsZTogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0Y29uc3QgaWQgPSBjb250cm9sLmdldElkKCk7XG5cdFx0XHRsZXQgZGF0YSA9IGB7aWQ6ICR7TWFuYWdlZE9iamVjdE1ldGFkYXRhLmlzR2VuZXJhdGVkSWQoaWQpID8gXCJfX2R5bmFtaWNJZFwiIDogaWR9YDtcblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tUHJvcGVydGllcykge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7Y29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV19YDtcblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3MuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZ0RldGFpbCA9IGNvbnRyb2wubUJpbmRpbmdJbmZvc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiAke0pTT04uc3RyaW5naWZ5KGJpbmRpbmdEZXRhaWwpfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tQXNzb2NpYXRpb25zKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Bc3NvY2lhdGlvbnMuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiAke1xuXHRcdFx0XHRcdFx0KGNvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV0/LmpvaW4/LihcIixcIikgPz8gY29udHJvbC5tQXNzb2NpYXRpb25zW29Db250cm9sS2V5XSkgfHwgdW5kZWZpbmVkXG5cdFx0XHRcdFx0fWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tRXZlbnRSZWdpc3RyeSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeS5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06IHRydWV9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGF0YSArPSBgYDtcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH0sXG5cdFx0c3RhcnRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0bGV0IG91dCA9IGAsXFxuJHtnZXRUYWIoKX0ke3NOYW1lfWA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRvdXQgKz0gYD17IHBhdGg6JyR7Y29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXS5wYXRofScsIHRlbXBsYXRlOlxcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dCArPSBgPVtcXG4ke2dldFRhYigpfWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9fWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9XWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9TZXJpYWxpemUsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7OztFQXdEQTtFQUNBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGVBQWUsQ0FBQztFQUUxQ0MsR0FBRyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxFQUFTLGtDQUFrQyxDQUFDO0VBQzFEQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxLQUFLLENBQUM7RUFFdEIsTUFBTUMsWUFBWSxHQUFHO0lBQ3BCQyxNQUFNLEVBQUUsZUFBZTtJQUN2QkMsS0FBSyxFQUFFLGVBQWU7SUFDdEJDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakNDLFNBQVMsRUFBRSxrRUFBa0U7SUFDN0VDLEdBQUcsRUFBRSxrRUFBa0U7SUFDdkVDLFFBQVEsRUFBRSwwRUFBMEU7SUFDcEZDLE9BQU8sRUFBRSxzQkFBc0I7SUFDL0JDLFFBQVEsRUFBRSx3QkFBd0I7SUFDbENDLElBQUksRUFBRSxhQUFhO0lBQ25CQyxFQUFFLEVBQUUsV0FBVztJQUNmQyxDQUFDLEVBQUUsT0FBTztJQUNWQyxDQUFDLEVBQUUsb0JBQW9CO0lBQ3ZCQyxFQUFFLEVBQUUsV0FBVztJQUNmQyxhQUFhLEVBQUUsd0JBQXdCO0lBQ3ZDQyxHQUFHLEVBQUUsWUFBWTtJQUNqQkMsS0FBSyxFQUFFLDBCQUEwQjtJQUNqQ0MsUUFBUSxFQUFFLGtCQUFrQjtJQUM1QkMsUUFBUSxFQUFFLGtCQUFrQjtJQUM1QkMsQ0FBQyxFQUFFLGdCQUFnQjtJQUNuQkMsZUFBZSxFQUFFLDBCQUEwQjtJQUMzQ0MsVUFBVSxFQUFFLHlCQUF5QjtJQUNyQ0MsVUFBVSxFQUFFO0VBQ2IsQ0FBQztFQUNELE1BQU1DLE1BQU0sR0FBR0MsS0FBSyxDQUFDQyxhQUFhLENBQUN6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
|
|
659
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRYbWwiLCJyZXF1aXJlIiwiTG9nIiwic2V0TGV2ZWwiLCJqZXN0Iiwic2V0VGltZW91dCIsIm5hbWVTcGFjZU1hcCIsIm1hY3JvcyIsIm1hY3JvIiwibWFjcm9GaWVsZCIsIm1hY3JvZGF0YSIsImxvZyIsInVuaXR0ZXN0IiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJtZGNhdCIsIm1kY0ZpZWxkIiwibWRjVGFibGUiLCJ1IiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJfZ2V0VGVtcGxhdGVkU2VsZWN0b3IiLCJ4bWxkb20iLCJzZWxlY3RvciIsInJvb3RQYXRoIiwibm9kZU5hbWUiLCJzdGFydHNXaXRoIiwiX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MiLCJzTWV0YWRhdGFVcmwiLCJtQmluZGluZ0NvbnRleHRzIiwibU1vZGVscyIsImZha2VTaWRlRWZmZWN0U2VydmljZSIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJoYXNPd25Qcm9wZXJ0eSIsIk9iamVjdCIsImFzc2lnbiIsImNvbnZlcnRlckNvbnRleHQiLCJUZW1wbGF0ZU1vZGVsIiwia2V5cyIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsInNldHRpbmdzIiwibW9kZWxzIiwibWV0YU1vZGVsIiwiYmluZGluZ0NvbnRleHRzIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZm4iLCJnZXREaWFnbm9zdGljcyIsInVuZGVmaW5lZCIsIm1vY2tSZXR1cm5WYWx1ZSIsInNLZXkiLCJleHBlY3QiLCJnZXRPYmplY3QiLCJ0b0JlRGVmaW5lZCIsIm9Nb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiX3JlbW92ZUNvbW1lbnRGcm9tWG1sIiwieG1sIiwiZmlsdGVyIiwibm9kZSIsInR5cGUiLCJfbG9hZFJlc291cmNlVmlldyIsInZpZXdOYW1lIiwibmFtZSIsInJlcGxhY2UiLCJ2aWV3IiwiTG9hZGVyRXh0ZW5zaW9ucyIsImxvYWRSZXNvdXJjZSIsImRvY3VtZW50RWxlbWVudCIsInJ1blhQYXRoUXVlcnkiLCJleHRlbmQiLCJ0b0hhdmVDb250cm9sIiwibm9kZXMiLCJtZXNzYWdlIiwib3V0cHV0WG1sIiwic2VyaWFsaXplWE1MIiwicGFzcyIsImxlbmd0aCIsInRvTm90SGF2ZUNvbnRyb2wiLCJ0b0hhdmVUZW1wbGF0aW5nRXJyb3JzIiwieG1sVGV4dCIsImJhc2U2NEVudHJpZXMiLCJtYXRjaCIsImVycm9yTWVzc2FnZXMiLCJtYXAiLCJhdG9iIiwic2xpY2UiLCJqb2luIiwiZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCIsInhtbFN0cmluZyIsIkFycmF5IiwiaXNBcnJheSIsInhtbEZvcm1hdHRlZCIsImZvcm1hdFhNTCIsImdldENvbnRyb2xBdHRyaWJ1dGUiLCJjb250cm9sU2VsZWN0b3IiLCJhdHRyaWJ1dGVOYW1lIiwieG1sRG9tIiwic2VyaWFsaXplciIsIndpbmRvdyIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImZvcm1hdCIsInBhcnNlciIsInhtbFdoaXRlc3BhY2VTZW5zaXRpdml0eSIsInBsdWdpbnMiLCJwbHVnaW4iLCJjb21waWxlQ0RTIiwiY2RzVXJsIiwib3B0aW9ucyIsImNkc1N0cmluZyIsImZzIiwicmVhZEZpbGVTeW5jIiwiZWRteENvbnRlbnQiLCJjZHMyZWRteCIsImRpciIsInBhdGgiLCJyZXNvbHZlIiwiYWxsT3B0aW9ucyIsImVudHJpZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiZWRteEZpbGVOYW1lIiwicmVkdWNlIiwiZmlsZW5hbWUiLCJvcHRpb25LZXkiLCJvcHRpb25WYWx1ZSIsInRvU3RyaW5nIiwiYmFzZW5hbWUiLCJlZG14RmlsZVBhdGgiLCJta2RpclN5bmMiLCJyZWN1cnNpdmUiLCJ3cml0ZUZpbGVTeW5jIiwiY2RzIiwic2VydmljZSIsInNvdXJjZXMiLCJpbmNsdWRlcyIsImNzbiIsImNvbXBpbGVyIiwiY29tcGlsZVNvdXJjZXMiLCJlZG14T3B0aW9ucyIsIm9kYXRhRm9yZWlnbktleXMiLCJvZGF0YUZvcm1hdCIsIm9kYXRhQ29udGFpbm1lbnQiLCJlZG14IiwidG8iLCJFcnJvciIsImdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UiLCJvU2VydmljZUNvbnRleHQiLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJvSmVzdFNpZGVFZmZlY3RzU2VydmljZSIsImdldEludGVyZmFjZSIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImdldEZha2VEaWFnbm9zdGljcyIsImlzc3VlcyIsImFkZElzc3VlIiwiaXNzdWVDYXRlZ29yeSIsImlzc3VlU2V2ZXJpdHkiLCJkZXRhaWxzIiwicHVzaCIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwiY29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFNldHRpbmdzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0cyIsImVzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIm1ldGFNb2RlbENhY2hlIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJwcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJjb250ZXh0TG9jYXRpb24iLCJldmFsdWF0ZUJpbmRpbmciLCJiaW5kaW5nU3RyaW5nIiwiYmluZGluZ0VsZW1lbnQiLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsImFyZ3MiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbnRlbnQiLCJtb2RlbCIsImdldFRleHQiLCJURVNUVklFV0lEIiwiYXBwbHlGbGV4Q2hhbmdlcyIsImZsZXhDaGFuZ2VzIiwicmVzdWx0WE1MIiwicXVlcnlTZWxlY3RvckFsbCIsImlkIiwiY2hhbmdlcyIsImNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdCIsImFwcElkIiwib01hbmlmZXN0IiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwib0FwcENvbXBvbmVudCIsImdldENvbXBvbmVudERhdGEiLCJnZXRNYW5pZmVzdE9iamVjdCIsImdldEVudHJ5IiwiZ2V0TG9jYWxJZCIsInNJZCIsInNweU9uIiwiQXBwU3RvcmFnZSIsIlByb21pc2UiLCJDb21wb25lbnQiLCJVdGlscyIsIkZsZXhTdGF0ZSIsImluaXRpYWxpemUiLCJjb21wb25lbnRJZCIsIlhtbFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJjaGFuZ2VzQXBwbGllZCIsImdldENoYW5nZXNGcm9tWE1MIiwidG9CZSIsInZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyIsImZsYXRNYXAiLCJlIiwiYXR0cmlidXRlcyIsImF0dHIiLCJnZXRUZW1wbGF0aW5nUmVzdWx0IiwieG1sSW5wdXQiLCJjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCIsInRlbXBsYXRlZFhtbCIsIkRPTVBhcnNlciIsInhtbERvYyIsInBhcnNlRnJvbVN0cmluZyIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIlhNTFByZXByb2Nlc3NvciIsImZpcnN0RWxlbWVudENoaWxkIiwiZ2V0VGVtcGxhdGVkWE1MIiwidGVtcGxhdGVkWE1MIiwic2VyaWFsaWVkWE1MIiwibm90IiwicHJvY2Vzc1ZpZXciLCJvVmlld0RvY3VtZW50Iiwib1ByZXByb2Nlc3NlZFZpZXciLCJhc0VsZW1lbnQiLCJhc1N0cmluZyIsIm91dGVySFRNTCIsInByb2Nlc3NGcmFnbWVudCIsInRlc3REYXRhIiwiaW5wdXRYbWwiLCJpbnB1dERvYyIsImpzb25Nb2RlbCIsInNldERhdGEiLCJyZXN1bHREb2MiLCJmcmFnbWVudHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImZyYWdtZW50IiwiaW5uZXJIVE1MIiwieG1sUmVzdWx0IiwiY2hpbGRyZW4iLCJzZXJpYWxpemVDb250cm9sIiwiY29udHJvbFRvU2VyaWFsaXplIiwidGFiQ291bnQiLCJnZXRUYWIiLCJ0b0FkZCIsInRhYiIsImkiLCJzZXJpYWxpemVEZWxlZ2F0ZSIsInN0YXJ0Iiwic0FnZ3JlZ2F0aW9uTmFtZSIsImNvbnRyb2xEZXRhaWwiLCJnZXRQYXJlbnQiLCJpbmRleEluUGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJpbmRleE9mIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZW5kIiwibWlkZGxlIiwiZ2V0SWQiLCJNYW5hZ2VkT2JqZWN0TWV0YWRhdGEiLCJpc0dlbmVyYXRlZElkIiwib0NvbnRyb2xLZXkiLCJtUHJvcGVydGllcyIsIm1CaW5kaW5nSW5mb3MiLCJiaW5kaW5nRGV0YWlsIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1Bc3NvY2lhdGlvbnMiLCJtRXZlbnRSZWdpc3RyeSIsInN0YXJ0QWdncmVnYXRpb24iLCJzTmFtZSIsIm91dCIsImVuZEFnZ3JlZ2F0aW9uIiwiY29udHJvbFRvUmVuZGVyIiwiU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsImNyZWF0ZUF3YWl0ZXIiLCJmblJlc29sdmUiLCJteVByb21pc2UiLCJwcm9taXNlIiwicmVuZGVyQnVpbGRpbmdCbG9ja1dpdGhNb2RlbHMiLCJidWlsZGluZ0Jsb2NrIiwiTWFuYWdlZE9iamVjdCIsInJ1bldpdGhQcmVwcm9jZXNzb3JzIiwiZ2V0Q29udGVudCIsImNvbnRyb2xTZXR0aW5ncyIsInJlZ2lzdGVyTW9ja0ZyYWdtZW50cyIsIm9yaWdpbmFsTG9hZFRlbXBsYXRlIiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGVQcm9taXNlIiwibG9hZFRlbXBsYXRlU3R1YiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsInRlbXBsYXRlTmFtZSIsImV4dGVuc2lvbiIsInBhcnNlWE1MU3RyaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJKZXN0VGVtcGxhdGluZ0hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCAqIGFzIHBsdWdpbiBmcm9tIFwiQHByZXR0aWVyL3BsdWdpbi14bWxcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB0eXBlIHsgT3B0aW9ucyB9IGZyb20gXCJwcmV0dGllclwiO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBMb2FkZXJFeHRlbnNpb25zIGZyb20gXCJzYXAvYmFzZS91dGlsL0xvYWRlckV4dGVuc2lvbnNcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBwYXJzZVhNTFN0cmluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgSURpYWdub3N0aWNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCBTaWRlRWZmZWN0c0ZhY3RvcnkgZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvdGVzdC9VSTVNb2NrSGVscGVyXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RNZXRhZGF0YVwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IFNlcmlhbGl6ZXIgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvc2VyaWFsaXplci9TZXJpYWxpemVyXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IEZsZXhTdGF0ZSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9mbGV4U3RhdGUvRmxleFN0YXRlXCI7XG5pbXBvcnQgWG1sUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvX2ludGVybmFsL3ByZXByb2Nlc3NvcnMvWG1sUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgQXBwU3RvcmFnZSBmcm9tIFwic2FwL3VpL2ZsL2luaXRpYWwvX2ludGVybmFsL1N0b3JhZ2VcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwic2FwL3VpL2ZsL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBfTWV0YWRhdGFSZXF1ZXN0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9saWIvX01ldGFkYXRhUmVxdWVzdG9yXCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgeHBhdGggZnJvbSBcInhwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmFnZWRPYmplY3RFeCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdCB9IGZyb20gXCIuL0plc3RGbGV4aWJpbGl0eUhlbHBlclwiO1xuXG50eXBlIFByZVByb2Nlc3NvclNldHRpbmdzVHlwZSA9IHtcblx0bW9kZWxzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB8IE9EYXRhTWV0YU1vZGVsO1xuXHR9O1xuXHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRbbmFtZTogc3RyaW5nXTogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0fTtcbn07XG50eXBlIE1vY2tGcmFnbWVudCA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRjb250ZW50OiBzdHJpbmc7XG59O1xuXG50eXBlIEplc3RUZW1wbGF0ZWRWaWV3ID0ge1xuXHRhc0VsZW1lbnQ6IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdGFzU3RyaW5nOiBzdHJpbmc7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuY29uc3QgZm9ybWF0WG1sID0gcmVxdWlyZShcInhtbC1mb3JtYXR0ZXJcIik7XG5cbkxvZy5zZXRMZXZlbCgxIGFzIGFueSwgXCJzYXAudWkuY29yZS51dGlsLlhNTFByZXByb2Nlc3NvclwiKTtcbmplc3Quc2V0VGltZW91dCg0MDAwMCk7XG5cbmNvbnN0IG5hbWVTcGFjZU1hcCA9IHtcblx0bWFjcm9zOiBcInNhcC5mZS5tYWNyb3NcIixcblx0bWFjcm86IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRtYWNyb0ZpZWxkOiBcInNhcC5mZS5tYWNyb3MuZmllbGRcIixcblx0bWFjcm9kYXRhOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0bG9nOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0dW5pdHRlc3Q6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvcHJlcHJvY2Vzc29yZXh0ZW5zaW9uL3NhcC5mZS51bml0dGVzdGluZy8xXCIsXG5cdGNvbnRyb2w6IFwic2FwLmZlLmNvcmUuY29udHJvbHNcIixcblx0Y29udHJvbHM6IFwic2FwLmZlLm1hY3Jvcy5jb250cm9sc1wiLFxuXHRjb3JlOiBcInNhcC51aS5jb3JlXCIsXG5cdGR0OiBcInNhcC51aS5kdFwiLFxuXHRtOiBcInNhcC5tXCIsXG5cdGY6IFwic2FwLnVpLmxheW91dC5mb3JtXCIsXG5cdGZsOiBcInNhcC51aS5mbFwiLFxuXHRpbnRlcm5hbE1hY3JvOiBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWxcIixcblx0bWRjOiBcInNhcC51aS5tZGNcIixcblx0bWRjYXQ6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdG1kY0ZpZWxkOiBcInNhcC51aS5tZGMuZmllbGRcIixcblx0bWRjVGFibGU6IFwic2FwLnVpLm1kYy50YWJsZVwiLFxuXHR1OiBcInNhcC51aS51bmlmaWVkXCIsXG5cdG1hY3JvTWljcm9DaGFydDogXCJzYXAuZmUubWFjcm9zLm1pY3JvY2hhcnRcIixcblx0bWljcm9DaGFydDogXCJzYXAuc3VpdGUudWkubWljcm9jaGFydFwiLFxuXHRtYWNyb1RhYmxlOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIlxufTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuY29uc3QgZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSA9IHsgY29tcHV0ZUZpZWxkR3JvdXBJZHM6ICgpID0+IFtdIH07XG5cbmZ1bmN0aW9uIF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb206IE5vZGUsIHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvKipcblx0ICogaWYgYSByb290IGVsZW1lbnQgaGFzIGJlZW4gYWRkZWQgZHVyaW5nIHRoZSB0ZW1wbGF0aW5nIGJ5IG91ciBKZXN0IFRlbXBsYXRpbmcgbWV0aG9kc1xuXHQgKiB0aGUgcm9vdCBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBzZWxlY3RvciBwYXRoLlxuXHQgKi9cblx0Y29uc3Qgcm9vdFBhdGggPSBcIi9yb290XCI7XG5cdHJldHVybiBgJHt4bWxkb20ubm9kZU5hbWUgPT09IFwicm9vdFwiICYmICFzZWxlY3Rvci5zdGFydHNXaXRoKHJvb3RQYXRoKSA/IHJvb3RQYXRoIDogXCJcIn0ke3NlbGVjdG9yfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pOiBQcm9taXNlPFByZVByb2Nlc3NvclNldHRpbmdzVHlwZT4ge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cblx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBjb252ZXJ0ZXJDb250ZXh0OiBuZXcgVGVtcGxhdGVNb2RlbCh7fSwgb01ldGFNb2RlbCkgfSk7XG5cdH1cblxuXHRPYmplY3Qua2V5cyhtTW9kZWxzKS5mb3JFYWNoKGZ1bmN0aW9uIChzTW9kZWxOYW1lKSB7XG5cdFx0aWYgKG1Nb2RlbHNbc01vZGVsTmFtZV0gJiYgbU1vZGVsc1tzTW9kZWxOYW1lXS5pc1RlbXBsYXRlTW9kZWwpIHtcblx0XHRcdG1Nb2RlbHNbc01vZGVsTmFtZV0gPSBuZXcgVGVtcGxhdGVNb2RlbChtTW9kZWxzW3NNb2RlbE5hbWVdLmRhdGEsIG9NZXRhTW9kZWwpO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3Qgc2V0dGluZ3M6IGFueSA9IHtcblx0XHRtb2RlbHM6IE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7XG5cdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbFxuXHRcdFx0fSxcblx0XHRcdG1Nb2RlbHNcblx0XHQpLFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30sXG5cdFx0YXBwQ29tcG9uZW50OiB7IGdldFNpZGVFZmZlY3RzU2VydmljZTogamVzdC5mbigpLCBnZXREaWFnbm9zdGljczogKCkgPT4gdW5kZWZpbmVkIH1cblx0fTtcblxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShmYWtlU2lkZUVmZmVjdFNlcnZpY2UgPz8gZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbC5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzS2V5XSA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtQmluZGluZ0NvbnRleHRzW3NLZXldKTsgLy9WYWx1ZSBpcyBzUGF0aFxuXHRcdHNldHRpbmdzLm1vZGVsc1tzS2V5XSA9IG9Nb2RlbDtcblx0fSk7XG5cdHJldHVybiBzZXR0aW5ncztcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUNvbW1lbnRGcm9tWG1sKHhtbDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGZvcm1hdFhtbCh4bWwsIHtcblx0XHRmaWx0ZXI6IChub2RlOiBhbnkpID0+IG5vZGUudHlwZSAhPT0gXCJDb21tZW50XCJcblx0fSk7XG59XG5cbmZ1bmN0aW9uIF9sb2FkUmVzb3VyY2VWaWV3KHZpZXdOYW1lOiBzdHJpbmcpOiBFbGVtZW50IHtcblx0Y29uc3QgbmFtZSA9IHZpZXdOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIikgKyBcIi52aWV3LnhtbFwiO1xuXHRjb25zdCB2aWV3ID0gTG9hZGVyRXh0ZW5zaW9ucy5sb2FkUmVzb3VyY2UobmFtZSk7XG5cdHJldHVybiB2aWV3LmRvY3VtZW50RWxlbWVudDtcbn1cblxuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sZG9tLCBzZWxlY3RvciksIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fSxcblx0LyoqXG5cdCAqIENoZWNrcyBmb3IgZXJyb3JzIGluIGB4bWxgIGNyZWF0ZWQgZHVyaW5nIHRlbXBsYXRpbmcgb2YgYW4gWE1MIHN0cmluZyBvclxuXHQgKiBhbiBYTUwgbm9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBjaGVja2VzIGZvciB0aGUgeG1sIGVycm9ycyBjcmVhdGVkIGJ5IHRoZVxuXHQgKiBmdW5jdGlvbiBbQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yLmNyZWF0ZUVycm9yWE1MXXtAbGluayBzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy5CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3IjY3JlYXRlRXJyb3JYTUx9LlxuXHQgKlxuXHQgKiBAcGFyYW0geG1sIFhNTCBTdHJpbmcgb3IgWE1MIE5vZGUgdG8gYmUgdGVzdGVkIGZvciBlcnJvcnNcblx0ICogQHJldHVybnMgSmVzdCBNYXRjaGVyIHJlc3VsdCBvYmplY3Rcblx0ICovXG5cdHRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMoeG1sOiBzdHJpbmcgfCBOb2RlKSB7XG5cdFx0Y29uc3QgeG1sVGV4dCA9IHR5cGVvZiB4bWwgPT09IFwic3RyaW5nXCIgPyB4bWwgOiBzZXJpYWxpemVYTUwoeG1sKTtcblx0XHRjb25zdCBiYXNlNjRFbnRyaWVzOiBzdHJpbmdbXSA9IHhtbFRleHQubWF0Y2goL0JCRlxcLmJhc2U2NERlY29kZVxcKCcoW14nXSopJ1xcKS9nbSkgfHwgKFtdIGFzIHN0cmluZ1tdKTtcblx0XHRjb25zdCBlcnJvck1lc3NhZ2VzOiBzdHJpbmdbXSA9IGJhc2U2NEVudHJpZXMubWFwKChtZXNzYWdlOiBzdHJpbmcpID0+IHtcblx0XHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2UubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gYXRvYihtZXNzYWdlLm1hdGNoKC8oJ1teJ10qKS8pPy5bMF0/LnNsaWNlKDEpIHx8IFwiXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fSk7XG5cdFx0aWYgKGVycm9yTWVzc2FnZXMubGVuZ3RoIDw9IDApIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1lc3NhZ2U6ICgpID0+IGBYTUwgVGVtcGxhdGluZyB3aXRob3V0IGVycm9yc2AsXG5cdFx0XHRcdHBhc3M6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtZXNzYWdlOiAoKSA9PiBlcnJvck1lc3NhZ2VzLmpvaW4oXCJcXG5cIiksXG5cdFx0XHRcdHBhc3M6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59KTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwgPSBmdW5jdGlvbiAoeG1sU3RyaW5nOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuXHRpZiAoQXJyYXkuaXNBcnJheSh4bWxTdHJpbmcpKSB7XG5cdFx0eG1sU3RyaW5nID0geG1sU3RyaW5nLmpvaW4oXCJcIik7XG5cdH1cblx0bGV0IHhtbEZvcm1hdHRlZCA9IGZvcm1hdFhNTCh4bWxTdHJpbmcpO1xuXHR4bWxGb3JtYXR0ZWQgPSB4bWxGb3JtYXR0ZWQucmVwbGFjZSgvdWlkLS1pZC1bMC05XXsxM30tWzAtOV17MSwzfS9nLCBcInVpZC0taWRcIik7XG5cdHJldHVybiB4bWxGb3JtYXR0ZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udHJvbEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChjb250cm9sU2VsZWN0b3I6IHN0cmluZywgYXR0cmlidXRlTmFtZTogc3RyaW5nLCB4bWxEb206IE5vZGUpIHtcblx0Y29uc3Qgc2VsZWN0b3IgPSBgc3RyaW5nKCR7X2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbERvbSwgY29udHJvbFNlbGVjdG9yKX0vQCR7YXR0cmlidXRlTmFtZX0pYDtcblx0cmV0dXJuIHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSk7XG59O1xuXG4vKipcbiAqIFNlcmlhbGl6ZSB0aGUgcGFydHMgb3IgdGhlIGNvbXBsZXRlIGdpdmVuIFhNTCBET00gdG8gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB4bWxEb20gRE9NIG5vZGUgdGhhdCBpcyB0byBiZSBzZXJpYWxpemVkLlxuICogQHBhcmFtIHNlbGVjdG9yIE9wdGlvbmFsIHNlbGVjdG9yIG9mIHN1YiBub2Rlc1xuICogQHJldHVybnMgWE1MIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplWE1MID0gZnVuY3Rpb24gKHhtbERvbTogTm9kZSwgc2VsZWN0b3I/OiBzdHJpbmcpIHtcblx0Y29uc3Qgc2VyaWFsaXplciA9IG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcigpO1xuXHRsZXQgeG1sU3RyaW5nOiBzdHJpbmc7XG5cdGlmIChzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKSBhcyBOb2RlW107XG5cdFx0eG1sU3RyaW5nID0gbm9kZXMubWFwKChub2RlKSA9PiBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKG5vZGUpKS5qb2luKFwiXFxuXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHhtbFN0cmluZyA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoeG1sRG9tKTtcblx0fVxuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nKSB7XG5cdHJldHVybiBmb3JtYXQoeG1sU3RyaW5nLCB7XG5cdFx0cGFyc2VyOiBcInhtbFwiLFxuXHRcdHhtbFdoaXRlc3BhY2VTZW5zaXRpdml0eTogXCJpZ25vcmVcIixcblx0XHRwbHVnaW5zOiBbcGx1Z2luXVxuXHR9IGFzIE9wdGlvbnMgJiB7IHhtbFdoaXRlc3BhY2VTZW5zaXRpdml0eTogXCJpZ25vcmVcIiB8IFwic3RyaWN0XCIgfSk7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgYSBDRFMgZmlsZSBpbnRvIGFuIEVETVggZmlsZS5cbiAqXG4gKiBAcGFyYW0gY2RzVXJsIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIENEUyBkZWZpbml0aW9uLiBUaGlzIGZpbGUgbXVzdCBkZWNsYXJlIHRoZSBuYW1lc3BhY2VcbiAqIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24gKGNkc1VybDogc3RyaW5nLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjZHNTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY2RzVXJsLCBcInV0Zi04XCIpO1xuXHRjb25zdCBlZG14Q29udGVudCA9IGNkczJlZG14KGNkc1N0cmluZywgXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zKTtcblx0Y29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKGNkc1VybCwgXCIuLlwiLCBcImdlblwiKTtcblxuXHQvLyBJZiB0aGUgY2FsbGVyIHByb3ZpZGVkIENEUyBjb21waWxlciBvcHRpb25zOiBJbmNsdWRlIHRoZW0gaW4gdGhlIGZpbGVuYW1lLiBUaGlzIHByZXZlbnRzIHVucHJlZGljdGFibGUgcmVzdWx0cyBpZiB0aGUgc2FtZSBDRFMgc291cmNlXG5cdC8vIGZpbGUgaXMgdXNlZCBzaW11bHRhbmVvdXNseSB3aXRoIGEgZGlmZmVyZW50IHNldCBvZiBvcHRpb25zIChlLmcuIGluIGEgdGVzdCBydW5uaW5nIGluIHBhcmFsbGVsKVxuXHRjb25zdCBhbGxPcHRpb25zID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucyk7XG5cdGFsbE9wdGlvbnMuc29ydCgoYSwgYikgPT4gYlswXS5sb2NhbGVDb21wYXJlKGFbMF0pKTtcblxuXHRjb25zdCBlZG14RmlsZU5hbWUgPVxuXHRcdGFsbE9wdGlvbnMucmVkdWNlKFxuXHRcdFx0KGZpbGVuYW1lLCBbb3B0aW9uS2V5LCBvcHRpb25WYWx1ZV0pID0+IGAke2ZpbGVuYW1lfSMke29wdGlvbktleX09JHtvcHRpb25WYWx1ZS50b1N0cmluZygpfSNgLFxuXHRcdFx0cGF0aC5iYXNlbmFtZShjZHNVcmwpLnJlcGxhY2UoXCIuY2RzXCIsIFwiXCIpXG5cdFx0KSArIFwiLnhtbFwiO1xuXG5cdGNvbnN0IGVkbXhGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShkaXIsIGVkbXhGaWxlTmFtZSk7XG5cblx0ZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0ZnMud3JpdGVGaWxlU3luYyhlZG14RmlsZVBhdGgsIGVkbXhDb250ZW50KTtcblx0cmV0dXJuIGVkbXhGaWxlUGF0aDtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBDRFMgdG8gRURNWC5cbiAqXG4gKiBAcGFyYW0gY2RzIFRoZSBDRFMgbW9kZWwuIEl0IG11c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSBzZXJ2aWNlLlxuICogQHBhcmFtIHNlcnZpY2UgVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIGJlIGNvbXBpbGVkLiBEZWZhdWx0cyB0byBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgRURNWCBvdXRwdXRcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzZXJ2aWNlIG1vZGVsIGFzIEVETVguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjZHMyZWRteChjZHM6IHN0cmluZywgc2VydmljZSA9IFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30pIHtcblx0Y29uc3Qgc291cmNlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgXCJzb3VyY2UuY2RzXCI6IGNkcyB9O1xuXG5cdC8vIGFsbG93IHRvIGluY2x1ZGUgc3R1ZmYgZnJvbSBAc2FwL2Nkcy9jb21tb25cblx0aWYgKGNkcy5pbmNsdWRlcyhcIidAc2FwL2Nkcy9jb21tb24nXCIpKSB7XG5cdFx0c291cmNlc1tcImNvbW1vbi5jZHNcIl0gPSBmcy5yZWFkRmlsZVN5bmMocmVxdWlyZS5yZXNvbHZlKFwiQHNhcC9jZHMvY29tbW9uLmNkc1wiKSwgXCJ1dGYtOFwiKTtcblx0fVxuXG5cdGNvbnN0IGNzbiA9IGNvbXBpbGVyLmNvbXBpbGVTb3VyY2VzKHNvdXJjZXMsIHt9KTtcblxuXHRjb25zdCBlZG14T3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge1xuXHRcdG9kYXRhRm9yZWlnbktleXM6IHRydWUsXG5cdFx0b2RhdGFGb3JtYXQ6IFwic3RydWN0dXJlZFwiLFxuXHRcdG9kYXRhQ29udGFpbm1lbnQ6IHRydWUsXG5cdFx0Li4ub3B0aW9ucyxcblx0XHRzZXJ2aWNlOiBzZXJ2aWNlXG5cdH07XG5cblx0Y29uc3QgZWRteCA9IGNvbXBpbGVyLnRvLmVkbXgoY3NuLCBlZG14T3B0aW9ucyk7XG5cdGlmICghZWRteCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29tcGlsYXRpb24gZmFpbGVkLiBIaW50OiBNYWtlIHN1cmUgdGhhdCB0aGUgQ0RTIG1vZGVsIGRlZmluZXMgc2VydmljZSAke3NlcnZpY2V9LmApO1xuXHR9XG5cdHJldHVybiBlZG14O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSA9IGFzeW5jIGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IG9TZXJ2aWNlQ29udGV4dCA9IHsgc2NvcGVPYmplY3Q6IHt9LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9IGFzIFNlcnZpY2VDb250ZXh0PGFueT47XG5cdHJldHVybiBuZXcgU2lkZUVmZmVjdHNGYWN0b3J5KCkuY3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0KS50aGVuKGZ1bmN0aW9uIChvU2VydmljZUluc3RhbmNlOiBhbnkpIHtcblx0XHRjb25zdCBvSmVzdFNpZGVFZmZlY3RzU2VydmljZSA9IG9TZXJ2aWNlSW5zdGFuY2UuZ2V0SW50ZXJmYWNlKCk7XG5cdFx0b0plc3RTaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNjb3BlT2JqZWN0OiB7XG5cdFx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdGdldE1ldGFNb2RlbDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvTWV0YU1vZGVsO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9O1xuXHRcdHJldHVybiBvSmVzdFNpZGVFZmZlY3RzU2VydmljZTtcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmFrZURpYWdub3N0aWNzID0gZnVuY3Rpb24gKCk6IElEaWFnbm9zdGljcyB7XG5cdGNvbnN0IGlzc3VlczogYW55W10gPSBbXTtcblx0cmV0dXJuIHtcblx0XHRhZGRJc3N1ZShpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGlzc3Vlcy5wdXNoKHtcblx0XHRcdFx0aXNzdWVDYXRlZ29yeSxcblx0XHRcdFx0aXNzdWVTZXZlcml0eSxcblx0XHRcdFx0ZGV0YWlsc1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRnZXRJc3N1ZXMoKTogYW55W10ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcztcblx0XHR9LFxuXHRcdGNoZWNrSWZJc3N1ZUV4aXN0cyhpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpc3N1ZXMuZmluZCgoaXNzdWUpID0+IHtcblx0XHRcdFx0cmV0dXJuIGlzc3VlLmlzc3VlQ2F0ZWdvcnkgPT09IGlzc3VlQ2F0ZWdvcnkgJiYgaXNzdWUuaXNzdWVTZXZlcml0eSA9PT0gaXNzdWVTZXZlcml0eSAmJiBpc3N1ZS5kZXRhaWxzID09PSBkZXRhaWxzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0ID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdG1hbmlmZXN0U2V0dGluZ3M6IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3Ncbikge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZWRUeXBlcy5lbnRpdHlTZXRzLmZpbmQoKGVzKSA9PiBlcy5uYW1lID09PSBtYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldCk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkoZW50aXR5U2V0IGFzIEVudGl0eVNldCwgY29udmVydGVkVHlwZXMsIGVudGl0eVNldCk7XG5cdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZWRUeXBlcywgbWFuaWZlc3RTZXR0aW5ncywgZ2V0RmFrZURpYWdub3N0aWNzKCksIG1lcmdlLCBkYXRhTW9kZWxQYXRoKTtcbn07XG5jb25zdCBtZXRhTW9kZWxDYWNoZTogYW55ID0ge307XG5leHBvcnQgY29uc3QgZ2V0TWV0YU1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHNNZXRhZGF0YVVybDogc3RyaW5nKSB7XG5cdGNvbnN0IG9SZXF1ZXN0b3IgPSBfTWV0YWRhdGFSZXF1ZXN0b3IuY3JlYXRlKHt9LCBcIjQuMFwiLCB1bmRlZmluZWQsIHt9KTtcblx0aWYgKCFtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdKSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG5ldyAoT0RhdGFNZXRhTW9kZWwgYXMgYW55KShvUmVxdWVzdG9yLCBzTWV0YWRhdGFVcmwsIHVuZGVmaW5lZCwgbnVsbCk7XG5cdFx0YXdhaXQgb01ldGFNb2RlbC5mZXRjaEVudGl0eUNvbnRhaW5lcigpO1xuXHRcdG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0gPSBvTWV0YU1vZGVsO1xuXHR9XG5cblx0cmV0dXJuIG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlTZXQ6IEVudGl0eVNldCxcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRwcm9wZXJ0eT86IFByb3BlcnR5IHwgRW50aXR5U2V0IHwgQW55QW5ub3RhdGlvblxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGNvbnN0IHRhcmdldFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0dGFyZ2V0T2JqZWN0OiBwcm9wZXJ0eSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0dGFyZ2V0UGF0aC5jb250ZXh0TG9jYXRpb24gPSB0YXJnZXRQYXRoO1xuXHRyZXR1cm4gdGFyZ2V0UGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBldmFsdWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ1N0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxudHlwZSBNb2RlbENvbnRlbnQgPSB7XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgYmluZGluZyBhZ2FpbnN0IGEgbW9kZWwuXG4gKlxuICogQHBhcmFtIGJpbmRpbmdTdHJpbmcgVGhlIGJpbmRpbmcgc3RyaW5nLlxuICogQHBhcmFtIG1vZGVsQ29udGVudCBDb250ZW50IG9mIHRoZSBkZWZhdWx0IG1vZGVsIHRvIHVzZSBmb3IgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBuYW1lZE1vZGVsc0NvbnRlbnQgQ29udGVudHMgb2YgYWRkaXRpb25hbCwgbmFtZWQgbW9kZWxzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmluZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbChcblx0YmluZGluZ1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbENvbnRlbnQ6IE1vZGVsQ29udGVudCxcblx0bmFtZWRNb2RlbHNDb250ZW50PzogeyBbbW9kZWxOYW1lOiBzdHJpbmddOiBNb2RlbENvbnRlbnQgfVxuKTogc3RyaW5nIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXG5cdGNvbnN0IGRlZmF1bHRNb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0dGV4dC5zZXRNb2RlbChkZWZhdWx0TW9kZWwpO1xuXHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KGRlZmF1bHRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikpO1xuXG5cdGlmIChuYW1lZE1vZGVsc0NvbnRlbnQpIHtcblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhuYW1lZE1vZGVsc0NvbnRlbnQpKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IG5ldyBKU09OTW9kZWwoY29udGVudCk7XG5cdFx0XHR0ZXh0LnNldE1vZGVsKG1vZGVsLCBuYW1lKTtcblx0XHRcdHRleHQuc2V0QmluZGluZ0NvbnRleHQobW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLCBuYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGV4dC5nZXRUZXh0KCk7XG59XG5cbmNvbnN0IFRFU1RWSUVXSUQgPSBcInRlc3RWaWV3SWRcIjtcblxuY29uc3QgYXBwbHlGbGV4Q2hhbmdlcyA9IGFzeW5jIGZ1bmN0aW9uIChmbGV4Q2hhbmdlczogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSwgb01ldGFNb2RlbDogTWV0YU1vZGVsLCByZXN1bHRYTUw6IGFueSkge1xuXHQvLyBwcmVmaXggSWRzXG5cdFsuLi5yZXN1bHRYTUwucXVlcnlTZWxlY3RvckFsbChcIltpZF1cIildLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRub2RlLmlkID0gYCR7VEVTVFZJRVdJRH0tLSR7bm9kZS5pZH1gO1xuXHR9KTtcblx0Y29uc3QgY2hhbmdlcyA9IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdChURVNUVklFV0lELCBmbGV4Q2hhbmdlcyk7XG5cdGNvbnN0IGFwcElkID0gXCJzb21lQ29tcG9uZW50XCI7XG5cdGNvbnN0IG9NYW5pZmVzdCA9IHtcblx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0aWQ6IGFwcElkLFxuXHRcdFx0dHlwZTogXCJhcHBsaWNhdGlvblwiLFxuXHRcdFx0Y3Jvc3NOYXZpZ2F0aW9uOiB7XG5cdFx0XHRcdG91dGJvdW5kczogW11cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCA9IHtcblx0XHRnZXREaWFnbm9zdGljczogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShnZXRGYWtlRGlhZ25vc3RpY3MoKSksXG5cdFx0Z2V0TW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0TWV0YU1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG9NZXRhTW9kZWwpXG5cdFx0fSksXG5cdFx0Z2V0Q29tcG9uZW50RGF0YTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7fSksXG5cdFx0Z2V0TWFuaWZlc3RPYmplY3Q6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0RW50cnk6IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIChvTWFuaWZlc3QgYXMgYW55KVtuYW1lXTtcblx0XHRcdH1cblx0XHR9KSxcblx0XHRnZXRMb2NhbElkOiBqZXN0LmZuKChzSWQpID0+IHNJZClcblx0fSBhcyB1bmtub3duIGFzIEFwcENvbXBvbmVudDtcblx0Ly9mYWtlIGNoYW5nZXNcblx0amVzdC5zcHlPbihBcHBTdG9yYWdlLCBcImxvYWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKGNoYW5nZXMpKTtcblx0amVzdC5zcHlPbihDb21wb25lbnQsIFwiZ2V0XCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0amVzdC5zcHlPbihVdGlscywgXCJnZXRBcHBDb21wb25lbnRGb3JDb250cm9sXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0YXdhaXQgRmxleFN0YXRlLmluaXRpYWxpemUoe1xuXHRcdGNvbXBvbmVudElkOiBhcHBJZFxuXHR9KTtcblx0cmVzdWx0WE1MID0gYXdhaXQgWG1sUHJlcHJvY2Vzc29yLnByb2Nlc3MocmVzdWx0WE1MLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiLCBjb21wb25lbnRJZDogYXBwSWQsIGlkOiBURVNUVklFV0lEIH0pO1xuXG5cdC8vQXNzZXJ0IHRoYXQgYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIGFwcGxpZWRcblx0Y29uc3QgY2hhbmdlc0FwcGxpZWQgPSBnZXRDaGFuZ2VzRnJvbVhNTChyZXN1bHRYTUwpO1xuXHRleHBlY3QoY2hhbmdlc0FwcGxpZWQubGVuZ3RoKS50b0JlKGZsZXhDaGFuZ2VzPy5jaGFuZ2VzPy5sZW5ndGggPz8gMCArIGZsZXhDaGFuZ2VzPy52YXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXM/Lmxlbmd0aCA/PyAwKTtcblx0cmV0dXJuIHJlc3VsdFhNTDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDaGFuZ2VzRnJvbVhNTCA9ICh4bWw6IGFueSkgPT5cblx0Wy4uLnhtbC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKV1cblx0XHQuZmxhdE1hcCgoZSkgPT4gWy4uLmUuYXR0cmlidXRlc10ubWFwKChhKSA9PiBhLm5hbWUpKVxuXHRcdC5maWx0ZXIoKGF0dHIpID0+IGF0dHIuaW5jbHVkZXMoXCJzYXAudWkuZmwuYXBwbGllZENoYW5nZXNcIikpO1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGluZ1Jlc3VsdCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbikge1xuXHRpZiAoIW1Nb2RlbHNbXCJzYXAuZmUuaTE4blwiXSkge1xuXHRcdG1Nb2RlbHNbXCJzYXAuZmUuaTE4blwiXSA9IGNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsKCk7XG5cdH1cblxuXHRjb25zdCB0ZW1wbGF0ZWRYbWwgPSBgPHJvb3Q+JHt4bWxJbnB1dH08L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblx0Y29uc3QgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0ZW1wbGF0ZWRYbWwsIFwidGV4dC94bWxcIik7XG5cdC8vIFRvIGVuc3VyZSBvdXIgbWFjcm8gY2FuIHVzZSAjc2V0QmluZGluZ0NvbnRleHQgd2UgZW5zdXJlIHRoZXJlIGlzIGEgcHJlIGV4aXN0aW5nIEpTT05Nb2RlbCBmb3IgY29udmVydGVyQ29udGV4dFxuXHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblxuXHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscywgZmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdGxldCByZXN1bHRYTUwgPSAoYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoeG1sRG9jLmZpcnN0RWxlbWVudENoaWxkISwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpKSBhcyBhbnk7XG5cblx0aWYgKGZsZXhDaGFuZ2VzKSB7XG5cdFx0Ly8gYXBwbHkgZmxleCBjaGFuZ2VzXG5cdFx0cmVzdWx0WE1MID0gYXdhaXQgYXBwbHlGbGV4Q2hhbmdlcyhmbGV4Q2hhbmdlcywgb01ldGFNb2RlbCwgcmVzdWx0WE1MKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRlbXBsYXRlZFhNTCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pIHtcblx0Y29uc3QgdGVtcGxhdGVkWE1MID0gYXdhaXQgZ2V0VGVtcGxhdGluZ1Jlc3VsdCh4bWxJbnB1dCwgc01ldGFkYXRhVXJsLCBtQmluZGluZ0NvbnRleHRzLCBtTW9kZWxzLCBmbGV4Q2hhbmdlcywgZmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblx0Y29uc3Qgc2VyaWFsaWVkWE1MID0gc2VyaWFsaXplWE1MKHRlbXBsYXRlZFhNTCk7XG5cdGV4cGVjdChzZXJpYWxpZWRYTUwpLm5vdC50b0hhdmVUZW1wbGF0aW5nRXJyb3JzKCk7XG5cdHJldHVybiBzZXJpYWxpZWRYTUw7XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCB2aWV3IHdpdGggdGhlIHByb3ZpZGVkIGRhdGEuXG4gKlxuICogQHBhcmFtIG5hbWUgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHZpZXcgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHNNZXRhZGF0YVVybCBVcmwgb2YgdGhlIG1ldGFkYXRhLlxuICogQHBhcmFtIG1CaW5kaW5nQ29udGV4dHMgTWFwIG9mIHRoZSBiaW5kaW5nQ29udGV4dHMgdG8gc2V0IG9uIHRoZSBtb2RlbHMuXG4gKiBAcGFyYW0gbU1vZGVscyBNYXAgb2YgdGhlIG1vZGVscy5cbiAqIEBwYXJhbSBmbGV4Q2hhbmdlcyBPYmplY3Qgd2l0aCBVSSBjaGFuZ2VzIGxpa2UgJ2NoYW5nZXMnIG9yICd2YXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMnXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgdmlldyBhcyBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KFxuXHRuYW1lOiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfVxuKTogUHJvbWlzZTxKZXN0VGVtcGxhdGVkVmlldz4ge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdGNvbnN0IG9WaWV3RG9jdW1lbnQgPSBfbG9hZFJlc291cmNlVmlldyhuYW1lKTtcblx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0gYXdhaXQgX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3Moc01ldGFkYXRhVXJsLCBtQmluZGluZ0NvbnRleHRzLCBtTW9kZWxzKTtcblx0bGV0IG9QcmVwcm9jZXNzZWRWaWV3ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3Mob1ZpZXdEb2N1bWVudCwgeyBuYW1lOiBuYW1lIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncyk7XG5cdGlmIChmbGV4Q2hhbmdlcykge1xuXHRcdG9QcmVwcm9jZXNzZWRWaWV3ID0gYXdhaXQgYXBwbHlGbGV4Q2hhbmdlcyhmbGV4Q2hhbmdlcyA/PyBbXSwgb01ldGFNb2RlbCwgb1ByZXByb2Nlc3NlZFZpZXcpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0YXNFbGVtZW50OiBvUHJlcHJvY2Vzc2VkVmlldyxcblx0XHRhc1N0cmluZzogX3JlbW92ZUNvbW1lbnRGcm9tWG1sKG9QcmVwcm9jZXNzZWRWaWV3Py5vdXRlckhUTUwgfHwgXCJcIilcblx0fTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIHRoZSByZXF1ZXN0ZWQgWE1MIGZyYWdtZW50IHdpdGggdGhlIHByb3ZpZGVkIGRhdGEuXG4gKlxuICogQHBhcmFtIG5hbWUgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZyYWdtZW50IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSB0ZXN0RGF0YSBUZXN0IGRhdGEgY29uc2lzdGluZ1xuICogQHJldHVybnMgVGVtcGxhdGVkIGZyYWdtZW50IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0ZyYWdtZW50KG5hbWU6IHN0cmluZywgdGVzdERhdGE6IHsgW21vZGVsOiBzdHJpbmddOiBvYmplY3QgfSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGlucHV0WG1sID0gYDxyb290Pjxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cIiR7bmFtZX1cIiB0eXBlPVwiWE1MXCIgeG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCIgLz48L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblx0Y29uc3QgaW5wdXREb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGlucHV0WG1sLCBcInRleHQveG1sXCIpO1xuXG5cdC8vIGJ1aWxkIG1vZGVsIGFuZCBiaW5kaW5ncyBmb3IgZ2l2ZW4gdGVzdCBkYXRhXG5cdGNvbnN0IHNldHRpbmdzID0ge1xuXHRcdG1vZGVsczoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogSlNPTk1vZGVsIH0sXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBvYmplY3QgfSxcblx0XHRhcHBDb21wb25lbnQ6IHsgZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlOiBqZXN0LmZuKCksIGdldERpYWdub3N0aWNzOiAoKSA9PiB1bmRlZmluZWQgfVxuXHR9O1xuXHRmb3IgKGNvbnN0IG1vZGVsIGluIHRlc3REYXRhKSB7XG5cdFx0Y29uc3QganNvbk1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGpzb25Nb2RlbC5zZXREYXRhKHRlc3REYXRhW21vZGVsXSk7XG5cdFx0c2V0dGluZ3MubW9kZWxzW21vZGVsXSA9IGpzb25Nb2RlbDtcblx0XHRzZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbbW9kZWxdID0gc2V0dGluZ3MubW9kZWxzW21vZGVsXS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cdH1cblx0c2V0dGluZ3MuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZS5tb2NrUmV0dXJuVmFsdWUoZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cblx0Ly8gZXhlY3V0ZSB0aGUgcHJlLXByb2Nlc3NvclxuXHRjb25zdCByZXN1bHREb2MgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhpbnB1dERvYy5maXJzdEVsZW1lbnRDaGlsZCwgeyBuYW1lIH0sIHNldHRpbmdzKTtcblxuXHQvLyBleGNsdWRlIG5lc3RlZCBmcmFnbWVudHMgZnJvbSB0ZXN0IHNuYXBzaG90c1xuXHRjb25zdCBmcmFnbWVudHMgPSByZXN1bHREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjb3JlOkZyYWdtZW50XCIpIGFzIGFueTtcblx0aWYgKGZyYWdtZW50cz8ubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XG5cdFx0XHRmcmFnbWVudC5pbm5lckhUTUwgPSBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdC8vIEtlZXAgdGhlIGZyYWdtZW50IHJlc3VsdCBhcyBjaGlsZCBvZiByb290IG5vZGUgd2hlbiBmcmFnbWVudCBnZW5lcmF0ZXMgbXVsdGlwbGUgcm9vdCBjb250cm9sc1xuXHRjb25zdCB4bWxSZXN1bHQgPSByZXN1bHREb2MuY2hpbGRyZW4ubGVuZ3RoID4gMSA/IHJlc3VsdERvYy5vdXRlckhUTUwgOiByZXN1bHREb2MuaW5uZXJIVE1MO1xuXG5cdHJldHVybiBfcmVtb3ZlQ29tbWVudEZyb21YbWwoeG1sUmVzdWx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbnRyb2woY29udHJvbFRvU2VyaWFsaXplOiBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdKSB7XG5cdGxldCB0YWJDb3VudCA9IDA7XG5cdGZ1bmN0aW9uIGdldFRhYih0b0FkZDogbnVtYmVyID0gMCkge1xuXHRcdGxldCB0YWIgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGFiQ291bnQgKyB0b0FkZDsgaSsrKSB7XG5cdFx0XHR0YWIgKz0gXCJcXHRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYjtcblx0fVxuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pPy5pbmRleE9mPy4oY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29udHJvbERldGFpbCArPSBgJHtjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfShgO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2xEZXRhaWw7XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBcIn0pXCI7XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGNvbnN0IGlkID0gY29udHJvbC5nZXRJZCgpO1xuXHRcdFx0bGV0IGRhdGEgPSBge2lkOiAke01hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGlkKSA/IFwiX19keW5hbWljSWRcIiA6IGlkfWA7XG5cdFx0XHRmb3IgKGNvbnN0IG9Db250cm9sS2V5IGluIGNvbnRyb2wubVByb3BlcnRpZXMpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wubVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiAke2NvbnRyb2wubVByb3BlcnRpZXNbb0NvbnRyb2xLZXldfWA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tQmluZGluZ0luZm9zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdEZXRhaWwgPSBjb250cm9sLm1CaW5kaW5nSW5mb3Nbb0NvbnRyb2xLZXldO1xuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHtKU09OLnN0cmluZ2lmeShiaW5kaW5nRGV0YWlsKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IG9Db250cm9sS2V5IGluIGNvbnRyb2wubUFzc29jaWF0aW9ucykge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tQXNzb2NpYXRpb25zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHtcblx0XHRcdFx0XHRcdChjb250cm9sLm1Bc3NvY2lhdGlvbnNbb0NvbnRyb2xLZXldPy5qb2luPy4oXCIsXCIpID8/IGNvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV0pIHx8IHVuZGVmaW5lZFxuXHRcdFx0XHRcdH1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IG9Db250cm9sS2V5IGluIGNvbnRyb2wubUV2ZW50UmVnaXN0cnkpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wubUV2ZW50UmVnaXN0cnkuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiB0cnVlfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gYGA7XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9LFxuXHRcdHN0YXJ0QWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBvdXQgPSBgLFxcbiR7Z2V0VGFiKCl9JHtzTmFtZX1gO1xuXHRcdFx0dGFiQ291bnQrKztcblxuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0b3V0ICs9IGA9eyBwYXRoOicke2NvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0ucGF0aH0nLCB0ZW1wbGF0ZTpcXG4ke2dldFRhYigpfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvdXQgKz0gYD1bXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG91dDtcblx0XHR9LFxuXHRcdGVuZEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHR0YWJDb3VudC0tO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfV1gO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKEFycmF5LmlzQXJyYXkoY29udHJvbFRvU2VyaWFsaXplKSkge1xuXHRcdHJldHVybiBjb250cm9sVG9TZXJpYWxpemUubWFwKChjb250cm9sVG9SZW5kZXI6IFVJNUVsZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9SZW5kZXIsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF3YWl0ZXIoKSB7XG5cdGxldCBmblJlc29sdmUhOiBGdW5jdGlvbjtcblx0Y29uc3QgbXlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRmblJlc29sdmUgPSByZXNvbHZlO1xuXHR9KTtcblx0cmV0dXJuIHsgcHJvbWlzZTogbXlQcm9taXNlLCByZXNvbHZlOiBmblJlc29sdmUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckJ1aWxkaW5nQmxvY2tXaXRoTW9kZWxzKGJ1aWxkaW5nQmxvY2s6IHsgZ2V0Q29udGVudDogRnVuY3Rpb24gfSwgbW9kZWxzOiB7IFtrZXk6IHN0cmluZ106IE1vZGVsIH0pOiBDb250cm9sIHtcblx0cmV0dXJuIChNYW5hZ2VkT2JqZWN0IGFzIE1hbmFnZWRPYmplY3RFeCkucnVuV2l0aFByZXByb2Nlc3NvcnMoXG5cdFx0KCkgPT4ge1xuXHRcdFx0cmV0dXJuIGJ1aWxkaW5nQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0c2V0dGluZ3M6IGZ1bmN0aW9uIChjb250cm9sU2V0dGluZ3M6IHsgbW9kZWxzOiB1bmtub3duIH0pIHtcblx0XHRcdFx0Y29udHJvbFNldHRpbmdzLm1vZGVscyA9IG1vZGVscztcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2xTZXR0aW5ncztcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlck1vY2tGcmFnbWVudHMoLi4uZnJhZ21lbnRzOiBNb2NrRnJhZ21lbnRbXSk6IGplc3QuU3B5SW5zdGFuY2Uge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBvcmlnaW5hbExvYWRUZW1wbGF0ZSA9IChYTUxUZW1wbGF0ZVByb2Nlc3NvciBhcyBhbnkpLmxvYWRUZW1wbGF0ZVByb21pc2U7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdGNvbnN0IGxvYWRUZW1wbGF0ZVN0dWIgPSBqZXN0LnNweU9uKFhNTFRlbXBsYXRlUHJvY2Vzc29yIGFzIGFueSwgXCJsb2FkVGVtcGxhdGVQcm9taXNlXCIpO1xuXHRsb2FkVGVtcGxhdGVTdHViLm1vY2tJbXBsZW1lbnRhdGlvbigoKHRlbXBsYXRlTmFtZTogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZykgPT4ge1xuXHRcdGZvciAoY29uc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XG5cdFx0XHRpZiAoZnJhZ21lbnQubmFtZSA9PT0gdGVtcGxhdGVOYW1lKSB7XG5cdFx0XHRcdHJldHVybiBwYXJzZVhNTFN0cmluZyhmcmFnbWVudC5jb250ZW50KVswXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsTG9hZFRlbXBsYXRlKHRlbXBsYXRlTmFtZSwgZXh0ZW5zaW9uKTtcblx0fSkgYXMgKCgpID0+IEVsZW1lbnQpIHwgdW5kZWZpbmVkKTtcblx0cmV0dXJuIGxvYWRUZW1wbGF0ZVN0dWI7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7OztFQWlFQTtFQUNBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGVBQWUsQ0FBQztFQUUxQ0MsR0FBRyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxFQUFTLGtDQUFrQyxDQUFDO0VBQzFEQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxLQUFLLENBQUM7RUFFdEIsTUFBTUMsWUFBWSxHQUFHO0lBQ3BCQyxNQUFNLEVBQUUsZUFBZTtJQUN2QkMsS0FBSyxFQUFFLGVBQWU7SUFDdEJDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakNDLFNBQVMsRUFBRSxrRUFBa0U7SUFDN0VDLEdBQUcsRUFBRSxrRUFBa0U7SUFDdkVDLFFBQVEsRUFBRSwwRUFBMEU7SUFDcEZDLE9BQU8sRUFBRSxzQkFBc0I7SUFDL0JDLFFBQVEsRUFBRSx3QkFBd0I7SUFDbENDLElBQUksRUFBRSxhQUFhO0lBQ25CQyxFQUFFLEVBQUUsV0FBVztJQUNmQyxDQUFDLEVBQUUsT0FBTztJQUNWQyxDQUFDLEVBQUUsb0JBQW9CO0lBQ3ZCQyxFQUFFLEVBQUUsV0FBVztJQUNmQyxhQUFhLEVBQUUsd0JBQXdCO0lBQ3ZDQyxHQUFHLEVBQUUsWUFBWTtJQUNqQkMsS0FBSyxFQUFFLDBCQUEwQjtJQUNqQ0MsUUFBUSxFQUFFLGtCQUFrQjtJQUM1QkMsUUFBUSxFQUFFLGtCQUFrQjtJQUM1QkMsQ0FBQyxFQUFFLGdCQUFnQjtJQUNuQkMsZUFBZSxFQUFFLDBCQUEwQjtJQUMzQ0MsVUFBVSxFQUFFLHlCQUF5QjtJQUNyQ0MsVUFBVSxFQUFFO0VBQ2IsQ0FBQztFQUNELE1BQU1DLE1BQU0sR0FBR0MsS0FBSyxDQUFDQyxhQUFhLENBQUN6QixZQUFZLENBQUM7RUFFaEQsTUFBTTBCLDRCQUE0QixHQUFHO0lBQUVDLG9CQUFvQixFQUFFLE1BQU07RUFBRyxDQUFDO0VBRXZFLFNBQVNDLHFCQUFxQixDQUFDQyxNQUFZLEVBQUVDLFFBQWdCLEVBQVU7SUFDdEU7QUFDRDtBQUNBO0FBQ0E7SUFDQyxNQUFNQyxRQUFRLEdBQUcsT0FBTztJQUN4QixPQUFRLEdBQUVGLE1BQU0sQ0FBQ0csUUFBUSxLQUFLLE1BQU0sSUFBSSxDQUFDRixRQUFRLENBQUNHLFVBQVUsQ0FBQ0YsUUFBUSxDQUFDLEdBQUdBLFFBQVEsR0FBRyxFQUFHLEdBQUVELFFBQVMsRUFBQztFQUNwRztFQUVBLGVBQWVJLDBCQUEwQixDQUN4Q0MsWUFBb0IsRUFDcEJDLGdCQUF5QyxFQUN6Q0MsT0FBNkIsRUFDN0JDLHFCQUErQixFQUNLO0lBQ3BDLE1BQU1DLFVBQVUsR0FBRyxNQUFNQyxZQUFZLENBQUNMLFlBQVksQ0FBQzs7SUFFbkQ7SUFDQTtJQUNBLElBQUksQ0FBQ0UsT0FBTyxDQUFDSSxjQUFjLENBQUMsa0JBQWtCLENBQUMsRUFBRTtNQUNoREosT0FBTyxHQUFHSyxNQUFNLENBQUNDLE1BQU0sQ0FBQ04sT0FBTyxFQUFFO1FBQUVPLGdCQUFnQixFQUFFLElBQUlDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRU4sVUFBVTtNQUFFLENBQUMsQ0FBQztJQUMxRjtJQUVBRyxNQUFNLENBQUNJLElBQUksQ0FBQ1QsT0FBTyxDQUFDLENBQUNVLE9BQU8sQ0FBQyxVQUFVQyxVQUFVLEVBQUU7TUFDbEQsSUFBSVgsT0FBTyxDQUFDVyxVQUFVLENBQUMsSUFBSVgsT0FBTyxDQUFDVyxVQUFVLENBQUMsQ0FBQ0MsZUFBZSxFQUFFO1FBQy9EWixPQUFPLENBQUNXLFVBQVUsQ0FBQyxHQUFHLElBQUlILGFBQWEsQ0FBQ1IsT0FBTyxDQUFDVyxVQUFVLENBQUMsQ0FBQ0UsSUFBSSxFQUFFWCxVQUFVLENBQUM7TUFDOUU7SUFDRCxDQUFDLENBQUM7SUFFRixNQUFNWSxRQUFhLEdBQUc7TUFDckJDLE1BQU0sRUFBRVYsTUFBTSxDQUFDQyxNQUFNLENBQ3BCO1FBQ0NVLFNBQVMsRUFBRWQ7TUFDWixDQUFDLEVBQ0RGLE9BQU8sQ0FDUDtNQUNEaUIsZUFBZSxFQUFFLENBQUMsQ0FBQztNQUNuQkMsWUFBWSxFQUFFO1FBQUVDLHFCQUFxQixFQUFFMUQsSUFBSSxDQUFDMkQsRUFBRSxFQUFFO1FBQUVDLGNBQWMsRUFBRSxNQUFNQztNQUFVO0lBQ25GLENBQUM7SUFFRFIsUUFBUSxDQUFDSSxZQUFZLENBQUNDLHFCQUFxQixDQUFDSSxlQUFlLENBQUN0QixxQkFBcUIsSUFBSVosNEJBQTRCLENBQUM7SUFDbEg7SUFDQWdCLE1BQU0sQ0FBQ0ksSUFBSSxDQUFDVixnQkFBZ0IsQ0FBQyxDQUFDVyxPQUFPLENBQUMsVUFBVWMsSUFBSSxFQUFFO01BQ3JEO01BQ0FDLE1BQU0sQ0FBQyxPQUFPdkIsVUFBVSxDQUFDd0IsU0FBUyxDQUFDM0IsZ0JBQWdCLENBQUN5QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNHLFdBQVcsRUFBRTtNQUN6RSxNQUFNQyxNQUFNLEdBQUc1QixPQUFPLENBQUN3QixJQUFJLENBQUMsSUFBSXRCLFVBQVU7TUFDMUNZLFFBQVEsQ0FBQ0csZUFBZSxDQUFDTyxJQUFJLENBQUMsR0FBR0ksTUFBTSxDQUFDQyxvQkFBb0IsQ0FBQzlCLGdCQUFnQixDQUFDeUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3RGVixRQUFRLENBQUNDLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDLEdBQUdJLE1BQU07SUFDL0IsQ0FBQyxDQUFDO0lBQ0YsT0FBT2QsUUFBUTtFQUNoQjtFQUVBLFNBQVNnQixxQkFBcUIsQ0FBQ0MsR0FBVyxFQUFVO0lBQ25ELE9BQU8xRSxTQUFTLENBQUMwRSxHQUFHLEVBQUU7TUFDckJDLE1BQU0sRUFBR0MsSUFBUyxJQUFLQSxJQUFJLENBQUNDLElBQUksS0FBSztJQUN0QyxDQUFDLENBQUM7RUFDSDtFQUVBLFNBQVNDLGlCQUFpQixDQUFDQyxRQUFnQixFQUFXO0lBQ3JELE1BQU1DLElBQUksR0FBR0QsUUFBUSxDQUFDRSxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFdBQVc7SUFDdkQsTUFBTUMsSUFBSSxHQUFHQyxnQkFBZ0IsQ0FBQ0MsWUFBWSxDQUFDSixJQUFJLENBQUM7SUFDaEQsT0FBT0UsSUFBSSxDQUFDRyxlQUFlO0VBQzVCO0VBRU8sTUFBTUMsYUFBYSxHQUFHLFVBQVVsRCxRQUFnQixFQUFFRCxNQUF3QixFQUFFO0lBQ2xGLE9BQU9OLE1BQU0sQ0FBQ08sUUFBUSxFQUFFRCxNQUFNLENBQUM7RUFDaEMsQ0FBQztFQUVEaUMsTUFBTSxDQUFDbUIsTUFBTSxDQUFDO0lBQ2JDLGFBQWEsQ0FBQ3JELE1BQU0sRUFBRUMsUUFBUSxFQUFFO01BQy9CLE1BQU1xRCxLQUFLLEdBQUdILGFBQWEsQ0FBQ3BELHFCQUFxQixDQUFDQyxNQUFNLEVBQUVDLFFBQVEsQ0FBQyxFQUFFRCxNQUFNLENBQUM7TUFDNUUsT0FBTztRQUNOdUQsT0FBTyxFQUFFLE1BQU07VUFDZCxNQUFNQyxTQUFTLEdBQUdDLFlBQVksQ0FBQ3pELE1BQU0sQ0FBQztVQUN0QyxPQUFRLGtDQUFpQ0MsUUFBUyx3QkFBdUJ1RCxTQUFVLEVBQUM7UUFDckYsQ0FBQztRQUNERSxJQUFJLEVBQUVKLEtBQUssSUFBSUEsS0FBSyxDQUFDSyxNQUFNLElBQUk7TUFDaEMsQ0FBQztJQUNGLENBQUM7SUFDREMsZ0JBQWdCLENBQUM1RCxNQUFNLEVBQUVDLFFBQVEsRUFBRTtNQUNsQyxNQUFNcUQsS0FBSyxHQUFHSCxhQUFhLENBQUNwRCxxQkFBcUIsQ0FBQ0MsTUFBTSxFQUFFQyxRQUFRLENBQUMsRUFBRUQsTUFBTSxDQUFDO01BQzVFLE9BQU87UUFDTnVELE9BQU8sRUFBRSxNQUFNO1VBQ2QsTUFBTUMsU0FBUyxHQUFHQyxZQUFZLENBQUN6RCxNQUFNLENBQUM7VUFDdEMsT0FBUSwrQkFBOEJDLFFBQVMsd0JBQXVCdUQsU0FBVSxFQUFDO1FBQ2xGLENBQUM7UUFDREUsSUFBSSxFQUFFSixLQUFLLElBQUlBLEtBQUssQ0FBQ0ssTUFBTSxLQUFLO01BQ2pDLENBQUM7SUFDRixDQUFDO0lBQ0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0Usc0JBQXNCLENBQUN0QixHQUFrQixFQUFFO01BQzFDLE1BQU11QixPQUFPLEdBQUcsT0FBT3ZCLEdBQUcsS0FBSyxRQUFRLEdBQUdBLEdBQUcsR0FBR2tCLFlBQVksQ0FBQ2xCLEdBQUcsQ0FBQztNQUNqRSxNQUFNd0IsYUFBdUIsR0FBR0QsT0FBTyxDQUFDRSxLQUFLLENBQUMsa0NBQWtDLENBQUMsSUFBSyxFQUFlO01BQ3JHLE1BQU1DLGFBQXVCLEdBQUdGLGFBQWEsQ0FBQ0csR0FBRyxDQUFFWCxPQUFlLElBQUs7UUFDdEUsSUFBSUEsT0FBTyxJQUFJQSxPQUFPLENBQUNJLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFBQTtVQUNsQyxPQUFPUSxJQUFJLENBQUMsbUJBQUFaLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLFVBQVUsQ0FBQyxzRUFBekIsZUFBNEIsQ0FBQyxDQUFDLG9EQUE5QixnQkFBZ0NJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSSxFQUFFLENBQUM7UUFDNUQ7UUFDQSxPQUFPLEVBQUU7TUFDVixDQUFDLENBQUM7TUFDRixJQUFJSCxhQUFhLENBQUNOLE1BQU0sSUFBSSxDQUFDLEVBQUU7UUFDOUIsT0FBTztVQUNOSixPQUFPLEVBQUUsTUFBTywrQkFBOEI7VUFDOUNHLElBQUksRUFBRTtRQUNQLENBQUM7TUFDRixDQUFDLE1BQU07UUFDTixPQUFPO1VBQ05ILE9BQU8sRUFBRSxNQUFNVSxhQUFhLENBQUNJLElBQUksQ0FBQyxJQUFJLENBQUM7VUFDdkNYLElBQUksRUFBRTtRQUNQLENBQUM7TUFDRjtJQUNEO0VBQ0QsQ0FBQyxDQUFDO0VBQUM7RUFFSSxNQUFNWSxzQkFBc0IsR0FBRyxVQUFVQyxTQUE0QixFQUFFO0lBQzdFLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDRixTQUFTLENBQUMsRUFBRTtNQUM3QkEsU0FBUyxHQUFHQSxTQUFTLENBQUNGLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDL0I7SUFDQSxJQUFJSyxZQUFZLEdBQUdDLFNBQVMsQ0FBQ0osU0FBUyxDQUFDO0lBQ3ZDRyxZQUFZLEdBQUdBLFlBQVksQ0FBQzVCLE9BQU8sQ0FBQywrQkFBK0IsRUFBRSxTQUFTLENBQUM7SUFDL0UsT0FBTzRCLFlBQVk7RUFDcEIsQ0FBQztFQUFDO0VBRUssTUFBTUUsbUJBQW1CLEdBQUcsVUFBVUMsZUFBdUIsRUFBRUMsYUFBcUIsRUFBRUMsTUFBWSxFQUFFO0lBQzFHLE1BQU05RSxRQUFRLEdBQUksVUFBU0YscUJBQXFCLENBQUNnRixNQUFNLEVBQUVGLGVBQWUsQ0FBRSxLQUFJQyxhQUFjLEdBQUU7SUFDOUYsT0FBTzNCLGFBQWEsQ0FBQ2xELFFBQVEsRUFBRThFLE1BQU0sQ0FBQztFQUN2QyxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkE7RUFPTyxNQUFNdEIsWUFBWSxHQUFHLFVBQVVzQixNQUFZLEVBQUU5RSxRQUFpQixFQUFFO0lBQ3RFLE1BQU0rRSxVQUFVLEdBQUcsSUFBSUMsTUFBTSxDQUFDQyxhQUFhLEVBQUU7SUFDN0MsSUFBSVgsU0FBaUI7SUFDckIsSUFBSXRFLFFBQVEsRUFBRTtNQUNiLE1BQU1xRCxLQUFLLEdBQUdILGFBQWEsQ0FBQ2xELFFBQVEsRUFBRThFLE1BQU0sQ0FBVztNQUN2RFIsU0FBUyxHQUFHakIsS0FBSyxDQUFDWSxHQUFHLENBQUV6QixJQUFJLElBQUt1QyxVQUFVLENBQUNHLGlCQUFpQixDQUFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBQzRCLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDL0UsQ0FBQyxNQUFNO01BQ05FLFNBQVMsR0FBR1MsVUFBVSxDQUFDRyxpQkFBaUIsQ0FBQ0osTUFBTSxDQUFDO0lBQ2pEO0lBQ0EsT0FBT0osU0FBUyxDQUFDSixTQUFTLENBQUM7RUFDNUIsQ0FBQztFQUFDO0VBRUssTUFBTUksU0FBUyxHQUFHLFVBQVVKLFNBQWlCLEVBQUU7SUFDckQsT0FBT2EsTUFBTSxDQUFDYixTQUFTLEVBQUU7TUFDeEJjLE1BQU0sRUFBRSxLQUFLO01BQ2JDLHdCQUF3QixFQUFFLFFBQVE7TUFDbENDLE9BQU8sRUFBRSxDQUFDQyxNQUFNO0lBQ2pCLENBQUMsQ0FBZ0U7RUFDbEUsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUEE7RUFRTyxNQUFNQyxVQUFVLEdBQUcsVUFBVUMsTUFBYyxFQUF1QztJQUFBLElBQXJDQyxPQUE4Qix1RUFBRyxDQUFDLENBQUM7SUFDdEYsTUFBTUMsU0FBUyxHQUFHQyxFQUFFLENBQUNDLFlBQVksQ0FBQ0osTUFBTSxFQUFFLE9BQU8sQ0FBQztJQUNsRCxNQUFNSyxXQUFXLEdBQUdDLFFBQVEsQ0FBQ0osU0FBUyxFQUFFLHlCQUF5QixFQUFFRCxPQUFPLENBQUM7SUFDM0UsTUFBTU0sR0FBRyxHQUFHQyxJQUFJLENBQUNDLE9BQU8sQ0FBQ1QsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7O0lBRTdDO0lBQ0E7SUFDQSxNQUFNVSxVQUFVLEdBQUd2RixNQUFNLENBQUN3RixPQUFPLENBQUNWLE9BQU8sQ0FBQztJQUMxQ1MsVUFBVSxDQUFDRSxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsYUFBYSxDQUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuRCxNQUFNRyxZQUFZLEdBQ2pCTixVQUFVLENBQUNPLE1BQU0sQ0FDaEIsQ0FBQ0MsUUFBUTtNQUFBLElBQUUsQ0FBQ0MsU0FBUyxFQUFFQyxXQUFXLENBQUM7TUFBQSxPQUFNLEdBQUVGLFFBQVMsSUFBR0MsU0FBVSxJQUFHQyxXQUFXLENBQUNDLFFBQVEsRUFBRyxHQUFFO0lBQUEsR0FDN0ZiLElBQUksQ0FBQ2MsUUFBUSxDQUFDdEIsTUFBTSxDQUFDLENBQUM1QyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUN6QyxHQUFHLE1BQU07SUFFWCxNQUFNbUUsWUFBWSxHQUFHZixJQUFJLENBQUNDLE9BQU8sQ0FBQ0YsR0FBRyxFQUFFUyxZQUFZLENBQUM7SUFFcERiLEVBQUUsQ0FBQ3FCLFNBQVMsQ0FBQ2pCLEdBQUcsRUFBRTtNQUFFa0IsU0FBUyxFQUFFO0lBQUssQ0FBQyxDQUFDO0lBRXRDdEIsRUFBRSxDQUFDdUIsYUFBYSxDQUFDSCxZQUFZLEVBQUVsQixXQUFXLENBQUM7SUFDM0MsT0FBT2tCLFlBQVk7RUFDcEIsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUEE7RUFRTyxTQUFTakIsUUFBUSxDQUFDcUIsR0FBVyxFQUE0RTtJQUFBLElBQTFFQyxPQUFPLHVFQUFHLHlCQUF5QjtJQUFBLElBQUUzQixPQUE4Qix1RUFBRyxDQUFDLENBQUM7SUFDN0csTUFBTTRCLE9BQStCLEdBQUc7TUFBRSxZQUFZLEVBQUVGO0lBQUksQ0FBQzs7SUFFN0Q7SUFDQSxJQUFJQSxHQUFHLENBQUNHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO01BQ3RDRCxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcxQixFQUFFLENBQUNDLFlBQVksQ0FBQ2hJLE9BQU8sQ0FBQ3FJLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUN6RjtJQUVBLE1BQU1zQixHQUFHLEdBQUdDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDSixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFaEQsTUFBTUssV0FBa0MsR0FBRztNQUMxQ0MsZ0JBQWdCLEVBQUUsSUFBSTtNQUN0QkMsV0FBVyxFQUFFLFlBQVk7TUFDekJDLGdCQUFnQixFQUFFLElBQUk7TUFDdEIsR0FBR3BDLE9BQU87TUFDVjJCLE9BQU8sRUFBRUE7SUFDVixDQUFDO0lBRUQsTUFBTVUsSUFBSSxHQUFHTixRQUFRLENBQUNPLEVBQUUsQ0FBQ0QsSUFBSSxDQUFDUCxHQUFHLEVBQUVHLFdBQVcsQ0FBQztJQUMvQyxJQUFJLENBQUNJLElBQUksRUFBRTtNQUNWLE1BQU0sSUFBSUUsS0FBSyxDQUFFLDBFQUF5RVosT0FBUSxHQUFFLENBQUM7SUFDdEc7SUFDQSxPQUFPVSxJQUFJO0VBQ1o7RUFBQztFQUVNLE1BQU1HLHlCQUF5QixHQUFHLGdCQUFnQnpILFVBQTBCLEVBQWdCO0lBQ2xHLE1BQU0wSCxlQUFlLEdBQUc7TUFBRUMsV0FBVyxFQUFFLENBQUMsQ0FBQztNQUFFQyxTQUFTLEVBQUUsRUFBRTtNQUFFaEgsUUFBUSxFQUFFLENBQUM7SUFBRSxDQUF3QjtJQUMvRixPQUFPLElBQUlpSCxrQkFBa0IsRUFBRSxDQUFDQyxjQUFjLENBQUNKLGVBQWUsQ0FBQyxDQUFDSyxJQUFJLENBQUMsVUFBVUMsZ0JBQXFCLEVBQUU7TUFDckcsTUFBTUMsdUJBQXVCLEdBQUdELGdCQUFnQixDQUFDRSxZQUFZLEVBQUU7TUFDL0RELHVCQUF1QixDQUFDRSxVQUFVLEdBQUcsWUFBWTtRQUNoRCxPQUFPO1VBQ05SLFdBQVcsRUFBRTtZQUNaUyxRQUFRLEVBQUUsWUFBWTtjQUNyQixPQUFPO2dCQUNObkksWUFBWSxFQUFFLFlBQVk7a0JBQ3pCLE9BQU9ELFVBQVU7Z0JBQ2xCO2NBQ0QsQ0FBQztZQUNGO1VBQ0Q7UUFDRCxDQUFDO01BQ0YsQ0FBQztNQUNELE9BQU9pSSx1QkFBdUI7SUFDL0IsQ0FBQyxDQUFDO0VBQ0gsQ0FBQztFQUFDO0VBRUssTUFBTUksa0JBQWtCLEdBQUcsWUFBMEI7SUFDM0QsTUFBTUMsTUFBYSxHQUFHLEVBQUU7SUFDeEIsT0FBTztNQUNOQyxRQUFRLENBQUNDLGFBQTRCLEVBQUVDLGFBQTRCLEVBQUVDLE9BQWUsRUFBUTtRQUMzRkosTUFBTSxDQUFDSyxJQUFJLENBQUM7VUFDWEgsYUFBYTtVQUNiQyxhQUFhO1VBQ2JDO1FBQ0QsQ0FBQyxDQUFDO01BQ0gsQ0FBQztNQUNERSxTQUFTLEdBQVU7UUFDbEIsT0FBT04sTUFBTTtNQUNkLENBQUM7TUFDRE8sa0JBQWtCLENBQUNMLGFBQTRCLEVBQUVDLGFBQTRCLEVBQUVDLE9BQWUsRUFBVztRQUN4RyxPQUFPSixNQUFNLENBQUNRLElBQUksQ0FBRUMsS0FBSyxJQUFLO1VBQzdCLE9BQU9BLEtBQUssQ0FBQ1AsYUFBYSxLQUFLQSxhQUFhLElBQUlPLEtBQUssQ0FBQ04sYUFBYSxLQUFLQSxhQUFhLElBQUlNLEtBQUssQ0FBQ0wsT0FBTyxLQUFLQSxPQUFPO1FBQ25ILENBQUMsQ0FBQztNQUNIO0lBQ0QsQ0FBQztFQUNGLENBQUM7RUFBQztFQUVLLE1BQU1NLDBCQUEwQixHQUFHLFVBQ3pDQyxjQUFpQyxFQUNqQ0MsZ0JBQXlFLEVBQ3hFO0lBQ0QsTUFBTUMsU0FBUyxHQUFHRixjQUFjLENBQUNHLFVBQVUsQ0FBQ04sSUFBSSxDQUFFTyxFQUFFLElBQUtBLEVBQUUsQ0FBQ2xILElBQUksS0FBSytHLGdCQUFnQixDQUFDQyxTQUFTLENBQUM7SUFDaEcsTUFBTUcsYUFBYSxHQUFHQyxpQ0FBaUMsQ0FBQ0osU0FBUyxFQUFlRixjQUFjLEVBQUVFLFNBQVMsQ0FBQztJQUMxRyxPQUFPLElBQUlLLGdCQUFnQixDQUFDUCxjQUFjLEVBQUVDLGdCQUFnQixFQUFFYixrQkFBa0IsRUFBRSxFQUFFb0IsS0FBSyxFQUFFSCxhQUFhLENBQUM7RUFDMUcsQ0FBQztFQUFDO0VBQ0YsTUFBTUksY0FBbUIsR0FBRyxDQUFDLENBQUM7RUFDdkIsTUFBTXpKLFlBQVksR0FBRyxnQkFBZ0JMLFlBQW9CLEVBQUU7SUFDakUsTUFBTStKLFVBQVUsR0FBR0Msa0JBQWtCLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUV6SSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxDQUFDc0ksY0FBYyxDQUFDOUosWUFBWSxDQUFDLEVBQUU7TUFDbEMsTUFBTUksVUFBVSxHQUFHLElBQUs4SixjQUFjLENBQVNILFVBQVUsRUFBRS9KLFlBQVksRUFBRXdCLFNBQVMsRUFBRSxJQUFJLENBQUM7TUFDekYsTUFBTXBCLFVBQVUsQ0FBQytKLG9CQUFvQixFQUFFO01BQ3ZDTCxjQUFjLENBQUM5SixZQUFZLENBQUMsR0FBR0ksVUFBVTtJQUMxQztJQUVBLE9BQU8wSixjQUFjLENBQUM5SixZQUFZLENBQUM7RUFDcEMsQ0FBQztFQUFDO0VBRUssTUFBTTJKLGlDQUFpQyxHQUFHLFVBQ2hESixTQUFvQixFQUNwQkYsY0FBaUMsRUFDakNlLFFBQStDLEVBQ3pCO0lBQ3RCLE1BQU1DLFVBQStCLEdBQUc7TUFDdkNDLGlCQUFpQixFQUFFZixTQUFTO01BQzVCZ0Isb0JBQW9CLEVBQUUsRUFBRTtNQUN4QkMsWUFBWSxFQUFFSixRQUFRO01BQ3RCSyxlQUFlLEVBQUVsQixTQUFTO01BQzFCbUIsZ0JBQWdCLEVBQUVuQixTQUFTLENBQUNvQixVQUFVO01BQ3RDdEIsY0FBYyxFQUFFQTtJQUNqQixDQUFDO0lBQ0RnQixVQUFVLENBQUNPLGVBQWUsR0FBR1AsVUFBVTtJQUN2QyxPQUFPQSxVQUFVO0VBQ2xCLENBQUM7RUFBQztFQUVLLE1BQU1RLGVBQWUsR0FBRyxVQUFVQyxhQUFxQixFQUFrQjtJQUMvRSxNQUFNQyxjQUFjLEdBQUdDLGFBQWEsQ0FBQ0MsYUFBYSxDQUFDSCxhQUFhLENBQUM7SUFBQyxrQ0FEQUksSUFBSTtNQUFKQSxJQUFJO0lBQUE7SUFFdEUsT0FBT0gsY0FBYyxDQUFDSSxTQUFTLENBQUNDLEtBQUssQ0FBQzVKLFNBQVMsRUFBRTBKLElBQUksQ0FBQztFQUN2RCxDQUFDO0VBQUM7RUFNRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0csd0JBQXdCLENBQ3ZDUCxhQUFpQyxFQUNqQ1EsWUFBMEIsRUFDMUJDLGtCQUEwRCxFQUNqRDtJQUNULE1BQU1SLGNBQWMsR0FBR0MsYUFBYSxDQUFDQyxhQUFhLENBQUNILGFBQWEsQ0FBQztJQUNqRSxNQUFNVSxJQUFJLEdBQUcsSUFBSUMsYUFBYSxFQUFFO0lBQ2hDRCxJQUFJLENBQUNFLFlBQVksQ0FBQyxNQUFNLEVBQUVYLGNBQWMsQ0FBQztJQUV6QyxNQUFNWSxZQUFZLEdBQUcsSUFBSUMsU0FBUyxDQUFDTixZQUFZLENBQUM7SUFDaERFLElBQUksQ0FBQ0ssUUFBUSxDQUFDRixZQUFZLENBQUM7SUFDM0JILElBQUksQ0FBQ00saUJBQWlCLENBQUNILFlBQVksQ0FBQzVKLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTlELElBQUl3SixrQkFBa0IsRUFBRTtNQUN2QixLQUFLLE1BQU0sQ0FBQ2hKLElBQUksRUFBRXdKLE9BQU8sQ0FBQyxJQUFJeEwsTUFBTSxDQUFDd0YsT0FBTyxDQUFDd0Ysa0JBQWtCLENBQUMsRUFBRTtRQUNqRSxNQUFNUyxLQUFLLEdBQUcsSUFBSUosU0FBUyxDQUFDRyxPQUFPLENBQUM7UUFDcENQLElBQUksQ0FBQ0ssUUFBUSxDQUFDRyxLQUFLLEVBQUV6SixJQUFJLENBQUM7UUFDMUJpSixJQUFJLENBQUNNLGlCQUFpQixDQUFDRSxLQUFLLENBQUNqSyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRVEsSUFBSSxDQUFDO01BQzlEO0lBQ0Q7SUFFQSxPQUFPaUosSUFBSSxDQUFDUyxPQUFPLEVBQUU7RUFDdEI7RUFBQztFQUVELE1BQU1DLFVBQVUsR0FBRyxZQUFZO0VBRS9CLE1BQU1DLGdCQUFnQixHQUFHLGdCQUFnQkMsV0FBc0MsRUFBRWhNLFVBQXFCLEVBQUVpTSxTQUFjLEVBQUU7SUFBQTtJQUN2SDtJQUNBLENBQUMsR0FBR0EsU0FBUyxDQUFDQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDMUwsT0FBTyxDQUFFdUIsSUFBSSxJQUFLO01BQ3pEQSxJQUFJLENBQUNvSyxFQUFFLEdBQUksR0FBRUwsVUFBVyxLQUFJL0osSUFBSSxDQUFDb0ssRUFBRyxFQUFDO0lBQ3RDLENBQUMsQ0FBQztJQUNGLE1BQU1DLE9BQU8sR0FBR0MsOEJBQThCLENBQUNQLFVBQVUsRUFBRUUsV0FBVyxDQUFDO0lBQ3ZFLE1BQU1NLEtBQUssR0FBRyxlQUFlO0lBQzdCLE1BQU1DLFNBQVMsR0FBRztNQUNqQixTQUFTLEVBQUU7UUFDVkosRUFBRSxFQUFFRyxLQUFLO1FBQ1R0SyxJQUFJLEVBQUUsYUFBYTtRQUNuQndLLGVBQWUsRUFBRTtVQUNoQkMsU0FBUyxFQUFFO1FBQ1o7TUFDRDtJQUNELENBQUM7SUFDRCxNQUFNQyxhQUEyQixHQUFHO01BQ25DdkwsY0FBYyxFQUFFNUQsSUFBSSxDQUFDMkQsRUFBRSxFQUFFLENBQUNHLGVBQWUsQ0FBQ2dILGtCQUFrQixFQUFFLENBQUM7TUFDL0RELFFBQVEsRUFBRTdLLElBQUksQ0FBQzJELEVBQUUsRUFBRSxDQUFDRyxlQUFlLENBQUM7UUFDbkNwQixZQUFZLEVBQUUxQyxJQUFJLENBQUMyRCxFQUFFLEVBQUUsQ0FBQ0csZUFBZSxDQUFDckIsVUFBVTtNQUNuRCxDQUFDLENBQUM7TUFDRjJNLGdCQUFnQixFQUFFcFAsSUFBSSxDQUFDMkQsRUFBRSxFQUFFLENBQUNHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMvQ3VMLGlCQUFpQixFQUFFclAsSUFBSSxDQUFDMkQsRUFBRSxFQUFFLENBQUNHLGVBQWUsQ0FBQztRQUM1Q3dMLFFBQVEsRUFBRSxVQUFVMUssSUFBWSxFQUFFO1VBQ2pDLE9BQVFvSyxTQUFTLENBQVNwSyxJQUFJLENBQUM7UUFDaEM7TUFDRCxDQUFDLENBQUM7TUFDRjJLLFVBQVUsRUFBRXZQLElBQUksQ0FBQzJELEVBQUUsQ0FBRTZMLEdBQUcsSUFBS0EsR0FBRztJQUNqQyxDQUE0QjtJQUM1QjtJQUNBeFAsSUFBSSxDQUFDeVAsS0FBSyxDQUFDQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM1TCxlQUFlLENBQUM2TCxPQUFPLENBQUN6SCxPQUFPLENBQUMyRyxPQUFPLENBQUMsQ0FBQztJQUNoRjdPLElBQUksQ0FBQ3lQLEtBQUssQ0FBQ0csU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDOUwsZUFBZSxDQUFDcUwsYUFBYSxDQUFDO0lBQzNEblAsSUFBSSxDQUFDeVAsS0FBSyxDQUFDSSxLQUFLLEVBQUUsMkJBQTJCLENBQUMsQ0FBQy9MLGVBQWUsQ0FBQ3FMLGFBQWEsQ0FBQztJQUM3RSxNQUFNVyxTQUFTLENBQUNDLFVBQVUsQ0FBQztNQUMxQkMsV0FBVyxFQUFFakI7SUFDZCxDQUFDLENBQUM7SUFDRkwsU0FBUyxHQUFHLE1BQU11QixlQUFlLENBQUNDLE9BQU8sQ0FBQ3hCLFNBQVMsRUFBRTtNQUFFOUosSUFBSSxFQUFFLGVBQWU7TUFBRW9MLFdBQVcsRUFBRWpCLEtBQUs7TUFBRUgsRUFBRSxFQUFFTDtJQUFXLENBQUMsQ0FBQzs7SUFFbkg7SUFDQSxNQUFNNEIsY0FBYyxHQUFHQyxpQkFBaUIsQ0FBQzFCLFNBQVMsQ0FBQztJQUNuRDFLLE1BQU0sQ0FBQ21NLGNBQWMsQ0FBQ3pLLE1BQU0sQ0FBQyxDQUFDMkssSUFBSSxDQUFDLENBQUE1QixXQUFXLGFBQVhBLFdBQVcsK0NBQVhBLFdBQVcsQ0FBRUksT0FBTyx5REFBcEIscUJBQXNCbkosTUFBTSxLQUFJLENBQUMsSUFBRytJLFdBQVcsYUFBWEEsV0FBVyxnREFBWEEsV0FBVyxDQUFFNkIsOEJBQThCLDBEQUEzQyxzQkFBNkM1SyxNQUFNLEtBQUksQ0FBQyxDQUFDO0lBQ2hJLE9BQU9nSixTQUFTO0VBQ2pCLENBQUM7RUFFTSxNQUFNMEIsaUJBQWlCLEdBQUk5TCxHQUFRLElBQ3pDLENBQUMsR0FBR0EsR0FBRyxDQUFDcUssZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDNUI0QixPQUFPLENBQUVDLENBQUMsSUFBSyxDQUFDLEdBQUdBLENBQUMsQ0FBQ0MsVUFBVSxDQUFDLENBQUN4SyxHQUFHLENBQUVxQyxDQUFDLElBQUtBLENBQUMsQ0FBQzFELElBQUksQ0FBQyxDQUFDLENBQ3BETCxNQUFNLENBQUVtTSxJQUFJLElBQUtBLElBQUksQ0FBQ25ILFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0VBQUM7RUFFeEQsTUFBTW9ILG1CQUFtQixHQUFHLGdCQUNsQ0MsUUFBZ0IsRUFDaEJ2TyxZQUFvQixFQUNwQkMsZ0JBQTBELEVBQzFEQyxPQUE2QixFQUM3QmtNLFdBQXVDLEVBQ3ZDak0scUJBQStCLEVBQzlCO0lBQ0QsSUFBSSxDQUFDRCxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7TUFDNUJBLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBR3NPLHVCQUF1QixFQUFFO0lBQ25EO0lBRUEsTUFBTUMsWUFBWSxHQUFJLFNBQVFGLFFBQVMsU0FBUTtJQUMvQyxNQUFNeEosTUFBTSxHQUFHLElBQUlKLE1BQU0sQ0FBQytKLFNBQVMsRUFBRTtJQUNyQyxNQUFNQyxNQUFNLEdBQUc1SixNQUFNLENBQUM2SixlQUFlLENBQUNILFlBQVksRUFBRSxVQUFVLENBQUM7SUFDL0Q7SUFDQTs7SUFFQSxNQUFNck8sVUFBVSxHQUFHLE1BQU1DLFlBQVksQ0FBQ0wsWUFBWSxDQUFDO0lBQ25ELE1BQU02TyxxQkFBcUIsR0FBRyxNQUFNOU8sMEJBQTBCLENBQUNDLFlBQVksRUFBRUMsZ0JBQWdCLEVBQUVDLE9BQU8sRUFBRUMscUJBQXFCLENBQUM7O0lBRTlIO0lBQ0EsSUFBSTBPLHFCQUFxQixDQUFDNU4sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO01BQ3pDNE4scUJBQXFCLENBQUMxTixlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcwTixxQkFBcUIsQ0FBQzVOLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQ2Msb0JBQW9CLENBQUMsR0FBRyxDQUFDO0lBQy9HO0lBRUEsSUFBSXNLLFNBQVMsR0FBSSxNQUFNeUMsZUFBZSxDQUFDakIsT0FBTyxDQUFDYyxNQUFNLENBQUNJLGlCQUFpQixFQUFHO01BQUV4TSxJQUFJLEVBQUU7SUFBZ0IsQ0FBQyxFQUFFc00scUJBQXFCLENBQVM7SUFFbkksSUFBSXpDLFdBQVcsRUFBRTtNQUNoQjtNQUNBQyxTQUFTLEdBQUcsTUFBTUYsZ0JBQWdCLENBQUNDLFdBQVcsRUFBRWhNLFVBQVUsRUFBRWlNLFNBQVMsQ0FBQztJQUN2RTtJQUNBLE9BQU9BLFNBQVM7RUFDakIsQ0FBQztFQUFDO0VBRUssTUFBTTJDLGVBQWUsR0FBRyxnQkFDOUJULFFBQWdCLEVBQ2hCdk8sWUFBb0IsRUFDcEJDLGdCQUF5QyxFQUN6Q0MsT0FBNkIsRUFDN0JrTSxXQUF1QyxFQUN2Q2pNLHFCQUErQixFQUM5QjtJQUNELE1BQU04TyxZQUFZLEdBQUcsTUFBTVgsbUJBQW1CLENBQUNDLFFBQVEsRUFBRXZPLFlBQVksRUFBRUMsZ0JBQWdCLEVBQUVDLE9BQU8sRUFBRWtNLFdBQVcsRUFBRWpNLHFCQUFxQixDQUFDO0lBQ3JJLE1BQU0rTyxZQUFZLEdBQUcvTCxZQUFZLENBQUM4TCxZQUFZLENBQUM7SUFDL0N0TixNQUFNLENBQUN1TixZQUFZLENBQUMsQ0FBQ0MsR0FBRyxDQUFDNUwsc0JBQXNCLEVBQUU7SUFDakQsT0FBTzJMLFlBQVk7RUFDcEIsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVRBO0VBVU8sZUFBZUUsV0FBVyxDQUNoQzdNLElBQVksRUFDWnZDLFlBQW9CLEVBQ3BCQyxnQkFBeUMsRUFDekNDLE9BQTZCLEVBQzdCa00sV0FBdUMsRUFDVjtJQUFBO0lBQzdCLE1BQU1oTSxVQUFVLEdBQUcsTUFBTUMsWUFBWSxDQUFDTCxZQUFZLENBQUM7SUFDbkQsTUFBTXFQLGFBQWEsR0FBR2hOLGlCQUFpQixDQUFDRSxJQUFJLENBQUM7SUFDN0MsTUFBTXNNLHFCQUFxQixHQUFHLE1BQU05TywwQkFBMEIsQ0FBQ0MsWUFBWSxFQUFFQyxnQkFBZ0IsRUFBRUMsT0FBTyxDQUFDO0lBQ3ZHLElBQUlvUCxpQkFBaUIsR0FBRyxNQUFNUixlQUFlLENBQUNqQixPQUFPLENBQUN3QixhQUFhLEVBQUU7TUFBRTlNLElBQUksRUFBRUE7SUFBSyxDQUFDLEVBQUVzTSxxQkFBcUIsQ0FBQztJQUMzRyxJQUFJekMsV0FBVyxFQUFFO01BQ2hCa0QsaUJBQWlCLEdBQUcsTUFBTW5ELGdCQUFnQixDQUFDQyxXQUFXLElBQUksRUFBRSxFQUFFaE0sVUFBVSxFQUFFa1AsaUJBQWlCLENBQUM7SUFDN0Y7SUFDQSxPQUFPO01BQ05DLFNBQVMsRUFBRUQsaUJBQWlCO01BQzVCRSxRQUFRLEVBQUV4TixxQkFBcUIsQ0FBQyx1QkFBQXNOLGlCQUFpQix1REFBakIsbUJBQW1CRyxTQUFTLEtBQUksRUFBRTtJQUNuRSxDQUFDO0VBQ0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQTtFQU9PLGVBQWVDLGVBQWUsQ0FBQ25OLElBQVksRUFBRW9OLFFBQXFDLEVBQW1CO0lBQzNHLE1BQU1DLFFBQVEsR0FBSSxzQ0FBcUNyTixJQUFLLGlEQUFnRDtJQUM1RyxNQUFNd0MsTUFBTSxHQUFHLElBQUlKLE1BQU0sQ0FBQytKLFNBQVMsRUFBRTtJQUNyQyxNQUFNbUIsUUFBUSxHQUFHOUssTUFBTSxDQUFDNkosZUFBZSxDQUFDZ0IsUUFBUSxFQUFFLFVBQVUsQ0FBQzs7SUFFN0Q7SUFDQSxNQUFNNU8sUUFBUSxHQUFHO01BQ2hCQyxNQUFNLEVBQUUsQ0FBQyxDQUFrQztNQUMzQ0UsZUFBZSxFQUFFLENBQUMsQ0FBK0I7TUFDakRDLFlBQVksRUFBRTtRQUFFQyxxQkFBcUIsRUFBRTFELElBQUksQ0FBQzJELEVBQUUsRUFBRTtRQUFFQyxjQUFjLEVBQUUsTUFBTUM7TUFBVTtJQUNuRixDQUFDO0lBQ0QsS0FBSyxNQUFNd0ssS0FBSyxJQUFJMkQsUUFBUSxFQUFFO01BQzdCLE1BQU1HLFNBQVMsR0FBRyxJQUFJbEUsU0FBUyxFQUFFO01BQ2pDa0UsU0FBUyxDQUFDQyxPQUFPLENBQUNKLFFBQVEsQ0FBQzNELEtBQUssQ0FBQyxDQUFDO01BQ2xDaEwsUUFBUSxDQUFDQyxNQUFNLENBQUMrSyxLQUFLLENBQUMsR0FBRzhELFNBQVM7TUFDbEM5TyxRQUFRLENBQUNHLGVBQWUsQ0FBQzZLLEtBQUssQ0FBQyxHQUFHaEwsUUFBUSxDQUFDQyxNQUFNLENBQUMrSyxLQUFLLENBQUMsQ0FBQ2pLLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztJQUNuRjtJQUNBZixRQUFRLENBQUNJLFlBQVksQ0FBQ0MscUJBQXFCLENBQUNJLGVBQWUsQ0FBQ2xDLDRCQUE0QixDQUFDOztJQUV6RjtJQUNBLE1BQU15USxTQUFTLEdBQUcsTUFBTWxCLGVBQWUsQ0FBQ2pCLE9BQU8sQ0FBQ2dDLFFBQVEsQ0FBQ2QsaUJBQWlCLEVBQUU7TUFBRXhNO0lBQUssQ0FBQyxFQUFFdkIsUUFBUSxDQUFDOztJQUUvRjtJQUNBLE1BQU1pUCxTQUFTLEdBQUdELFNBQVMsQ0FBQ0Usb0JBQW9CLENBQUMsZUFBZSxDQUFRO0lBQ3hFLElBQUksQ0FBQUQsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUU1TSxNQUFNLElBQUcsQ0FBQyxFQUFFO01BQzFCLEtBQUssTUFBTThNLFFBQVEsSUFBSUYsU0FBUyxFQUFFO1FBQ2pDRSxRQUFRLENBQUNDLFNBQVMsR0FBRyxFQUFFO01BQ3hCO0lBQ0Q7O0lBRUE7SUFDQSxNQUFNQyxTQUFTLEdBQUdMLFNBQVMsQ0FBQ00sUUFBUSxDQUFDak4sTUFBTSxHQUFHLENBQUMsR0FBRzJNLFNBQVMsQ0FBQ1AsU0FBUyxHQUFHTyxTQUFTLENBQUNJLFNBQVM7SUFFM0YsT0FBT3BPLHFCQUFxQixDQUFDcU8sU0FBUyxDQUFDO0VBQ3hDO0VBQUM7RUFFTSxTQUFTRSxnQkFBZ0IsQ0FBQ0Msa0JBQTZDLEVBQUU7SUFDL0UsSUFBSUMsUUFBUSxHQUFHLENBQUM7SUFDaEIsU0FBU0MsTUFBTSxHQUFvQjtNQUFBLElBQW5CQyxLQUFhLHVFQUFHLENBQUM7TUFDaEMsSUFBSUMsR0FBRyxHQUFHLEVBQUU7TUFDWixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0osUUFBUSxHQUFHRSxLQUFLLEVBQUVFLENBQUMsRUFBRSxFQUFFO1FBQzFDRCxHQUFHLElBQUksSUFBSTtNQUNaO01BQ0EsT0FBT0EsR0FBRztJQUNYO0lBQ0EsTUFBTUUsaUJBQWlCLEdBQUc7TUFDekJDLEtBQUssRUFBRSxVQUFVM1MsT0FBWSxFQUFFNFMsZ0JBQXdCLEVBQUU7UUFDeEQsSUFBSUMsYUFBYSxHQUFHLEVBQUU7UUFDdEIsSUFBSUQsZ0JBQWdCLEVBQUU7VUFDckIsSUFBSTVTLE9BQU8sQ0FBQzhTLFNBQVMsRUFBRSxFQUFFO1lBQUE7WUFDeEIsTUFBTUMsYUFBYSw0QkFBSS9TLE9BQU8sQ0FBQzhTLFNBQVMsRUFBRSxDQUFDRSxjQUFjLENBQUNKLGdCQUFnQixDQUFDLG9GQUFyRCxzQkFBMkVLLE9BQU8sMkRBQWxGLG1EQUFxRmpULE9BQU8sQ0FBQztZQUNuSCxJQUFJK1MsYUFBYSxHQUFHLENBQUMsRUFBRTtjQUN0QkYsYUFBYSxJQUFLLE1BQUtQLE1BQU0sRUFBRyxFQUFDO1lBQ2xDO1VBQ0Q7UUFDRDtRQUNBTyxhQUFhLElBQUssR0FBRTdTLE9BQU8sQ0FBQ2tULFdBQVcsRUFBRSxDQUFDQyxPQUFPLEVBQUcsR0FBRTtRQUN0RCxPQUFPTixhQUFhO01BQ3JCLENBQUM7TUFDRE8sR0FBRyxFQUFFLFlBQVk7UUFDaEIsT0FBTyxJQUFJO01BQ1osQ0FBQztNQUNEQyxNQUFNLEVBQUUsVUFBVXJULE9BQVksRUFBRTtRQUMvQixNQUFNbU8sRUFBRSxHQUFHbk8sT0FBTyxDQUFDc1QsS0FBSyxFQUFFO1FBQzFCLElBQUkzUSxJQUFJLEdBQUksUUFBTzRRLHFCQUFxQixDQUFDQyxhQUFhLENBQUNyRixFQUFFLENBQUMsR0FBRyxhQUFhLEdBQUdBLEVBQUcsRUFBQztRQUNqRixLQUFLLE1BQU1zRixXQUFXLElBQUl6VCxPQUFPLENBQUMwVCxXQUFXLEVBQUU7VUFDOUMsSUFBSTFULE9BQU8sQ0FBQzBULFdBQVcsQ0FBQ3hSLGNBQWMsQ0FBQ3VSLFdBQVcsQ0FBQyxFQUFFO1lBQ3BEOVEsSUFBSSxJQUFLLE1BQUsyUCxNQUFNLEVBQUcsSUFBR21CLFdBQVksS0FBSXpULE9BQU8sQ0FBQzBULFdBQVcsQ0FBQ0QsV0FBVyxDQUFFLEVBQUM7VUFDN0UsQ0FBQyxNQUFNLElBQUl6VCxPQUFPLENBQUMyVCxhQUFhLENBQUN6UixjQUFjLENBQUN1UixXQUFXLENBQUMsRUFBRTtZQUM3RCxNQUFNRyxhQUFhLEdBQUc1VCxPQUFPLENBQUMyVCxhQUFhLENBQUNGLFdBQVcsQ0FBQztZQUN4RDlRLElBQUksSUFBSyxNQUFLMlAsTUFBTSxFQUFHLElBQUdtQixXQUFZLEtBQUlJLElBQUksQ0FBQ0MsU0FBUyxDQUFDRixhQUFhLENBQUUsRUFBQztVQUMxRTtRQUNEO1FBQ0EsS0FBSyxNQUFNSCxXQUFXLElBQUl6VCxPQUFPLENBQUMrVCxhQUFhLEVBQUU7VUFDaEQsSUFBSS9ULE9BQU8sQ0FBQytULGFBQWEsQ0FBQzdSLGNBQWMsQ0FBQ3VSLFdBQVcsQ0FBQyxFQUFFO1lBQUE7WUFDdEQ5USxJQUFJLElBQUssTUFBSzJQLE1BQU0sRUFBRyxJQUFHbUIsV0FBWSxLQUNyQyxDQUFDLDBCQUFBelQsT0FBTyxDQUFDK1QsYUFBYSxDQUFDTixXQUFXLENBQUMsb0ZBQWxDLGlEQUFvQzlOLElBQUksMkRBQXhDLG9EQUEyQyxHQUFHLENBQUMsS0FBSTNGLE9BQU8sQ0FBQytULGFBQWEsQ0FBQ04sV0FBVyxDQUFDLEtBQUtyUSxTQUMzRixFQUFDO1VBQ0g7UUFDRDtRQUNBLEtBQUssTUFBTXFRLFdBQVcsSUFBSXpULE9BQU8sQ0FBQ2dVLGNBQWMsRUFBRTtVQUNqRCxJQUFJaFUsT0FBTyxDQUFDZ1UsY0FBYyxDQUFDOVIsY0FBYyxDQUFDdVIsV0FBVyxDQUFDLEVBQUU7WUFDdkQ5USxJQUFJLElBQUssTUFBSzJQLE1BQU0sRUFBRyxJQUFHbUIsV0FBWSxTQUFRO1VBQy9DO1FBQ0Q7UUFDQTlRLElBQUksSUFBSyxFQUFDO1FBQ1YsT0FBT0EsSUFBSTtNQUNaLENBQUM7TUFDRHNSLGdCQUFnQixFQUFFLFVBQVVqVSxPQUFZLEVBQUVrVSxLQUFhLEVBQUU7UUFDeEQsSUFBSUMsR0FBRyxHQUFJLE1BQUs3QixNQUFNLEVBQUcsR0FBRTRCLEtBQU0sRUFBQztRQUNsQzdCLFFBQVEsRUFBRTtRQUVWLElBQUlyUyxPQUFPLENBQUMyVCxhQUFhLENBQUNPLEtBQUssQ0FBQyxFQUFFO1VBQ2pDQyxHQUFHLElBQUssWUFBV25VLE9BQU8sQ0FBQzJULGFBQWEsQ0FBQ08sS0FBSyxDQUFDLENBQUMxTSxJQUFLLGlCQUFnQjhLLE1BQU0sRUFBRyxFQUFDO1FBQ2hGLENBQUMsTUFBTTtVQUNONkIsR0FBRyxJQUFLLE9BQU03QixNQUFNLEVBQUcsRUFBQztRQUN6QjtRQUNBLE9BQU82QixHQUFHO01BQ1gsQ0FBQztNQUNEQyxjQUFjLEVBQUUsVUFBVXBVLE9BQVksRUFBRWtVLEtBQWEsRUFBRTtRQUN0RDdCLFFBQVEsRUFBRTtRQUNWLElBQUlyUyxPQUFPLENBQUMyVCxhQUFhLENBQUNPLEtBQUssQ0FBQyxFQUFFO1VBQ2pDLE9BQVEsS0FBSTVCLE1BQU0sRUFBRyxHQUFFO1FBQ3hCLENBQUMsTUFBTTtVQUNOLE9BQVEsS0FBSUEsTUFBTSxFQUFHLEdBQUU7UUFDeEI7TUFDRDtJQUNELENBQUM7SUFDRCxJQUFJeE0sS0FBSyxDQUFDQyxPQUFPLENBQUNxTSxrQkFBa0IsQ0FBQyxFQUFFO01BQ3RDLE9BQU9BLGtCQUFrQixDQUFDNU0sR0FBRyxDQUFFNk8sZUFBMkIsSUFBSztRQUM5RCxPQUFPLElBQUlDLFVBQVUsQ0FBQ0QsZUFBZSxFQUFFM0IsaUJBQWlCLENBQUMsQ0FBQzZCLFNBQVMsRUFBRTtNQUN0RSxDQUFDLENBQUM7SUFDSCxDQUFDLE1BQU07TUFDTixPQUFPLElBQUlELFVBQVUsQ0FBQ2xDLGtCQUFrQixFQUFFTSxpQkFBaUIsQ0FBQyxDQUFDNkIsU0FBUyxFQUFFO0lBQ3pFO0VBQ0Q7RUFBQztFQUVNLFNBQVNDLGFBQWEsR0FBRztJQUMvQixJQUFJQyxTQUFvQjtJQUN4QixNQUFNQyxTQUFTLEdBQUcsSUFBSXhGLE9BQU8sQ0FBRXpILE9BQU8sSUFBSztNQUMxQ2dOLFNBQVMsR0FBR2hOLE9BQU87SUFDcEIsQ0FBQyxDQUFDO0lBQ0YsT0FBTztNQUFFa04sT0FBTyxFQUFFRCxTQUFTO01BQUVqTixPQUFPLEVBQUVnTjtJQUFVLENBQUM7RUFDbEQ7RUFBQztFQUVNLFNBQVNHLDZCQUE2QixDQUFDQyxhQUF1QyxFQUFFaFMsTUFBZ0MsRUFBVztJQUNqSSxPQUFRaVMsYUFBYSxDQUFxQkMsb0JBQW9CLENBQzdELE1BQU07TUFDTCxPQUFPRixhQUFhLENBQUNHLFVBQVUsRUFBRTtJQUNsQyxDQUFDLEVBQ0Q7TUFDQ3BTLFFBQVEsRUFBRSxVQUFVcVMsZUFBb0MsRUFBRTtRQUN6REEsZUFBZSxDQUFDcFMsTUFBTSxHQUFHQSxNQUFNO1FBQy9CLE9BQU9vUyxlQUFlO01BQ3ZCO0lBQ0QsQ0FBQyxDQUNEO0VBQ0Y7RUFBQztFQUVNLFNBQVNDLHFCQUFxQixHQUFpRDtJQUFBLG1DQUE3Q3JELFNBQVM7TUFBVEEsU0FBUztJQUFBO0lBQ2pEO0lBQ0EsTUFBTXNELG9CQUFvQixHQUFJQyxvQkFBb0IsQ0FBU0MsbUJBQW1CO0lBQzlFO0lBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcvVixJQUFJLENBQUN5UCxLQUFLLENBQUNvRyxvQkFBb0IsRUFBUyxxQkFBcUIsQ0FBQztJQUN2RkUsZ0JBQWdCLENBQUNDLGtCQUFrQixDQUFFLENBQUNDLFlBQW9CLEVBQUVDLFNBQWlCLEtBQUs7TUFDakYsS0FBSyxNQUFNMUQsUUFBUSxJQUFJRixTQUFTLEVBQUU7UUFDakMsSUFBSUUsUUFBUSxDQUFDNU4sSUFBSSxLQUFLcVIsWUFBWSxFQUFFO1VBQ25DLE9BQU9FLGNBQWMsQ0FBQzNELFFBQVEsQ0FBQ3BFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQztNQUNEO01BQ0EsT0FBT3dILG9CQUFvQixDQUFDSyxZQUFZLEVBQUVDLFNBQVMsQ0FBQztJQUNyRCxDQUFDLENBQWlDO0lBQ2xDLE9BQU9ILGdCQUFnQjtFQUN4QjtFQUFDO0VBQUE7QUFBQSJ9
|