@discordeno/rest 22.0.1-next.fe2967f → 22.0.1-next.ff1a349
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/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/package.json +11 -11
package/dist/types.d.ts
CHANGED
|
@@ -1588,7 +1588,7 @@ export interface RestManager {
|
|
|
1588
1588
|
*
|
|
1589
1589
|
* @remarks
|
|
1590
1590
|
* Includes the `user` field if the bot has the `MANAGE_GUILD_EXPRESSIONS` permission,
|
|
1591
|
-
* or if the bot created the emoji and has the
|
|
1591
|
+
* or if the bot created the emoji and has the `CREATE_GUILD_EXPRESSIONS` permission.
|
|
1592
1592
|
*
|
|
1593
1593
|
* @see {@link https://docs.discord.com/developers/resources/emoji#get-guild-emoji}
|
|
1594
1594
|
*/
|
package/dist/types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { };
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEFkZERtUmVjaXBpZW50T3B0aW9ucyxcbiAgQWRkR3VpbGRNZW1iZXJPcHRpb25zLFxuICBBZGRMb2JieU1lbWJlcixcbiAgQXRMZWFzdE9uZSxcbiAgQmVnaW5HdWlsZFBydW5lLFxuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBDaGFubmVsVHlwZXMsXG4gIENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgQ3JlYXRlQXBwbGljYXRpb25FbW9qaSxcbiAgQ3JlYXRlQXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucyxcbiAgQ3JlYXRlQ2hhbm5lbEludml0ZSxcbiAgQ3JlYXRlRm9ydW1Qb3N0V2l0aE1lc3NhZ2UsXG4gIENyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gIENyZWF0ZUdyb3VwRG1PcHRpb25zLFxuICBDcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gIENyZWF0ZUd1aWxkQmFuLFxuICBDcmVhdGVHdWlsZEJ1bGtCYW4sXG4gIENyZWF0ZUd1aWxkQ2hhbm5lbCxcbiAgQ3JlYXRlR3VpbGRFbW9qaSxcbiAgQ3JlYXRlR3VpbGRSb2xlLFxuICBDcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZCxcbiAgQ3JlYXRlR3VpbGRTdGlja2VyT3B0aW9ucyxcbiAgQ3JlYXRlTG9iYnksXG4gIENyZWF0ZU1lc3NhZ2VPcHRpb25zLFxuICBDcmVhdGVTY2hlZHVsZWRFdmVudCxcbiAgQ3JlYXRlU3RhZ2VJbnN0YW5jZSxcbiAgQ3JlYXRlVGVtcGxhdGUsXG4gIENyZWF0ZVRlc3RFbnRpdGxlbWVudCxcbiAgQ3JlYXRlV2ViaG9vayxcbiAgRGVsZXRlV2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICBEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZSxcbiAgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkQXBwbGljYXRpb25JbnRlZ3JhdGlvblR5cGUsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0Q2hhbm5lbFBpbnMsXG4gIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICBEaXNjb3JkR3VpbGQsXG4gIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW5jaWRlbnRzRGF0YSxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW50ZXJhY3Rpb24sXG4gIERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2UsXG4gIERpc2NvcmRJbnZpdGUsXG4gIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzLFxuICBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgRGlzY29yZExvYmJ5LFxuICBEaXNjb3JkTG9iYnlNZW1iZXIsXG4gIERpc2NvcmRNZW1iZXIsXG4gIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgRGlzY29yZE1lc3NhZ2UsXG4gIERpc2NvcmRQcnVuZWRDb3VudCxcbiAgRGlzY29yZFJvbGUsXG4gIERpc2NvcmRTY2hlZHVsZWRFdmVudCxcbiAgRGlzY29yZFNrdSxcbiAgRGlzY29yZFNvdW5kYm9hcmRTb3VuZCxcbiAgRGlzY29yZFN0YWdlSW5zdGFuY2UsXG4gIERpc2NvcmRTdGlja2VyLFxuICBEaXNjb3JkU3RpY2tlclBhY2ssXG4gIERpc2NvcmRTdWJzY3JpcHRpb24sXG4gIERpc2NvcmRUYXJnZXRVc2Vyc0pvYlN0YXR1cyxcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVG9rZW5FeGNoYW5nZSxcbiAgRGlzY29yZFRva2VuUmV2b2NhdGlvbixcbiAgRGlzY29yZFVzZXIsXG4gIERpc2NvcmRWYW5pdHlVcmwsXG4gIERpc2NvcmRWb2ljZVJlZ2lvbixcbiAgRGlzY29yZFZvaWNlU3RhdGUsXG4gIERpc2NvcmRXZWJob29rLFxuICBEaXNjb3JkV2VsY29tZVNjcmVlbixcbiAgRWRpdEFwcGxpY2F0aW9uLFxuICBFZGl0QXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucyxcbiAgRWRpdEJvdE1lbWJlck9wdGlvbnMsXG4gIEVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlc09wdGlvbnMsXG4gIEVkaXRHdWlsZE9uYm9hcmRpbmcsXG4gIEVkaXRHdWlsZFJvbGUsXG4gIEVkaXRHdWlsZFN0aWNrZXJPcHRpb25zLFxuICBFZGl0TWVzc2FnZSxcbiAgRWRpdE93blZvaWNlU3RhdGUsXG4gIEVkaXRTY2hlZHVsZWRFdmVudCxcbiAgRWRpdFVzZXJWb2ljZVN0YXRlLFxuICBFZGl0V2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICBFeGVjdXRlV2ViaG9vayxcbiAgRmlsZUNvbnRlbnQsXG4gIEdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25PcHRpb25zLFxuICBHZXRCYW5zLFxuICBHZXRDaGFubmVsUGluc09wdGlvbnMsXG4gIEdldEVudGl0bGVtZW50cyxcbiAgR2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kc09wdGlvbnMsXG4gIEdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kc09wdGlvbnMsXG4gIEdldEd1aWxkQXVkaXRMb2csXG4gIEdldEd1aWxkUHJ1bmVDb3VudFF1ZXJ5LFxuICBHZXRJbnZpdGUsXG4gIEdldE1lc3NhZ2VzT3B0aW9ucyxcbiAgR2V0UG9sbEFuc3dlclZvdGVzLFxuICBHZXRSZWFjdGlvbnMsXG4gIEdldFNjaGVkdWxlZEV2ZW50cyxcbiAgR2V0U2NoZWR1bGVkRXZlbnRVc2VycyxcbiAgR2V0VGhyZWFkTWVtYmVyLFxuICBHZXRVc2VyR3VpbGRzLFxuICBHZXRXZWJob29rTWVzc2FnZU9wdGlvbnMsXG4gIEd1aWxkRmVhdHVyZXMsXG4gIEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhLFxuICBJbnRlcmFjdGlvbkNhbGxiYWNrT3B0aW9ucyxcbiAgSW50ZXJhY3Rpb25SZXNwb25zZSxcbiAgTGlua0NoYW5uZWxUb0xvYmJ5LFxuICBMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICBMaXN0R3VpbGRNZW1iZXJzLFxuICBMaXN0U2t1U3Vic2NyaXB0aW9uc09wdGlvbnMsXG4gIExpc3RUaHJlYWRNZW1iZXJzLFxuICBNb2RpZnlBcHBsaWNhdGlvbkVtb2ppLFxuICBNb2RpZnlDaGFubmVsLFxuICBNb2RpZnlHdWlsZCxcbiAgTW9kaWZ5R3VpbGRDaGFubmVsUG9zaXRpb25zLFxuICBNb2RpZnlHdWlsZEVtb2ppLFxuICBNb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyxcbiAgTW9kaWZ5R3VpbGRNZW1iZXIsXG4gIE1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxuICBNb2RpZnlHdWlsZFdlbGNvbWVTY3JlZW4sXG4gIE1vZGlmeUxvYmJ5LFxuICBNb2RpZnlSb2xlUG9zaXRpb25zLFxuICBNb2RpZnlXZWJob29rLFxuICBTY2hlZHVsZWRFdmVudEVudGl0eVR5cGUsXG4gIFNjaGVkdWxlZEV2ZW50U3RhdHVzLFxuICBTZWFyY2hNZW1iZXJzLFxuICBTZW5kU291bmRib2FyZFNvdW5kLFxuICBTdGFydFRocmVhZFdpdGhNZXNzYWdlLFxuICBTdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlLFxuICBVcHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRPcHRpb25zLFxuICBVcHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBJbnZhbGlkUmVxdWVzdEJ1Y2tldCB9IGZyb20gJy4vaW52YWxpZEJ1Y2tldC5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlc3RSb3V0ZXMgfSBmcm9tICcuL3R5cGluZ3Mvcm91dGVzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMge1xuICAvKiogVGhlIGJvdCB0b2tlbiB3aGljaCB3aWxsIGJlIHVzZWQgdG8gbWFrZSByZXF1ZXN0cy4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqXG4gICAqIEZvciBvbGQgYm90cyB0aGF0IGhhdmUgYSBkaWZmZXJlbnQgYm90IGlkIGFuZCBhcHBsaWNhdGlvbiBpZC5cbiAgICogQGRlZmF1bHQgYm90IGlkIGZyb20gdG9rZW5cbiAgICovXG4gIGFwcGxpY2F0aW9uSWQ/OiBCaWdTdHJpbmc7XG4gIC8qKiBDb25maWd1cmF0aW9uIHdoZW4gdXNpbmcgYSBwcm94eS4gKi9cbiAgcHJveHk/OiB7XG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIHRvIGNvbm5lY3QgdG8uIElmIHlvdSBjcmVhdGUgYSBwcm94eSByZXN0LCB0aGF0IHVybCB3b3VsZCBnbyBoZXJlLlxuICAgICAqIElUIFNIT1VMRCBOT1QgRU5EIFdJVEggQSAvXG4gICAgICogQGRlZmF1bHQgaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGlcbiAgICAgKi9cbiAgICBiYXNlVXJsOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBhdXRob3JpemF0aW9uIGhlYWRlciB2YWx1ZSB0byBhdHRhY2ggd2hlbiBzZW5kaW5nIHJlcXVlc3RzIHRvIHRoZSBwcm94eS4gKi9cbiAgICBhdXRob3JpemF0aW9uPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBhdXRob3JpemF0aW9uIGhlYWRlciBuYW1lIHRvIHVzZSB3aGVuIHNlbmRpbmcgcmVxdWVzdHMgdG8gdGhlIHByb3h5XG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIHRoZSBoZWFkZXIgbmFtZSBpcyBzZXQgdG8gYGF1dGhvcml6YXRpb25gLCBpdCB3aWxsIG92ZXJyaWRlIGFueSBhdXRob3JpemF0aW9uIHRoYXQgaXMgZ2l2ZW4gZXZlbiBpZlxuICAgICAqIHRoZSByZXF1ZXN0cyB1c2VzIE9BdXRoMiBCZWFyZXIgdG9rZW5zIC8gQmFzaWMgdG9rZW5zXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImF1dGhvcml6YXRpb25cIiAvLyBGb3IgY29tcGF0aWJpbGl0eSBwdXJwb3Nlc1xuICAgICAqL1xuICAgIGF1dGhvcml6YXRpb25IZWFkZXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIGVuZHBvaW50IHRvIHVzZSBpbiB0aGUgcmVzdCBwcm94eSB0byB1cGRhdGUgdGhlIGJlYXJlciB0b2tlbnNcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogU2hvdWxkIG5vdCBpbmNsdWRlIGEgYC9gIGluIHRoZSBzdGFydFxuICAgICAqXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhY3R1YWxseSByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UgYHVwZGF0ZVRva2VuUXVldWVzYFxuICAgICAqL1xuICAgIHVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIH07XG4gIC8qKlxuICAgKiBUaGUgYXBpIHZlcnNpb25zIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG1ha2UgcmVxdWVzdHMuXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICB2ZXJzaW9uPzogQXBpVmVyc2lvbnM7XG4gIC8qKlxuICAgKiBUaGUgbG9nZ2VyIHRoYXQgdGhlIHJlc3QgbWFuYWdlciB3aWxsIHVzZVxuICAgKiBAZGVmYXVsdCBsb2dnZXIgLy8gVGhlIGxvZ2dlciBleHBvcnRlZCBieSBgQGRpc2NvcmRlbm8vdXRpbHNgXG4gICAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz47XG4gIC8qKiBFdmVudHMgZm9yIHRoZSByZXN0IG1hbmFnZXIgKi9cbiAgZXZlbnRzPzogUGFydGlhbDxSZXN0TWFuYWdlckV2ZW50cz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdE1hbmFnZXIge1xuICAvKiogVGhlIGJvdCB0b2tlbiB3aGljaCB3aWxsIGJlIHVzZWQgdG8gbWFrZSByZXF1ZXN0cy4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIFRoZSBhcHBsaWNhdGlvbiBpZC4gTm9ybWFsbHkgdGhpcyBpcyBub3QgcmVxdWlyZWQgZm9yIHJlY2VudCBib3RzIGJ1dCBvbGQgYm90J3MgYXBwbGljYXRpb24gaWQgaXMgc29tZXRpbWVzIGRpZmZlcmVudCBmcm9tIHRoZSBib3QgaWQgc28gaXQgaXMgcmVxdWlyZWQgZm9yIHRob3NlIGJvdHMuICovXG4gIGFwcGxpY2F0aW9uSWQ6IGJpZ2ludDtcbiAgLyoqIFRoZSBhcGkgdmVyc2lvbiB0byB1c2Ugd2hlbiBtYWtpbmcgcmVxdWVzdHMuIE9ubHkgdGhlIGxhdGVzdCBzdXBwb3J0ZWQgdmVyc2lvbiB3aWxsIGJlIHRlc3RlZC4gKi9cbiAgdmVyc2lvbjogQXBpVmVyc2lvbnM7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSB1cmwgdG8gY29ubmVjdCB0by4gSWYgeW91IGNyZWF0ZSBhIHByb3h5IHJlc3QsIHRoYXQgdXJsIHdvdWxkIGdvIGhlcmUuXG4gICAqIElUIFNIT1VMRCBOT1QgRU5EIFdJVEggQSAvXG4gICAqIEBkZWZhdWx0IGh0dHBzOi8vZGlzY29yZC5jb20vYXBpXG4gICAqL1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgdHJ1ZWAgaWYgdGhlIGBiYXNlVXJsYCBkb2VzIG5vdCBzdGFydCB3aXRoIGBodHRwczovL2Rpc2NvcmQuY29tL2FwaWAuXG4gICAqXG4gICAqIE1vc3RseSB1c2VkIG9ubHkgZm9yIGludGVybiBmdW5jdGlvbnMuXG4gICAqL1xuICBpc1Byb3hpZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWUgdG8gYXR0YWNoIHdoZW4gc2VuZGluZyByZXF1ZXN0cyB0byB0aGUgcHJveHkuICovXG4gIGF1dGhvcml6YXRpb24/OiBzdHJpbmc7XG4gIC8qKiBUaGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgbmFtZSB0byBhdHRhY2ggd2hlbiBzZW5kaW5nIHJlcXVlc3RzIHRvIHRoZSBwcm94eSAqL1xuICBhdXRob3JpemF0aW9uSGVhZGVyOiBzdHJpbmc7XG4gIC8qKiBUaGUgZW5kcG9pbnQgdG8gdXNlIGZvciBgdXBkYXRlVG9rZW5RdWV1ZXNgIHdoZW4gd29ya2luZyB3aXRoIGEgcmVzdCBwcm94eSAqL1xuICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50Pzogc3RyaW5nO1xuICAvKiogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWVzIGEgcmVxdWVzdCBzaG91bGQgYmUgcmV0cmllZC4gRGVmYXVsdHMgdG8gSW5maW5pdHkgKi9cbiAgbWF4UmV0cnlDb3VudDogbnVtYmVyO1xuICAvKiogV2hldGhlciBvciBub3QgdGhlIG1hbmFnZXIgaXMgcmF0ZSBsaW1pdGVkIGdsb2JhbGx5IGFjcm9zcyBhbGwgcmVxdWVzdHMuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICBnbG9iYWxseVJhdGVMaW1pdGVkOiBib29sZWFuO1xuICAvKiogV2hldGhlciBvciBub3QgdGhlIHJhdGUgbGltaXRlZCBwYXRocyBhcmUgYmVpbmcgcHJvY2Vzc2VkIHRvIGFsbG93IHJlcXVlc3RzIHRvIGJlIG1hZGUgb25jZSB0aW1lIGlzIHVwLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGJvb2xlYW47XG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZGVsZXRpbmcgdGhpcyBxdWV1ZSBpZiBpdCBpcyBlbXB0eS4gRGVmYXVsdHMgdG8gNjAwMDAob25lIG1pbnV0ZSkuICovXG4gIGRlbGV0ZVF1ZXVlRGVsYXk6IG51bWJlcjtcbiAgLyoqIFRoZSBxdWV1ZXMgdGhhdCBob2xkIGFsbCB0aGUgcmVxdWVzdHMgdG8gYmUgcHJvY2Vzc2VkLiAqL1xuICBxdWV1ZXM6IE1hcDxzdHJpbmcsIFF1ZXVlPjtcbiAgLyoqIFRoZSBwYXRocyB0aGF0IGFyZSBjdXJyZW50bHkgcmF0ZSBsaW1pdGVkLiAqL1xuICByYXRlTGltaXRlZFBhdGhzOiBNYXA8c3RyaW5nLCBSZXN0UmF0ZUxpbWl0ZWRQYXRoPjtcbiAgLyoqIFRoZSBidWNrZXQgZm9yIGhhbmRsaW5nIGFueSBpbnZhbGlkIHJlcXVlc3RzLiAgKi9cbiAgaW52YWxpZEJ1Y2tldDogSW52YWxpZFJlcXVlc3RCdWNrZXQ7XG4gIC8qKiBUaGUgcm91dGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBtYW5hZ2VyLiAqL1xuICByb3V0ZXM6IFJlc3RSb3V0ZXM7XG4gIC8qKiBUaGUgbG9nZ2VyIHRvIHVzZSBmb3IgdGhlIHJlc3QgbWFuYWdlciAqL1xuICBsb2dnZXI6IFBpY2s8dHlwZW9mIGxvZ2dlciwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicgfCAnZmF0YWwnPjtcbiAgLyoqIEV2ZW50cyBmb3IgdGhlIHJlc3QgbWFuYWdlciAqL1xuICBldmVudHM6IFJlc3RNYW5hZ2VyRXZlbnRzO1xuICAvKiogQWxsb3dzIHRoZSB1c2VyIHRvIGluamVjdCBjdXN0b20gaGVhZGVycyB0aGF0IHdpbGwgYmUgc2VudCB3aXRoIGV2ZXJ5IHJlcXVlc3QuICovXG4gIGNyZWF0ZUJhc2VIZWFkZXJzOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogV2hldGhlciBvciBub3QgdGhlIHJlc3QgbWFuYWdlciBzaG91bGQga2VlcCBvYmplY3RzIGluIHJhdyBzbmFrZSBjYXNlIGZyb20gZGlzY29yZC4gKi9cbiAgcHJlZmVyU25ha2VDYXNlOiAoZW5hYmxlZDogYm9vbGVhbikgPT4gUmVzdE1hbmFnZXI7XG4gIC8qKiBDaGVjayB0aGUgcmF0ZSBsaW1pdHMgZm9yIGEgdXJsIG9yIGEgYnVja2V0LiAqL1xuICBjaGVja1JhdGVMaW1pdHM6ICh1cmw6IHN0cmluZywgaWRlbnRpZmllcjogc3RyaW5nKSA9PiBudW1iZXIgfCBmYWxzZTtcbiAgLyogVXBkYXRlIHRoZSBxdWV1ZXMgYW5kIHJhdGVsaW1pdCBpbmZvcm1hdGlvbiB0byBhZGFwdCB0byB0aGUgbmV3IHRva2VuICovXG4gIHVwZGF0ZVRva2VuUXVldWVzOiAob2xkVG9rZW46IHN0cmluZywgbmV3VG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJlc2hhcGVzIGFuZCBtb2RpZmllcyB0aGUgb2JqIGFzIG5lZWRlZCB0byBtYWtlIGl0IHJlYWR5IGZvciBkaXNjb3JkcyBhcGkuICovXG4gIGNoYW5nZVRvRGlzY29yZEZvcm1hdDogKG9iajogYW55KSA9PiBhbnk7XG4gIC8qKiBDcmVhdGVzIHRoZSByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMgdGhhdCBhcmUgbmVjZXNzYXJ5IHRvIHNlbmQgYSByZXF1ZXN0LiBXaWxsIGhhbmRsZSBkaWZmZXJlbnQgdHlwZXMgb2YgbWV0aG9kcyBhbmQgZXZlcnl0aGluZyBuZWNlc3NhcnkgZm9yIGRpc2NvcmQuICovXG4gIGNyZWF0ZVJlcXVlc3RCb2R5OiAobWV0aG9kOiBSZXF1ZXN0TWV0aG9kcywgb3B0aW9ucz86IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucykgPT4gUmVxdWVzdEJvZHk7XG4gIC8qKiBUaGlzIHdpbGwgY3JlYXRlIGEgaW5maW5pdGUgbG9vcCBydW5uaW5nIGluIDEgc2Vjb25kcyB1c2luZyB0YWlsIHJlY3Vyc2lvbiB0byBrZWVwIHJhdGUgbGltaXRzIGNsZWFuLiBXaGVuIGEgcmF0ZSBsaW1pdCByZXNldHMsIHRoaXMgd2lsbCByZW1vdmUgaXQgc28gdGhlIHF1ZXVlIGNhbiBwcm9jZWVkLiAqL1xuICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoczogKCkgPT4gdm9pZDtcbiAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICBwcm9jZXNzSGVhZGVyczogKHVybDogc3RyaW5nLCBoZWFkZXJzOiBIZWFkZXJzLCBpZGVudGlmaWVyOiBzdHJpbmcpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIFNlbmRzIGEgcmVxdWVzdCB0byB0aGUgYXBpLiAqL1xuICBzZW5kUmVxdWVzdDogKG9wdGlvbnM6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFNwbGl0IGEgdXJsIHRvIHNlcGFyYXRlIHJhdGUgbGltaXQgYnVja2V0cyBiYXNlZCBvbiBtYWpvci9taW5vciBwYXJhbWV0ZXJzLiAqL1xuICBzaW1wbGlmeVVybDogKHVybDogc3RyaW5nLCBtZXRob2Q6IFJlcXVlc3RNZXRob2RzKSA9PiBzdHJpbmc7XG4gIC8qKiBNYWtlIGEgcmVxdWVzdCB0byBiZSBzZW50IHRvIHRoZSBhcGkuICovXG4gIG1ha2VSZXF1ZXN0OiA8VCA9IHVua25vd24+KG1ldGhvZDogUmVxdWVzdE1ldGhvZHMsIHVybDogc3RyaW5nLCBvcHRpb25zPzogTWFrZVJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFQ+O1xuICAvKiogVGFrZXMgYSByZXF1ZXN0IGFuZCBwcm9jZXNzZXMgaXQgaW50byBhIHF1ZXVlLiAqL1xuICBwcm9jZXNzUmVxdWVzdDogKHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIE1ha2UgYSBnZXQgcmVxdWVzdCB0byB0aGUgYXBpICovXG4gIGdldDogPFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+KSA9PiBQcm9taXNlPENhbWVsaXplPFQ+PjtcbiAgLyoqIE1ha2UgYSBwb3N0IHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcG9zdDogPFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE1ha2VSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxUPj47XG4gIC8qKiBNYWtlIGEgcHV0IHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcHV0OiA8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogTWFrZVJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPFQ+PjtcbiAgLyoqIE1ha2UgYSBkZWxldGUgcmVxdWVzdCB0byB0aGUgYXBpLiAqL1xuICBkZWxldGU6ICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+KSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKiogTWFrZSBhIHBhdGNoIHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcGF0Y2g6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBNYWtlUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8VD4+O1xuICAvKipcbiAgICogQWRkcyBhIHJlYWN0aW9uIHRvIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBhZGQgYSByZWFjdGlvbiB0byBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBhZGQgYSByZWFjdGlvbiB0by5cbiAgICogQHBhcmFtIHJlYWN0aW9uIC0gVGhlIHJlYWN0aW9uIHRvIGFkZCB0byB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnNcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgbm9ib2R5IGVsc2UgaGFzIHJlYWN0ZWQgdG8gdGhlIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBBRERfUkVBQ1RJT05TYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFJlYWN0aW9uIEFkZF8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjY3JlYXRlLXJlYWN0aW9ufVxuICAgKi9cbiAgYWRkUmVhY3Rpb246IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYWN0aW9uOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBBZGRzIG11bHRpcGxlIGEgcmVhY3Rpb24gdG8gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGBhZGRSZWFjdGlvbigpYCBoZWxwZXIgYmVoaW5kIHRoZSBzY2VuZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgdG8gYWRkIHJlYWN0aW9ucyB0byBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBhZGQgdGhlIHJlYWN0aW9ucyB0by5cbiAgICogQHBhcmFtIHJlYWN0aW9ucyAtIFRoZSByZWFjdGlvbnMgdG8gYWRkIHRvIHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gb3JkZXJlZCAtIFdoZXRoZXIgdGhlIHJlYWN0aW9ucyBtdXN0IGJlIGFkZGVkIGluIG9yZGVyIG9yIG5vdC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgbm9ib2R5IGVsc2UgaGFzIHJlYWN0ZWQgdG8gdGhlIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBBRERfUkVBQ1RJT05TYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFJlYWN0aW9uIEFkZF8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgcmVhY3Rpb24gYWRkZWQuXG4gICAqL1xuICBhZGRSZWFjdGlvbnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYWN0aW9uczogc3RyaW5nW10sIG9yZGVyZWQ/OiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQWRkcyBhIHJvbGUgdG8gYSBtZW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgbWVtYmVyIHRvIGFkZCB0aGUgcm9sZSB0byBpcyBpbi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gYWRkIHRoZSByb2xlIHRvLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGFkZCB0byB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjYWRkLWd1aWxkLW1lbWJlci1yb2xlfVxuICAgKi9cbiAgYWRkUm9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBBZGRzIGEgbWVtYmVyIHRvIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gYWRkIHRoZSBtZW1iZXIgdG8uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGFkZCB0byB0aGUgdGhyZWFkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYWJpbGl0eSB0byBzZW5kIG1lc3NhZ2VzIGluIHRoZSB0aHJlYWQuXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2FkZC10aHJlYWQtbWVtYmVyfVxuICAgKi9cbiAgYWRkVGhyZWFkTWVtYmVyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQWRkcyBhIHJlY2lwaWVudCB0byBhIGdyb3VwIERNLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBncm91cCBkbSB0byBhZGQgdGhlIHVzZXIgdG8uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgdXNlciB0byBhZGQgdG8gdGhlIGdyb3VwIGRtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBhZGRpbmcgdGhlIHVzZXJcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgYW4gT0F1dGgyIGFjY2VzcyB0b2tlbiB3aXRoIHRoZSBgZ2RtLmpvaW5gIHNjb3BlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2dyb3VwLWRtLWFkZC1yZWNpcGllbnR9XG4gICAqL1xuICBhZGREbVJlY2lwaWVudDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQWRkRG1SZWNpcGllbnRPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQWRkcyBhIG1lbWJlciB0byBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGFkZCB0aGUgbWVtYmVyIHRvLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBhZGQgdG8gdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGFkZCBvZiBhIGd1aWxkIG1lbWJlclxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYm90IHRvIGJlIGluIHRoZSBzcGVjaWZpZWQgc2VydmVyXG4gICAqIFJlcXVpcmVzIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4gd2l0aCB0aGUgYGd1aWxkcy5qb2luYCBzY29wZVxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgQWRkXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjYWRkLWd1aWxkLW1lbWJlcn1cbiAgICovXG4gIGFkZEd1aWxkTWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQWRkR3VpbGRNZW1iZXJPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhdXRvbW9kIHJ1bGUgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgcnVsZSBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBydWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGFuIF9BdXRvIE1vZGVyYXRpb24gUnVsZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jY3JlYXRlLWF1dG8tbW9kZXJhdGlvbi1ydWxlfVxuICAgKi9cbiAgY3JlYXRlQXV0b21vZFJ1bGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUF1dG9Nb2RlcmF0aW9uUnVsZU9wdGlvbnMsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPj47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2hhbm5lbCB3aXRoaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgY2hhbm5lbCB3aXRoaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgY2hhbm5lbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgc2V0dGluZyBwZXJtaXNzaW9uIG92ZXJ3cml0ZXMsIG9ubHkgdGhlIHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIGNhbiBiZSBhbGxvd2VkIG9yIGRlbmllZC5cbiAgICpcbiAgICogU2V0dGluZyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbiBpcyBvbmx5IHBvc3NpYmxlIGZvciBndWlsZCBhZG1pbmlzdHJhdG9ycy5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGQtY2hhbm5lbH1cbiAgICovXG4gIGNyZWF0ZUNoYW5uZWw6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkQ2hhbm5lbCwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtb2ppIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBjcmVhdGUgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRW1vamlzIGhhdmUgYSBtYXhpbXVtIGZpbGUgc2l6ZSBvZiAyNTYga2lsb2JpdHMuIEF0dGVtcHRpbmcgdG8gdXBsb2FkIGEgbGFyZ2VyIGVtb2ppIHdpbGwgY2F1c2UgdGhlIHJvdXRlIHRvIHJldHVybiA0MDAgQmFkIFJlcXVlc3QuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEVtb2ppcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNjcmVhdGUtZ3VpbGQtZW1vaml9XG4gICAqL1xuICBjcmVhdGVFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRFbW9qaSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlbW9qaSBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGVtb2ppLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2Vtb2ppI2NyZWF0ZS1hcHBsaWNhdGlvbi1lbW9qaX1cbiAgICovXG4gIGNyZWF0ZUFwcGxpY2F0aW9uRW1vamk6IChvcHRpb25zOiBDcmVhdGVBcHBsaWNhdGlvbkVtb2ppKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB0aHJlYWQgaW4gYSBmb3J1bSBjaGFubmVsIG9yIG1lZGlhIGNoYW5uZWwsIGFuZCBzZW5kcyBhIG1lc3NhZ2Ugd2l0aGluIHRoZSBjcmVhdGVkIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgZm9ydW0gY2hhbm5lbCB0byBjcmVhdGUgdGhlIHRocmVhZCB3aXRoaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGhyZWFkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0gd2l0aCBhIG5lc3RlZCB7QGxpbmsgRGlzY29yZENoYW5uZWx9IG9iamVjdC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBDUkVBVEVfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNzdGFydC10aHJlYWQtaW4tZm9ydW0tb3ItbWVkaWEtY2hhbm5lbH1cbiAgICovXG4gIGNyZWF0ZUZvcnVtVGhyZWFkOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUZvcnVtUG9zdFdpdGhNZXNzYWdlLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCBhY2Nlc3NpYmxlIGdsb2JhbGx5OyBhY3Jvc3MgZGlmZmVyZW50IGd1aWxkcyBhbmQgY2hhbm5lbHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gY3JlYXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIENyZWF0aW5nIGEgY29tbWFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY29tbWFuZCBmb3IgeW91ciBhcHBsaWNhdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgb2xkIGNvbW1hbmQuXG4gICAqIOKaoO+4jyBHbG9iYWwgY29tbWFuZHMgb25jZSBjcmVhdGVkIGFyZSBjYWNoZWQgZm9yIHBlcmlvZHMgb2YgX19hbiBob3VyX18sIHNvIGNoYW5nZXMgbWFkZSB0byBleGlzdGluZyBjb21tYW5kcyB3aWxsIHRha2UgYW4gaG91ciB0byBzdXJmYWNlLlxuICAgKiDimqDvuI8gWW91IGNhbiBvbmx5IGNyZWF0ZSB1cCB0byAyMDAgX25ld18gY29tbWFuZHMgZGFpbHkuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgdGhlIGJlYXJlciB0b2tlbiB0aGUgdG9rZW4gbmVlZHMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMudXBkYXRlYCBzY29wZSBhbmQgbXVzdCBiZSBhIGBDbGllbnQgZ3JhbnRgIHRva2VuLlxuICAgKiAgWW91IHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgb25seSB5b3VyIG93biBhcHBsaWNhdGlvbiBjb21tYW5kc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjY3JlYXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoXG4gICAgY29tbWFuZDogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kLFxuICAgIG9wdGlvbnM/OiBDcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRPcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIG9ubHkgYWNjZXNzaWJsZSBpbiBhIHNwZWNpZmljIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgY29tbWFuZCBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgZW5kcG9pbnRcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDimqDvuI8gQ3JlYXRpbmcgYSBjb21tYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBjb21tYW5kIGZvciB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgb3ZlcndyaXRlIHRoZSBvbGQgY29tbWFuZC5cbiAgICog4pqg77iPIFlvdSBjYW4gb25seSBjcmVhdGUgdXAgdG8gMjAwIF9uZXdfIGNvbW1hbmRzIGRhaWx5LlxuICAgKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBiZWFyZXIgdG9rZW4gdGhlIHRva2VuIG5lZWRzIHRoZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnVwZGF0ZWAgc2NvcGUgYW5kIG11c3QgYmUgYSBgQ2xpZW50IGdyYW50YCB0b2tlbi5cbiAgICogIFlvdSB3aWxsIGJlIGFibGUgdG8gdXBkYXRlIG9ubHkgeW91ciBvd24gYXBwbGljYXRpb24gY29tbWFuZHNcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2NyZWF0ZS1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQ6IChcbiAgICBjb21tYW5kOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQsXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj47XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgc3RpY2tlciBmb3IgdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm4gQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGaXJlcyBhIEd1aWxkIFN0aWNrZXJzIFVwZGF0ZSBHYXRld2F5IGV2ZW50LlxuICAgKiBFdmVyeSBndWlsZHMgaGFzIGZpdmUgZnJlZSBzdGlja2VyIHNsb3RzIGJ5IGRlZmF1bHQsIGFuZCBlYWNoIEJvb3N0IGxldmVsIHdpbGwgZ3JhbnQgYWNjZXNzIHRvIG1vcmUgc2xvdHMuXG4gICAqIExvdHRpZSBzdGlja2VycyBjYW4gb25seSBiZSB1cGxvYWRlZCBvbiBndWlsZHMgdGhhdCBoYXZlIGVpdGhlciB0aGUgYFZFUklGSUVEYCBhbmQvb3IgdGhlIGBQQVJUTkVSRURgIGd1aWxkIGZlYXR1cmUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9zdGlja2VyI2NyZWF0ZS1ndWlsZC1zdGlja2VyfVxuICAgKi9cbiAgY3JlYXRlR3VpbGRTdGlja2VyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZFN0aWNrZXJPcHRpb25zLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXI+PjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHRlbXBsYXRlIGZyb20uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkVGVtcGxhdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjY3JlYXRlLWd1aWxkLXRlbXBsYXRlfVxuICAgKi9cbiAgY3JlYXRlR3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlVGVtcGxhdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGludml0ZSB0byBhIGNoYW5uZWwgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBjcmVhdGUgdGhlIGludml0ZSB0by5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBpbnZpdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRJbnZpdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYENSRUFURV9JTlNUQU5UX0lOVklURWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYW4gX0ludml0ZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBwcml2YXRlUmVtYXJrc1xuICAgKiBUaGUgcmVxdWVzdCBib2R5IGlzIG5vdCBvcHRpb25hbCwgYW5kIGFuIGVtcHR5IEpTT04gb2JqZWN0IG11c3QgYmUgc2VudCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYW55IGZpZWxkcyBhcmUgYmVpbmcgdHJhbnNtaXR0ZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2NyZWF0ZS1jaGFubmVsLWludml0ZX1cbiAgICovXG4gIGNyZWF0ZUludml0ZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogQ3JlYXRlQ2hhbm5lbEludml0ZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGU+PjtcbiAgLyoqXG4gICAqIEdldCBndWlsZCByb2xlIG1lbWJlciBjb3VudHNcbiAgICpcbiAgICogUmV0dXJucyBhIG1hcCBvZiByb2xlIElEcyB0byB0aGUgbnVtYmVyIG9mIG1lbWJlcnMgd2l0aCB0aGUgcm9sZS4gRG9lcyBub3QgaW5jbHVkZSB0aGUgXFxAZXZlcnlvbmUgcm9sZS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCByb2xlIG1lbWJlciBjb3VudHMgZm9yLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXJvbGUtbWVtYmVyLWNvdW50c31cbiAgICovXG4gIGdldEd1aWxkUm9sZU1lbWJlckNvdW50czogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByb2xlIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHJvbGUgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgcm9sZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFJvbGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGQtcm9sZX1cbiAgICovXG4gIGNyZWF0ZVJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkUm9sZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlPj47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2NoZWR1bGVkIGV2ZW50IGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHNjaGVkdWxlZCBldmVudCBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRTY2hlZHVsZWRFdmVudH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQSBndWlsZCBjYW4gb25seSBoYXZlIGEgbWF4aW11bSBvZiAxMDAgZXZlbnRzIHdpdGggYSBzdGF0dXMgb2Yge0BsaW5rIFNjaGVkdWxlZEV2ZW50U3RhdHVzfS5BY3RpdmUgb3Ige0BsaW5rIFNjaGVkdWxlZEV2ZW50U3RhdHVzfS5TY2hlZHVsZWQgKGluY2x1c2l2ZSkuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFNjaGVkdWxlZCBFdmVudCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjY3JlYXRlLWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICovXG4gIGNyZWF0ZVNjaGVkdWxlZEV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVTY2hlZHVsZWRFdmVudCwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudD4+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHN0YWdlIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBhIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgc3RhZ2UgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRTdGFnZUluc3RhbmNlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHVzZXIgdG8gYmUgYSBtb2RlcmF0b3Igb2YgdGhlIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2NyZWF0ZS1zdGFnZS1pbnN0YW5jZX1cbiAgICovXG4gIGNyZWF0ZVN0YWdlSW5zdGFuY2U6IChvcHRpb25zOiBDcmVhdGVTdGFnZUluc3RhbmNlLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0YWdlSW5zdGFuY2U+PjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB3ZWJob29rLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGNyZWF0ZSB0aGUgd2ViaG9vayBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB3ZWJob29rLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiDimqDvuI8gVGhlIHdlYmhvb2sgbmFtZSBtdXN0IG5vdCBjb250YWluIHRoZSBzdWJzdHJpbmdzICdjbHlkZScsIG9yICdkaXNjb3JkJyAoY2FzZS1pbnNlbnNpdGl2ZSkuXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjY3JlYXRlLXdlYmhvb2t9XG4gICAqL1xuICBjcmVhdGVXZWJob29rOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZVdlYmhvb2ssIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+O1xuICAvKipcbiAgICogRGVsZXRlcyBhbiBhdXRvbW9kIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHJ1bGUgZnJvbS5cbiAgICogQHBhcmFtIHJ1bGVJZCAtIFRoZSBJRCBvZiB0aGUgYXV0b21vZCBydWxlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYW4gX0F1dG8gTW9kZXJhdGlvbiBSdWxlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNkZWxldGUtYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAqL1xuICBkZWxldGVBdXRvbW9kUnVsZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcnVsZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBjaGFubmVsIGZyb20gd2l0aGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIG5vdGhpbmdcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIGNvbW11bml0eSBndWlsZHMsIHRoZSBfUnVsZXNfLCBfR3VpZGVsaW5lc18gYW5kIF9Db21tdW5pdHkgVXBkYXRlXyBjaGFubmVscyBjYW5ub3QgYmUgZGVsZXRlZC5cbiAgICpcbiAgICogSWYgdGhlIGNoYW5uZWwgaXMgYSB0aHJlYWQ6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfVEhSRUFEU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogLSBGaXJlcyBhIF9UaHJlYWQgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBPdGhlcndpc2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIC0g4pqg77iPIERlbGV0aW5nIGEgY2F0ZWdvcnkgY2hhbm5lbCBkb2VzIG5vdCBkZWxldGUgaXRzIGNoaWxkIGNoYW5uZWxzLlxuICAgKiAgIEluc3RlYWQsIHRoZXkgd2lsbCBoYXZlIHRoZWlyIGBwYXJlbnRfaWRgIHByb3BlcnR5IHJlbW92ZWQsIGFuZCBhIGBDaGFubmVsIFVwZGF0ZWAgZ2F0ZXdheSBldmVudCB3aWxsIGZpcmUgZm9yIGVhY2ggb2YgdGhlbS5cbiAgICpcbiAgICogLSBGaXJlcyBhIF9DaGFubmVsIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlY2xvc2UtY2hhbm5lbH1cbiAgICovXG4gIGRlbGV0ZUNoYW5uZWw6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogRGVsZXRlcyBhIHBlcm1pc3Npb24gb3ZlcnJpZGUgZm9yIGEgdXNlciBvciByb2xlIGluIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUgb2YuXG4gICAqIEBwYXJhbSBvdmVyd3JpdGVJZCAtIFRoZSBJRCBvZiB0aGUgcGVybWlzc2lvbiBvdmVycmlkZSB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtY2hhbm5lbC1wZXJtaXNzaW9ufVxuICAgKi9cbiAgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvdmVyd3JpdGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGVtb2ppIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIGVtb2ppcyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIGVtb2ppcywgcmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEVtb2ppcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNkZWxldGUtZ3VpbGQtZW1vaml9XG4gICAqL1xuICBkZWxldGVFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogRGVsZXRlcyBhbiBlbW9qaSBmcm9tIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBkZWxldGUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNkZWxldGUtYXBwbGljYXRpb24tZW1vaml9XG4gICAqL1xuICBkZWxldGVBcHBsaWNhdGlvbkVtb2ppOiAoaWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBkZWxldGVNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQgbmVlZGluZyB0byBzZWUgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgaW4uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNkZWxldGUtZm9sbG93dXAtbWVzc2FnZX1cbiAgICovXG4gIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZTogKHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogRGVsZXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIHJlZ2lzdGVyZWQgZ2xvYmFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZGVsZXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZGVsZXRlIHRoZSBjb21tYW5kIGZyb20uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZGVsZXRlIGZyb20gdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZGVsZXRlLWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZDogKGNvbW1hbmRJZDogQmlnU3RyaW5nLCBndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGUgYSBuZXcgc3RpY2tlciBmb3IgdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm4gQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZvciBzdGlja2VycyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIHN0aWNrZXJzLCByZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRmlyZXMgYSBHdWlsZCBTdGlja2VycyBVcGRhdGUgR2F0ZXdheSBldmVudC5cbiAgICogRXZlcnkgZ3VpbGRzIGhhcyBmaXZlIGZyZWUgc3RpY2tlciBzbG90cyBieSBkZWZhdWx0LCBhbmQgZWFjaCBCb29zdCBsZXZlbCB3aWxsIGdyYW50IGFjY2VzcyB0byBtb3JlIHNsb3RzLlxuICAgKiBMb3R0aWUgc3RpY2tlcnMgY2FuIG9ubHkgYmUgdXBsb2FkZWQgb24gZ3VpbGRzIHRoYXQgaGF2ZSBlaXRoZXIgdGhlIGBWRVJJRklFRGAgYW5kL29yIHRoZSBgUEFSVE5FUkVEYCBndWlsZCBmZWF0dXJlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvc3RpY2tlciNkZWxldGUtZ3VpbGQtc3RpY2tlcn1cbiAgICovXG4gIGRlbGV0ZUd1aWxkU3RpY2tlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgc3RpY2tlcklkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB0ZW1wbGF0ZSBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHRlbXBsYXRlIGZyb20uXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZUNvZGUgLSBUaGUgY29kZSBvZiB0aGUgdGVtcGxhdGUgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZGVsZXRlLWd1aWxkLXRlbXBsYXRlfVxuICAgKi9cbiAgZGVsZXRlR3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdGVtcGxhdGVDb2RlOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGludGVncmF0aW9uIGF0dGFjaGVkIHRvIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBmcm9tIHdoaWNoIHRvIGRlbGV0ZSB0aGUgaW50ZWdyYXRpb24uXG4gICAqIEBwYXJhbSBpbnRlZ3JhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBpbnRlZ3JhdGlvbiB0byBkZWxldGUgZnJvbSB0aGUgZ3VpbGQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIERlbGV0ZXMgYWxsIHdlYmhvb2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZWdyYXRpb24sIGFuZCBraWNrcyB0aGUgYXNzb2NpYXRlZCBib3QgaWYgdGhlcmUgaXMgb25lLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBJbnRlZ3JhdGlvbnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKiBGaXJlcyBhIF9JbnRlZ3JhdGlvbiBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNkZWxldGUtZ3VpbGQtaW50ZWdyYXRpb259XG4gICAqL1xuICBkZWxldGVJbnRlZ3JhdGlvbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaW50ZWdyYXRpb25JZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGludml0ZSB0byBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBpbnZpdGVDb2RlIC0gVGhlIGludml0ZSBjb2RlIG9mIHRoZSBpbnZpdGUgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfSW52aXRlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWNoYW5uZWwtaW52aXRlfVxuICAgKi9cbiAgZGVsZXRlSW52aXRlOiAoaW52aXRlQ29kZTogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSB1c2VycyBhbGxvd2VkIHRvIHNlZSBhbmQgYWNjZXB0IHRoaXMgaW52aXRlLlxuICAgKlxuICAgKiBAcGFyYW0gaW52aXRlQ29kZSAtIFRoZSBpbnZpdGUgY29kZSBvZiB0aGUgaW52aXRlIHRvIHVwZGF0ZS5cbiAgICogQHJldHVybnMgQ1NWIGZpbGUgY29udGFpbmluZyB0aGUgdXNlciBJRHMgd2l0aCB0aGUgaGVhZGVyIGB1c2VyX2lkYCBhbmQgZWFjaCB1c2VyIElEIGZyb20gdGhlIG9yaWdpbmFsIGZpbGVcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgY2FsbGVkIHRvIGJlIHRoZSBpbnZpdGVyLCBvciBoYXZlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24sIG9yIGhhdmUgYFZJRVdfQVVESVRfTE9HYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvaW52aXRlI2dldC10YXJnZXQtdXNlcnN9XG4gICAqL1xuICBnZXRUYXJnZXRVc2VyczogKGludml0ZUNvZGU6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlcnMgYWxsb3dlZCB0byBzZWUgYW5kIGFjY2VwdCB0aGlzIGludml0ZS5cbiAgICpcbiAgICogQHBhcmFtIGludml0ZUNvZGUgLSBUaGUgaW52aXRlIGNvZGUgb2YgdGhlIGludml0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB0YXJnZXRVc2Vyc0ZpbGUgLSBBIENTViBmaWxlIHdpdGggYSBzaW5nbGUgY29sdW1uIG9mIHVzZXIgSURzIGZvciBhbGwgdGhlIHVzZXJzIGFibGUgdG8gYWNjZXB0IHRoaXMgaW52aXRlXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gYmUgdGhlIGludml0ZXIgb3IgaGF2ZSB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogVXBsb2FkaW5nIGEgZmlsZSB3aXRoIGludmFsaWQgdXNlciBJRHMgd2lsbCByZXN1bHQgaW4gYSA0MDAgd2l0aCB0aGUgaW52YWxpZCBJRHMgZGVzY3JpYmVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvaW52aXRlI3VwZGF0ZS10YXJnZXQtdXNlcnN9XG4gICAqL1xuICB1cGRhdGVUYXJnZXRVc2VyczogKGludml0ZUNvZGU6IHN0cmluZywgdGFyZ2V0VXNlcnNGaWxlOiBCbG9iKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogUHJvY2Vzc2luZyB0YXJnZXQgdXNlcnMgZnJvbSBhIENTViB3aGVuIGNyZWF0aW5nIG9yIHVwZGF0aW5nIGFuIGludml0ZSBpcyBkb25lIGFzeW5jaHJvbm91c2x5LiBUaGlzIGVuZHBvaW50IGFsbG93cyB5b3UgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGF0IGpvYi5cbiAgICpcbiAgICogQHBhcmFtIGludml0ZUNvZGUgLSBUaGUgaW52aXRlIGNvZGUgb2YgdGhlIGludml0ZSB0byBjaGVjayB0aGUgdGFyZ2V0IHVzZXJzIGpvYiBzdGF0dXMgZm9yLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgc3RhdHVzIG9mIHRoZSB0YXJnZXQgdXNlcnMgam9iLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGJlIHRoZSBpbnZpdGVyLCBvciBoYXZlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24sIG9yIGhhdmUgYFZJRVdfQVVESVRfTE9HYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvaW52aXRlI2dldC10YXJnZXQtdXNlcnMtam9iLXN0YXR1c31cbiAgICovXG4gIGdldFRhcmdldFVzZXJzSm9iU3RhdHVzOiAoaW52aXRlQ29kZTogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUYXJnZXRVc2Vyc0pvYlN0YXR1cz4+O1xuICAvKipcbiAgICogRGVsZXRlcyBhIG1lc3NhZ2UgZnJvbSBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGZyb20uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIGZyb20gdGhlIGNoYW5uZWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgbm90IGRlbGV0aW5nIG93biBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLW1lc3NhZ2V9XG4gICAqL1xuICBkZWxldGVNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIG11bHRpcGxlIG1lc3NhZ2VzIGZyb20gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZXMgZnJvbS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZHMgLSBUaGUgSURzIG9mIHRoZSBtZXNzYWdlcyB0byBkZWxldGUgZnJvbSB0aGUgY2hhbm5lbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICog4pqg77iPIE1lc3NhZ2VzIG9sZGVyIHRoYW4gMiB3ZWVrcyBvbGQgY2Fubm90IGJlIGRlbGV0ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlIEJ1bGtfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2J1bGstZGVsZXRlLW1lc3NhZ2VzfVxuICAgKi9cbiAgZGVsZXRlTWVzc2FnZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkczogQmlnU3RyaW5nW10sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGluaXRpYWwgbWVzc2FnZSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGRlbGV0ZU1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2RlbGV0ZS1vcmlnaW5hbC1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICovXG4gIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZTogKHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgcmVhY3Rpb24gYWRkZWQgYnkgdGhlIGJvdCB1c2VyIGZyb20gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb24gZnJvbSBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9uIGZyb20uXG4gICAqIEBwYXJhbSByZWFjdGlvbiAtIFRoZSByZWFjdGlvbiB0byBkZWxldGUgZnJvbSB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBSZWFjdGlvbiBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1vd24tcmVhY3Rpb259XG4gICAqL1xuICBkZWxldGVPd25SZWFjdGlvbjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxsIHJlYWN0aW9ucyBmb3IgYWxsIGVtb2ppcyBmcm9tIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9ucyBmcm9tIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb25zIGZyb20uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFJlYWN0aW9uIFJlbW92ZSBBbGxfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1hbGwtcmVhY3Rpb25zfVxuICAgKi9cbiAgZGVsZXRlUmVhY3Rpb25zQWxsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogRGVsZXRlcyBhbGwgcmVhY3Rpb25zIGZvciBhbiBlbW9qaSBmcm9tIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9ucyBmcm9tIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb25zIGZyb20uXG4gICAqIEBwYXJhbSByZWFjdGlvbiAtIFRoZSByZWFjdGlvbiB0byByZW1vdmUgZnJvbSB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgUmVhY3Rpb24gUmVtb3ZlIEVtb2ppXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtYWxsLXJlYWN0aW9ucy1mb3ItZW1vaml9XG4gICAqL1xuICBkZWxldGVSZWFjdGlvbnNFbW9qaTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSByb2xlIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgcm9sZSBmcm9tLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNkZWxldGUtZ3VpbGQtcm9sZX1cbiAgICovXG4gIGRlbGV0ZVJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgc2NoZWR1bGVkIGV2ZW50IGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FVkVOVFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFNjaGVkdWxlZCBFdmVudCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZGVsZXRlLWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICovXG4gIGRlbGV0ZVNjaGVkdWxlZEV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLCBpZiBvbmUgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHVzZXIgdG8gYmUgYSBtb2RlcmF0b3Igb2YgdGhlIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2RlbGV0ZS1zdGFnZS1pbnN0YW5jZX1cbiAgICovXG4gIGRlbGV0ZVN0YWdlSW5zdGFuY2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogRGVsZXRlcyBhIHVzZXIncyByZWFjdGlvbiBmcm9tIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9uIGZyb20gaXMgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIHRoZSByZWFjdGlvbiBmcm9tLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHdob3NlIHJlYWN0aW9uIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHJlYWN0aW9uIC0gVGhlIHJlYWN0aW9uIHRvIGRlbGV0ZSBmcm9tIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBSZWFjdGlvbiBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS11c2VyLXJlYWN0aW9ufVxuICAgKi9cbiAgZGVsZXRlVXNlclJlYWN0aW9uOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB3ZWJob29rLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjZGVsZXRlLXdlYmhvb2t9XG4gICAqL1xuICBkZWxldGVXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB3ZWJob29rIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGJlbG9uZ2luZyB0by5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gbWFuYWdlIHRoZSB3ZWJob29rLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGRlbGV0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjZGVsZXRlLXdlYmhvb2t9XG4gICAqL1xuICBkZWxldGVXZWJob29rTWVzc2FnZTogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IERlbGV0ZVdlYmhvb2tNZXNzYWdlT3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB3ZWJob29rIG1lc3NhZ2UgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBiZWxvbmdpbmcgdG8uXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGRlbGV0ZSB0aGUgd2ViaG9vay5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy93ZWJob29rI2RlbGV0ZS13ZWJob29rLXdpdGgtdG9rZW59XG4gICAqL1xuICBkZWxldGVXZWJob29rV2l0aFRva2VuOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgcGVybWlzc2lvbnMgZm9yIGEgZ3VpbGQgYXBwbGljYXRpb24gY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZWRpdCB0aGUgcGVybWlzc2lvbnMgb2YuXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBiZWFyZXIgdG9rZW4gdG8gdXNlIHRvIG1ha2UgdGhlIHJlcXVlc3QuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjb21tYW5kIHBlcm1pc3Npb25zLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBiZWFyZXIgdG9rZW4gcmVxdWlyZXMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMudXBkYXRlYCBzY29wZSB0byBiZSBlbmFibGVkLCBhbmQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGd1aWxkIHdob3NlIElEIGhhcyBiZWVuIHByb3ZpZGVkIGluIHRoZSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1hcHBsaWNhdGlvbi1jb21tYW5kLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGNvbW1hbmRJZDogQmlnU3RyaW5nLFxuICAgIGJlYXJlclRva2VuOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPltdLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGFuIGF1dG9tb2QgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHJ1bGUgaW4uXG4gICAqIEBwYXJhbSBydWxlSWQgLSBUaGUgSUQgb2YgdGhlIHJ1bGUgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJ1bGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfQXV0byBNb2RlcmF0aW9uIFJ1bGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvYXV0by1tb2RlcmF0aW9uI21vZGlmeS1hdXRvLW1vZGVyYXRpb24tcnVsZX1cbiAgICovXG4gIGVkaXRBdXRvbW9kUnVsZTogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBydWxlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBQYXJ0aWFsPEVkaXRBdXRvTW9kZXJhdGlvblJ1bGVPcHRpb25zPixcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPj47XG4gIC8qKlxuICAgKiBNb2RpZmllcyB0aGUgYm90J3MgdXNlcm5hbWUsIGF2YXRhciBvciBiYW5uZXIuXG4gICAqIE5PVEU6IHVzZXJuYW1lOiBpZiBjaGFuZ2VkIG1heSBjYXVzZSB0aGUgYm90J3MgZGlzY3JpbWluYXRvciB0byBiZSByYW5kb21pemVkLlxuICAgKi9cbiAgZWRpdEJvdFByb2ZpbGU6IChvcHRpb25zOiB7IHVzZXJuYW1lPzogc3RyaW5nOyBib3RBdmF0YXJVUkw/OiBzdHJpbmcgfCBudWxsOyBib3RCYW5uZXJVUkw/OiBzdHJpbmcgfCBudWxsIH0pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFVzZXI+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGEgY2hhbm5lbCdzIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjaGFubmVsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgZWRpdGluZyBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5Hcm91cERtOlxuICAgKiAtIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBJZiBlZGl0aW5nIGEgdGhyZWFkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfVEhSRUFEU2AgcGVybWlzc2lvbiBfX3VubGVzc19fIGlmIHNldHRpbmcgdGhlIGBhcmNoaXZlZGAgcHJvcGVydHkgdG8gYGZhbHNlYCB3aGVuIHRoZSBgbG9ja2VkYCBwcm9wZXJ0eSBpcyBhbHNvIGBmYWxzZWAsIGluIHdoaWNoIGNhc2Ugb25seSB0aGUgYFNFTkRfTUVTU0FHRVNgIHBlcm1pc3Npb24gaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqIC0gRmlyZXMgYSBfVGhyZWFkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogSWYgZWRpdGluZyBhIGd1aWxkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIC0gSWYgbW9kaWZ5aW5nIHBlcm1pc3Npb24gb3ZlcnJpZGVzOlxuICAgKiAgIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqICAgLSBPbmx5IHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIG9yIHBhcmVudCBjaGFubmVsIGNhbiBiZSBhbGxvd2VkL2RlbmllZCBfX3VubGVzc19fIHRoZSBib3QgdXNlciBoYXMgYSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIG92ZXJyaWRlIGluIHRoZSBjaGFubmVsLlxuICAgKlxuICAgKiAtIElmIG1vZGlmeWluZyBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZENhdGVnb3J5OlxuICAgKiAgICAgLSBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudCBmb3IgZWFjaCBjaGlsZCBjaGFubmVsIGltcGFjdGVkIGluIHRoaXMgY2hhbmdlLlxuICAgKiAtIE90aGVyd2lzZTpcbiAgICogICAgIC0gRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqL1xuICBlZGl0Q2hhbm5lbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlDaGFubmVsLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PjtcbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlcyBmb3IgYSB1c2VyIG9yIHJvbGUgaW4gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGVzIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBPbmx5IHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIG9yIHBhcmVudCBjaGFubmVsIGNhbiBiZSBhbGxvd2VkL2RlbmllZCBfX3VubGVzc19fIHRoZSBib3QgdXNlciBoYXMgYSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIG92ZXJyaWRlIGluIHRoZSBjaGFubmVsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZWRpdC1jaGFubmVsLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlc09wdGlvbnMsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwb3NpdGlvbnMgb2YgYSBzZXQgb2YgY2hhbm5lbHMgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGluIHdoaWNoIHRvIGVkaXQgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY2hhbm5lbHMuXG4gICAqIEBwYXJhbSBjaGFubmVsUG9zaXRpb25zIC0gQSBzZXQgb2Ygb2JqZWN0cyBkZWZpbmluZyB0aGUgdXBkYXRlZCBwb3NpdGlvbnMgb2YgdGhlIGNoYW5uZWxzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IGNoYW5uZWwgaW1wYWN0ZWQgaW4gdGhpcyBjaGFuZ2UuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtY2hhbm5lbC1wb3NpdGlvbnN9XG4gICAqL1xuICBlZGl0Q2hhbm5lbFBvc2l0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgY2hhbm5lbFBvc2l0aW9uczogTW9kaWZ5R3VpbGRDaGFubmVsUG9zaXRpb25zW10pID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBFZGl0cyBhbiBlbW9qaS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGluIHdoaWNoIHRvIGVkaXQgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgdXBkYXRlZCB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIGVtb2ppcyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIGVtb2ppcywgcmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgYEd1aWxkIEVtb2ppcyBVcGRhdGVgIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNtb2RpZnktZ3VpbGQtZW1vaml9XG4gICAqL1xuICBlZGl0RW1vamk6IChndWlsZElkOiBCaWdTdHJpbmcsIGlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkRW1vamksIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGFuIGFwcGxpY2F0aW9uIGVtb2ppLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBlbW9qaS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIHVwZGF0ZWQge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNtb2RpZnktYXBwbGljYXRpb24tZW1vaml9XG4gICAqL1xuICBlZGl0QXBwbGljYXRpb25FbW9qaTogKGlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUFwcGxpY2F0aW9uRW1vamkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBlZGl0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgKlxuICAgKiBEb2VzIG5vdCBzdXBwb3J0IGVwaGVtZXJhbCBmb2xsb3ctdXAgbWVzc2FnZXMgZHVlIHRvIHRoZXNlIGJlaW5nIHN0YXRlbGVzcy5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBVcGRhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2VkaXQtZm9sbG93dXAtbWVzc2FnZX1cbiAgICovXG4gIGVkaXRGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGEgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGEgZ3VpbGQncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBndWlsZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkR3VpbGR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgYXR0ZW1wdGluZyB0byBhZGQgb3IgcmVtb3ZlIHRoZSB7QGxpbmsgR3VpbGRGZWF0dXJlc30uQ29tbXVuaXR5IGZlYXR1cmU6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBBRE1JTklTVFJBVE9SYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGR9XG4gICAqL1xuICBlZGl0R3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIHJlZ2lzdGVyZWQgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kOiAoXG4gICAgY29tbWFuZElkOiBCaWdTdHJpbmcsXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PjtcbiAgLyoqXG4gICAqIEVkaXQgdGhlIGdpdmVuIHN0aWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybiBBIHtAbGluayBEaXNjb3JkU3RpY2tlcn1cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIHN0aWNrZXJzIGNyZWF0ZWQgYnkgdGhlIGN1cnJlbnQgdXNlciwgcmVxdWlyZXMgZWl0aGVyIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGb3Igb3RoZXIgc3RpY2tlcnMsIHJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGaXJlcyBhIEd1aWxkIFN0aWNrZXJzIFVwZGF0ZSBHYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvc3RpY2tlciNtb2RpZnktZ3VpbGQtc3RpY2tlcn1cbiAgICovXG4gIGVkaXRHdWlsZFN0aWNrZXI6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgc3RpY2tlcklkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogQXRMZWFzdE9uZTxFZGl0R3VpbGRTdGlja2VyT3B0aW9ucz4sXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXI+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGEgdGVtcGxhdGUncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgYSB0ZW1wbGF0ZSBvZi5cbiAgICogQHBhcmFtIHRlbXBsYXRlQ29kZSAtIFRoZSBjb2RlIG9mIHRoZSB0ZW1wbGF0ZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRUZW1wbGF0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNtb2RpZnktZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBlZGl0R3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkVGVtcGxhdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZWRpdCB0aGUgbWVzc2FnZSBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRHMgb2YgdGhlIG1lc3NhZ2UgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgZWRpdGluZyBhbm90aGVyIHVzZXIncyBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKiAtIE9ubHkgdGhlIHtAbGluayBFZGl0TWVzc2FnZS5mbGFncyB8IGZsYWdzfSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVyIGNhbiBiZSBlZGl0ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNlZGl0LW1lc3NhZ2V9XG4gICAqL1xuICBlZGl0TWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdE1lc3NhZ2UpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PjtcbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBpbml0aWFsIG1lc3NhZ2UgcmVzcG9uc2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJlc3BvbnNlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZWRpdE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNlZGl0LW9yaWdpbmFsLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgKi9cbiAgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZTogKHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj47XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgdm9pY2Ugc3RhdGUgb2YgdGhlIGJvdCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gZWRpdCB0aGUgdm9pY2Ugc3RhdGUgb2YgdGhlIGJvdCB1c2VyLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdm9pY2Ugc3RhdGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSB7QGxpbmsgRWRpdE93blZvaWNlU3RhdGUuY2hhbm5lbElkIHwgY2hhbm5lbElkfSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVyIG11c3QgcG9pbnQgdG8gYSBzdGFnZSBjaGFubmVsLCBhbmQgdGhlIGJvdCB1c2VyIG11c3QgYWxyZWFkeSBoYXZlIGpvaW5lZCBpdC5cbiAgICpcbiAgICogSWYgYXR0ZW1wdGluZyB0byB1bm11dGUgb25lc2VsZjpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1VVEVfTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgYXR0ZW1wdGluZyB0byByZXF1ZXN0IHRvIHNwZWFrOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgUkVRVUVTVF9UT19TUEVBS2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3ZvaWNlI21vZGlmeS1jdXJyZW50LXVzZXItdm9pY2Utc3RhdGV9XG4gICAqL1xuICBlZGl0T3duVm9pY2VTdGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdE93blZvaWNlU3RhdGUpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBFZGl0cyBhIHJvbGUgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHJvbGUgaW4uXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJvbGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFJvbGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtcm9sZX1cbiAgICovXG4gIGVkaXRSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdEd1aWxkUm9sZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlPj47XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgcG9zaXRpb25zIG9mIGEgc2V0IG9mIHJvbGVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgcm9sZSBwb3NpdGlvbnMgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSByb2xlIHBvc2l0aW9ucy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRSb2xlfSBvYmplY3RzIGFzc29ydGVkIGJ5IHJvbGUgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBSb2xlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgcm9sZSBpbXBhY3RlZCBpbiB0aGlzIGNoYW5nZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1yb2xlLXBvc2l0aW9uc31cbiAgICovXG4gIGVkaXRSb2xlUG9zaXRpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlSb2xlUG9zaXRpb25zW10sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZT5bXT47XG4gIC8qKlxuICAgKiBFZGl0cyBhIHNjaGVkdWxlZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHNjaGVkdWxlZCBldmVudCBpbi5cbiAgICogQHBhcmFtIGV2ZW50SWQgLSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudCB0byBlZGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRTY2hlZHVsZWRFdmVudH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogVG8gc3RhcnQgb3IgZW5kIGFuIGV2ZW50LCBtb2RpZnkgdGhlIGV2ZW50J3MgYHN0YXR1c2AgcHJvcGVydHkuXG4gICAqXG4gICAqIFRoZSBgZW50aXR5X21ldGFkYXRhYCBwcm9wZXJ0eSBpcyBkaXNjYXJkZWQgZm9yIGV2ZW50cyB3aG9zZSBgZW50aXR5X3R5cGVgIGlzIG5vdCB7QGxpbmsgU2NoZWR1bGVkRXZlbnRFbnRpdHlUeXBlfS5FeHRlcm5hbC5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgU2NoZWR1bGVkIEV2ZW50IFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNtb2RpZnktZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgKi9cbiAgZWRpdFNjaGVkdWxlZEV2ZW50OiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGV2ZW50SWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBQYXJ0aWFsPEVkaXRTY2hlZHVsZWRFdmVudD4sXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50Pj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIHN0YWdlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIEBwYXJhbSB0b3BpYyAtIFRvcGljIG9mIHRoZSBTdGFnZSBpbnN0YW5jZSAoMS0xMjAgY2hhcmFjdGVycykuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIHVwZGF0ZWQge0BsaW5rIERpc2NvcmRTdGFnZUluc3RhbmNlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHVzZXIgdG8gYmUgYSBtb2RlcmF0b3Igb2YgdGhlIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIFVwZGF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9zdGFnZS1pbnN0YW5jZSNtb2RpZnktc3RhZ2UtaW5zdGFuY2V9XG4gICAqL1xuICBlZGl0U3RhZ2VJbnN0YW5jZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB0b3BpYzogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0YWdlSW5zdGFuY2U+PjtcbiAgLyoqXG4gICAqIEVkaXRzIHRoZSB2b2ljZSBzdGF0ZSBvZiBhbm90aGVyIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBlZGl0IHRoZSB2b2ljZSBzdGF0ZSBvZiB0aGUgYm90IHVzZXIuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSB2b2ljZSBzdGF0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHtAbGluayBFZGl0T3duVm9pY2VTdGF0ZS5jaGFubmVsSWQgfCBjaGFubmVsSWR9IHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIG9iamVjdCBwYXJhbWV0ZXIgbXVzdCBwb2ludCB0byBhIHN0YWdlIGNoYW5uZWwsIGFuZCB0aGUgdXNlciBtdXN0IGFscmVhZHkgaGF2ZSBqb2luZWQgaXQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgTVVURV9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvdm9pY2UjbW9kaWZ5LXVzZXItdm9pY2Utc3RhdGV9XG4gICAqL1xuICBlZGl0VXNlclZvaWNlU3RhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRVc2VyVm9pY2VTdGF0ZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEVkaXQgdGhlIGN1cnJlbnQgdXNlciBhcHBsaWNhdGlvbiByb2xlIGNvbm5lY3Rpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlclxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZWRpdCB0aGUgcm9sZSBjb25uZWN0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gZWRpdFxuICAgKiBAcmV0dXJucyB7RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb259XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhlIGByb2xlX2Nvbm5lY3Rpb25zLndyaXRlYCBzY29wZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3VzZXIjdXBkYXRlLXVzZXItYXBwbGljYXRpb24tcm9sZS1jb25uZWN0aW9ufVxuICAgKi9cbiAgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uOiAoXG4gICAgYmVhcmVyVG9rZW46IHN0cmluZyxcbiAgICBhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+LFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGEgd2ViaG9vay5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjZWRpdC13ZWJob29rfVxuICAgKi9cbiAgZWRpdFdlYmhvb2s6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5V2ViaG9vaywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIHdlYmhvb2sgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0IHRoZSBtZXNzYWdlIG9mLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBlZGl0IHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvd2ViaG9vayNlZGl0LXdlYmhvb2stbWVzc2FnZX1cbiAgICovXG4gIGVkaXRXZWJob29rTWVzc2FnZTogKFxuICAgIHdlYmhvb2tJZDogQmlnU3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgbWVzc2FnZUlkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogRWRpdFdlYmhvb2tNZXNzYWdlT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIHdlYmhvb2sgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGVkaXQuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGVkaXQgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjbW9kaWZ5LXdlYmhvb2std2l0aC10b2tlbn1cbiAgICovXG4gIGVkaXRXZWJob29rV2l0aFRva2VuOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IE9taXQ8TW9kaWZ5V2ViaG9vaywgJ2NoYW5uZWxJZCc+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIGd1aWxkJ3Mgd2VsY29tZSBzY3JlZW4uXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSB3ZWxjb21lIHNjcmVlbiBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHdlbGNvbWUgc2NyZWVuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRXZWxjb21lU2NyZWVufS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC13ZWxjb21lLXNjcmVlbn1cbiAgICovXG4gIGVkaXRXZWxjb21lU2NyZWVuOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlHdWlsZFdlbGNvbWVTY3JlZW4sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2VsY29tZVNjcmVlbj4+O1xuICAvKipcbiAgICogRWRpdHMgdGhlIHNldHRpbmdzIG9mIGEgZ3VpbGQncyB3aWRnZXQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSBzZXR0aW5ncyBvZiB0aGUgd2lkZ2V0IG9mLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC13aWRnZXR9XG4gICAqL1xuICBlZGl0V2lkZ2V0U2V0dGluZ3M6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+LFxuICAgIHJlYXNvbj86IHN0cmluZyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPj47XG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHdlYmhvb2ssIGNhdXNpbmcgYSBtZXNzYWdlIHRvIGJlIHBvc3RlZCBpbiB0aGUgY2hhbm5lbCBjb25maWd1cmVkIGZvciB0aGUgd2ViaG9vay5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBleGVjdXRlLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBleGVjdXRlIHRoZSB3ZWJob29rLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LCBvciBgdW5kZWZpbmVkYCBpZiB0aGUge0BsaW5rIEV4ZWN1dGVXZWJob29rLndhaXQgfCB3YWl0fSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVyIGlzIHNldCB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgd2ViaG9vayBjaGFubmVsIGlzIGEgZm9ydW0gY2hhbm5lbCwgeW91IG11c3QgcHJvdmlkZSBhIHZhbHVlIGZvciBlaXRoZXIgYHRocmVhZElkYCBvciBgdGhyZWFkTmFtZWAuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy93ZWJob29rI2V4ZWN1dGUtd2ViaG9va31cbiAgICovXG4gIGV4ZWN1dGVXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEV4ZWN1dGVXZWJob29rKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPiB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBGb2xsb3dzIGFuIGFubm91bmNlbWVudCBjaGFubmVsLCBhbGxvd2luZyBtZXNzYWdlcyBwb3N0ZWQgd2l0aGluIGl0IHRvIGJlIGNyb3NzLXBvc3RlZCBpbnRvIHRoZSB0YXJnZXQgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZUNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgYW5ub3VuY2VtZW50IGNoYW5uZWwgdG8gZm9sbG93LlxuICAgKiBAcGFyYW0gdGFyZ2V0Q2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0YXJnZXQgY2hhbm5lbCAtIHRoZSBjaGFubmVsIHRvIGNyb3NzLXBvc3QgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRGb2xsb3dlZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbiBpbiB0aGUgX190YXJnZXQgY2hhbm5lbF9fLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2ZvbGxvdy1hbm5vdW5jZW1lbnQtY2hhbm5lbH1cbiAgICovXG4gIGZvbGxvd0Fubm91bmNlbWVudDogKHNvdXJjZUNoYW5uZWxJZDogQmlnU3RyaW5nLCB0YXJnZXRDaGFubmVsSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRGb2xsb3dlZENoYW5uZWw+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgYWxsIGFjdGl2ZSB0aHJlYWRzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB0aHJlYWRzIG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmV0dXJucyBib3RoIHB1YmxpYyBhbmQgcHJpdmF0ZSB0aHJlYWRzLlxuICAgKlxuICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgaWRgIHByb3BlcnR5IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNsaXN0LWFjdGl2ZS1ndWlsZC10aHJlYWRzfVxuICAgKi9cbiAgZ2V0QWN0aXZlVGhyZWFkczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+PjtcbiAgLyoqIEdldCB0aGUgYXBwbGljYXRpb25zIGluZm8gKi9cbiAgZ2V0QXBwbGljYXRpb25JbmZvOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbj4+O1xuICAvKipcbiAgICogRWRpdCBwcm9wZXJ0aWVzIG9mIHRoZSBhcHAgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0aW5nIGJvdCB1c2VyLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBPbmx5IHByb3BlcnRpZXMgdGhhdCBhcmUgcGFzc2VkIHdpbGwgYmUgdXBkYXRlZC5cbiAgICovXG4gIGVkaXRBcHBsaWNhdGlvbkluZm86IChib2R5OiBFZGl0QXBwbGljYXRpb24pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uPj47XG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRpb24gaW5mbyBmb3IgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlclxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBBbnkgT0F1dGgyIGRlcml2ZWQgYWNjZXNzIHRva2VuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb259XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSB1c2VyIG9iamVjdCBpcyBub3QgZGVmaW5lZCBpZiB0aGUgc2NvcGVzIGRvIG5vdCBpbmNsdWRlIGBpZGVudGlmeWAuXG4gICAqIEluIHRoZSB1c2VyIG9iamVjdCwgaWYgZGVmaW5lZCwgdGhlIGVtYWlsIGlzIG5vdCBpbmNsdWRlZCBpZiB0aGUgc2NvcGVzIGRvIG5vdCBpbmNsdWRlIGBlbWFpbGBcbiAgICovXG4gIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm86IChiZWFyZXJUb2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4+O1xuICAvKipcbiAgICogRXhjaGFuZ2UgdGhlIGluZm9ybWF0aW9uIHRvIGdldCBhIE9BdXRoMiBhY2Nlc3NUb2tlbiB0b2tlblxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50SWQgLSBBcHBsaWNhdGlvbidzIGNsaWVudCBpZFxuICAgKiBAcGFyYW0gY2xpZW50U2VjcmV0IC0gYXBwbGljYXRpb24ncyBjbGllbnQgc2VjcmV0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gbWFrZSB0aGUgZXhjaGFuZ2Ugd2l0aCBkaXNjb3JkXG4gICAqL1xuICBleGNoYW5nZVRva2VuOiAoXG4gICAgY2xpZW50SWQ6IEJpZ1N0cmluZyxcbiAgICBjbGllbnRTZWNyZXQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBDYW1lbGl6ZTxEaXNjb3JkVG9rZW5FeGNoYW5nZT4sXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4+O1xuICAvKipcbiAgICogUmV2b2tlIGFuIGFjY2Vzc190b2tlblxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50SWQgLSBBcHBsaWNhdGlvbidzIGNsaWVudCBpZFxuICAgKiBAcGFyYW0gY2xpZW50U2VjcmV0IC0gYXBwbGljYXRpb24ncyBjbGllbnQgc2VjcmV0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gcmV2b2tlIHRoZSBhY2Nlc3NfdG9rZW5cbiAgICovXG4gIHJldm9rZVRva2VuOiAoY2xpZW50SWQ6IEJpZ1N0cmluZywgY2xpZW50U2VjcmV0OiBzdHJpbmcsIG9wdGlvbnM6IENhbWVsaXplPERpc2NvcmRUb2tlblJldm9jYXRpb24+KSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogR2V0cyB0aGUgcGVybWlzc2lvbnMgb2YgYSBndWlsZCBhcHBsaWNhdGlvbiBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQgdGhlIHBlcm1pc3Npb25zIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBPQXV0aDIgcmVsYXRlZCBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgZW5kcG9pbnRcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlbiBzcGVjaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCB0aGUgYWNjZXNzIHRva2VuIHBhc3NlZC1pbiByZXF1aXJlcyB0aGUgT0F1dGgyIHNjb3BlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMudXBkYXRlYFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWFwcGxpY2F0aW9uLWNvbW1hbmQtcGVybWlzc2lvbnN9XG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGNvbW1hbmRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM/OiBHZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwZXJtaXNzaW9ucyBvZiBhbGwgYXBwbGljYXRpb24gY29tbWFuZHMgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkIGJ5IHRoZSBJRCBvZiB0aGUgZ3VpbGQgYW5kIG9wdGlvbmFsbHkgYW4gZXh0ZXJuYWwgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHBlcm1pc3Npb25zIG9iamVjdHMgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIE9BdXRoMiByZWxhdGVkIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZW4gc3BlY2lmeWluZyB0aGUgb3B0aW9ucyBvYmplY3QgdGhlIGFjY2VzcyB0b2tlbiBwYXNzZWQtaW4gcmVxdWlyZXMgdGhlIE9BdXRoMiBzY29wZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zLnVwZGF0ZWBcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9ucz86IEdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25PcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+W10+O1xuICAvKipcbiAgICogR2V0cyBhIGd1aWxkJ3MgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBhdWRpdCBsb2cgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEF1ZGl0TG9nfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBWSUVXX0FVRElUX0xPR2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2F1ZGl0LWxvZyNnZXQtZ3VpbGQtYXVkaXQtbG9nfVxuICAgKi9cbiAgZ2V0QXVkaXRMb2c6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRHdWlsZEF1ZGl0TG9nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdWRpdExvZz4+O1xuICAvKipcbiAgICogR2V0cyBhbiBhdXRvbW9kIHJ1bGUgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBydWxlIG9mLlxuICAgKiBAcGFyYW0gcnVsZUlkIC0gVGhlIElEIG9mIHRoZSBydWxlIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNnZXQtYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAqL1xuICBnZXRBdXRvbW9kUnVsZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcnVsZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBhdXRvbW9kIHJ1bGVzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBydWxlcyBmcm9tLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgcnVsZSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jbGlzdC1hdXRvLW1vZGVyYXRpb24tcnVsZXMtZm9yLWd1aWxkfVxuICAgKi9cbiAgZ2V0QXV0b21vZFJ1bGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+W10+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdm9pY2UgcmVnaW9ucy5cbiAgICpcbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVm9pY2VSZWdpb259IG9iamVjdHMgYXNzb3J0ZWQgYnkgdm9pY2UgcmVnaW9uIElELlxuICAgKi9cbiAgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRWb2ljZVJlZ2lvbj5bXT47XG4gIC8qKlxuICAgKiBHZXRzIGEgYmFuIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGJhbiBmcm9tLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGdldCB0aGUgYmFuIGZvci5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRCYW59LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLWJhbn1cbiAgICovXG4gIGdldEJhbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEJhbj4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBiYW5zIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIGJhbnMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIGxpc3Qgb2YgYmFucy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkQmFufSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFVzZXJzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIElEcyBpbiBfYXNjZW5kaW5nXyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1iYW5zfVxuICAgKi9cbiAgZ2V0QmFuczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldEJhbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEJhbj5bXT47XG4gIC8qKlxuICAgKiBHZXRzIGEgY2hhbm5lbCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgY2hhbm5lbCBpcyBhIHRocmVhZCwgYSB7QGxpbmsgRGlzY29yZFRocmVhZE1lbWJlcn0gb2JqZWN0IGlzIGluY2x1ZGVkIGluIHRoZSByZXN1bHQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2dldC1jaGFubmVsfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludml0ZXMgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGludml0ZXMgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfSBvYmplY3RzIGFzc29ydGVkIGJ5IGludml0ZSBjb2RlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogT25seSB1c2FibGUgZm9yIGd1aWxkIGNoYW5uZWxzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtY2hhbm5lbC1pbnZpdGVzfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbEludml0ZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW52aXRlTWV0YWRhdGE+W10+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBjaGFubmVscyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgY2hhbm5lbHMgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY2hhbm5lbCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRXhjbHVkZXMgdGhyZWFkcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1jaGFubmVsc31cbiAgICovXG4gIGdldENoYW5uZWxzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPltdPjtcbiAgLyoqXG4gICAqIEdldHMgYSBsaXN0IG9mIHdlYmhvb2tzIGZvciBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgd2hpY2ggdG8gZ2V0IHRoZSB3ZWJob29rcyBvZi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkV2ViaG9va30gb2JqZWN0cyBhc3NvcnRlZCBieSB3ZWJob29rIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LWNoYW5uZWwtd2ViaG9va3N9XG4gICAqL1xuICBnZXRDaGFubmVsV2ViaG9va3M6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz5bXT47XG4gIC8qKlxuICAgKiBHZXRzIG9yIGNyZWF0ZXMgYSBETSBjaGFubmVsIHdpdGggYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGNyZWF0ZSB0aGUgRE0gY2hhbm5lbCB3aXRoLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvdXNlciNjcmVhdGUtZG19XG4gICAqL1xuICBnZXREbUNoYW5uZWw6ICh1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGdyb3VwIERNIGNoYW5uZWwgd2l0aCBtdWx0aXBsZSB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY3JlYXRlIGEgbmV3IGdyb3VwIGRtXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhY2Nlc3MgdG9rZW5zIHJlcXVpcmUgdG8gaGF2ZSB0aGUgYGdkbS5qb2luYCBzY29wZVxuICAgKlxuICAgKiBUaGlzIGVuZHBvaW50IGlzIGxpbWl0ZWQgdG8gMTAgYWN0aXZlIGdyb3VwIERNcy5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBjcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy91c2VyI2NyZWF0ZS1ncm91cC1kbX1cbiAgICovXG4gIGdldEdyb3VwRG1DaGFubmVsOiAob3B0aW9uczogQ3JlYXRlR3JvdXBEbU9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PjtcbiAgLyoqXG4gICAqIEdldHMgYW4gZW1vamkgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgZnJvbSB3aGljaCB0byBnZXQgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0gZW1vamlJZCAtIFRoZSBJRCBvZiB0aGUgZW1vamkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW5jbHVkZXMgdGhlIGB1c2VyYCBmaWVsZCBpZiB0aGUgYm90IGhhcyB0aGUgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbixcbiAgICogb3IgaWYgdGhlIGJvdCBjcmVhdGVkIHRoZSBlbW9qaSBhbmQgaGFzIHRoZSB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2Vtb2ppI2dldC1ndWlsZC1lbW9qaX1cbiAgICovXG4gIGdldEVtb2ppOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBlbW9qaUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj47XG4gIC8qKlxuICAgKiBHZXRzIGFuIGFwcGxpY2F0aW9uIGVtb2ppIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGVtb2ppSWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEFsd2F5cyBpbmNsdWRlcyB0aGUgYHVzZXJgIG9iamVjdCBmb3IgdGhlIHRlYW0gbWVtYmVyIHRoYXQgdXBsb2FkZWQgdGhlIGVtb2ppIGZyb20gdGhlIGFwcCdzIHNldHRpbmdzLCBvciBmb3IgdGhlIGJvdCB1c2VyIGlmIHVwbG9hZGVkIHVzaW5nIHRoZSBBUEkuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNnZXQtYXBwbGljYXRpb24tZW1vaml9XG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbkVtb2ppOiAoZW1vamlJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBlbW9qaXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB3aGljaCB0byBnZXQgdGhlIGVtb2ppcyBvZi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkRW1vaml9IG9iamVjdHMgYXNzb3J0ZWQgYnkgZW1vamkgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEluY2x1ZGVzIGB1c2VyYCBmaWVsZHMgaWYgdGhlIGJvdCBoYXMgdGhlIGBDUkVBVEVfR1VJTERfRVhQUkVTU0lPTlNgIG9yIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNsaXN0LWd1aWxkLWVtb2ppc31cbiAgICovXG4gIGdldEVtb2ppczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+W10+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBlbW9qaXMgZm9yIGFuIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgYXJyYXkgb2Yge0BsaW5rIERpc2NvcmRFbW9qaX0gb2JqZWN0cy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQWx3YXlzIGluY2x1ZGVzIHRoZSBgdXNlcmAgb2JqZWN0IGZvciB0aGUgdGVhbSBtZW1iZXIgdGhhdCB1cGxvYWRlZCB0aGUgZW1vamkgZnJvbSB0aGUgYXBwJ3Mgc2V0dGluZ3MsIG9yIGZvciB0aGUgYm90IHVzZXIgaWYgdXBsb2FkZWQgdXNpbmcgdGhlIEFQSS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2Vtb2ppI2xpc3QtYXBwbGljYXRpb24tZW1vamlzfVxuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25FbW9qaXM6ICgpID0+IFByb21pc2U8eyBpdGVtczogQ2FtZWxpemU8RGlzY29yZEVtb2ppPltdIH0+O1xuICAvKipcbiAgICogR2V0cyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uIGJ5IHRoZSBJRCBvZiB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBnZXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQ6XG4gICAqIC0gTmVlZGluZyB0byBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbi4gKGBSRUFEX01FU1NBR0VTYCBwZXJtaXNzaW9uLilcbiAgICogLSBSZXF1aXJpbmcgdGhlIGBNRVNTQUdFX0NPTlRFTlRgIGludGVudC5cbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZ2V0LWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAqL1xuICBnZXRGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+O1xuICAvKiogR2V0IHRoZSBib3RzIEdhdGV3YXkgbWV0YWRhdGEgdGhhdCBjYW4gaGVscCBkdXJpbmcgdGhlIG9wZXJhdGlvbiBvZiBsYXJnZSBvciBzaGFyZGVkIGJvdHMuICovXG4gIGdldEdhdGV3YXlCb3Q6ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+PjtcbiAgLyoqXG4gICAqIEdldHMgYSBnbG9iYWwgYXBwbGljYXRpb24gY29tbWFuZCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHlvdXIgYm90J3MgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmRzXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc31cbiAgICovXG4gIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHM6IChvcHRpb25zPzogR2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kc09wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD5bXT47XG4gIC8qKlxuICAgKiBHZXRzIGEgZ3VpbGQgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIGd1aWxkLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEd1aWxkfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZH1cbiAgICovXG4gIGdldEd1aWxkOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogeyBjb3VudHM/OiBib29sZWFuIH0pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkPj47XG4gIC8qKlxuICAgKiBHZXQgdGhlIHVzZXIgZ3VpbGRzLlxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuIG9mIHRoZSB1c2VyLCBpZiB1bnNwZWNpZmllZCB0aGUgYm90IHRva2VuIGlzIHVzZWQgaW5zdGVhZFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIGd1aWxkLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwYXJ0aWFsIHtAbGluayBEaXNjb3JkR3VpbGR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB1c2VkIHdpdGggYW4gYWNjZXNzIHRva2VuLCB0aGUgdG9rZW4gbmVlZHMgdG8gaGF2ZSB0aGUgYGd1aWxkc2Agc2NvcGVcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3VzZXIjZ2V0LWN1cnJlbnQtdXNlci1ndWlsZHN9XG4gICAqL1xuICBnZXRHdWlsZHM6IChiZWFyZXJUb2tlbj86IHN0cmluZywgb3B0aW9ucz86IEdldFVzZXJHdWlsZHMpID0+IFByb21pc2U8UGFydGlhbDxDYW1lbGl6ZTxEaXNjb3JkR3VpbGQ+PltdPjtcbiAgLyoqXG4gICAqIEdldHMgYSBndWlsZCBhcHBsaWNhdGlvbiBjb21tYW5kIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uIGNvbW1hbmRzIHJlZ2lzdGVyZWQgYnkgeW91ciBib3QgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kcyBhcmUgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIGd1aWxkIGFwcGxpY2F0aW9uIGNvbW1hbmRzXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc3N9XG4gICAqL1xuICBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHNPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+W10+O1xuICAvKipcbiAgICogR2V0cyB0aGUgcHJldmlldyBvZiBhIGd1aWxkIGJ5IGEgZ3VpbGQncyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgcHJldmlldyBvZi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRHdWlsZFByZXZpZXd9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgYm90IHVzZXIgaXMgbm90IGluIHRoZSBndWlsZCwgdGhlIGd1aWxkIG11c3QgYmUgZGlzY292ZXJhYmxlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXByZXZpZXd9XG4gICAqL1xuICBnZXRHdWlsZFByZXZpZXc6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkUHJldmlldz4+O1xuICAvKipcbiAgICogUmV0dXJucyBhIHN0aWNrZXIgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gZ3VpbGQgYW5kIHN0aWNrZXIgSURzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcGFyYW0gc3RpY2tlcklkIFRoZSBJRCBvZiB0aGUgc3RpY2tlciB0byBnZXRcbiAgICogQHJldHVybiBBIHtAbGluayBEaXNjb3JkU3RpY2tlcn1cbiAgICpcbiAgICogQHJlbWFya3MgSW5jbHVkZXMgdGhlIHVzZXIgZmllbGQgaWYgdGhlIGJvdCBoYXMgdGhlIGBDUkVBVEVfR1VJTERfRVhQUkVTU0lPTlNgIG9yIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9zdGlja2VyI2dldC1ndWlsZC1zdGlja2VyfVxuICAgKi9cbiAgZ2V0R3VpbGRTdGlja2VyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBzdGlja2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlcj4+O1xuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBzdGlja2VyIG9iamVjdHMgZm9yIHRoZSBnaXZlbiBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXRcbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkU3RpY2tlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSBzdGlja2VyIElELlxuICAgKlxuICAgKiBAcmVtYXJrcyBJbmNsdWRlcyB1c2VyIGZpZWxkcyBpZiB0aGUgYm90IGhhcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3N0aWNrZXIjbGlzdC1ndWlsZC1zdGlja2Vyc31cbiAgICovXG4gIGdldEd1aWxkU3RpY2tlcnM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXI+W10+O1xuICAvKipcbiAgICogR2V0cyBhIHRlbXBsYXRlIGJ5IGl0cyBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gdGVtcGxhdGVDb2RlIC0gVGhlIGNvZGUgb2YgdGhlIHRlbXBsYXRlIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRUZW1wbGF0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZ2V0LWd1aWxkLXRlbXBsYXRlfVxuICAgKi9cbiAgZ2V0R3VpbGRUZW1wbGF0ZTogKHRlbXBsYXRlQ29kZTogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2YgdGVtcGxhdGVzIGZvci5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVGVtcGxhdGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdGVtcGxhdGUgY29kZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGVzfVxuICAgKi9cbiAgZ2V0R3VpbGRUZW1wbGF0ZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPltdPjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygd2ViaG9va3MgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2Ygd2ViaG9va3MgZm9yLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfSBvYmplY3RzIGFzc29ydGVkIGJ5IHdlYmhvb2sgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtZ3VpbGQtd2ViaG9va3N9XG4gICAqL1xuICBnZXRHdWlsZFdlYmhvb2tzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPltdPjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgaW50ZWdyYXRpb25zIGF0dGFjaGVkIHRvIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2YgaW50ZWdyYXRpb25zIGZyb20uXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEludGVncmF0aW9ufSBvYmplY3RzIGFzc29ydGVkIGJ5IGludGVncmF0aW9uIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1pbnRlZ3JhdGlvbnN9XG4gICAqL1xuICBnZXRJbnRlZ3JhdGlvbnM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludGVncmF0aW9uPltdPjtcbiAgLyoqXG4gICAqIEdldHMgYW4gaW52aXRlIHRvIGEgY2hhbm5lbCBieSBpdHMgaW52aXRlIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSBpbnZpdGVDb2RlIC0gVGhlIGludml0ZSBjb2RlIG9mIHRoZSBpbnZpdGUgdG8gZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIGludml0ZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRJbnZpdGVNZXRhZGF0YX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9pbnZpdGUjZ2V0LWludml0ZX1cbiAgICovXG4gIGdldEludml0ZTogKGludml0ZUNvZGU6IHN0cmluZywgb3B0aW9ucz86IEdldEludml0ZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW52aXRlTWV0YWRhdGE+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgaW52aXRlcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgaW52aXRlcyBmcm9tLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRJbnZpdGVNZXRhZGF0YX0gb2JqZWN0cyBhc3NvcnRlZCBieSBpbnZpdGUgY29kZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIG9yIGBWSUVXX0FVRElUX0xPR2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2ludml0ZSNnZXQtaW52aXRlc31cbiAgICovXG4gIGdldEludml0ZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZU1ldGFkYXRhPltdPjtcbiAgLyoqXG4gICAqIEdldHMgYSBtZXNzYWdlIGZyb20gYSBjaGFubmVsIGJ5IHRoZSBJRCBvZiB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBmcm9tIHdoaWNoIHRvIGdldCB0aGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoYXQgdGhlIGJvdCB1c2VyIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0aGUgbWVzc2FnZSB3YXMgcG9zdGVkLlxuICAgKlxuICAgKiBJZiBnZXR0aW5nIGEgbWVzc2FnZSBmcm9tIGEgZ3VpbGQgY2hhbm5lbDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtY2hhbm5lbC1tZXNzYWdlfVxuICAgKi9cbiAgZ2V0TWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+O1xuICAvKipcbiAgICogR2V0cyBtdWx0aXBsZSBtZXNzYWdlcyBmcm9tIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBmcm9tIHdoaWNoIHRvIGdldCB0aGUgbWVzc2FnZXMuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVzc2FnZXMuXG4gICAqIEByZXR1cm5zIFJldHVybnMgYW4gYXJyYXkgb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfSBvYmplY3RzIGZyb20gbmV3ZXN0IHRvIG9sZGVzdCBvbiBzdWNjZXNzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGF0IHRoZSBib3QgdXNlciBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdGhlIG1lc3NhZ2VzIHdlcmUgcG9zdGVkLlxuICAgKlxuICAgKiBJZiBnZXR0aW5nIGEgbWVzc2FnZXMgZnJvbSBhIGd1aWxkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LWNoYW5uZWwtbWVzc2FnZXN9XG4gICAqL1xuICBnZXRNZXNzYWdlczogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0TWVzc2FnZXNPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPltdPjtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdGlja2VyIHBhY2sgZm9yIHRoZSBnaXZlbiBJRC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJQYWNrfSBvYmplY3QuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9zdGlja2VyI2dldC1zdGlja2VyLXBhY2t9XG4gICAqL1xuICBnZXRTdGlja2VyUGFjazogKHN0aWNrZXJQYWNrSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlclBhY2s+PjtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2Ygc3RpY2tlciBwYWNrcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFN0aWNrZXJQYWNrfSBvYmplY3RzIGFzc29ydGVkIGJ5IHN0aWNrZXIgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9zdGlja2VyI2xpc3Qtc3RpY2tlci1wYWNrc31cbiAgICovXG4gIGdldFN0aWNrZXJQYWNrczogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlclBhY2s+W10+O1xuICAvKipcbiAgICogR2V0cyB0aGUgaW5pdGlhbCBtZXNzYWdlIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZ2V0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIERvZXMgbm90IHN1cHBvcnQgZXBoZW1lcmFsIGZvbGxvdy11cCBtZXNzYWdlcyBkdWUgdG8gdGhlc2UgYmVpbmcgc3RhdGVsZXNzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2dldC1vcmlnaW5hbC1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICovXG4gIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZTogKHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PjtcbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBwaW5zIGluIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIHBpbnMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHBpbnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc2NvcmRHZXRDaGFubmVsUGluc30gb2JqZWN0c1xuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFZJRVdfQ0hBTk5FTGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgdGhlIHVzZXIgaXMgbWlzc2luZyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uIGluIHRoZSBjaGFubmVsLCB0aGVuIG5vIHBpbnMgd2lsbCBiZSByZXR1cm5lZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL21lc3NhZ2UjZ2V0LWNoYW5uZWwtcGluc31cbiAgICovXG4gIGdldENoYW5uZWxQaW5zOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRDaGFubmVsUGluc09wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEdldENoYW5uZWxQaW5zPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwaW5uZWQgbWVzc2FnZXMgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIHBpbm5lZCBtZXNzYWdlcyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9IG9iamVjdHMgYXNzb3J0ZWQgYnkgbWVzc2FnZSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhhdCB0aGUgYm90IHVzZXIgYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRoZSBtZXNzYWdlcyB3ZXJlIHBvc3RlZC5cbiAgICpcbiAgICogSWYgZ2V0dGluZyBhIG1lc3NhZ2UgZnJvbSBhIGd1aWxkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL21lc3NhZ2UjZ2V0LXBpbm5lZC1tZXNzYWdlcy1kZXByZWNhdGVkfVxuICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIGdldENoYW5uZWxQaW5zfSBpbnN0ZWFkLlxuICAgKi9cbiAgZ2V0UGlubmVkTWVzc2FnZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT5bXT47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHByaXZhdGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aHJlYWRzLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHN9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZFByaXZhdGVUaHJlYWQuXG4gICAqXG4gICAqIFRocmVhZHMgYXJlIG9yZGVyZWQgYnkgdGhlIGBhcmNoaXZlX3RpbWVzdGFtcGAgcHJvcGVydHkgaW5jbHVkZWQgaW4gdGhlIG1ldGFkYXRhIG9mIHRoZSBvYmplY3QgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC1wcml2YXRlLWFyY2hpdmVkLXRocmVhZHN9XG4gICAqL1xuICBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHByaXZhdGUgYXJjaGl2ZWQgdGhyZWFkcyB0aGUgYm90IGlzIGEgbWVtYmVyIG9mIGZvciBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBhcmNoaXZlZCB0aHJlYWRzIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRocmVhZHMuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJldHVybnMgdGhyZWFkcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkUHJpdmF0ZVRocmVhZC5cbiAgICpcbiAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGlkYCBwcm9wZXJ0eSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNsaXN0LWpvaW5lZC1wcml2YXRlLWFyY2hpdmVkLXRocmVhZHN9XG4gICAqL1xuICBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgbWVtYmVycyB0aGF0IHdvdWxkIGJlIGtpY2tlZCBmcm9tIGEgZ3VpbGQgZHVyaW5nIHBydW5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHBydW5lIGNvdW50IG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHBydW5lIGNvdW50LlxuICAgKiBAcmV0dXJucyBBIG51bWJlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgbWVtYmVycyB0aGF0IHdvdWxkIGJlIGtpY2tlZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIGFuZCBgS0lDS19NRU1CRVJTYCBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1wcnVuZS1jb3VudH1cbiAgICovXG4gIGdldFBydW5lQ291bnQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRHdWlsZFBydW5lQ291bnRRdWVyeSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUHJ1bmVkQ291bnQ+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgcHVibGljIGFyY2hpdmVkIHRocmVhZHMgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGFyY2hpdmVkIHRocmVhZHMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhyZWFkcy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkVGV4dCwgcmV0dXJucyB0aHJlYWRzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRQdWJsaWNUaHJlYWQuXG4gICAqIElmIGNhbGxlZCBvbiBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZE5ld3MsIHJldHVybnMgdGhyZWFkcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkTmV3c1RocmVhZC5cbiAgICpcbiAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGFyY2hpdmVfdGltZXN0YW1wYCBwcm9wZXJ0eSBpbmNsdWRlZCBpbiB0aGUgbWV0YWRhdGEgb2YgdGhlIG9iamVjdCBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNsaXN0LXB1YmxpYy1hcmNoaXZlZC10aHJlYWRzfVxuICAgKi9cbiAgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHJvbGVzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIHJvbGVzIGZvci5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkUm9sZX0gb2JqZWN0cyBhc3NvcnRlZCBieSByb2xlIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDimqDvuI8gVGhpcyBlbmRwb2ludCBzaG91bGQgYmUgdXNlZCBzcGFyaW5nbHkgZHVlIHRvIHtAbGluayBEaXNjb3JkUm9sZX0gb2JqZWN0cyBhbHJlYWR5IGJlaW5nIGluY2x1ZGVkIGluIGd1aWxkIHBheWxvYWRzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXJvbGVzfVxuICAgKi9cbiAgZ2V0Um9sZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGU+W10+O1xuICAvKipcbiAgICogR2V0cyBhIHJvbGUgYnkgaWQgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgcm9sZSBmb3IuXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc2NvcmRSb2xlfSBvYmplY3QuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtcm9sZX1cbiAgICovXG4gIGdldFJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlPj47XG4gIC8qKlxuICAgKiBHZXRzIGEgc2NoZWR1bGVkIGV2ZW50IGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRTY2hlZHVsZWRFdmVudH0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZ2V0LWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICovXG4gIGdldFNjaGVkdWxlZEV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiB7IHdpdGhVc2VyQ291bnQ/OiBib29sZWFuIH0pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50Pj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHNjaGVkdWxlZCBldmVudHMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHNjaGVkdWxlZCBldmVudHMgZnJvbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRTY2hlZHVsZWRFdmVudH0gb2JqZWN0cyBhc3NvcnRlZCBieSBldmVudCBJRC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNsaXN0LXNjaGVkdWxlZC1ldmVudHMtZm9yLWd1aWxkfVxuICAgKi9cbiAgZ2V0U2NoZWR1bGVkRXZlbnRzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0U2NoZWR1bGVkRXZlbnRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudD5bXT47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHN1YnNjcmliZXJzIHRvIGEgc2NoZWR1bGVkIGV2ZW50IGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc3Vic2NyaWJlcnMgdG8gdGhlIHNjaGVkdWxlZCBldmVudCBmcm9tLlxuICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGdldCB0aGUgc3Vic2NyaWJlcnMgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgc3Vic2NyaWJlcnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFVzZXJ9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdXNlciBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBVc2VycyBhcmUgb3JkZXJlZCBieSB0aGVpciBJRHMgaW4gX2FzY2VuZGluZ18gb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZ2V0LWd1aWxkLXNjaGVkdWxlZC1ldmVudC11c2Vyc31cbiAgICovXG4gIGdldFNjaGVkdWxlZEV2ZW50VXNlcnM6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgZXZlbnRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudFVzZXJzLFxuICApID0+IFByb21pc2U8QXJyYXk8eyB1c2VyOiBDYW1lbGl6ZTxEaXNjb3JkVXNlcj47IG1lbWJlcj86IENhbWVsaXplPERpc2NvcmRNZW1iZXI+IH0+PjtcbiAgLyoqIEdldCB0aGUgYm90cyBHYXRld2F5IG1ldGFkYXRhIHRoYXQgY2FuIGhlbHAgZHVyaW5nIHRoZSBvcGVyYXRpb24gb2YgbGFyZ2Ugb3Igc2hhcmRlZCBib3RzLiAqL1xuICBnZXRTZXNzaW9uSW5mbzogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgc3RhZ2UgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGEgc3RhZ2UgY2hhbm5lbCwgaWYgb25lIGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgc3RhZ2UgY2hhbm5lbCB0aGUgc3RhZ2UgaW5zdGFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFN0YWdlSW5zdGFuY2V9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjZ2V0LXN0YWdlLWluc3RhbmNlfVxuICAgKi9cbiAgZ2V0U3RhZ2VJbnN0YW5jZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGFnZUluc3RhbmNlPj47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHVzZXIncyB2b2ljZSBzdGF0ZSBpbiB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHZvaWNlIHN0YXRlIGZyb20uXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkVm9pY2VTdGF0ZX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy92b2ljZSNnZXQtY3VycmVudC11c2VyLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgZ2V0T3duVm9pY2VTdGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVm9pY2VTdGF0ZT4+O1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3BlY2lmaWVkIHVzZXIncyB2b2ljZSBzdGF0ZSBpbiB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHZvaWNlIHN0YXRlIGZyb20uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSB2b2ljZSBzdGF0ZSBmcm9tXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkVm9pY2VTdGF0ZX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy92b2ljZSNnZXQtdXNlci12b2ljZS1zdGF0ZX1cbiAgICovXG4gIGdldFVzZXJWb2ljZVN0YXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVm9pY2VTdGF0ZT4+O1xuICAvKipcbiAgICogUmV0dXJucyBhIHN0aWNrZXIgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gc3RpY2tlciBJRC5cbiAgICpcbiAgICogQHBhcmFtIHN0aWNrZXJJZCBUaGUgSUQgb2YgdGhlIHN0aWNrZXIgdG8gZ2V0XG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc2NvcmRTdGlja2VyfVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvc3RpY2tlciNnZXQtc3RpY2tlcn1cbiAgICovXG4gIGdldFN0aWNrZXI6IChzdGlja2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlcj4+O1xuICAvKipcbiAgICogR2V0cyBhIHRocmVhZCBtZW1iZXIgYnkgdGhlaXIgdXNlciBJRC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGdldCB0aGUgdGhyZWFkIG1lbWJlciBvZi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSB0aHJlYWQgbWVtYmVyIHRvIGdldC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSB0aHJlYWQgbWVtYmVyLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFRocmVhZE1lbWJlcn0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2dldC10aHJlYWQtbWVtYmVyfVxuICAgKi9cbiAgZ2V0VGhyZWFkTWVtYmVyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0VGhyZWFkTWVtYmVyKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUaHJlYWRNZW1iZXI+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgdGhyZWFkIG1lbWJlcnMgZm9yIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gZ2V0IHRoZSB0aHJlYWQgbWVtYmVycyBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSB0aHJlYWQgbWVtYmVycy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVGhyZWFkTWVtYmVyfSBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYXBwbGljYXRpb24gdG8gaGF2ZSB0aGUgYEdVSUxEX01FTUJFUlNgIHByaXZpbGVnZWQgaW50ZW50IGVuYWJsZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2xpc3QtdGhyZWFkLW1lbWJlcnN9XG4gICAqL1xuICBnZXRUaHJlYWRNZW1iZXJzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0VGhyZWFkTWVtYmVycykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGhyZWFkTWVtYmVyPltdPjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgdXNlcnMgdGhhdCByZWFjdGVkIHdpdGggYW4gZW1vamkgdG8gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGdldCB0aGUgdXNlcnMgZm9yIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGdldCB0aGUgdXNlcnMgZm9yLlxuICAgKiBAcGFyYW0gcmVhY3Rpb24gLSBUaGUgcmVhY3Rpb24gZm9yIHdoaWNoIHRvIGdldCB0aGUgdXNlcnMuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgdXNlcnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFVzZXJ9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdXNlciBJRC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LXJlYWN0aW9uc31cbiAgICovXG4gIGdldFJlYWN0aW9uczogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZywgb3B0aW9ucz86IEdldFJlYWN0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVXNlcj5bXT47XG4gIC8qKlxuICAgKiBHZXQgYSB1c2VyJ3MgZGF0YSBmcm9tIHRoZSBhcGlcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSB1c2VyJ3MgaWRcbiAgICogQHJldHVybnMge0Rpc2NvcmRVc2VyfVxuICAgKi9cbiAgZ2V0VXNlcjogKGlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFVzZXI+PjtcbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB1c2VyIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXJcbiAgICogQHJldHVybnMge0Rpc2NvcmRVc2VyfVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIHJlcXVpcmVzIHRoZSBgaWRlbnRpZnlgIHNjb3BlLlxuICAgKlxuICAgKiBUbyBnZXQgdGhlIG1haWwgdGhpcyBhbHNvIHJlcXVpcmVzIHRoZSBgZW1haWxgIHNjb3BlXG4gICAqL1xuICBnZXRDdXJyZW50VXNlcjogKGJlYXJlclRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFVzZXI+PjtcbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB1c2VyIGNvbm5lY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuIG9mIHRoZSB1c2VyXG4gICAqIEByZXR1cm5zIHtEaXNjb3JkQ29ubmVjdGlvbltdfVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIHJlcXVpcmVzIHRoZSBgY29ubmVjdGlvbnNgIHNjb3BlLlxuICAgKi9cbiAgZ2V0VXNlckNvbm5lY3Rpb25zOiAoYmVhcmVyVG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ29ubmVjdGlvbj5bXT47XG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdXNlciBhcHBsaWNhdGlvbiByb2xlIGNvbm5lY3Rpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlclxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSByb2xlIGNvbm5lY3Rpb25cbiAgICogQHJldHVybnMge0Rpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9ufVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYWNjZXNzIHRva2VuIHJlcXVpcmVzIHRoZSBgcm9sZV9jb25uZWN0aW9ucy53cml0ZWAgc2NvcGUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy91c2VyI2dldC11c2VyLWFwcGxpY2F0aW9uLXJvbGUtY29ubmVjdGlvbn1cbiAgICovXG4gIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uOiAoYmVhcmVyVG9rZW46IHN0cmluZywgYXBwbGljYXRpb25JZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPj47XG4gIC8qKlxuICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YW5pdHkgdXJsIG9mIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHZhbml0eSB1cmwgaW5mb3JtYXRpb24gZm9yLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFZhbml0eVVybH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBUaGUgYGNvZGVgIHByb3BlcnR5IHdpbGwgYmUgYG51bGxgIGlmIHRoZSBndWlsZCBkb2VzIG5vdCBoYXZlIGEgc2V0IHZhbml0eSB1cmwuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtdmFuaXR5LXVybH1cbiAgICovXG4gIGdldFZhbml0eVVybDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVmFuaXR5VXJsPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHZvaWNlIHJlZ2lvbnMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHZvaWNlIHJlZ2lvbnMgZm9yLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRWb2ljZVJlZ2lvbn0gb2JqZWN0cyBhc3NvcnRlZCBieSB2b2ljZSByZWdpb24gSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtdm9pY2UtcmVnaW9uc31cbiAgICovXG4gIGdldFZvaWNlUmVnaW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVm9pY2VSZWdpb24+W10+O1xuICAvKipcbiAgICogR2V0cyBhIHdlYmhvb2sgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24gdW5sZXNzIHRoZSBhcHBsaWNhdGlvbiBtYWtpbmcgdGhlIHJlcXVlc3Qgb3ducyB0aGUgd2ViaG9vay5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2t9XG4gICAqL1xuICBnZXRXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PjtcbiAgLyoqXG4gICAqIEdldHMgYSB3ZWJob29rIG1lc3NhZ2UgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGdldCBhIG1lc3NhZ2Ugb2YuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGdldCB3ZWJob29rIG1lc3NhZ2VzLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gdGhlIElEIG9mIHRoZSB3ZWJob29rIG1lc3NhZ2UgdG8gZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy93ZWJob29rI2dldC13ZWJob29rLW1lc3NhZ2V9XG4gICAqL1xuICBnZXRXZWJob29rTWVzc2FnZTogKFxuICAgIHdlYmhvb2tJZDogQmlnU3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgbWVzc2FnZUlkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9ucz86IEdldFdlYmhvb2tNZXNzYWdlT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj47XG4gIC8qKlxuICAgKiBHZXRzIGEgd2ViaG9vayB1c2luZyB0aGUgd2ViaG9vayB0b2tlbiwgdGhlcmVieSBieXBhc3NpbmcgdGhlIG5lZWQgZm9yIGF1dGhlbnRpY2F0aW9uICsgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZ2V0LlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBnZXQgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy93ZWJob29rI2dldC13ZWJob29rLXdpdGgtdG9rZW59XG4gICAqL1xuICBnZXRXZWJob29rV2l0aFRva2VuOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIHdlbGNvbWUgc2NyZWVuIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB3ZWxjb21lIHNjcmVlbiBmb3IuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkV2VsY29tZVNjcmVlbn0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHRoZSB3ZWxjb21lIHNjcmVlbiBpcyBub3QgZW5hYmxlZDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC13ZWxjb21lLXNjcmVlbn1cbiAgICovXG4gIGdldFdlbGNvbWVTY3JlZW46IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlbGNvbWVTY3JlZW4+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGd1aWxkIHdpZGdldCBieSBndWlsZCBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgd2lkZ2V0IG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEd1aWxkV2lkZ2V0fS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYW4gYElOVklURV9DUkVBVEVEYCBHYXRld2F5IGV2ZW50IHdoZW4gYW4gaW52aXRlIGNoYW5uZWwgaXMgZGVmaW5lZCBhbmQgYSBuZXcgYEludml0ZWAgaXMgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXdpZGdldH1cbiAgICovXG4gIGdldFdpZGdldDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRXaWRnZXQ+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIHNldHRpbmdzIG9mIGEgZ3VpbGQncyB3aWRnZXQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHdpZGdldCBvZi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtd2lkZ2V0LXNldHRpbmdzfVxuICAgKi9cbiAgZ2V0V2lkZ2V0U2V0dGluZ3M6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+PjtcbiAgLyoqXG4gICAqIEFkZHMgdGhlIGJvdCB1c2VyIHRvIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gYWRkIHRoZSBib3QgdXNlciB0by5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHRocmVhZCBub3QgYmUgYXJjaGl2ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBNZW1iZXJzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjam9pbi10aHJlYWR9XG4gICAqL1xuICBqb2luVGhyZWFkOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBMZWF2ZXMgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGxlYXZlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9HdWlsZCBEZWxldGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvdXNlciNsZWF2ZS1ndWlsZH1cbiAgICovXG4gIGxlYXZlR3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBib3QgdXNlciBmcm9tIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gcmVtb3ZlIHRoZSBib3QgdXNlciBmcm9tLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgdGhyZWFkIG5vdCBiZSBhcmNoaXZlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIE1lbWJlcnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNsZWF2ZS10aHJlYWR9XG4gICAqL1xuICBsZWF2ZVRocmVhZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQ3Jvc3MtcG9zdHMgYSBtZXNzYWdlIHBvc3RlZCBpbiBhbiBhbm5vdW5jZW1lbnQgY2hhbm5lbCB0byBzdWJzY3JpYmVkIGNoYW5uZWxzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBhbm5vdW5jZW1lbnQgY2hhbm5lbC5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBjcm9zcy1wb3N0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3Jvc3MtcG9zdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgU0VORF9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgbm90IGNyb3NzLXBvc3Rpbmcgb3duIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudCBpbiB0aGUgZ3VpbGRzIHRoZSBzdWJzY3JpYmVkIGNoYW5uZWxzIGFyZSBpbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjY3Jvc3Nwb3N0LW1lc3NhZ2V9XG4gICAqL1xuICBwdWJsaXNoTWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+O1xuICAvKipcbiAgICogUmVtb3ZlcyBhIHJvbGUgZnJvbSBhIG1lbWJlci5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBtZW1iZXIgdG8gcmVtb3ZlIHRoZSByb2xlIGZyb20gaXMgaW4uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIHJlbW92ZSB0aGUgcm9sZSBmcm9tLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIHJlbW92ZSBmcm9tIHRoZSBtZW1iZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNyZW1vdmUtZ3VpbGQtbWVtYmVyLXJvbGV9XG4gICAqL1xuICByZW1vdmVSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBtZW1iZXIgZnJvbSBhIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIHJlbW92ZSB0aGUgdGhyZWFkIG1lbWJlciBvZi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSB0aHJlYWQgbWVtYmVyIHRvIHJlbW92ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgdGhlIHRocmVhZCBpcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkUHJpdmF0ZVRocmVhZCwgcmVxdWlyZXMgdG8gYmUgdGhlIGNyZWF0b3Igb2YgdGhlIHRocmVhZC5cbiAgICogT3RoZXJ3aXNlLCByZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgdGhyZWFkIG5vdCBiZSBhcmNoaXZlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIE1lbWJlcnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNyZW1vdmUtdGhyZWFkLW1lbWJlcn1cbiAgICovXG4gIHJlbW92ZVRocmVhZE1lbWJlcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBtZW1iZXIgZnJvbSBhIEdyb3VwIERNLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIHJlbW92ZSB0aGUgcmVjaXBpZW50IHVzZXIgb2YuXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgdXNlciB0byByZW1vdmUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2dyb3VwLWRtLXJlbW92ZS1yZWNpcGllbnR9XG4gICAqL1xuICByZW1vdmVEbVJlY2lwaWVudDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFNlbmRzIGEgbWVzc2FnZSB0byBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gc2VuZCB0aGUgbWVzc2FnZSBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGF0IHRoZSBib3QgdXNlciBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgdG8gYmUgc2VudCBpbi5cbiAgICpcbiAgICogSWYgc2VuZGluZyBhIG1lc3NhZ2UgdG8gYSBndWlsZCBjaGFubmVsOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgU0VORF9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgc2VuZGluZyBhIFRUUyBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgU0VORF9UVFNfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIHNlbmRpbmcgYSBtZXNzYWdlIGFzIGEgcmVwbHkgdG8gYW5vdGhlciBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqIC0gVGhlIG1lc3NhZ2UgYmVpbmcgcmVwbGllZCB0byBjYW5ub3QgYmUgYSBzeXN0ZW0gbWVzc2FnZS5cbiAgICpcbiAgICog4pqg77iPIFRoZSBtYXhpbXVtIHNpemUgb2YgYSByZXF1ZXN0IChhY2NvdW50aW5nIGZvciBhbnkgYXR0YWNobWVudHMgYW5kIG1lc3NhZ2UgY29udGVudCkgZm9yIGJvdCB1c2VycyBpcyBfOCBNaUJfLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjY3JlYXRlLW1lc3NhZ2V9XG4gICAqL1xuICBzZW5kTWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVNZXNzYWdlT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+O1xuICAvKipcbiAgICogU2VuZHMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBJbnRlcmFjdGlvbiB0b2tlbnMgYXJlIG9ubHkgdmFsaWQgZm9yIF8xNSBtaW51dGVzXy5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgbWVudGlvbnMgYXJlIHN1cHByZXNzZWQuIFRvIGVuYWJsZSBtZW50aW9ucywgcGFzcyBhIG1lbnRpb24gb2JqZWN0IHdpdGggdGhlIGNhbGxiYWNrIGRhdGEuXG4gICAqXG4gICAqIFVubGlrZSBgc2VuZE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dDpcbiAgICogLSBOZWVkaW5nIHRvIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGF0IHRoZSBtZXNzYWdlIGlzIGluLiAoYFJFQURfTUVTU0FHRVNgIHBlcm1pc3Npb24uKVxuICAgKiAtIFJlcXVpcmluZyB0aGUgYE1FU1NBR0VfQ09OVEVOVGAgaW50ZW50LlxuICAgKlxuICAgKiBBcHBzIGFyZSBsaW1pdGVkIHRvIDUgZm9sbG93dXAgbWVzc2FnZXMgcGVyIGludGVyYWN0aW9uIGlmIGl0IHdhcyBpbml0aWF0ZWQgZnJvbSBhIHVzZXItaW5zdGFsbGVkIGFwcCBhbmQgaXNuJ3QgaW5zdGFsbGVkIGluIHRoZSBzZXJ2ZXJcbiAgICogWW91IGNhbiBjaGVjayBpZiBpdCB3YXMgaW5pdGlhdGVkIGZyb20gYSB1c2VyLWluc3RhbGxlZCBhcHAgdGhhdCBpc24ndCBpbnN0YWxsZWQgaW4gdGhlIHNlcnZlciBieSBjaGVja2luZyBpZiB7QGxpbmsgRGlzY29yZEludGVyYWN0aW9uLmF1dGhvcml6aW5nX2ludGVncmF0aW9uX293bmVycyB8IGF1dGhvcml6aW5nSW50ZWdyYXRpb25Pd25lcnN9IG9ubHkgY29udGFpbnMge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkludGVncmF0aW9uVHlwZS5Vc2VySW5zdGFsbCB8IFVzZXJJbnN0YWxsfS5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBDcmVhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2NyZWF0ZS1mb2xsb3d1cC1tZXNzYWdlfVxuICAgKi9cbiAgc2VuZEZvbGxvd3VwTWVzc2FnZTogKHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj47XG4gIC8qKlxuICAgKiBTZW5kcyBhIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gaW50ZXJhY3Rpb25JZCAtIFRoZSBJRCBvZiB0aGUgaW50ZXJhY3Rpb24gdG8gcmVzcG9uZCB0by5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyBmb3IgdGhlIHJlc3BvbnNlIG9mIHRoZSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyBOb3RoaW5nIG9yIHRoZSB7QGxpbmsgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZX0gaWYgd2l0aFJlc3BvbnNlIHBhcmFtIGlzIHRydWVcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIEludGVyYWN0aW9uIHRva2VucyBhcmUgb25seSB2YWxpZCBmb3IgXzE1IG1pbnV0ZXNfLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtZW50aW9ucyBhcmUgc3VwcHJlc3NlZC4gVG8gZW5hYmxlIG1lbnRpb25zLCBwYXNzIGEgbWVudGlvbiBvYmplY3Qgd2l0aCB0aGUgY2FsbGJhY2sgZGF0YS5cbiAgICpcbiAgICogVW5saWtlIGBzZW5kTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNjcmVhdGUtaW50ZXJhY3Rpb24tcmVzcG9uc2V9XG4gICAqL1xuICBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZTogKFxuICAgIGludGVyYWN0aW9uSWQ6IEJpZ1N0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEludGVyYWN0aW9uUmVzcG9uc2UsXG4gICAgcGFyYW1zPzogSW50ZXJhY3Rpb25DYWxsYmFja09wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTx2b2lkIHwgQ2FtZWxpemU8RGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZT4+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHRocmVhZCwgdXNpbmcgYW4gZXhpc3RpbmcgbWVzc2FnZSBhcyBpdHMgcG9pbnQgb2Ygb3JpZ2luLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgdGhyZWFkLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIHVzZSBhcyB0aGUgdGhyZWFkJ3MgcG9pbnQgb2Ygb3JpZ2luLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIHRvIHVzZSBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB0aHJlYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkVGV4dCwgY3JlYXRlcyBhIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkUHVibGljVGhyZWFkLlxuICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGROZXdzLCBjcmVhdGVzIGEge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGROZXdzVGhyZWFkLlxuICAgKiBEb2VzIG5vdCB3b3JrIG9uIGNoYW5uZWxzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRGb3J1bS5cbiAgICpcbiAgICogVGhlIElEIG9mIHRoZSBjcmVhdGVkIHRocmVhZCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBJRCBvZiB0aGUgc291cmNlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI3N0YXJ0LXRocmVhZC1mcm9tLW1lc3NhZ2V9XG4gICAqL1xuICBzdGFydFRocmVhZFdpdGhNZXNzYWdlOiAoXG4gICAgY2hhbm5lbElkOiBCaWdTdHJpbmcsXG4gICAgbWVzc2FnZUlkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogU3RhcnRUaHJlYWRXaXRoTWVzc2FnZSxcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHRocmVhZCB3aXRob3V0IHVzaW5nIGEgbWVzc2FnZSBhcyB0aGUgdGhyZWFkJ3MgcG9pbnQgb2Ygb3JpZ2luLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgdGhyZWFkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIHRvIHVzZSBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB0aHJlYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsIHwgVGhyZWFkfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQ3JlYXRpbmcgYSBwcml2YXRlIHRocmVhZCByZXF1aXJlcyB0aGUgc2VydmVyIHRvIGJlIGJvb3N0ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI3N0YXJ0LXRocmVhZC13aXRob3V0LW1lc3NhZ2V9XG4gICAqL1xuICBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IFN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+O1xuICAvKipcbiAgICogR2V0IGEgbGlzdCBvZiB1c2VycyB0aGF0IHZvdGVkIGZvciB0aGlzIHNwZWNpZmljIGFuc3dlci5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0aGUgbWVzc2FnZSB3aXRoIHRoZSBwb2xsIGxpdmVzXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgaW4gd2hpY2ggdGhlIHBvbGwgbGl2ZXNcbiAgICogQHBhcmFtIGFuc3dlcklkIC0gVGhlIElEIG9mIHRoZSBhbnN3ZXIgdG8gZ2V0IHRoZSB1c2VycyB0aGF0IHZvdGVkIHRoYXQgYW5zd2VyXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHVzZXJzIHRoYXQgdm90ZWQgZm9yIHRoZSBzcGVjaWZpYyBhbnN3ZXIuXG4gICAqL1xuICBnZXRQb2xsQW5zd2VyVm90ZXJzOiAoXG4gICAgY2hhbm5lbElkOiBCaWdTdHJpbmcsXG4gICAgbWVzc2FnZUlkOiBCaWdTdHJpbmcsXG4gICAgYW5zd2VySWQ6IG51bWJlcixcbiAgICBvcHRpb25zPzogR2V0UG9sbEFuc3dlclZvdGVzLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2U+PjtcbiAgLyoqXG4gICAqIEltbWVkaWF0ZWx5IGVuZHMgdGhlIHBvbGwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgcG9sbCBsaXZlc1xuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIGluIHdoaWNoIHRoZSBwb2xsIGxpdmVzXG4gICAqIEByZXR1cm5zIFRoZSBtZXNzYWdlIHdpdGggdGhlIGV4cGlyZWQgcG9sbFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBZb3UgY2Fubm90IGVuZCBwb2xscyBmcm9tIG90aGVyIHVzZXJzLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudFxuICAgKi9cbiAgZW5kUG9sbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+O1xuICAvKipcbiAgICogU3luY2hyb25pc2VzIGEgdGVtcGxhdGUgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gc3luY2hyb25pc2UgYSB0ZW1wbGF0ZSBvZi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFRlbXBsYXRlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI2dldC1ndWlsZC10ZW1wbGF0ZXN9XG4gICAqL1xuICBzeW5jR3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PjtcbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgdHlwaW5nIGluZGljYXRvciBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsLCB3aGljaCBleHBpcmVzIGFmdGVyIDEwIHNlY29uZHMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdG8gdHJpZ2dlciB0aGUgdHlwaW5nIGluZGljYXRvci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogR2VuZXJhbGx5IGJvdHMgc2hvdWxkICoqbm90KiogdXNlIHRoaXMgcm91dGUuXG4gICAqIEhvd2V2ZXIsIGlmIGEgYm90IGlzIHJlc3BvbmRpbmcgdG8gYSBjb21tYW5kIGFuZCBleHBlY3RzIHRoZSBjb21wdXRhdGlvbiB0byB0YWtlIGEgZmV3IHNlY29uZHMsXG4gICAqIHRoaXMgZW5kcG9pbnQgbWF5IGJlIGNhbGxlZCB0byBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSBib3QgaXMgcHJvY2Vzc2luZyB0aGVpciBtZXNzYWdlLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UeXBpbmcgU3RhcnRfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI3RyaWdnZXItdHlwaW5nLWluZGljYXRvcn1cbiAgICovXG4gIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3I6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFJlLXJlZ2lzdGVycyB0aGUgbGlzdCBvZiBnbG9iYWwgYXBwbGljYXRpb24gY29tbWFuZHMsIG92ZXJ3cml0aW5nIHRoZSBwcmV2aW91cyBjb21tYW5kcyBjb21wbGV0ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZHMgLSBUaGUgbGlzdCBvZiBjb21tYW5kcyB0byB1c2UgdG8gb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBsaXN0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGVuZHBvaW50LlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4p2XIENvbW1hbmRzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBgY29tbWFuZHNgIGFycmF5IHdpbGwgYmUgX19kZWxldGVkX18uXG4gICAqXG4gICAqIOKaoO+4jyBDb21tYW5kcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGV4aXN0IHdpbGwgY291bnQgdG93YXJkcyB0aGUgZGFpbHkgbGltaXQgb2YgXzIwMF8gbmV3IGNvbW1hbmRzLlxuICAgKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBiZWFyZXIgdG9rZW4gdGhlIHRva2VuIG5lZWRzIHRoZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnVwZGF0ZWAgc2NvcGUgYW5kIG11c3QgYmUgYSBgQ2xpZW50IGdyYW50YCB0b2tlbi5cbiAgICogIFlvdSB3aWxsIGJlIGFibGUgdG8gdXBkYXRlIG9ubHkgeW91ciBvd24gYXBwbGljYXRpb24gY29tbWFuZHNcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2J1bGstb3ZlcndyaXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc31cbiAgICovXG4gIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHM6IChcbiAgICBjb21tYW5kczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kW10sXG4gICAgb3B0aW9ucz86IFVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPltdPjtcbiAgLyoqXG4gICAqIFJlLXJlZ2lzdGVycyB0aGUgbGlzdCBvZiBhcHBsaWNhdGlvbiBjb21tYW5kcyByZWdpc3RlcmVkIGluIGEgZ3VpbGQsIG92ZXJ3cml0aW5nIHRoZSBwcmV2aW91cyBjb21tYW5kcyBjb21wbGV0ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgd2hvc2UgbGlzdCBvZiBjb21tYW5kcyB0byBvdmVyd3JpdGUuXG4gICAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBsaXN0IG9mIGNvbW1hbmRzIHRvIHVzZSB0byBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGxpc3QuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgZW5kcG9pbnQuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDinZcgQ29tbWFuZHMgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGBjb21tYW5kc2AgYXJyYXkgd2lsbCBiZSBfX2RlbGV0ZWRfXy5cbiAgICpcbiAgICog4pqg77iPIENvbW1hbmRzIHRoYXQgZG8gbm90IGFscmVhZHkgZXhpc3Qgd2lsbCBjb3VudCB0b3dhcmRzIHRoZSBkYWlseSBsaW1pdCBvZiBfMjAwXyBuZXcgY29tbWFuZHMuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgdGhlIGJlYXJlciB0b2tlbiB0aGUgdG9rZW4gbmVlZHMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMudXBkYXRlYCBzY29wZSBhbmQgbXVzdCBiZSBhIGBDbGllbnQgZ3JhbnRgIHRva2VuLlxuICAgKiAgWW91IHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgb25seSB5b3VyIG93biBhcHBsaWNhdGlvbiBjb21tYW5kc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjYnVsay1vdmVyd3JpdGUtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZHN9XG4gICAqL1xuICB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHM6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgY29tbWFuZHM6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZFtdLFxuICAgIG9wdGlvbnM/OiBVcHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPltdPjtcbiAgLyoqXG4gICAqIEJhbnMgYSB1c2VyIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGJhbiB0aGUgdXNlciBmcm9tLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGJhbiBmcm9tIHRoZSBndWlsZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBiYW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBCQU5fTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgQmFuIEFkZF8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZC1iYW59XG4gICAqL1xuICBiYW5NZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogQ3JlYXRlR3VpbGRCYW4sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEJhbnMgdXAgdG8gMjAwIHVzZXJzIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGJhbiB0aGUgdXNlcnMgZnJvbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgdXNlcnMgdG8gYmFuIGFuZCB0aGUgb3RoZXIgb3B0aW9ucyBmb3IgdGhlIGJhbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBhbmQgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIElmIGFsbCBwcm92aWRlZCB1c2VycyBmYWlsIHRvIGJlIGJhbm5lZCwgZGlzY29yZCB3aWxsIHJlc3BvbmQgd2l0aCBhbiBlcnJvciAoY29kZTogYDUwMDAwMDogRmFpbGVkIHRvIGJhbiB1c2Vyc2ApXG4gICAqXG4gICAqIEZpcmVzIGFzIG1hbnkgX0d1aWxkIEJhbiBBZGRfIGdhdGV3YXkgZXZlbnRzIGFzIG1hbnkgdXNlciB3aGVyZSBiYW5uZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNidWxrLWd1aWxkLWJhbn1cbiAgICovXG4gIGJ1bGtCYW5NZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZEJ1bGtCYW4sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQnVsa0Jhbj4+O1xuICAvKipcbiAgICogRWRpdHMgdGhlIG5pY2tuYW1lIG9mIHRoZSBib3QgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIG5pY2tuYW1lIG9mIHRoZSBib3QgdXNlciBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIG5pY2tuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRNZW1iZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktY3VycmVudC1tZW1iZXJ9XG4gICAqL1xuICBlZGl0Qm90TWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0Qm90TWVtYmVyT3B0aW9ucywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXI+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGEgbWVtYmVyJ3MgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIG1lbWJlciBvZi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gZWRpdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdXNlci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBlbmRwb2ludCByZXF1aXJlcyB2YXJpb3VzIHBlcm1pc3Npb25zIGRlcGVuZGluZyBvbiB3aGF0IGlzIGVkaXRlZCBhYm91dCB0aGUgbWVtYmVyLlxuICAgKiBUbyBmaW5kIG91dCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbiB0byBlbmFjdCBhIGNoYW5nZSwgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGVuZHBvaW50J3Mge0BsaW5rIE1vZGlmeUd1aWxkTWVtYmVyIHwgcGFyYW1ldGVyc30uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtbWVtYmVyfVxuICAgKi9cbiAgZWRpdE1lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkTWVtYmVyLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcj4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbWVtYmVyIG9iamVjdCBieSB1c2VyIElELlxuICAgKlxuICBcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbWVtYmVyIG9iamVjdCBmb3IuXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBtZW1iZXIgb2JqZWN0IGZvci5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZW1iZXJXaXRoVXNlcn0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtbWVtYmVyfVxuICAgKi9cbiAgZ2V0TWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgbWVtYmVyIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlclxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBtZW1iZXIgb2JqZWN0IGZvci5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZW1iZXJXaXRoVXNlcn0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhY2Nlc3MgdG9rZW5zIG5lZWRzIHRoZSBgZ3VpbGRzLm1lbWJlcnMucmVhZGAgc2NvcGVcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3VzZXIjZ2V0LWN1cnJlbnQtdXNlci1ndWlsZC1tZW1iZXJ9XG4gICAqL1xuICBnZXRDdXJyZW50TWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBiZWFyZXJUb2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcj4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIG1lbWJlcnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcldpdGhVc2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgR1VJTERfTUVNQkVSU2AgaW50ZW50LlxuICAgKlxuICAgKiDimqDvuI8gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIGVuZHBvaW50IHdpdGggdmVyeSBsYXJnZSBib3RzLiBJbnN0ZWFkLCBvcHQgdG8gdXNlIGBmZXRjaE1lbWJlcnMoKWA6XG4gICAqIFJFU1QgY29tbXVuaWNhdGlvbiBvbmx5IHBlcm1pdHMgNTAgcmVxdWVzdHMgdG8gYmUgbWFkZSBwZXIgc2Vjb25kLCB3aGlsZSBnYXRld2F5cyBhbGxvdyBmb3IgdXAgdG8gMTIwIHJlcXVlc3RzXG4gICAqIHBlciBtaW51dGUgcGVyIHNoYXJkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvdG9waWNzL3JhdGUtbGltaXRzI3JhdGUtbGltaXRzfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2xpc3QtZ3VpbGQtbWVtYmVyc31cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvZXZlbnRzL2dhdGV3YXktZXZlbnRzI3JlcXVlc3QtZ3VpbGQtbWVtYmVyc31cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvdG9waWNzL3JhdGUtbGltaXRzI3JhdGUtbGltaXRzfVxuICAgKi9cbiAgZ2V0TWVtYmVyczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTGlzdEd1aWxkTWVtYmVycykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+W10+O1xuICAvKipcbiAgICogUmV0dXJucyBhIHNlcmlhbGl6ZWQgYWN0aXZpdHkgaW5zdGFuY2UsIGlmIGl0IGV4aXN0cy4gVXNlZnVsIGZvciBwcmV2ZW50aW5nIHVud2FudGVkIGFjdGl2aXR5IHNlc3Npb25zLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBJRCBvZiB0aGUgYXBwbGljYXRpb25cbiAgICogQHBhcmFtIGluc3RhbmNlSWQgLSBUaGUgSUQgb2YgdGhlIGFjdGl2aXR5IGluc3RhbmNlXG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2U6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGluc3RhbmNlSWQ6IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQWN0aXZpdHlJbnN0YW5jZT4+O1xuICAvKipcbiAgICogS2lja3MgYSBtZW1iZXIgZnJvbSBhIGd1aWxkLlxuICAgKlxuICBcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGtpY2sgdGhlIG1lbWJlciBmcm9tLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBraWNrIGZyb20gdGhlIGd1aWxkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgS0lDS19NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgUmVtb3ZlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjcmVtb3ZlLWd1aWxkLW1lbWJlcn1cbiAgICovXG4gIGtpY2tNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBQaW5zIGEgbWVzc2FnZSBpbiBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgd2hlcmUgdGhlIG1lc3NhZ2UgaXMgdG8gYmUgcGlubmVkLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIHBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFBJTl9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBQaW5zIFVwZGF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9tZXNzYWdlI3Bpbi1tZXNzYWdlfVxuICAgKi9cbiAgcGluTWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogSW5pdGlhdGVzIHRoZSBwcm9jZXNzIG9mIHBydW5pbmcgaW5hY3RpdmUgbWVtYmVycy5cbiAgICpcbiAgXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBwcnVuZSB0aGUgbWVtYmVycyBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHBydW5pbmcgb2YgbWVtYmVycy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBIG51bWJlciBpbmRpY2F0aW5nIGhvdyBtYW55IG1lbWJlcnMgd2VyZSBwcnVuZWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBhbmQgYEtJQ0tfTUVNQkVSU2AgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIOKdlyBSZXF1ZXN0cyB0byB0aGlzIGVuZHBvaW50IHdpbGwgdGltZSBvdXQgZm9yIGxhcmdlIGd1aWxkcy4gVG8gcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nLCBzZXQgdGhlIHtAbGluayBCZWdpbkd1aWxkUHJ1bmUuY29tcHV0ZVBydW5lQ291bnR9IHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIG9iamVjdCBwYXJhbWV0ZXIgdG8gYGZhbHNlYC4gVGhpcyB3aWxsIGJlZ2luIHRoZSBwcm9jZXNzIG9mIHBydW5pbmcsIGFuZCBpbW1lZGlhdGVseSByZXR1cm4gYHVuZGVmaW5lZGAsIHJhdGhlciB0aGFuIHdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcgdGhlIGFjdHVhbCBjb3VudCBvZiBtZW1iZXJzIHRoYXQgaGF2ZSBiZWVuIGtpY2tlZC5cbiAgICpcbiAgICog4pqg77iPIEJ5IGRlZmF1bHQsIHRoaXMgcHJvY2VzcyB3aWxsIG5vdCByZW1vdmUgbWVtYmVycyB3aXRoIGEgcm9sZS4gVG8gaW5jbHVkZSB0aGUgbWVtYmVycyB3aG8gaGF2ZSBhIF9wYXJ0aWN1bGFyIHN1YnNldCBvZiByb2xlc18sIHNwZWNpZnkgdGhlIHJvbGUocykgaW4gdGhlIHtAbGluayBCZWdpbkd1aWxkUHJ1bmUuaW5jbHVkZVJvbGVzIHwgaW5jbHVkZVJvbGVzfSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgUmVtb3ZlXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSBtZW1iZXIga2lja2VkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjYmVnaW4tZ3VpbGQtcHJ1bmV9XG4gICAqL1xuICBwcnVuZU1lbWJlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEJlZ2luR3VpbGRQcnVuZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBtZW1iZXJzIHdob3NlIHVzZXJuYW1lcyBvciBuaWNrbmFtZXMgc3RhcnQgd2l0aCBhIHByb3ZpZGVkIHN0cmluZy5cbiAgICpcbiAgXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBzZWFyY2ggaW4uXG4gICAqIEBwYXJhbSBxdWVyeSAtIFRoZSBzdHJpbmcgdG8gbWF0Y2ggdXNlcm5hbWVzIG9yIG5pY2tuYW1lcyBhZ2FpbnN0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBzZWFyY2hpbmcgdGhyb3VnaCB0aGUgbWVtYmVycy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkTWVtYmVyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNzZWFyY2gtZ3VpbGQtbWVtYmVyc31cbiAgICovXG4gIHNlYXJjaE1lbWJlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFNlYXJjaE1lbWJlcnMsICdxdWVyeSc+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcj5bXT47XG4gIC8qKlxuICAgKiBVbmJhbnMgYSB1c2VyIGZyb20gYSBndWlsZC5cbiAgICpcbiAgXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byB1bmJhbiB0aGUgdXNlciBpbi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byB1bmJhbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBCYW4gUmVtb3ZlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjcmVtb3ZlLWd1aWxkLWJhbn1cbiAgICovXG4gIHVuYmFuTWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogVW5waW4gYSBtZXNzYWdlIGluIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB3aGVyZSB0aGUgbWVzc2FnZSBpcyBwaW5uZWQuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gdW5waW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBQSU5fTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0NoYW5uZWwgUGlucyBVcGRhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvbWVzc2FnZSN1bnBpbi1tZXNzYWdlfVxuICAgKi9cbiAgdW5waW5NZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBHZXQgdGhlIGd1aWxkIG9uYm9hcmRpbmdcbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgZ3VpbGQgdG8gZ2V0IHRoZSBvbmJvYXJkaW5nIGZyb21cbiAgICovXG4gIGdldEd1aWxkT25ib2FyZGluZzogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPj47XG4gIC8qKlxuICAgKiBNb2RpZmllcyB0aGUgb25ib2FyZGluZyBjb25maWd1cmF0aW9uIG9mIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgZ3VpbGQgdG8gZWRpdCB0aGUgb25ib2FyZGluZyBmcm9tXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIGFuZCBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogT25ib2FyZGluZyBlbmZvcmNlcyBjb25zdHJhaW50cyB3aGVuIGVuYWJsZWQuIFRoZXNlIGNvbnN0cmFpbnRzIGFyZTpcbiAgICogIC0gYXQgbGVhc3QgNyBkZWZhdWx0IGNoYW5uZWxzXG4gICAqICAtIGF0IGxlYXN0IDUgb2YgdGhlIDcgY2hhbm5lbHMgbXVzdCBhbGxvdyBzZW5kaW5nIG1lc3NhZ2VzIHRvIHRoZSBcXEBldmVyeW9uZSByb2xlXG4gICAqXG4gICAqIFRoZSBgbW9kZWAgZmllbGQgbW9kaWZpZXMgd2hhdCBpcyBjb25zaWRlcmVkIHdoZW4gZW5mb3JjaW5nIHRoZXNlIGNvbnN0cmFpbnRzLlxuICAgKi9cbiAgZWRpdEd1aWxkT25ib2FyZGluZzogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdEd1aWxkT25ib2FyZGluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+PjtcbiAgLyoqXG4gICAqIE1vZGlmaWVzIHRoZSBpbmNpZGVudCBhY3Rpb25zIG9mIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgZ3VpbGQgdG8gZWRpdCB0aGUgaW5jaWRlbnQgYWN0aW9ucyBmcm9tXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBpbmNpZGVudCBhY3Rpb25zXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKi9cbiAgbW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbmNpZGVudHNEYXRhPj47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBlbnRpdGxlbWVudHMgZm9yIGEgZ2l2ZW4gYXBwLCBhY3RpdmUgYW5kIGV4cGlyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGlkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIGVudGl0bGVtZW50c1xuICAgKiBAcGFyYW0ge0dldEVudGl0bGVtZW50c30gW29wdGlvbnNdIC0gVGhlIG9wdGlvbmFsIHF1ZXJ5IHBhcmFtcyBmb3IgdGhlIGVuZHBvaW50XG4gICAqL1xuICBsaXN0RW50aXRsZW1lbnRzOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0RW50aXRsZW1lbnRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbnRpdGxlbWVudD5bXT47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVudGl0bGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSBlbnRpdGxlbWVudFxuICAgKiBAcGFyYW0gZW50aXRsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZW50aXRsZW1lbnQgdG8gZ2V0XG4gICAqL1xuICBnZXRFbnRpdGxlbWVudDogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgZW50aXRsZW1lbnRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbnRpdGxlbWVudD4+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHRlc3QgZW50aXRsZW1lbnQgdG8gYSBnaXZlbiBTS1UgZm9yIGEgZ2l2ZW4gZ3VpbGQgb3IgdXNlci4gRGlzY29yZCB3aWxsIGFjdCBhcyB0aG91Z2ggdGhhdCB1c2VyIG9yIGd1aWxkIGhhcyBlbnRpdGxlbWVudCB0byB5b3VyIHByZW1pdW0gb2ZmZXJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGlkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBjcmVhdGUgdGhlIGVudGl0bGVtZW50XG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIG9wdGlvbnMgZm9yIG5ldyBlbnRpdGxlbWVudFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGVuZHBvaW50IHJldHVybnMgYSBwYXJ0aWFsIGVudGl0bGVtZW50IG9iamVjdC5cbiAgICogSXQgd2lsbCBub3QgY29udGFpbiBzdWJzY3JpcHRpb25faWQsIHN0YXJ0c19hdCwgb3IgZW5kc19hdCwgYXMgaXQncyB2YWxpZCBpbiBwZXJwZXR1aXR5LlxuICAgKi9cbiAgY3JlYXRlVGVzdEVudGl0bGVtZW50OiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBib2R5OiBDcmVhdGVUZXN0RW50aXRsZW1lbnQpID0+IFByb21pc2U8UGFydGlhbDxDYW1lbGl6ZTxEaXNjb3JkRW50aXRsZW1lbnQ+Pj47XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgY3VycmVudGx5LWFjdGl2ZSB0ZXN0IGVudGl0bGVtZW50LiBEaXNjb3JkIHdpbGwgYWN0IGFzIHRob3VnaCB0aGF0IHVzZXIgb3IgZ3VpbGQgbm8gbG9uZ2VyIGhhcyBlbnRpdGxlbWVudCB0byB5b3VyIHByZW1pdW0gb2ZmZXJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGlkIG9mIHRoZSBhcHBsaWNhdGlvbiBmcm9tIHdoZXJlIGRlbGV0ZSB0aGUgZW50aXRsZW1lbnRcbiAgICogQHBhcmFtIGVudGl0bGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVudGl0bGVtZW50IHRvIGRlbGV0ZVxuICAgKi9cbiAgZGVsZXRlVGVzdEVudGl0bGVtZW50OiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBlbnRpdGxlbWVudElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBGb3IgT25lLVRpbWUgUHVyY2hhc2UgY29uc3VtYWJsZSBTS1VzLCBtYXJrcyBhIGdpdmVuIGVudGl0bGVtZW50IGZvciB0aGUgdXNlciBhcyBjb25zdW1lZC4gVGhlIGVudGl0bGVtZW50IHdpbGwgaGF2ZSBgY29uc3VtZWQ6IHRydWVgIHdoZW4gdXNpbmcge0BsaW5rIGxpc3RFbnRpdGxlbWVudHMgfCBMaXN0IEVudGl0bGVtZW50c31cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgaWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgZW50aXRsZW1lbnRcbiAgICogQHBhcmFtIGVudGl0bGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVudGl0bGVtZW50IHRvIGdldFxuICAgKi9cbiAgY29uc3VtZUVudGl0bGVtZW50OiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBlbnRpdGxlbWVudElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBTS1VzIGZvciBhIGdpdmVuIGFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGlkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIFNLVXNcbiAgICovXG4gIGxpc3RTa3VzOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTa3U+W10+O1xuICAvKipcbiAgICogUmV0dXJucyBhbGwgc3Vic2NyaXB0aW9ucyBjb250YWluaW5nIHRoZSBTS1UsIGZpbHRlcmVkIGJ5IHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBza3VJZCAtIFRoZSBpZCBvZiB0aGUgc2t1IG9mIGdldCB0aGUgc3Vic2NyaXB0aW9ucyBmb3JcbiAgICovXG4gIGxpc3RTdWJzY3JpcHRpb25zOiAoc2t1SWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RTa3VTdWJzY3JpcHRpb25zT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3Vic2NyaXB0aW9uW10+PjtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNjcmlwdGlvbiBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBza3VJZCAtIFRoZSBpZCBvZiB0aGUgc2t1IG9mIGdldCB0aGUgc3Vic2NyaXB0aW9ucyBmb3JcbiAgICovXG4gIGdldFN1YnNjcmlwdGlvbjogKHNrdUlkOiBCaWdTdHJpbmcsIHN1YnNjcmlwdGlvbklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN1YnNjcmlwdGlvbj4+O1xuICAvKipcbiAgICogU2VuZCBhIHNvdW5kYm9hcmQgc291bmQgdG8gYSB2b2ljZSBjaGFubmVsIHRoZSB1c2VyIGlzIGNvbm5lY3RlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBpZCBvZiB0aGUgdm9pY2UgY2hhbm5lbFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9Wb2ljZSBDaGFubmVsIEVmZmVjdCBTZW5kXyBHYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYFNQRUFLYCBhbmQgYFVTRV9TT1VOREJPQVJEYCBwZXJtaXNzaW9ucywgYW5kIGFsc28gdGhlIGBVU0VfRVhURVJOQUxfU09VTkRTYCBwZXJtaXNzaW9uIGlmIHRoZSBzb3VuZCBpcyBmcm9tIGEgZGlmZmVyZW50IHNlcnZlci5cbiAgICogQWRkaXRpb25hbGx5LCByZXF1aXJlcyB0aGUgdXNlciB0byBiZSBjb25uZWN0ZWQgdG8gdGhlIHZvaWNlIGNoYW5uZWwsIGhhdmluZyBhIHZvaWNlIHN0YXRlIHdpdGhvdXQgYGRlYWZgLCBgc2VsZl9kZWFmYCwgYG11dGVgLCBvciBgc3VwcHJlc3NgIGVuYWJsZWQuXG4gICAqL1xuICBzZW5kU291bmRib2FyZFNvdW5kOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IFNlbmRTb3VuZGJvYXJkU291bmQpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBSZXR1cm5zIGFuIGFycmF5IG9mIHNvdW5kYm9hcmQgc291bmQgb2JqZWN0cyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCB1c2Vycy4gKi9cbiAgbGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTb3VuZGJvYXJkU291bmQ+W10+O1xuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGd1aWxkJ3Mgc291bmRib2FyZCBzb3VuZHMuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGdldCB0aGUgc291bmRzIGZyb21cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW5jbHVkZXMgYHVzZXJgIGZpZWxkcyBpZiB0aGUgYm90IGhhcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICovXG4gIGxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8eyBpdGVtczogQ2FtZWxpemU8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD5bXSB9PjtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBzb3VuZGJvYXJkIHNvdW5kIG9iamVjdCBmb3IgdGhlIGdpdmVuIHNvdW5kIGlkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBndWlsZCB0byBnZXQgdGhlIHNvdW5kcyBmcm9tXG4gICAqIEBwYXJhbSBzb3VuZElkIC0gVGhlIHNvdW5kIGlkXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEluY2x1ZGVzIGB1c2VyYCBmaWVsZHMgaWYgdGhlIGJvdCBoYXMgdGhlIGBDUkVBVEVfR1VJTERfRVhQUkVTU0lPTlNgIG9yIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqL1xuICBnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgc291bmRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTb3VuZGJvYXJkU291bmQ+PjtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBzb3VuZGJvYXJkIHNvdW5kIGZvciB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgc291bmRzIGluXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gY3JlYXRlIHRoZSBzb3VuZFxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIGF1ZGl0IGxvZyByZWFzb25cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfR3VpbGQgU291bmRib2FyZCBTb3VuZCBDcmVhdGVfIEdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKi9cbiAgY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4+O1xuICAvKipcbiAgICogTW9kaWZ5IHRoZSBnaXZlbiBzb3VuZGJvYXJkIHNvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHNvdW5kcyBpblxuICAgKiBAcGFyYW0gc291bmRJZCAtIFRoZSBzb3VuZCBpZCB0byB1cGRhdGVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byB1cGRhdGUgdGhlIHNvdW5kXG4gICAqIEBwYXJhbSByZWFzb24gLSBUaGUgYXVkaXQgbG9nIHJlYXNvblxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9HdWlsZCBTb3VuZGJvYXJkIFNvdW5kIFVwZGF0ZV8gR2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogRm9yIHNvdW5kcyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIHNvdW5kcywgcmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqL1xuICBtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZDogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBzb3VuZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogTW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQsXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4+O1xuICAvKipcbiAgICogRGVsZXRlIHRoZSBnaXZlbiBzb3VuZGJvYXJkIHNvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHNvdW5kcyBpblxuICAgKiBAcGFyYW0gc291bmRJZCAtIFRoZSBzb3VuZCBpZCB0byBkZWxldGVcbiAgICogQHBhcmFtIHJlYXNvbiAtIFRoZSBhdWRpdCBsb2cgcmVhc29uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX0d1aWxkIFNvdW5kYm9hcmQgU291bmQgRGVsZXRlXyBHYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBGb3Igc291bmRzIGNyZWF0ZWQgYnkgdGhlIGN1cnJlbnQgdXNlciwgcmVxdWlyZXMgZWl0aGVyIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGb3Igb3RoZXIgc291bmRzLCByZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICovXG4gIGRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBzb3VuZElkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGFwcGxpY2F0aW9uIHJvbGUgY29ubmVjdGlvbiBtZXRhZGF0YSBvYmplY3RzIGZvciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgcm9sZSBjb25uZWN0aW9ucyBmcm9tXG4gICAqIEByZXR1cm5zIEEgbGlzdCBvZiBhcHBsaWNhdGlvbiByb2xlIGNvbm5lY3Rpb24gbWV0YWRhdGEgb2JqZWN0c1xuICAgKi9cbiAgbGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGE+W10+O1xuICAvKipcbiAgICogVXBkYXRlcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgYXBwbGljYXRpb24gcm9sZSBjb25uZWN0aW9uIG1ldGFkYXRhIG9iamVjdHMgZm9yIHRoZSBnaXZlbiBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSByb2xlIGNvbm5lY3Rpb25zIGZyb21cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byB1cGRhdGUgdGhlIHJvbGUgY29ubmVjdGlvbnNcbiAgICogQHJldHVybnMgQSBsaXN0IG9mIGFwcGxpY2F0aW9uIHJvbGUgY29ubmVjdGlvbiBtZXRhZGF0YSBvYmplY3RzXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEFuIGFwcGxpY2F0aW9uIGNhbiBoYXZlIGEgbWF4aW11bSBvZiA1IG1ldGFkYXRhIHJlY29yZHMuXG4gICAqL1xuICB1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkczogKFxuICAgIGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhPltdLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YT5bXT47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGxvYmJ5LCBhZGRpbmcgYW55IG9mIHRoZSBzcGVjaWZpZWQgbWVtYmVycyB0byBpdCwgaWYgcHJvdmlkZWQuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gY3JlYXRlIHRoZSBsb2JieVxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBsb2JieVxuICAgKi9cbiAgY3JlYXRlTG9iYnk6IChvcHRpb25zOiBDcmVhdGVMb2JieSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTG9iYnk+PjtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBsb2JieSBvYmplY3QgZm9yIHRoZSBzcGVjaWZpZWQgbG9iYnkgaWQsIGlmIGl0IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIGdldFxuICAgKiBAcmV0dXJucyBUaGUgbG9iYnkgb2JqZWN0XG4gICAqL1xuICBnZXRMb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTG9iYnk+PjtcbiAgLyoqXG4gICAqIE1vZGlmaWVzIHRoZSBzcGVjaWZpZWQgbG9iYnkgd2l0aCBuZXcgdmFsdWVzLCBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIG1vZGlmeVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbG9iYnlcbiAgICogQHJldHVybnMgVGhlIG1vZGlmaWVkIGxvYmJ5XG4gICAqL1xuICBtb2RpZnlMb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5TG9iYnkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExvYmJ5Pj47XG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBzcGVjaWZpZWQgbG9iYnkgaWYgaXQgZXhpc3RzLlxuICAgKlxuICAgKiBJdCBpcyBzYWZlIHRvIGNhbGwgZXZlbiBpZiB0aGUgbG9iYnkgaXMgYWxyZWFkeSBkZWxldGVkIGFzIHdlbGwuXG4gICAqXG4gICAqIEBwYXJhbSBsb2JieUlkIC0gVGhlIElEIG9mIHRoZSBsb2JieSB0byBkZWxldGVcbiAgICogQHJldHVybnMgTm90aGluZ1xuICAgKi9cbiAgZGVsZXRlTG9iYnk6IChsb2JieUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBBZGRzIHRoZSBwcm92aWRlZCB1c2VyIHRvIHRoZSBzcGVjaWZpZWQgbG9iYnkuIElmIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGlzIGFscmVhZHkgYSBtZW1iZXIgb2YgdGhlIGxvYmJ5IHdpbGwgdXBkYXRlIGZpZWxkcyBzdWNoIGFzIG1ldGFkYXRhIG9uIHRoYXQgdXNlciBpbnN0ZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gbG9iYnlJZCAtIFRoZSBJRCBvZiB0aGUgbG9iYnkgdG8gYWRkIHRoZSB1c2VyIHRvXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gYWRkIHRvIHRoZSBsb2JieVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIGFkZCB0aGUgdXNlciB0byB0aGUgbG9iYnlcbiAgICogQHJldHVybnMgVGhlIGxvYmJ5IG1lbWJlciBvYmplY3RcbiAgICovXG4gIGFkZE1lbWJlclRvTG9iYnk6IChsb2JieUlkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBBZGRMb2JieU1lbWJlcikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTG9iYnlNZW1iZXI+PjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHByb3ZpZGVkIHVzZXIgZnJvbSB0aGUgc3BlY2lmaWVkIGxvYmJ5LiBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBldmVuIGlmIHRoZSB1c2VyIGlzIG5vIGxvbmdlciBhIG1lbWJlciBvZiB0aGUgbG9iYnksIGJ1dCB3aWxsIGZhaWwgaWYgdGhlIGxvYmJ5IGRvZXMgbm90IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gbG9iYnlJZCAtIFRoZSBJRCBvZiB0aGUgbG9iYnkgdG8gcmVtb3ZlIHRoZSB1c2VyIGZyb21cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byByZW1vdmUgZnJvbSB0aGUgbG9iYnlcbiAgICogQHJldHVybnMgTm90aGluZ1xuICAgKi9cbiAgcmVtb3ZlTWVtYmVyRnJvbUxvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGN1cnJlbnQgdXNlciBmcm9tIHRoZSBzcGVjaWZpZWQgbG9iYnkuIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgdGhlIHVzZXIgaXMgbm8gbG9uZ2VyIGEgbWVtYmVyIG9mIHRoZSBsb2JieSwgYnV0IHdpbGwgZmFpbCBpZiB0aGUgbG9iYnkgZG9lcyBub3QgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSBsb2JieUlkIC0gVGhlIElEIG9mIHRoZSBsb2JieSB0byByZW1vdmUgdGhlIHVzZXIgZnJvbVxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuIG9mIHRoZSB1c2VyXG4gICAqIEByZXR1cm5zIE5vdGhpbmdcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyByZXF1aXJlcyBhIGJlYXJlciB0b2tlbiBmb3IgYXV0aG9yaXphdGlvblxuICAgKi9cbiAgbGVhdmVMb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZywgYmVhcmVyVG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIExpbmtzIGFuIGV4aXN0aW5nIHRleHQgY2hhbm5lbCB0byBhIGxvYmJ5LlxuICAgKlxuICAgKiBAcGFyYW0gbG9iYnlJZCAtIFRoZSBJRCBvZiB0aGUgbG9iYnkgdG8gbGluayB0aGUgY2hhbm5lbCB0b1xuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuIG9mIHRoZSB1c2VyXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gbGluayB0aGUgY2hhbm5lbCB0byB0aGUgbG9iYnlcbiAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgbG9iYnkgb2JqZWN0XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVzZXMgYmVhcmVyIHRva2VuIGZvciBhdXRob3JpemF0aW9uIGFuZCB0aGUgdXNlciBtdXN0IGJlIGEgbG9iYnkgbWVtYmVyIHdpdGggdGhlIENhbkxpbmtMb2JieSBsb2JieSBtZW1iZXIgZmxhZy5cbiAgICovXG4gIGxpbmtDaGFubmVsVG9Mb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZywgYmVhcmVyVG9rZW46IHN0cmluZywgb3B0aW9uczogTGlua0NoYW5uZWxUb0xvYmJ5KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMb2JieT4+O1xuICAvKipcbiAgICogVW5saW5rcyBhbnkgY3VycmVudGx5IGxpbmtlZCBjaGFubmVscyBmcm9tIHRoZSBzcGVjaWZpZWQgbG9iYnkuXG4gICAqXG4gICAqIEBwYXJhbSBsb2JieUlkIC0gVGhlIElEIG9mIHRoZSBsb2JieSB0byB1bmxpbmsgdGhlIGNoYW5uZWwgZnJvbVxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuIG9mIHRoZSB1c2VyXG4gICAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIGxvYmJ5IG9iamVjdFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVc2VzIGJlYXJlciB0b2tlbiBmb3IgYXV0aG9yaXphdGlvbiBhbmQgdGhlIHVzZXIgbXVzdCBiZSBhIGxvYmJ5IG1lbWJlciB3aXRoIHRoZSBDYW5MaW5rTG9iYnkgbG9iYnkgbWVtYmVyIGZsYWcuXG4gICAqL1xuICB1bmxpbmtDaGFubmVsVG9Mb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZywgYmVhcmVyVG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTG9iYnk+Pjtcbn1cblxuZXhwb3J0IHR5cGUgUmVxdWVzdE1ldGhvZHMgPSAnR0VUJyB8ICdQT1NUJyB8ICdERUxFVEUnIHwgJ1BBVENIJyB8ICdQVVQnO1xuZXhwb3J0IHR5cGUgQXBpVmVyc2lvbnMgPSA5IHwgMTA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zIHtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJvZHk/OiBhbnk7XG4gIHVuYXV0aG9yaXplZD86IGJvb2xlYW47XG4gIHJlYXNvbj86IHN0cmluZztcbiAgZmlsZXM/OiBGaWxlQ29udGVudFtdO1xufVxuXG5leHBvcnQgdHlwZSBNYWtlUmVxdWVzdE9wdGlvbnMgPSBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ21ldGhvZCc+ICYgUGljazxTZW5kUmVxdWVzdE9wdGlvbnMsICdydW5UaHJvdWdoUXVldWUnPjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0Qm9keSB7XG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJvZHk/OiBzdHJpbmcgfCBGb3JtRGF0YTtcbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVxdWVzdE9wdGlvbnMge1xuICAvKiogVGhlIHJvdXRlIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8uICovXG4gIHJvdXRlOiBzdHJpbmc7XG4gIC8qKiBUaGUgbWV0aG9kIHRvIHVzZSBmb3Igc2VuZGluZyB0aGUgcmVxdWVzdC4gKi9cbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcztcbiAgLyoqIFRoZSBhbW91bnQgb2YgdGltZXMgdGhpcyByZXF1ZXN0IGhhcyBiZWVuIHJldHJpZWQuICovXG4gIHJldHJ5Q291bnQ6IG51bWJlcjtcbiAgLyoqIEhhbmRsZXIgdG8gcmV0cnkgYSByZXF1ZXN0IHNob3VsZCBpdCBiZSByYXRlIGxpbWl0ZWQuICovXG4gIHJldHJ5UmVxdWVzdD86IChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBSZXNvbHZlIGhhbmRsZXIgd2hlbiBhIHJlcXVlc3Qgc3VjY2VlZHMuICovXG4gIHJlc29sdmU6ICh2YWx1ZTogUmVzdFJlcXVlc3RSZXNwb25zZSkgPT4gdm9pZDtcbiAgLyoqIFJlamVjdCBoYW5kbGVyIHdoZW4gYSByZXF1ZXN0IGZhaWxzLiAqL1xuICByZWplY3Q6ICh2YWx1ZTogUmVzdFJlcXVlc3RSZWplY3Rpb24pID0+IHZvaWQ7XG4gIC8qKiBJZiB0aGlzIHJlcXVlc3QgaGFzIGEgYnVja2V0IGlkIHdoaWNoIGl0IGZhbGxzIHVuZGVyIGZvciByYXRlIGxpbWl0ICovXG4gIGJ1Y2tldElkPzogc3RyaW5nO1xuICAvKiogQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnMsIHVzZWQgZm9yIHRoaW5ncyBsaWtlIG92ZXJyaWRpbmcgYXV0aG9yaXphdGlvbiBoZWFkZXIuICovXG4gIHJlcXVlc3RCb2R5T3B0aW9ucz86IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIHJ1biB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICogVXNlZnVsIGZvciByb3V0ZXMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHJhdGUgbGltaXRzLlxuICAgKi9cbiAgcnVuVGhyb3VnaFF1ZXVlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0UmF0ZUxpbWl0ZWRQYXRoIHtcbiAgdXJsOiBzdHJpbmc7XG4gIHJlc2V0VGltZXN0YW1wOiBudW1iZXI7XG4gIGJ1Y2tldElkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RSZXF1ZXN0UmVzcG9uc2Uge1xuICBvazogYm9vbGVhbjtcbiAgc3RhdHVzOiBudW1iZXI7XG4gIC8qKiBUaGUgcmV0dXJuZWQgYm9keSBwYXJzZWQgaWYgaXQgd2FzIEpTT04sIG90aGVyd2lzZSBpdCB3aWxsIGJlIHRoZSByYXcgYm9keSBhcyBhIHN0cmluZyAqL1xuICBib2R5Pzogc3RyaW5nIHwgb2JqZWN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RSZXF1ZXN0UmVqZWN0aW9uIHtcbiAgb2s6IGJvb2xlYW47XG4gIHN0YXR1czogbnVtYmVyO1xuICAvKiogVGhlIEhUVFAgMS4xIHN0YXR1cyBjb2RlIHRleHQgKi9cbiAgc3RhdHVzVGV4dD86IHN0cmluZztcbiAgLyoqIFRoZSByZXR1cm5lZCBib2R5IHBhcnNlZCBpZiBpdCB3YXMgSlNPTiwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgdGhlIHJhdyBib2R5IGFzIGEgc3RyaW5nICovXG4gIGJvZHk/OiBzdHJpbmcgfCBvYmplY3Q7XG4gIGVycm9yPzogc3RyaW5nO1xuICBlcnJvck9iamVjdD86IEVycm9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RNYW5hZ2VyRXZlbnRzIHtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHJlcXVlc3QgaXMgbWFkZSB0byB0aGUgQVBJLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYm9keSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgQVBJIGlzIGF2YWlsYWJsZSBpbiB0aGUgYGV4dHJhYCBwYXJhbWV0ZXIuIERvIG5vdCBjb25zdW1lIHRoZSBib2R5IGluIHRoZSBgUmVxdWVzdGAgb2JqZWN0IGFuZCB1c2UgdGhlIG9uZSBpbiB0aGUgYGV4dHJhYCBwYXJhbWV0ZXIgaW5zdGVhZC5cbiAgICovXG4gIHJlcXVlc3Q6IChyZXF1ZXN0OiBSZXF1ZXN0LCBleHRyYTogeyBib2R5OiBhbnkgfSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHJlc3BvbnNlIGlzIHJlY2VpdmVkIGZyb20gdGhlIEFQSS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBpcyBmaXJlZCBmb3IgYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsZWQgcmVxdWVzdHMsIHlvdSBzaG91bGQgY2hlY2sgdGhlIFJlc3BvbnNlIG9iamVjdCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LlxuICAgKlxuICAgKiBCb3RoIHRoZSByZXF1ZXN0IGFuZCB0aGUgcmVzcG9uc2UgYm9keSBhcmUgYXZhaWxhYmxlIGluIHRoZSBgZXh0cmFgIHBhcmFtZXRlci4gRG8gbm90IGNvbnN1bWUgdGhlIGJvZHkgaW4gdGhlIGBSZXF1ZXN0YCBvciBgUmVzcG9uc2VgIG9iamVjdCBhbmQgdXNlIHRoZSBvbmUgaW4gdGhlIGBleHRyYWAgcGFyYW1ldGVyIGluc3RlYWQuXG4gICAqL1xuICByZXNwb25zZTogKHJlcXVlc3Q6IFJlcXVlc3QsIHJlc3BvbnNlOiBSZXNwb25zZSwgZXh0cmE6IHsgcmVxdWVzdEJvZHk6IGFueTsgcmVzcG9uc2VCb2R5OiBzdHJpbmcgfCBvYmplY3QgfSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHJlcXVlc3QgZXJyb3JzIGR1ZSB0byBmZXRjaCBlcnJvci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGJvZHkgdGhhdCB3YXMgc2VudCB0byB0aGUgQVBJIGlzIGF2YWlsYWJsZSBpbiB0aGUgYGV4dHJhYCBwYXJhbWV0ZXIuXG4gICAqL1xuICByZXF1ZXN0RXJyb3I6IChyZXF1ZXN0OiBSZXF1ZXN0LCBlcnJvcjogYW55LCBleHRyYTogeyBib2R5OiBhbnkgfSkgPT4gdm9pZDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtd0dBLFdBd0JDIn0=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEFkZERtUmVjaXBpZW50T3B0aW9ucyxcbiAgQWRkR3VpbGRNZW1iZXJPcHRpb25zLFxuICBBZGRMb2JieU1lbWJlcixcbiAgQXRMZWFzdE9uZSxcbiAgQmVnaW5HdWlsZFBydW5lLFxuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBDaGFubmVsVHlwZXMsXG4gIENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgQ3JlYXRlQXBwbGljYXRpb25FbW9qaSxcbiAgQ3JlYXRlQXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucyxcbiAgQ3JlYXRlQ2hhbm5lbEludml0ZSxcbiAgQ3JlYXRlRm9ydW1Qb3N0V2l0aE1lc3NhZ2UsXG4gIENyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gIENyZWF0ZUdyb3VwRG1PcHRpb25zLFxuICBDcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gIENyZWF0ZUd1aWxkQmFuLFxuICBDcmVhdGVHdWlsZEJ1bGtCYW4sXG4gIENyZWF0ZUd1aWxkQ2hhbm5lbCxcbiAgQ3JlYXRlR3VpbGRFbW9qaSxcbiAgQ3JlYXRlR3VpbGRSb2xlLFxuICBDcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZCxcbiAgQ3JlYXRlR3VpbGRTdGlja2VyT3B0aW9ucyxcbiAgQ3JlYXRlTG9iYnksXG4gIENyZWF0ZU1lc3NhZ2VPcHRpb25zLFxuICBDcmVhdGVTY2hlZHVsZWRFdmVudCxcbiAgQ3JlYXRlU3RhZ2VJbnN0YW5jZSxcbiAgQ3JlYXRlVGVtcGxhdGUsXG4gIENyZWF0ZVRlc3RFbnRpdGxlbWVudCxcbiAgQ3JlYXRlV2ViaG9vayxcbiAgRGVsZXRlV2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICBEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZSxcbiAgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkQXBwbGljYXRpb25JbnRlZ3JhdGlvblR5cGUsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0Q2hhbm5lbFBpbnMsXG4gIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICBEaXNjb3JkR3VpbGQsXG4gIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW5jaWRlbnRzRGF0YSxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW50ZXJhY3Rpb24sXG4gIERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2UsXG4gIERpc2NvcmRJbnZpdGUsXG4gIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzLFxuICBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgRGlzY29yZExvYmJ5LFxuICBEaXNjb3JkTG9iYnlNZW1iZXIsXG4gIERpc2NvcmRNZW1iZXIsXG4gIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgRGlzY29yZE1lc3NhZ2UsXG4gIERpc2NvcmRQcnVuZWRDb3VudCxcbiAgRGlzY29yZFJvbGUsXG4gIERpc2NvcmRTY2hlZHVsZWRFdmVudCxcbiAgRGlzY29yZFNrdSxcbiAgRGlzY29yZFNvdW5kYm9hcmRTb3VuZCxcbiAgRGlzY29yZFN0YWdlSW5zdGFuY2UsXG4gIERpc2NvcmRTdGlja2VyLFxuICBEaXNjb3JkU3RpY2tlclBhY2ssXG4gIERpc2NvcmRTdWJzY3JpcHRpb24sXG4gIERpc2NvcmRUYXJnZXRVc2Vyc0pvYlN0YXR1cyxcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVG9rZW5FeGNoYW5nZSxcbiAgRGlzY29yZFRva2VuUmV2b2NhdGlvbixcbiAgRGlzY29yZFVzZXIsXG4gIERpc2NvcmRWYW5pdHlVcmwsXG4gIERpc2NvcmRWb2ljZVJlZ2lvbixcbiAgRGlzY29yZFZvaWNlU3RhdGUsXG4gIERpc2NvcmRXZWJob29rLFxuICBEaXNjb3JkV2VsY29tZVNjcmVlbixcbiAgRWRpdEFwcGxpY2F0aW9uLFxuICBFZGl0QXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucyxcbiAgRWRpdEJvdE1lbWJlck9wdGlvbnMsXG4gIEVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlc09wdGlvbnMsXG4gIEVkaXRHdWlsZE9uYm9hcmRpbmcsXG4gIEVkaXRHdWlsZFJvbGUsXG4gIEVkaXRHdWlsZFN0aWNrZXJPcHRpb25zLFxuICBFZGl0TWVzc2FnZSxcbiAgRWRpdE93blZvaWNlU3RhdGUsXG4gIEVkaXRTY2hlZHVsZWRFdmVudCxcbiAgRWRpdFVzZXJWb2ljZVN0YXRlLFxuICBFZGl0V2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICBFeGVjdXRlV2ViaG9vayxcbiAgRmlsZUNvbnRlbnQsXG4gIEdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25PcHRpb25zLFxuICBHZXRCYW5zLFxuICBHZXRDaGFubmVsUGluc09wdGlvbnMsXG4gIEdldEVudGl0bGVtZW50cyxcbiAgR2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kc09wdGlvbnMsXG4gIEdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kc09wdGlvbnMsXG4gIEdldEd1aWxkQXVkaXRMb2csXG4gIEdldEd1aWxkUHJ1bmVDb3VudFF1ZXJ5LFxuICBHZXRJbnZpdGUsXG4gIEdldE1lc3NhZ2VzT3B0aW9ucyxcbiAgR2V0UG9sbEFuc3dlclZvdGVzLFxuICBHZXRSZWFjdGlvbnMsXG4gIEdldFNjaGVkdWxlZEV2ZW50cyxcbiAgR2V0U2NoZWR1bGVkRXZlbnRVc2VycyxcbiAgR2V0VGhyZWFkTWVtYmVyLFxuICBHZXRVc2VyR3VpbGRzLFxuICBHZXRXZWJob29rTWVzc2FnZU9wdGlvbnMsXG4gIEd1aWxkRmVhdHVyZXMsXG4gIEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhLFxuICBJbnRlcmFjdGlvbkNhbGxiYWNrT3B0aW9ucyxcbiAgSW50ZXJhY3Rpb25SZXNwb25zZSxcbiAgTGlua0NoYW5uZWxUb0xvYmJ5LFxuICBMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICBMaXN0R3VpbGRNZW1iZXJzLFxuICBMaXN0U2t1U3Vic2NyaXB0aW9uc09wdGlvbnMsXG4gIExpc3RUaHJlYWRNZW1iZXJzLFxuICBNb2RpZnlBcHBsaWNhdGlvbkVtb2ppLFxuICBNb2RpZnlDaGFubmVsLFxuICBNb2RpZnlHdWlsZCxcbiAgTW9kaWZ5R3VpbGRDaGFubmVsUG9zaXRpb25zLFxuICBNb2RpZnlHdWlsZEVtb2ppLFxuICBNb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyxcbiAgTW9kaWZ5R3VpbGRNZW1iZXIsXG4gIE1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxuICBNb2RpZnlHdWlsZFdlbGNvbWVTY3JlZW4sXG4gIE1vZGlmeUxvYmJ5LFxuICBNb2RpZnlSb2xlUG9zaXRpb25zLFxuICBNb2RpZnlXZWJob29rLFxuICBTY2hlZHVsZWRFdmVudEVudGl0eVR5cGUsXG4gIFNjaGVkdWxlZEV2ZW50U3RhdHVzLFxuICBTZWFyY2hNZW1iZXJzLFxuICBTZW5kU291bmRib2FyZFNvdW5kLFxuICBTdGFydFRocmVhZFdpdGhNZXNzYWdlLFxuICBTdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlLFxuICBVcHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRPcHRpb25zLFxuICBVcHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBJbnZhbGlkUmVxdWVzdEJ1Y2tldCB9IGZyb20gJy4vaW52YWxpZEJ1Y2tldC5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlc3RSb3V0ZXMgfSBmcm9tICcuL3R5cGluZ3Mvcm91dGVzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMge1xuICAvKiogVGhlIGJvdCB0b2tlbiB3aGljaCB3aWxsIGJlIHVzZWQgdG8gbWFrZSByZXF1ZXN0cy4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqXG4gICAqIEZvciBvbGQgYm90cyB0aGF0IGhhdmUgYSBkaWZmZXJlbnQgYm90IGlkIGFuZCBhcHBsaWNhdGlvbiBpZC5cbiAgICogQGRlZmF1bHQgYm90IGlkIGZyb20gdG9rZW5cbiAgICovXG4gIGFwcGxpY2F0aW9uSWQ/OiBCaWdTdHJpbmc7XG4gIC8qKiBDb25maWd1cmF0aW9uIHdoZW4gdXNpbmcgYSBwcm94eS4gKi9cbiAgcHJveHk/OiB7XG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIHRvIGNvbm5lY3QgdG8uIElmIHlvdSBjcmVhdGUgYSBwcm94eSByZXN0LCB0aGF0IHVybCB3b3VsZCBnbyBoZXJlLlxuICAgICAqIElUIFNIT1VMRCBOT1QgRU5EIFdJVEggQSAvXG4gICAgICogQGRlZmF1bHQgaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGlcbiAgICAgKi9cbiAgICBiYXNlVXJsOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBhdXRob3JpemF0aW9uIGhlYWRlciB2YWx1ZSB0byBhdHRhY2ggd2hlbiBzZW5kaW5nIHJlcXVlc3RzIHRvIHRoZSBwcm94eS4gKi9cbiAgICBhdXRob3JpemF0aW9uPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBhdXRob3JpemF0aW9uIGhlYWRlciBuYW1lIHRvIHVzZSB3aGVuIHNlbmRpbmcgcmVxdWVzdHMgdG8gdGhlIHByb3h5XG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIHRoZSBoZWFkZXIgbmFtZSBpcyBzZXQgdG8gYGF1dGhvcml6YXRpb25gLCBpdCB3aWxsIG92ZXJyaWRlIGFueSBhdXRob3JpemF0aW9uIHRoYXQgaXMgZ2l2ZW4gZXZlbiBpZlxuICAgICAqIHRoZSByZXF1ZXN0cyB1c2VzIE9BdXRoMiBCZWFyZXIgdG9rZW5zIC8gQmFzaWMgdG9rZW5zXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImF1dGhvcml6YXRpb25cIiAvLyBGb3IgY29tcGF0aWJpbGl0eSBwdXJwb3Nlc1xuICAgICAqL1xuICAgIGF1dGhvcml6YXRpb25IZWFkZXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIGVuZHBvaW50IHRvIHVzZSBpbiB0aGUgcmVzdCBwcm94eSB0byB1cGRhdGUgdGhlIGJlYXJlciB0b2tlbnNcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogU2hvdWxkIG5vdCBpbmNsdWRlIGEgYC9gIGluIHRoZSBzdGFydFxuICAgICAqXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhY3R1YWxseSByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UgYHVwZGF0ZVRva2VuUXVldWVzYFxuICAgICAqL1xuICAgIHVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIH07XG4gIC8qKlxuICAgKiBUaGUgYXBpIHZlcnNpb25zIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG1ha2UgcmVxdWVzdHMuXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICB2ZXJzaW9uPzogQXBpVmVyc2lvbnM7XG4gIC8qKlxuICAgKiBUaGUgbG9nZ2VyIHRoYXQgdGhlIHJlc3QgbWFuYWdlciB3aWxsIHVzZVxuICAgKiBAZGVmYXVsdCBsb2dnZXIgLy8gVGhlIGxvZ2dlciBleHBvcnRlZCBieSBgQGRpc2NvcmRlbm8vdXRpbHNgXG4gICAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz47XG4gIC8qKiBFdmVudHMgZm9yIHRoZSByZXN0IG1hbmFnZXIgKi9cbiAgZXZlbnRzPzogUGFydGlhbDxSZXN0TWFuYWdlckV2ZW50cz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdE1hbmFnZXIge1xuICAvKiogVGhlIGJvdCB0b2tlbiB3aGljaCB3aWxsIGJlIHVzZWQgdG8gbWFrZSByZXF1ZXN0cy4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIFRoZSBhcHBsaWNhdGlvbiBpZC4gTm9ybWFsbHkgdGhpcyBpcyBub3QgcmVxdWlyZWQgZm9yIHJlY2VudCBib3RzIGJ1dCBvbGQgYm90J3MgYXBwbGljYXRpb24gaWQgaXMgc29tZXRpbWVzIGRpZmZlcmVudCBmcm9tIHRoZSBib3QgaWQgc28gaXQgaXMgcmVxdWlyZWQgZm9yIHRob3NlIGJvdHMuICovXG4gIGFwcGxpY2F0aW9uSWQ6IGJpZ2ludDtcbiAgLyoqIFRoZSBhcGkgdmVyc2lvbiB0byB1c2Ugd2hlbiBtYWtpbmcgcmVxdWVzdHMuIE9ubHkgdGhlIGxhdGVzdCBzdXBwb3J0ZWQgdmVyc2lvbiB3aWxsIGJlIHRlc3RlZC4gKi9cbiAgdmVyc2lvbjogQXBpVmVyc2lvbnM7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSB1cmwgdG8gY29ubmVjdCB0by4gSWYgeW91IGNyZWF0ZSBhIHByb3h5IHJlc3QsIHRoYXQgdXJsIHdvdWxkIGdvIGhlcmUuXG4gICAqIElUIFNIT1VMRCBOT1QgRU5EIFdJVEggQSAvXG4gICAqIEBkZWZhdWx0IGh0dHBzOi8vZGlzY29yZC5jb20vYXBpXG4gICAqL1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgdHJ1ZWAgaWYgdGhlIGBiYXNlVXJsYCBkb2VzIG5vdCBzdGFydCB3aXRoIGBodHRwczovL2Rpc2NvcmQuY29tL2FwaWAuXG4gICAqXG4gICAqIE1vc3RseSB1c2VkIG9ubHkgZm9yIGludGVybiBmdW5jdGlvbnMuXG4gICAqL1xuICBpc1Byb3hpZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWUgdG8gYXR0YWNoIHdoZW4gc2VuZGluZyByZXF1ZXN0cyB0byB0aGUgcHJveHkuICovXG4gIGF1dGhvcml6YXRpb24/OiBzdHJpbmc7XG4gIC8qKiBUaGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgbmFtZSB0byBhdHRhY2ggd2hlbiBzZW5kaW5nIHJlcXVlc3RzIHRvIHRoZSBwcm94eSAqL1xuICBhdXRob3JpemF0aW9uSGVhZGVyOiBzdHJpbmc7XG4gIC8qKiBUaGUgZW5kcG9pbnQgdG8gdXNlIGZvciBgdXBkYXRlVG9rZW5RdWV1ZXNgIHdoZW4gd29ya2luZyB3aXRoIGEgcmVzdCBwcm94eSAqL1xuICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50Pzogc3RyaW5nO1xuICAvKiogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWVzIGEgcmVxdWVzdCBzaG91bGQgYmUgcmV0cmllZC4gRGVmYXVsdHMgdG8gSW5maW5pdHkgKi9cbiAgbWF4UmV0cnlDb3VudDogbnVtYmVyO1xuICAvKiogV2hldGhlciBvciBub3QgdGhlIG1hbmFnZXIgaXMgcmF0ZSBsaW1pdGVkIGdsb2JhbGx5IGFjcm9zcyBhbGwgcmVxdWVzdHMuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICBnbG9iYWxseVJhdGVMaW1pdGVkOiBib29sZWFuO1xuICAvKiogV2hldGhlciBvciBub3QgdGhlIHJhdGUgbGltaXRlZCBwYXRocyBhcmUgYmVpbmcgcHJvY2Vzc2VkIHRvIGFsbG93IHJlcXVlc3RzIHRvIGJlIG1hZGUgb25jZSB0aW1lIGlzIHVwLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGJvb2xlYW47XG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZGVsZXRpbmcgdGhpcyBxdWV1ZSBpZiBpdCBpcyBlbXB0eS4gRGVmYXVsdHMgdG8gNjAwMDAob25lIG1pbnV0ZSkuICovXG4gIGRlbGV0ZVF1ZXVlRGVsYXk6IG51bWJlcjtcbiAgLyoqIFRoZSBxdWV1ZXMgdGhhdCBob2xkIGFsbCB0aGUgcmVxdWVzdHMgdG8gYmUgcHJvY2Vzc2VkLiAqL1xuICBxdWV1ZXM6IE1hcDxzdHJpbmcsIFF1ZXVlPjtcbiAgLyoqIFRoZSBwYXRocyB0aGF0IGFyZSBjdXJyZW50bHkgcmF0ZSBsaW1pdGVkLiAqL1xuICByYXRlTGltaXRlZFBhdGhzOiBNYXA8c3RyaW5nLCBSZXN0UmF0ZUxpbWl0ZWRQYXRoPjtcbiAgLyoqIFRoZSBidWNrZXQgZm9yIGhhbmRsaW5nIGFueSBpbnZhbGlkIHJlcXVlc3RzLiAgKi9cbiAgaW52YWxpZEJ1Y2tldDogSW52YWxpZFJlcXVlc3RCdWNrZXQ7XG4gIC8qKiBUaGUgcm91dGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBtYW5hZ2VyLiAqL1xuICByb3V0ZXM6IFJlc3RSb3V0ZXM7XG4gIC8qKiBUaGUgbG9nZ2VyIHRvIHVzZSBmb3IgdGhlIHJlc3QgbWFuYWdlciAqL1xuICBsb2dnZXI6IFBpY2s8dHlwZW9mIGxvZ2dlciwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicgfCAnZmF0YWwnPjtcbiAgLyoqIEV2ZW50cyBmb3IgdGhlIHJlc3QgbWFuYWdlciAqL1xuICBldmVudHM6IFJlc3RNYW5hZ2VyRXZlbnRzO1xuICAvKiogQWxsb3dzIHRoZSB1c2VyIHRvIGluamVjdCBjdXN0b20gaGVhZGVycyB0aGF0IHdpbGwgYmUgc2VudCB3aXRoIGV2ZXJ5IHJlcXVlc3QuICovXG4gIGNyZWF0ZUJhc2VIZWFkZXJzOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogV2hldGhlciBvciBub3QgdGhlIHJlc3QgbWFuYWdlciBzaG91bGQga2VlcCBvYmplY3RzIGluIHJhdyBzbmFrZSBjYXNlIGZyb20gZGlzY29yZC4gKi9cbiAgcHJlZmVyU25ha2VDYXNlOiAoZW5hYmxlZDogYm9vbGVhbikgPT4gUmVzdE1hbmFnZXI7XG4gIC8qKiBDaGVjayB0aGUgcmF0ZSBsaW1pdHMgZm9yIGEgdXJsIG9yIGEgYnVja2V0LiAqL1xuICBjaGVja1JhdGVMaW1pdHM6ICh1cmw6IHN0cmluZywgaWRlbnRpZmllcjogc3RyaW5nKSA9PiBudW1iZXIgfCBmYWxzZTtcbiAgLyogVXBkYXRlIHRoZSBxdWV1ZXMgYW5kIHJhdGVsaW1pdCBpbmZvcm1hdGlvbiB0byBhZGFwdCB0byB0aGUgbmV3IHRva2VuICovXG4gIHVwZGF0ZVRva2VuUXVldWVzOiAob2xkVG9rZW46IHN0cmluZywgbmV3VG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJlc2hhcGVzIGFuZCBtb2RpZmllcyB0aGUgb2JqIGFzIG5lZWRlZCB0byBtYWtlIGl0IHJlYWR5IGZvciBkaXNjb3JkcyBhcGkuICovXG4gIGNoYW5nZVRvRGlzY29yZEZvcm1hdDogKG9iajogYW55KSA9PiBhbnk7XG4gIC8qKiBDcmVhdGVzIHRoZSByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMgdGhhdCBhcmUgbmVjZXNzYXJ5IHRvIHNlbmQgYSByZXF1ZXN0LiBXaWxsIGhhbmRsZSBkaWZmZXJlbnQgdHlwZXMgb2YgbWV0aG9kcyBhbmQgZXZlcnl0aGluZyBuZWNlc3NhcnkgZm9yIGRpc2NvcmQuICovXG4gIGNyZWF0ZVJlcXVlc3RCb2R5OiAobWV0aG9kOiBSZXF1ZXN0TWV0aG9kcywgb3B0aW9ucz86IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucykgPT4gUmVxdWVzdEJvZHk7XG4gIC8qKiBUaGlzIHdpbGwgY3JlYXRlIGEgaW5maW5pdGUgbG9vcCBydW5uaW5nIGluIDEgc2Vjb25kcyB1c2luZyB0YWlsIHJlY3Vyc2lvbiB0byBrZWVwIHJhdGUgbGltaXRzIGNsZWFuLiBXaGVuIGEgcmF0ZSBsaW1pdCByZXNldHMsIHRoaXMgd2lsbCByZW1vdmUgaXQgc28gdGhlIHF1ZXVlIGNhbiBwcm9jZWVkLiAqL1xuICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoczogKCkgPT4gdm9pZDtcbiAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICBwcm9jZXNzSGVhZGVyczogKHVybDogc3RyaW5nLCBoZWFkZXJzOiBIZWFkZXJzLCBpZGVudGlmaWVyOiBzdHJpbmcpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIFNlbmRzIGEgcmVxdWVzdCB0byB0aGUgYXBpLiAqL1xuICBzZW5kUmVxdWVzdDogKG9wdGlvbnM6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFNwbGl0IGEgdXJsIHRvIHNlcGFyYXRlIHJhdGUgbGltaXQgYnVja2V0cyBiYXNlZCBvbiBtYWpvci9taW5vciBwYXJhbWV0ZXJzLiAqL1xuICBzaW1wbGlmeVVybDogKHVybDogc3RyaW5nLCBtZXRob2Q6IFJlcXVlc3RNZXRob2RzKSA9PiBzdHJpbmc7XG4gIC8qKiBNYWtlIGEgcmVxdWVzdCB0byBiZSBzZW50IHRvIHRoZSBhcGkuICovXG4gIG1ha2VSZXF1ZXN0OiA8VCA9IHVua25vd24+KG1ldGhvZDogUmVxdWVzdE1ldGhvZHMsIHVybDogc3RyaW5nLCBvcHRpb25zPzogTWFrZVJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFQ+O1xuICAvKiogVGFrZXMgYSByZXF1ZXN0IGFuZCBwcm9jZXNzZXMgaXQgaW50byBhIHF1ZXVlLiAqL1xuICBwcm9jZXNzUmVxdWVzdDogKHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIE1ha2UgYSBnZXQgcmVxdWVzdCB0byB0aGUgYXBpICovXG4gIGdldDogPFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+KSA9PiBQcm9taXNlPENhbWVsaXplPFQ+PjtcbiAgLyoqIE1ha2UgYSBwb3N0IHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcG9zdDogPFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE1ha2VSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxUPj47XG4gIC8qKiBNYWtlIGEgcHV0IHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcHV0OiA8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogTWFrZVJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPFQ+PjtcbiAgLyoqIE1ha2UgYSBkZWxldGUgcmVxdWVzdCB0byB0aGUgYXBpLiAqL1xuICBkZWxldGU6ICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+KSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKiogTWFrZSBhIHBhdGNoIHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcGF0Y2g6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBNYWtlUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8VD4+O1xuICAvKipcbiAgICogQWRkcyBhIHJlYWN0aW9uIHRvIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBhZGQgYSByZWFjdGlvbiB0byBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBhZGQgYSByZWFjdGlvbiB0by5cbiAgICogQHBhcmFtIHJlYWN0aW9uIC0gVGhlIHJlYWN0aW9uIHRvIGFkZCB0byB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnNcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgbm9ib2R5IGVsc2UgaGFzIHJlYWN0ZWQgdG8gdGhlIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBBRERfUkVBQ1RJT05TYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFJlYWN0aW9uIEFkZF8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjY3JlYXRlLXJlYWN0aW9ufVxuICAgKi9cbiAgYWRkUmVhY3Rpb246IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYWN0aW9uOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBBZGRzIG11bHRpcGxlIGEgcmVhY3Rpb24gdG8gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGBhZGRSZWFjdGlvbigpYCBoZWxwZXIgYmVoaW5kIHRoZSBzY2VuZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgdG8gYWRkIHJlYWN0aW9ucyB0byBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBhZGQgdGhlIHJlYWN0aW9ucyB0by5cbiAgICogQHBhcmFtIHJlYWN0aW9ucyAtIFRoZSByZWFjdGlvbnMgdG8gYWRkIHRvIHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gb3JkZXJlZCAtIFdoZXRoZXIgdGhlIHJlYWN0aW9ucyBtdXN0IGJlIGFkZGVkIGluIG9yZGVyIG9yIG5vdC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgbm9ib2R5IGVsc2UgaGFzIHJlYWN0ZWQgdG8gdGhlIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBBRERfUkVBQ1RJT05TYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFJlYWN0aW9uIEFkZF8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgcmVhY3Rpb24gYWRkZWQuXG4gICAqL1xuICBhZGRSZWFjdGlvbnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYWN0aW9uczogc3RyaW5nW10sIG9yZGVyZWQ/OiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQWRkcyBhIHJvbGUgdG8gYSBtZW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgbWVtYmVyIHRvIGFkZCB0aGUgcm9sZSB0byBpcyBpbi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gYWRkIHRoZSByb2xlIHRvLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGFkZCB0byB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjYWRkLWd1aWxkLW1lbWJlci1yb2xlfVxuICAgKi9cbiAgYWRkUm9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBBZGRzIGEgbWVtYmVyIHRvIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gYWRkIHRoZSBtZW1iZXIgdG8uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGFkZCB0byB0aGUgdGhyZWFkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYWJpbGl0eSB0byBzZW5kIG1lc3NhZ2VzIGluIHRoZSB0aHJlYWQuXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2FkZC10aHJlYWQtbWVtYmVyfVxuICAgKi9cbiAgYWRkVGhyZWFkTWVtYmVyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQWRkcyBhIHJlY2lwaWVudCB0byBhIGdyb3VwIERNLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBncm91cCBkbSB0byBhZGQgdGhlIHVzZXIgdG8uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgdXNlciB0byBhZGQgdG8gdGhlIGdyb3VwIGRtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBhZGRpbmcgdGhlIHVzZXJcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgYW4gT0F1dGgyIGFjY2VzcyB0b2tlbiB3aXRoIHRoZSBgZ2RtLmpvaW5gIHNjb3BlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2dyb3VwLWRtLWFkZC1yZWNpcGllbnR9XG4gICAqL1xuICBhZGREbVJlY2lwaWVudDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQWRkRG1SZWNpcGllbnRPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQWRkcyBhIG1lbWJlciB0byBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGFkZCB0aGUgbWVtYmVyIHRvLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBhZGQgdG8gdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGFkZCBvZiBhIGd1aWxkIG1lbWJlclxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYm90IHRvIGJlIGluIHRoZSBzcGVjaWZpZWQgc2VydmVyXG4gICAqIFJlcXVpcmVzIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4gd2l0aCB0aGUgYGd1aWxkcy5qb2luYCBzY29wZVxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgQWRkXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjYWRkLWd1aWxkLW1lbWJlcn1cbiAgICovXG4gIGFkZEd1aWxkTWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQWRkR3VpbGRNZW1iZXJPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhdXRvbW9kIHJ1bGUgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgcnVsZSBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBydWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGFuIF9BdXRvIE1vZGVyYXRpb24gUnVsZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jY3JlYXRlLWF1dG8tbW9kZXJhdGlvbi1ydWxlfVxuICAgKi9cbiAgY3JlYXRlQXV0b21vZFJ1bGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUF1dG9Nb2RlcmF0aW9uUnVsZU9wdGlvbnMsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPj47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2hhbm5lbCB3aXRoaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgY2hhbm5lbCB3aXRoaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgY2hhbm5lbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgc2V0dGluZyBwZXJtaXNzaW9uIG92ZXJ3cml0ZXMsIG9ubHkgdGhlIHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIGNhbiBiZSBhbGxvd2VkIG9yIGRlbmllZC5cbiAgICpcbiAgICogU2V0dGluZyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbiBpcyBvbmx5IHBvc3NpYmxlIGZvciBndWlsZCBhZG1pbmlzdHJhdG9ycy5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGQtY2hhbm5lbH1cbiAgICovXG4gIGNyZWF0ZUNoYW5uZWw6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkQ2hhbm5lbCwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtb2ppIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBjcmVhdGUgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRW1vamlzIGhhdmUgYSBtYXhpbXVtIGZpbGUgc2l6ZSBvZiAyNTYga2lsb2JpdHMuIEF0dGVtcHRpbmcgdG8gdXBsb2FkIGEgbGFyZ2VyIGVtb2ppIHdpbGwgY2F1c2UgdGhlIHJvdXRlIHRvIHJldHVybiA0MDAgQmFkIFJlcXVlc3QuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEVtb2ppcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNjcmVhdGUtZ3VpbGQtZW1vaml9XG4gICAqL1xuICBjcmVhdGVFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRFbW9qaSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlbW9qaSBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGVtb2ppLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2Vtb2ppI2NyZWF0ZS1hcHBsaWNhdGlvbi1lbW9qaX1cbiAgICovXG4gIGNyZWF0ZUFwcGxpY2F0aW9uRW1vamk6IChvcHRpb25zOiBDcmVhdGVBcHBsaWNhdGlvbkVtb2ppKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB0aHJlYWQgaW4gYSBmb3J1bSBjaGFubmVsIG9yIG1lZGlhIGNoYW5uZWwsIGFuZCBzZW5kcyBhIG1lc3NhZ2Ugd2l0aGluIHRoZSBjcmVhdGVkIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgZm9ydW0gY2hhbm5lbCB0byBjcmVhdGUgdGhlIHRocmVhZCB3aXRoaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGhyZWFkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0gd2l0aCBhIG5lc3RlZCB7QGxpbmsgRGlzY29yZENoYW5uZWx9IG9iamVjdC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBDUkVBVEVfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNzdGFydC10aHJlYWQtaW4tZm9ydW0tb3ItbWVkaWEtY2hhbm5lbH1cbiAgICovXG4gIGNyZWF0ZUZvcnVtVGhyZWFkOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUZvcnVtUG9zdFdpdGhNZXNzYWdlLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCBhY2Nlc3NpYmxlIGdsb2JhbGx5OyBhY3Jvc3MgZGlmZmVyZW50IGd1aWxkcyBhbmQgY2hhbm5lbHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gY3JlYXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIENyZWF0aW5nIGEgY29tbWFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY29tbWFuZCBmb3IgeW91ciBhcHBsaWNhdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgb2xkIGNvbW1hbmQuXG4gICAqIOKaoO+4jyBHbG9iYWwgY29tbWFuZHMgb25jZSBjcmVhdGVkIGFyZSBjYWNoZWQgZm9yIHBlcmlvZHMgb2YgX19hbiBob3VyX18sIHNvIGNoYW5nZXMgbWFkZSB0byBleGlzdGluZyBjb21tYW5kcyB3aWxsIHRha2UgYW4gaG91ciB0byBzdXJmYWNlLlxuICAgKiDimqDvuI8gWW91IGNhbiBvbmx5IGNyZWF0ZSB1cCB0byAyMDAgX25ld18gY29tbWFuZHMgZGFpbHkuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgdGhlIGJlYXJlciB0b2tlbiB0aGUgdG9rZW4gbmVlZHMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMudXBkYXRlYCBzY29wZSBhbmQgbXVzdCBiZSBhIGBDbGllbnQgZ3JhbnRgIHRva2VuLlxuICAgKiAgWW91IHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgb25seSB5b3VyIG93biBhcHBsaWNhdGlvbiBjb21tYW5kc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjY3JlYXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoXG4gICAgY29tbWFuZDogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kLFxuICAgIG9wdGlvbnM/OiBDcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRPcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIG9ubHkgYWNjZXNzaWJsZSBpbiBhIHNwZWNpZmljIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgY29tbWFuZCBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgZW5kcG9pbnRcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDimqDvuI8gQ3JlYXRpbmcgYSBjb21tYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBjb21tYW5kIGZvciB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgb3ZlcndyaXRlIHRoZSBvbGQgY29tbWFuZC5cbiAgICog4pqg77iPIFlvdSBjYW4gb25seSBjcmVhdGUgdXAgdG8gMjAwIF9uZXdfIGNvbW1hbmRzIGRhaWx5LlxuICAgKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBiZWFyZXIgdG9rZW4gdGhlIHRva2VuIG5lZWRzIHRoZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnVwZGF0ZWAgc2NvcGUgYW5kIG11c3QgYmUgYSBgQ2xpZW50IGdyYW50YCB0b2tlbi5cbiAgICogIFlvdSB3aWxsIGJlIGFibGUgdG8gdXBkYXRlIG9ubHkgeW91ciBvd24gYXBwbGljYXRpb24gY29tbWFuZHNcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2NyZWF0ZS1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQ6IChcbiAgICBjb21tYW5kOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQsXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj47XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgc3RpY2tlciBmb3IgdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm4gQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGaXJlcyBhIEd1aWxkIFN0aWNrZXJzIFVwZGF0ZSBHYXRld2F5IGV2ZW50LlxuICAgKiBFdmVyeSBndWlsZHMgaGFzIGZpdmUgZnJlZSBzdGlja2VyIHNsb3RzIGJ5IGRlZmF1bHQsIGFuZCBlYWNoIEJvb3N0IGxldmVsIHdpbGwgZ3JhbnQgYWNjZXNzIHRvIG1vcmUgc2xvdHMuXG4gICAqIExvdHRpZSBzdGlja2VycyBjYW4gb25seSBiZSB1cGxvYWRlZCBvbiBndWlsZHMgdGhhdCBoYXZlIGVpdGhlciB0aGUgYFZFUklGSUVEYCBhbmQvb3IgdGhlIGBQQVJUTkVSRURgIGd1aWxkIGZlYXR1cmUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9zdGlja2VyI2NyZWF0ZS1ndWlsZC1zdGlja2VyfVxuICAgKi9cbiAgY3JlYXRlR3VpbGRTdGlja2VyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZFN0aWNrZXJPcHRpb25zLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXI+PjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHRlbXBsYXRlIGZyb20uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkVGVtcGxhdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjY3JlYXRlLWd1aWxkLXRlbXBsYXRlfVxuICAgKi9cbiAgY3JlYXRlR3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlVGVtcGxhdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGludml0ZSB0byBhIGNoYW5uZWwgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBjcmVhdGUgdGhlIGludml0ZSB0by5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBpbnZpdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRJbnZpdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYENSRUFURV9JTlNUQU5UX0lOVklURWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYW4gX0ludml0ZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBwcml2YXRlUmVtYXJrc1xuICAgKiBUaGUgcmVxdWVzdCBib2R5IGlzIG5vdCBvcHRpb25hbCwgYW5kIGFuIGVtcHR5IEpTT04gb2JqZWN0IG11c3QgYmUgc2VudCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYW55IGZpZWxkcyBhcmUgYmVpbmcgdHJhbnNtaXR0ZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2NyZWF0ZS1jaGFubmVsLWludml0ZX1cbiAgICovXG4gIGNyZWF0ZUludml0ZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogQ3JlYXRlQ2hhbm5lbEludml0ZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGU+PjtcbiAgLyoqXG4gICAqIEdldCBndWlsZCByb2xlIG1lbWJlciBjb3VudHNcbiAgICpcbiAgICogUmV0dXJucyBhIG1hcCBvZiByb2xlIElEcyB0byB0aGUgbnVtYmVyIG9mIG1lbWJlcnMgd2l0aCB0aGUgcm9sZS4gRG9lcyBub3QgaW5jbHVkZSB0aGUgXFxAZXZlcnlvbmUgcm9sZS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCByb2xlIG1lbWJlciBjb3VudHMgZm9yLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXJvbGUtbWVtYmVyLWNvdW50c31cbiAgICovXG4gIGdldEd1aWxkUm9sZU1lbWJlckNvdW50czogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByb2xlIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHJvbGUgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgcm9sZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFJvbGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGQtcm9sZX1cbiAgICovXG4gIGNyZWF0ZVJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkUm9sZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlPj47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2NoZWR1bGVkIGV2ZW50IGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHNjaGVkdWxlZCBldmVudCBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRTY2hlZHVsZWRFdmVudH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQSBndWlsZCBjYW4gb25seSBoYXZlIGEgbWF4aW11bSBvZiAxMDAgZXZlbnRzIHdpdGggYSBzdGF0dXMgb2Yge0BsaW5rIFNjaGVkdWxlZEV2ZW50U3RhdHVzfS5BY3RpdmUgb3Ige0BsaW5rIFNjaGVkdWxlZEV2ZW50U3RhdHVzfS5TY2hlZHVsZWQgKGluY2x1c2l2ZSkuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFNjaGVkdWxlZCBFdmVudCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjY3JlYXRlLWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICovXG4gIGNyZWF0ZVNjaGVkdWxlZEV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVTY2hlZHVsZWRFdmVudCwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudD4+O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHN0YWdlIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBhIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgc3RhZ2UgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRTdGFnZUluc3RhbmNlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHVzZXIgdG8gYmUgYSBtb2RlcmF0b3Igb2YgdGhlIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2NyZWF0ZS1zdGFnZS1pbnN0YW5jZX1cbiAgICovXG4gIGNyZWF0ZVN0YWdlSW5zdGFuY2U6IChvcHRpb25zOiBDcmVhdGVTdGFnZUluc3RhbmNlLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0YWdlSW5zdGFuY2U+PjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB3ZWJob29rLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGNyZWF0ZSB0aGUgd2ViaG9vayBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB3ZWJob29rLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiDimqDvuI8gVGhlIHdlYmhvb2sgbmFtZSBtdXN0IG5vdCBjb250YWluIHRoZSBzdWJzdHJpbmdzICdjbHlkZScsIG9yICdkaXNjb3JkJyAoY2FzZS1pbnNlbnNpdGl2ZSkuXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjY3JlYXRlLXdlYmhvb2t9XG4gICAqL1xuICBjcmVhdGVXZWJob29rOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZVdlYmhvb2ssIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+O1xuICAvKipcbiAgICogRGVsZXRlcyBhbiBhdXRvbW9kIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHJ1bGUgZnJvbS5cbiAgICogQHBhcmFtIHJ1bGVJZCAtIFRoZSBJRCBvZiB0aGUgYXV0b21vZCBydWxlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYW4gX0F1dG8gTW9kZXJhdGlvbiBSdWxlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNkZWxldGUtYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAqL1xuICBkZWxldGVBdXRvbW9kUnVsZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcnVsZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBjaGFubmVsIGZyb20gd2l0aGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIG5vdGhpbmdcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIGNvbW11bml0eSBndWlsZHMsIHRoZSBfUnVsZXNfLCBfR3VpZGVsaW5lc18gYW5kIF9Db21tdW5pdHkgVXBkYXRlXyBjaGFubmVscyBjYW5ub3QgYmUgZGVsZXRlZC5cbiAgICpcbiAgICogSWYgdGhlIGNoYW5uZWwgaXMgYSB0aHJlYWQ6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfVEhSRUFEU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogLSBGaXJlcyBhIF9UaHJlYWQgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBPdGhlcndpc2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIC0g4pqg77iPIERlbGV0aW5nIGEgY2F0ZWdvcnkgY2hhbm5lbCBkb2VzIG5vdCBkZWxldGUgaXRzIGNoaWxkIGNoYW5uZWxzLlxuICAgKiAgIEluc3RlYWQsIHRoZXkgd2lsbCBoYXZlIHRoZWlyIGBwYXJlbnRfaWRgIHByb3BlcnR5IHJlbW92ZWQsIGFuZCBhIGBDaGFubmVsIFVwZGF0ZWAgZ2F0ZXdheSBldmVudCB3aWxsIGZpcmUgZm9yIGVhY2ggb2YgdGhlbS5cbiAgICpcbiAgICogLSBGaXJlcyBhIF9DaGFubmVsIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlY2xvc2UtY2hhbm5lbH1cbiAgICovXG4gIGRlbGV0ZUNoYW5uZWw6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogRGVsZXRlcyBhIHBlcm1pc3Npb24gb3ZlcnJpZGUgZm9yIGEgdXNlciBvciByb2xlIGluIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUgb2YuXG4gICAqIEBwYXJhbSBvdmVyd3JpdGVJZCAtIFRoZSBJRCBvZiB0aGUgcGVybWlzc2lvbiBvdmVycmlkZSB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtY2hhbm5lbC1wZXJtaXNzaW9ufVxuICAgKi9cbiAgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvdmVyd3JpdGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGVtb2ppIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIGVtb2ppcyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIGVtb2ppcywgcmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEVtb2ppcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNkZWxldGUtZ3VpbGQtZW1vaml9XG4gICAqL1xuICBkZWxldGVFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogRGVsZXRlcyBhbiBlbW9qaSBmcm9tIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBkZWxldGUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNkZWxldGUtYXBwbGljYXRpb24tZW1vaml9XG4gICAqL1xuICBkZWxldGVBcHBsaWNhdGlvbkVtb2ppOiAoaWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBkZWxldGVNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQgbmVlZGluZyB0byBzZWUgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgaW4uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNkZWxldGUtZm9sbG93dXAtbWVzc2FnZX1cbiAgICovXG4gIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZTogKHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogRGVsZXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIHJlZ2lzdGVyZWQgZ2xvYmFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZGVsZXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZGVsZXRlIHRoZSBjb21tYW5kIGZyb20uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZGVsZXRlIGZyb20gdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZGVsZXRlLWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZDogKGNvbW1hbmRJZDogQmlnU3RyaW5nLCBndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGUgYSBuZXcgc3RpY2tlciBmb3IgdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm4gQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZvciBzdGlja2VycyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIHN0aWNrZXJzLCByZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRmlyZXMgYSBHdWlsZCBTdGlja2VycyBVcGRhdGUgR2F0ZXdheSBldmVudC5cbiAgICogRXZlcnkgZ3VpbGRzIGhhcyBmaXZlIGZyZWUgc3RpY2tlciBzbG90cyBieSBkZWZhdWx0LCBhbmQgZWFjaCBCb29zdCBsZXZlbCB3aWxsIGdyYW50IGFjY2VzcyB0byBtb3JlIHNsb3RzLlxuICAgKiBMb3R0aWUgc3RpY2tlcnMgY2FuIG9ubHkgYmUgdXBsb2FkZWQgb24gZ3VpbGRzIHRoYXQgaGF2ZSBlaXRoZXIgdGhlIGBWRVJJRklFRGAgYW5kL29yIHRoZSBgUEFSVE5FUkVEYCBndWlsZCBmZWF0dXJlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvc3RpY2tlciNkZWxldGUtZ3VpbGQtc3RpY2tlcn1cbiAgICovXG4gIGRlbGV0ZUd1aWxkU3RpY2tlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgc3RpY2tlcklkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB0ZW1wbGF0ZSBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHRlbXBsYXRlIGZyb20uXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZUNvZGUgLSBUaGUgY29kZSBvZiB0aGUgdGVtcGxhdGUgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZGVsZXRlLWd1aWxkLXRlbXBsYXRlfVxuICAgKi9cbiAgZGVsZXRlR3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdGVtcGxhdGVDb2RlOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGludGVncmF0aW9uIGF0dGFjaGVkIHRvIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBmcm9tIHdoaWNoIHRvIGRlbGV0ZSB0aGUgaW50ZWdyYXRpb24uXG4gICAqIEBwYXJhbSBpbnRlZ3JhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBpbnRlZ3JhdGlvbiB0byBkZWxldGUgZnJvbSB0aGUgZ3VpbGQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIERlbGV0ZXMgYWxsIHdlYmhvb2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZWdyYXRpb24sIGFuZCBraWNrcyB0aGUgYXNzb2NpYXRlZCBib3QgaWYgdGhlcmUgaXMgb25lLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBJbnRlZ3JhdGlvbnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKiBGaXJlcyBhIF9JbnRlZ3JhdGlvbiBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNkZWxldGUtZ3VpbGQtaW50ZWdyYXRpb259XG4gICAqL1xuICBkZWxldGVJbnRlZ3JhdGlvbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaW50ZWdyYXRpb25JZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGludml0ZSB0byBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBpbnZpdGVDb2RlIC0gVGhlIGludml0ZSBjb2RlIG9mIHRoZSBpbnZpdGUgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfSW52aXRlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWNoYW5uZWwtaW52aXRlfVxuICAgKi9cbiAgZGVsZXRlSW52aXRlOiAoaW52aXRlQ29kZTogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSB1c2VycyBhbGxvd2VkIHRvIHNlZSBhbmQgYWNjZXB0IHRoaXMgaW52aXRlLlxuICAgKlxuICAgKiBAcGFyYW0gaW52aXRlQ29kZSAtIFRoZSBpbnZpdGUgY29kZSBvZiB0aGUgaW52aXRlIHRvIHVwZGF0ZS5cbiAgICogQHJldHVybnMgQ1NWIGZpbGUgY29udGFpbmluZyB0aGUgdXNlciBJRHMgd2l0aCB0aGUgaGVhZGVyIGB1c2VyX2lkYCBhbmQgZWFjaCB1c2VyIElEIGZyb20gdGhlIG9yaWdpbmFsIGZpbGVcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgY2FsbGVkIHRvIGJlIHRoZSBpbnZpdGVyLCBvciBoYXZlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24sIG9yIGhhdmUgYFZJRVdfQVVESVRfTE9HYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvaW52aXRlI2dldC10YXJnZXQtdXNlcnN9XG4gICAqL1xuICBnZXRUYXJnZXRVc2VyczogKGludml0ZUNvZGU6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlcnMgYWxsb3dlZCB0byBzZWUgYW5kIGFjY2VwdCB0aGlzIGludml0ZS5cbiAgICpcbiAgICogQHBhcmFtIGludml0ZUNvZGUgLSBUaGUgaW52aXRlIGNvZGUgb2YgdGhlIGludml0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB0YXJnZXRVc2Vyc0ZpbGUgLSBBIENTViBmaWxlIHdpdGggYSBzaW5nbGUgY29sdW1uIG9mIHVzZXIgSURzIGZvciBhbGwgdGhlIHVzZXJzIGFibGUgdG8gYWNjZXB0IHRoaXMgaW52aXRlXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gYmUgdGhlIGludml0ZXIgb3IgaGF2ZSB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogVXBsb2FkaW5nIGEgZmlsZSB3aXRoIGludmFsaWQgdXNlciBJRHMgd2lsbCByZXN1bHQgaW4gYSA0MDAgd2l0aCB0aGUgaW52YWxpZCBJRHMgZGVzY3JpYmVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvaW52aXRlI3VwZGF0ZS10YXJnZXQtdXNlcnN9XG4gICAqL1xuICB1cGRhdGVUYXJnZXRVc2VyczogKGludml0ZUNvZGU6IHN0cmluZywgdGFyZ2V0VXNlcnNGaWxlOiBCbG9iKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogUHJvY2Vzc2luZyB0YXJnZXQgdXNlcnMgZnJvbSBhIENTViB3aGVuIGNyZWF0aW5nIG9yIHVwZGF0aW5nIGFuIGludml0ZSBpcyBkb25lIGFzeW5jaHJvbm91c2x5LiBUaGlzIGVuZHBvaW50IGFsbG93cyB5b3UgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGF0IGpvYi5cbiAgICpcbiAgICogQHBhcmFtIGludml0ZUNvZGUgLSBUaGUgaW52aXRlIGNvZGUgb2YgdGhlIGludml0ZSB0byBjaGVjayB0aGUgdGFyZ2V0IHVzZXJzIGpvYiBzdGF0dXMgZm9yLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgc3RhdHVzIG9mIHRoZSB0YXJnZXQgdXNlcnMgam9iLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGJlIHRoZSBpbnZpdGVyLCBvciBoYXZlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24sIG9yIGhhdmUgYFZJRVdfQVVESVRfTE9HYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvaW52aXRlI2dldC10YXJnZXQtdXNlcnMtam9iLXN0YXR1c31cbiAgICovXG4gIGdldFRhcmdldFVzZXJzSm9iU3RhdHVzOiAoaW52aXRlQ29kZTogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUYXJnZXRVc2Vyc0pvYlN0YXR1cz4+O1xuICAvKipcbiAgICogRGVsZXRlcyBhIG1lc3NhZ2UgZnJvbSBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGZyb20uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIGZyb20gdGhlIGNoYW5uZWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgbm90IGRlbGV0aW5nIG93biBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLW1lc3NhZ2V9XG4gICAqL1xuICBkZWxldGVNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIG11bHRpcGxlIG1lc3NhZ2VzIGZyb20gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZXMgZnJvbS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZHMgLSBUaGUgSURzIG9mIHRoZSBtZXNzYWdlcyB0byBkZWxldGUgZnJvbSB0aGUgY2hhbm5lbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICog4pqg77iPIE1lc3NhZ2VzIG9sZGVyIHRoYW4gMiB3ZWVrcyBvbGQgY2Fubm90IGJlIGRlbGV0ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlIEJ1bGtfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2J1bGstZGVsZXRlLW1lc3NhZ2VzfVxuICAgKi9cbiAgZGVsZXRlTWVzc2FnZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkczogQmlnU3RyaW5nW10sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGluaXRpYWwgbWVzc2FnZSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGRlbGV0ZU1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2RlbGV0ZS1vcmlnaW5hbC1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICovXG4gIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZTogKHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgcmVhY3Rpb24gYWRkZWQgYnkgdGhlIGJvdCB1c2VyIGZyb20gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb24gZnJvbSBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9uIGZyb20uXG4gICAqIEBwYXJhbSByZWFjdGlvbiAtIFRoZSByZWFjdGlvbiB0byBkZWxldGUgZnJvbSB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBSZWFjdGlvbiBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1vd24tcmVhY3Rpb259XG4gICAqL1xuICBkZWxldGVPd25SZWFjdGlvbjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxsIHJlYWN0aW9ucyBmb3IgYWxsIGVtb2ppcyBmcm9tIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9ucyBmcm9tIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb25zIGZyb20uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFJlYWN0aW9uIFJlbW92ZSBBbGxfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1hbGwtcmVhY3Rpb25zfVxuICAgKi9cbiAgZGVsZXRlUmVhY3Rpb25zQWxsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogRGVsZXRlcyBhbGwgcmVhY3Rpb25zIGZvciBhbiBlbW9qaSBmcm9tIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9ucyBmcm9tIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb25zIGZyb20uXG4gICAqIEBwYXJhbSByZWFjdGlvbiAtIFRoZSByZWFjdGlvbiB0byByZW1vdmUgZnJvbSB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgUmVhY3Rpb24gUmVtb3ZlIEVtb2ppXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtYWxsLXJlYWN0aW9ucy1mb3ItZW1vaml9XG4gICAqL1xuICBkZWxldGVSZWFjdGlvbnNFbW9qaTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSByb2xlIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgcm9sZSBmcm9tLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNkZWxldGUtZ3VpbGQtcm9sZX1cbiAgICovXG4gIGRlbGV0ZVJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgc2NoZWR1bGVkIGV2ZW50IGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FVkVOVFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFNjaGVkdWxlZCBFdmVudCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZGVsZXRlLWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICovXG4gIGRlbGV0ZVNjaGVkdWxlZEV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLCBpZiBvbmUgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHVzZXIgdG8gYmUgYSBtb2RlcmF0b3Igb2YgdGhlIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2RlbGV0ZS1zdGFnZS1pbnN0YW5jZX1cbiAgICovXG4gIGRlbGV0ZVN0YWdlSW5zdGFuY2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogRGVsZXRlcyBhIHVzZXIncyByZWFjdGlvbiBmcm9tIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9uIGZyb20gaXMgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIHRoZSByZWFjdGlvbiBmcm9tLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHdob3NlIHJlYWN0aW9uIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHJlYWN0aW9uIC0gVGhlIHJlYWN0aW9uIHRvIGRlbGV0ZSBmcm9tIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBSZWFjdGlvbiBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS11c2VyLXJlYWN0aW9ufVxuICAgKi9cbiAgZGVsZXRlVXNlclJlYWN0aW9uOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB3ZWJob29rLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjZGVsZXRlLXdlYmhvb2t9XG4gICAqL1xuICBkZWxldGVXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB3ZWJob29rIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGJlbG9uZ2luZyB0by5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gbWFuYWdlIHRoZSB3ZWJob29rLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGRlbGV0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjZGVsZXRlLXdlYmhvb2t9XG4gICAqL1xuICBkZWxldGVXZWJob29rTWVzc2FnZTogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IERlbGV0ZVdlYmhvb2tNZXNzYWdlT3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB3ZWJob29rIG1lc3NhZ2UgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBiZWxvbmdpbmcgdG8uXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGRlbGV0ZSB0aGUgd2ViaG9vay5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy93ZWJob29rI2RlbGV0ZS13ZWJob29rLXdpdGgtdG9rZW59XG4gICAqL1xuICBkZWxldGVXZWJob29rV2l0aFRva2VuOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgcGVybWlzc2lvbnMgZm9yIGEgZ3VpbGQgYXBwbGljYXRpb24gY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZWRpdCB0aGUgcGVybWlzc2lvbnMgb2YuXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBiZWFyZXIgdG9rZW4gdG8gdXNlIHRvIG1ha2UgdGhlIHJlcXVlc3QuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjb21tYW5kIHBlcm1pc3Npb25zLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBiZWFyZXIgdG9rZW4gcmVxdWlyZXMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMudXBkYXRlYCBzY29wZSB0byBiZSBlbmFibGVkLCBhbmQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGd1aWxkIHdob3NlIElEIGhhcyBiZWVuIHByb3ZpZGVkIGluIHRoZSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1hcHBsaWNhdGlvbi1jb21tYW5kLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGNvbW1hbmRJZDogQmlnU3RyaW5nLFxuICAgIGJlYXJlclRva2VuOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPltdLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGFuIGF1dG9tb2QgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHJ1bGUgaW4uXG4gICAqIEBwYXJhbSBydWxlSWQgLSBUaGUgSUQgb2YgdGhlIHJ1bGUgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJ1bGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfQXV0byBNb2RlcmF0aW9uIFJ1bGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvYXV0by1tb2RlcmF0aW9uI21vZGlmeS1hdXRvLW1vZGVyYXRpb24tcnVsZX1cbiAgICovXG4gIGVkaXRBdXRvbW9kUnVsZTogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBydWxlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBQYXJ0aWFsPEVkaXRBdXRvTW9kZXJhdGlvblJ1bGVPcHRpb25zPixcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPj47XG4gIC8qKlxuICAgKiBNb2RpZmllcyB0aGUgYm90J3MgdXNlcm5hbWUsIGF2YXRhciBvciBiYW5uZXIuXG4gICAqIE5PVEU6IHVzZXJuYW1lOiBpZiBjaGFuZ2VkIG1heSBjYXVzZSB0aGUgYm90J3MgZGlzY3JpbWluYXRvciB0byBiZSByYW5kb21pemVkLlxuICAgKi9cbiAgZWRpdEJvdFByb2ZpbGU6IChvcHRpb25zOiB7IHVzZXJuYW1lPzogc3RyaW5nOyBib3RBdmF0YXJVUkw/OiBzdHJpbmcgfCBudWxsOyBib3RCYW5uZXJVUkw/OiBzdHJpbmcgfCBudWxsIH0pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFVzZXI+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGEgY2hhbm5lbCdzIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjaGFubmVsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgZWRpdGluZyBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5Hcm91cERtOlxuICAgKiAtIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBJZiBlZGl0aW5nIGEgdGhyZWFkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfVEhSRUFEU2AgcGVybWlzc2lvbiBfX3VubGVzc19fIGlmIHNldHRpbmcgdGhlIGBhcmNoaXZlZGAgcHJvcGVydHkgdG8gYGZhbHNlYCB3aGVuIHRoZSBgbG9ja2VkYCBwcm9wZXJ0eSBpcyBhbHNvIGBmYWxzZWAsIGluIHdoaWNoIGNhc2Ugb25seSB0aGUgYFNFTkRfTUVTU0FHRVNgIHBlcm1pc3Npb24gaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqIC0gRmlyZXMgYSBfVGhyZWFkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogSWYgZWRpdGluZyBhIGd1aWxkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIC0gSWYgbW9kaWZ5aW5nIHBlcm1pc3Npb24gb3ZlcnJpZGVzOlxuICAgKiAgIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqICAgLSBPbmx5IHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIG9yIHBhcmVudCBjaGFubmVsIGNhbiBiZSBhbGxvd2VkL2RlbmllZCBfX3VubGVzc19fIHRoZSBib3QgdXNlciBoYXMgYSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIG92ZXJyaWRlIGluIHRoZSBjaGFubmVsLlxuICAgKlxuICAgKiAtIElmIG1vZGlmeWluZyBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZENhdGVnb3J5OlxuICAgKiAgICAgLSBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudCBmb3IgZWFjaCBjaGlsZCBjaGFubmVsIGltcGFjdGVkIGluIHRoaXMgY2hhbmdlLlxuICAgKiAtIE90aGVyd2lzZTpcbiAgICogICAgIC0gRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqL1xuICBlZGl0Q2hhbm5lbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlDaGFubmVsLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PjtcbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlcyBmb3IgYSB1c2VyIG9yIHJvbGUgaW4gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGVzIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBPbmx5IHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIG9yIHBhcmVudCBjaGFubmVsIGNhbiBiZSBhbGxvd2VkL2RlbmllZCBfX3VubGVzc19fIHRoZSBib3QgdXNlciBoYXMgYSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIG92ZXJyaWRlIGluIHRoZSBjaGFubmVsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZWRpdC1jaGFubmVsLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlc09wdGlvbnMsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwb3NpdGlvbnMgb2YgYSBzZXQgb2YgY2hhbm5lbHMgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGluIHdoaWNoIHRvIGVkaXQgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY2hhbm5lbHMuXG4gICAqIEBwYXJhbSBjaGFubmVsUG9zaXRpb25zIC0gQSBzZXQgb2Ygb2JqZWN0cyBkZWZpbmluZyB0aGUgdXBkYXRlZCBwb3NpdGlvbnMgb2YgdGhlIGNoYW5uZWxzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IGNoYW5uZWwgaW1wYWN0ZWQgaW4gdGhpcyBjaGFuZ2UuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtY2hhbm5lbC1wb3NpdGlvbnN9XG4gICAqL1xuICBlZGl0Q2hhbm5lbFBvc2l0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgY2hhbm5lbFBvc2l0aW9uczogTW9kaWZ5R3VpbGRDaGFubmVsUG9zaXRpb25zW10pID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBFZGl0cyBhbiBlbW9qaS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGluIHdoaWNoIHRvIGVkaXQgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgdXBkYXRlZCB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIGVtb2ppcyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIGVtb2ppcywgcmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgYEd1aWxkIEVtb2ppcyBVcGRhdGVgIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNtb2RpZnktZ3VpbGQtZW1vaml9XG4gICAqL1xuICBlZGl0RW1vamk6IChndWlsZElkOiBCaWdTdHJpbmcsIGlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkRW1vamksIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGFuIGFwcGxpY2F0aW9uIGVtb2ppLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBlbW9qaS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIHVwZGF0ZWQge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9lbW9qaSNtb2RpZnktYXBwbGljYXRpb24tZW1vaml9XG4gICAqL1xuICBlZGl0QXBwbGljYXRpb25FbW9qaTogKGlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUFwcGxpY2F0aW9uRW1vamkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBlZGl0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgKlxuICAgKiBEb2VzIG5vdCBzdXBwb3J0IGVwaGVtZXJhbCBmb2xsb3ctdXAgbWVzc2FnZXMgZHVlIHRvIHRoZXNlIGJlaW5nIHN0YXRlbGVzcy5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBVcGRhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2VkaXQtZm9sbG93dXAtbWVzc2FnZX1cbiAgICovXG4gIGVkaXRGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGEgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGEgZ3VpbGQncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBndWlsZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkR3VpbGR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgYXR0ZW1wdGluZyB0byBhZGQgb3IgcmVtb3ZlIHRoZSB7QGxpbmsgR3VpbGRGZWF0dXJlc30uQ29tbXVuaXR5IGZlYXR1cmU6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBBRE1JTklTVFJBVE9SYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGR9XG4gICAqL1xuICBlZGl0R3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIHJlZ2lzdGVyZWQgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kOiAoXG4gICAgY29tbWFuZElkOiBCaWdTdHJpbmcsXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PjtcbiAgLyoqXG4gICAqIEVkaXQgdGhlIGdpdmVuIHN0aWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybiBBIHtAbGluayBEaXNjb3JkU3RpY2tlcn1cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIHN0aWNrZXJzIGNyZWF0ZWQgYnkgdGhlIGN1cnJlbnQgdXNlciwgcmVxdWlyZXMgZWl0aGVyIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGb3Igb3RoZXIgc3RpY2tlcnMsIHJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGaXJlcyBhIEd1aWxkIFN0aWNrZXJzIFVwZGF0ZSBHYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvc3RpY2tlciNtb2RpZnktZ3VpbGQtc3RpY2tlcn1cbiAgICovXG4gIGVkaXRHdWlsZFN0aWNrZXI6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgc3RpY2tlcklkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogQXRMZWFzdE9uZTxFZGl0R3VpbGRTdGlja2VyT3B0aW9ucz4sXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXI+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGEgdGVtcGxhdGUncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgYSB0ZW1wbGF0ZSBvZi5cbiAgICogQHBhcmFtIHRlbXBsYXRlQ29kZSAtIFRoZSBjb2RlIG9mIHRoZSB0ZW1wbGF0ZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRUZW1wbGF0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNtb2RpZnktZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBlZGl0R3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkVGVtcGxhdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZWRpdCB0aGUgbWVzc2FnZSBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRHMgb2YgdGhlIG1lc3NhZ2UgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgZWRpdGluZyBhbm90aGVyIHVzZXIncyBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKiAtIE9ubHkgdGhlIHtAbGluayBFZGl0TWVzc2FnZS5mbGFncyB8IGZsYWdzfSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVyIGNhbiBiZSBlZGl0ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNlZGl0LW1lc3NhZ2V9XG4gICAqL1xuICBlZGl0TWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdE1lc3NhZ2UpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PjtcbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBpbml0aWFsIG1lc3NhZ2UgcmVzcG9uc2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJlc3BvbnNlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZWRpdE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNlZGl0LW9yaWdpbmFsLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgKi9cbiAgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZTogKHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj47XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgdm9pY2Ugc3RhdGUgb2YgdGhlIGJvdCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gZWRpdCB0aGUgdm9pY2Ugc3RhdGUgb2YgdGhlIGJvdCB1c2VyLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdm9pY2Ugc3RhdGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSB7QGxpbmsgRWRpdE93blZvaWNlU3RhdGUuY2hhbm5lbElkIHwgY2hhbm5lbElkfSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVyIG11c3QgcG9pbnQgdG8gYSBzdGFnZSBjaGFubmVsLCBhbmQgdGhlIGJvdCB1c2VyIG11c3QgYWxyZWFkeSBoYXZlIGpvaW5lZCBpdC5cbiAgICpcbiAgICogSWYgYXR0ZW1wdGluZyB0byB1bm11dGUgb25lc2VsZjpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1VVEVfTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgYXR0ZW1wdGluZyB0byByZXF1ZXN0IHRvIHNwZWFrOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgUkVRVUVTVF9UT19TUEVBS2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3ZvaWNlI21vZGlmeS1jdXJyZW50LXVzZXItdm9pY2Utc3RhdGV9XG4gICAqL1xuICBlZGl0T3duVm9pY2VTdGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdE93blZvaWNlU3RhdGUpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBFZGl0cyBhIHJvbGUgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHJvbGUgaW4uXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJvbGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFJvbGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtcm9sZX1cbiAgICovXG4gIGVkaXRSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdEd1aWxkUm9sZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlPj47XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgcG9zaXRpb25zIG9mIGEgc2V0IG9mIHJvbGVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgcm9sZSBwb3NpdGlvbnMgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSByb2xlIHBvc2l0aW9ucy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRSb2xlfSBvYmplY3RzIGFzc29ydGVkIGJ5IHJvbGUgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBSb2xlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgcm9sZSBpbXBhY3RlZCBpbiB0aGlzIGNoYW5nZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1yb2xlLXBvc2l0aW9uc31cbiAgICovXG4gIGVkaXRSb2xlUG9zaXRpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlSb2xlUG9zaXRpb25zW10sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZT5bXT47XG4gIC8qKlxuICAgKiBFZGl0cyBhIHNjaGVkdWxlZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHNjaGVkdWxlZCBldmVudCBpbi5cbiAgICogQHBhcmFtIGV2ZW50SWQgLSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudCB0byBlZGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRTY2hlZHVsZWRFdmVudH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogVG8gc3RhcnQgb3IgZW5kIGFuIGV2ZW50LCBtb2RpZnkgdGhlIGV2ZW50J3MgYHN0YXR1c2AgcHJvcGVydHkuXG4gICAqXG4gICAqIFRoZSBgZW50aXR5X21ldGFkYXRhYCBwcm9wZXJ0eSBpcyBkaXNjYXJkZWQgZm9yIGV2ZW50cyB3aG9zZSBgZW50aXR5X3R5cGVgIGlzIG5vdCB7QGxpbmsgU2NoZWR1bGVkRXZlbnRFbnRpdHlUeXBlfS5FeHRlcm5hbC5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgU2NoZWR1bGVkIEV2ZW50IFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNtb2RpZnktZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgKi9cbiAgZWRpdFNjaGVkdWxlZEV2ZW50OiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGV2ZW50SWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBQYXJ0aWFsPEVkaXRTY2hlZHVsZWRFdmVudD4sXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50Pj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIHN0YWdlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIEBwYXJhbSB0b3BpYyAtIFRvcGljIG9mIHRoZSBTdGFnZSBpbnN0YW5jZSAoMS0xMjAgY2hhcmFjdGVycykuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIHVwZGF0ZWQge0BsaW5rIERpc2NvcmRTdGFnZUluc3RhbmNlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHVzZXIgdG8gYmUgYSBtb2RlcmF0b3Igb2YgdGhlIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIFVwZGF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9zdGFnZS1pbnN0YW5jZSNtb2RpZnktc3RhZ2UtaW5zdGFuY2V9XG4gICAqL1xuICBlZGl0U3RhZ2VJbnN0YW5jZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB0b3BpYzogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0YWdlSW5zdGFuY2U+PjtcbiAgLyoqXG4gICAqIEVkaXRzIHRoZSB2b2ljZSBzdGF0ZSBvZiBhbm90aGVyIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBlZGl0IHRoZSB2b2ljZSBzdGF0ZSBvZiB0aGUgYm90IHVzZXIuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSB2b2ljZSBzdGF0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHtAbGluayBFZGl0T3duVm9pY2VTdGF0ZS5jaGFubmVsSWQgfCBjaGFubmVsSWR9IHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIG9iamVjdCBwYXJhbWV0ZXIgbXVzdCBwb2ludCB0byBhIHN0YWdlIGNoYW5uZWwsIGFuZCB0aGUgdXNlciBtdXN0IGFscmVhZHkgaGF2ZSBqb2luZWQgaXQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgTVVURV9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvdm9pY2UjbW9kaWZ5LXVzZXItdm9pY2Utc3RhdGV9XG4gICAqL1xuICBlZGl0VXNlclZvaWNlU3RhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRVc2VyVm9pY2VTdGF0ZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEVkaXQgdGhlIGN1cnJlbnQgdXNlciBhcHBsaWNhdGlvbiByb2xlIGNvbm5lY3Rpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlclxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZWRpdCB0aGUgcm9sZSBjb25uZWN0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gZWRpdFxuICAgKiBAcmV0dXJucyB7RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb259XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhlIGByb2xlX2Nvbm5lY3Rpb25zLndyaXRlYCBzY29wZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3VzZXIjdXBkYXRlLXVzZXItYXBwbGljYXRpb24tcm9sZS1jb25uZWN0aW9ufVxuICAgKi9cbiAgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uOiAoXG4gICAgYmVhcmVyVG9rZW46IHN0cmluZyxcbiAgICBhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+LFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+PjtcbiAgLyoqXG4gICAqIEVkaXRzIGEgd2ViaG9vay5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjZWRpdC13ZWJob29rfVxuICAgKi9cbiAgZWRpdFdlYmhvb2s6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5V2ViaG9vaywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIHdlYmhvb2sgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0IHRoZSBtZXNzYWdlIG9mLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBlZGl0IHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvd2ViaG9vayNlZGl0LXdlYmhvb2stbWVzc2FnZX1cbiAgICovXG4gIGVkaXRXZWJob29rTWVzc2FnZTogKFxuICAgIHdlYmhvb2tJZDogQmlnU3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgbWVzc2FnZUlkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogRWRpdFdlYmhvb2tNZXNzYWdlT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIHdlYmhvb2sgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGVkaXQuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGVkaXQgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjbW9kaWZ5LXdlYmhvb2std2l0aC10b2tlbn1cbiAgICovXG4gIGVkaXRXZWJob29rV2l0aFRva2VuOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IE9taXQ8TW9kaWZ5V2ViaG9vaywgJ2NoYW5uZWxJZCc+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj47XG4gIC8qKlxuICAgKiBFZGl0cyBhIGd1aWxkJ3Mgd2VsY29tZSBzY3JlZW4uXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSB3ZWxjb21lIHNjcmVlbiBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHdlbGNvbWUgc2NyZWVuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRXZWxjb21lU2NyZWVufS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC13ZWxjb21lLXNjcmVlbn1cbiAgICovXG4gIGVkaXRXZWxjb21lU2NyZWVuOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlHdWlsZFdlbGNvbWVTY3JlZW4sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2VsY29tZVNjcmVlbj4+O1xuICAvKipcbiAgICogRWRpdHMgdGhlIHNldHRpbmdzIG9mIGEgZ3VpbGQncyB3aWRnZXQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSBzZXR0aW5ncyBvZiB0aGUgd2lkZ2V0IG9mLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC13aWRnZXR9XG4gICAqL1xuICBlZGl0V2lkZ2V0U2V0dGluZ3M6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+LFxuICAgIHJlYXNvbj86IHN0cmluZyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPj47XG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHdlYmhvb2ssIGNhdXNpbmcgYSBtZXNzYWdlIHRvIGJlIHBvc3RlZCBpbiB0aGUgY2hhbm5lbCBjb25maWd1cmVkIGZvciB0aGUgd2ViaG9vay5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBleGVjdXRlLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBleGVjdXRlIHRoZSB3ZWJob29rLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LCBvciBgdW5kZWZpbmVkYCBpZiB0aGUge0BsaW5rIEV4ZWN1dGVXZWJob29rLndhaXQgfCB3YWl0fSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVyIGlzIHNldCB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgd2ViaG9vayBjaGFubmVsIGlzIGEgZm9ydW0gY2hhbm5lbCwgeW91IG11c3QgcHJvdmlkZSBhIHZhbHVlIGZvciBlaXRoZXIgYHRocmVhZElkYCBvciBgdGhyZWFkTmFtZWAuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy93ZWJob29rI2V4ZWN1dGUtd2ViaG9va31cbiAgICovXG4gIGV4ZWN1dGVXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEV4ZWN1dGVXZWJob29rKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPiB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBGb2xsb3dzIGFuIGFubm91bmNlbWVudCBjaGFubmVsLCBhbGxvd2luZyBtZXNzYWdlcyBwb3N0ZWQgd2l0aGluIGl0IHRvIGJlIGNyb3NzLXBvc3RlZCBpbnRvIHRoZSB0YXJnZXQgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZUNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgYW5ub3VuY2VtZW50IGNoYW5uZWwgdG8gZm9sbG93LlxuICAgKiBAcGFyYW0gdGFyZ2V0Q2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0YXJnZXQgY2hhbm5lbCAtIHRoZSBjaGFubmVsIHRvIGNyb3NzLXBvc3QgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRGb2xsb3dlZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbiBpbiB0aGUgX190YXJnZXQgY2hhbm5lbF9fLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2ZvbGxvdy1hbm5vdW5jZW1lbnQtY2hhbm5lbH1cbiAgICovXG4gIGZvbGxvd0Fubm91bmNlbWVudDogKHNvdXJjZUNoYW5uZWxJZDogQmlnU3RyaW5nLCB0YXJnZXRDaGFubmVsSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRGb2xsb3dlZENoYW5uZWw+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgYWxsIGFjdGl2ZSB0aHJlYWRzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB0aHJlYWRzIG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmV0dXJucyBib3RoIHB1YmxpYyBhbmQgcHJpdmF0ZSB0aHJlYWRzLlxuICAgKlxuICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgaWRgIHByb3BlcnR5IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNsaXN0LWFjdGl2ZS1ndWlsZC10aHJlYWRzfVxuICAgKi9cbiAgZ2V0QWN0aXZlVGhyZWFkczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+PjtcbiAgLyoqIEdldCB0aGUgYXBwbGljYXRpb25zIGluZm8gKi9cbiAgZ2V0QXBwbGljYXRpb25JbmZvOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbj4+O1xuICAvKipcbiAgICogRWRpdCBwcm9wZXJ0aWVzIG9mIHRoZSBhcHAgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0aW5nIGJvdCB1c2VyLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBPbmx5IHByb3BlcnRpZXMgdGhhdCBhcmUgcGFzc2VkIHdpbGwgYmUgdXBkYXRlZC5cbiAgICovXG4gIGVkaXRBcHBsaWNhdGlvbkluZm86IChib2R5OiBFZGl0QXBwbGljYXRpb24pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uPj47XG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRpb24gaW5mbyBmb3IgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlclxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBBbnkgT0F1dGgyIGRlcml2ZWQgYWNjZXNzIHRva2VuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb259XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSB1c2VyIG9iamVjdCBpcyBub3QgZGVmaW5lZCBpZiB0aGUgc2NvcGVzIGRvIG5vdCBpbmNsdWRlIGBpZGVudGlmeWAuXG4gICAqIEluIHRoZSB1c2VyIG9iamVjdCwgaWYgZGVmaW5lZCwgdGhlIGVtYWlsIGlzIG5vdCBpbmNsdWRlZCBpZiB0aGUgc2NvcGVzIGRvIG5vdCBpbmNsdWRlIGBlbWFpbGBcbiAgICovXG4gIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm86IChiZWFyZXJUb2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4+O1xuICAvKipcbiAgICogRXhjaGFuZ2UgdGhlIGluZm9ybWF0aW9uIHRvIGdldCBhIE9BdXRoMiBhY2Nlc3NUb2tlbiB0b2tlblxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50SWQgLSBBcHBsaWNhdGlvbidzIGNsaWVudCBpZFxuICAgKiBAcGFyYW0gY2xpZW50U2VjcmV0IC0gYXBwbGljYXRpb24ncyBjbGllbnQgc2VjcmV0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gbWFrZSB0aGUgZXhjaGFuZ2Ugd2l0aCBkaXNjb3JkXG4gICAqL1xuICBleGNoYW5nZVRva2VuOiAoXG4gICAgY2xpZW50SWQ6IEJpZ1N0cmluZyxcbiAgICBjbGllbnRTZWNyZXQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBDYW1lbGl6ZTxEaXNjb3JkVG9rZW5FeGNoYW5nZT4sXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4+O1xuICAvKipcbiAgICogUmV2b2tlIGFuIGFjY2Vzc190b2tlblxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50SWQgLSBBcHBsaWNhdGlvbidzIGNsaWVudCBpZFxuICAgKiBAcGFyYW0gY2xpZW50U2VjcmV0IC0gYXBwbGljYXRpb24ncyBjbGllbnQgc2VjcmV0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gcmV2b2tlIHRoZSBhY2Nlc3NfdG9rZW5cbiAgICovXG4gIHJldm9rZVRva2VuOiAoY2xpZW50SWQ6IEJpZ1N0cmluZywgY2xpZW50U2VjcmV0OiBzdHJpbmcsIG9wdGlvbnM6IENhbWVsaXplPERpc2NvcmRUb2tlblJldm9jYXRpb24+KSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogR2V0cyB0aGUgcGVybWlzc2lvbnMgb2YgYSBndWlsZCBhcHBsaWNhdGlvbiBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQgdGhlIHBlcm1pc3Npb25zIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBPQXV0aDIgcmVsYXRlZCBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgZW5kcG9pbnRcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlbiBzcGVjaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCB0aGUgYWNjZXNzIHRva2VuIHBhc3NlZC1pbiByZXF1aXJlcyB0aGUgT0F1dGgyIHNjb3BlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMudXBkYXRlYFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWFwcGxpY2F0aW9uLWNvbW1hbmQtcGVybWlzc2lvbnN9XG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGNvbW1hbmRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM/OiBHZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwZXJtaXNzaW9ucyBvZiBhbGwgYXBwbGljYXRpb24gY29tbWFuZHMgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkIGJ5IHRoZSBJRCBvZiB0aGUgZ3VpbGQgYW5kIG9wdGlvbmFsbHkgYW4gZXh0ZXJuYWwgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHBlcm1pc3Npb25zIG9iamVjdHMgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIE9BdXRoMiByZWxhdGVkIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZW4gc3BlY2lmeWluZyB0aGUgb3B0aW9ucyBvYmplY3QgdGhlIGFjY2VzcyB0b2tlbiBwYXNzZWQtaW4gcmVxdWlyZXMgdGhlIE9BdXRoMiBzY29wZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zLnVwZGF0ZWBcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9ucz86IEdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25PcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+W10+O1xuICAvKipcbiAgICogR2V0cyBhIGd1aWxkJ3MgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBhdWRpdCBsb2cgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEF1ZGl0TG9nfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBWSUVXX0FVRElUX0xPR2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2F1ZGl0LWxvZyNnZXQtZ3VpbGQtYXVkaXQtbG9nfVxuICAgKi9cbiAgZ2V0QXVkaXRMb2c6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRHdWlsZEF1ZGl0TG9nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdWRpdExvZz4+O1xuICAvKipcbiAgICogR2V0cyBhbiBhdXRvbW9kIHJ1bGUgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBydWxlIG9mLlxuICAgKiBAcGFyYW0gcnVsZUlkIC0gVGhlIElEIG9mIHRoZSBydWxlIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNnZXQtYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAqL1xuICBnZXRBdXRvbW9kUnVsZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcnVsZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBhdXRvbW9kIHJ1bGVzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBydWxlcyBmcm9tLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgcnVsZSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jbGlzdC1hdXRvLW1vZGVyYXRpb24tcnVsZXMtZm9yLWd1aWxkfVxuICAgKi9cbiAgZ2V0QXV0b21vZFJ1bGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+W10+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdm9pY2UgcmVnaW9ucy5cbiAgICpcbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVm9pY2VSZWdpb259IG9iamVjdHMgYXNzb3J0ZWQgYnkgdm9pY2UgcmVnaW9uIElELlxuICAgKi9cbiAgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRWb2ljZVJlZ2lvbj5bXT47XG4gIC8qKlxuICAgKiBHZXRzIGEgYmFuIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGJhbiBmcm9tLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGdldCB0aGUgYmFuIGZvci5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRCYW59LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLWJhbn1cbiAgICovXG4gIGdldEJhbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEJhbj4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBiYW5zIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIGJhbnMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIGxpc3Qgb2YgYmFucy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkQmFufSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFVzZXJzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIElEcyBpbiBfYXNjZW5kaW5nXyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1iYW5zfVxuICAgKi9cbiAgZ2V0QmFuczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldEJhbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEJhbj5bXT47XG4gIC8qKlxuICAgKiBHZXRzIGEgY2hhbm5lbCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgY2hhbm5lbCBpcyBhIHRocmVhZCwgYSB7QGxpbmsgRGlzY29yZFRocmVhZE1lbWJlcn0gb2JqZWN0IGlzIGluY2x1ZGVkIGluIHRoZSByZXN1bHQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2dldC1jaGFubmVsfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludml0ZXMgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGludml0ZXMgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfSBvYmplY3RzIGFzc29ydGVkIGJ5IGludml0ZSBjb2RlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogT25seSB1c2FibGUgZm9yIGd1aWxkIGNoYW5uZWxzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtY2hhbm5lbC1pbnZpdGVzfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbEludml0ZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW52aXRlTWV0YWRhdGE+W10+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBjaGFubmVscyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgY2hhbm5lbHMgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY2hhbm5lbCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRXhjbHVkZXMgdGhyZWFkcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1jaGFubmVsc31cbiAgICovXG4gIGdldENoYW5uZWxzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPltdPjtcbiAgLyoqXG4gICAqIEdldHMgYSBsaXN0IG9mIHdlYmhvb2tzIGZvciBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgd2hpY2ggdG8gZ2V0IHRoZSB3ZWJob29rcyBvZi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkV2ViaG9va30gb2JqZWN0cyBhc3NvcnRlZCBieSB3ZWJob29rIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LWNoYW5uZWwtd2ViaG9va3N9XG4gICAqL1xuICBnZXRDaGFubmVsV2ViaG9va3M6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz5bXT47XG4gIC8qKlxuICAgKiBHZXRzIG9yIGNyZWF0ZXMgYSBETSBjaGFubmVsIHdpdGggYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGNyZWF0ZSB0aGUgRE0gY2hhbm5lbCB3aXRoLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvdXNlciNjcmVhdGUtZG19XG4gICAqL1xuICBnZXREbUNoYW5uZWw6ICh1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGdyb3VwIERNIGNoYW5uZWwgd2l0aCBtdWx0aXBsZSB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY3JlYXRlIGEgbmV3IGdyb3VwIGRtXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhY2Nlc3MgdG9rZW5zIHJlcXVpcmUgdG8gaGF2ZSB0aGUgYGdkbS5qb2luYCBzY29wZVxuICAgKlxuICAgKiBUaGlzIGVuZHBvaW50IGlzIGxpbWl0ZWQgdG8gMTAgYWN0aXZlIGdyb3VwIERNcy5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBjcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy91c2VyI2NyZWF0ZS1ncm91cC1kbX1cbiAgICovXG4gIGdldEdyb3VwRG1DaGFubmVsOiAob3B0aW9uczogQ3JlYXRlR3JvdXBEbU9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PjtcbiAgLyoqXG4gICAqIEdldHMgYW4gZW1vamkgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgZnJvbSB3aGljaCB0byBnZXQgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0gZW1vamlJZCAtIFRoZSBJRCBvZiB0aGUgZW1vamkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW5jbHVkZXMgdGhlIGB1c2VyYCBmaWVsZCBpZiB0aGUgYm90IGhhcyB0aGUgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbixcbiAgICogb3IgaWYgdGhlIGJvdCBjcmVhdGVkIHRoZSBlbW9qaSBhbmQgaGFzIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZW1vamkjZ2V0LWd1aWxkLWVtb2ppfVxuICAgKi9cbiAgZ2V0RW1vamk6IChndWlsZElkOiBCaWdTdHJpbmcsIGVtb2ppSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PjtcbiAgLyoqXG4gICAqIEdldHMgYW4gYXBwbGljYXRpb24gZW1vamkgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZW1vamlJZCAtIFRoZSBJRCBvZiB0aGUgZW1vamkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQWx3YXlzIGluY2x1ZGVzIHRoZSBgdXNlcmAgb2JqZWN0IGZvciB0aGUgdGVhbSBtZW1iZXIgdGhhdCB1cGxvYWRlZCB0aGUgZW1vamkgZnJvbSB0aGUgYXBwJ3Mgc2V0dGluZ3MsIG9yIGZvciB0aGUgYm90IHVzZXIgaWYgdXBsb2FkZWQgdXNpbmcgdGhlIEFQSS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2Vtb2ppI2dldC1hcHBsaWNhdGlvbi1lbW9qaX1cbiAgICovXG4gIGdldEFwcGxpY2F0aW9uRW1vamk6IChlbW9qaUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGVtb2ppcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHdoaWNoIHRvIGdldCB0aGUgZW1vamlzIG9mLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRFbW9qaX0gb2JqZWN0cyBhc3NvcnRlZCBieSBlbW9qaSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW5jbHVkZXMgYHVzZXJgIGZpZWxkcyBpZiB0aGUgYm90IGhhcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2Vtb2ppI2xpc3QtZ3VpbGQtZW1vamlzfVxuICAgKi9cbiAgZ2V0RW1vamlzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT5bXT47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGVtb2ppcyBmb3IgYW4gYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBhcnJheSBvZiB7QGxpbmsgRGlzY29yZEVtb2ppfSBvYmplY3RzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBBbHdheXMgaW5jbHVkZXMgdGhlIGB1c2VyYCBvYmplY3QgZm9yIHRoZSB0ZWFtIG1lbWJlciB0aGF0IHVwbG9hZGVkIHRoZSBlbW9qaSBmcm9tIHRoZSBhcHAncyBzZXR0aW5ncywgb3IgZm9yIHRoZSBib3QgdXNlciBpZiB1cGxvYWRlZCB1c2luZyB0aGUgQVBJLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZW1vamkjbGlzdC1hcHBsaWNhdGlvbi1lbW9qaXN9XG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbkVtb2ppczogKCkgPT4gUHJvbWlzZTx7IGl0ZW1zOiBDYW1lbGl6ZTxEaXNjb3JkRW1vamk+W10gfT47XG4gIC8qKlxuICAgKiBHZXRzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24gYnkgdGhlIElEIG9mIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGdldE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dDpcbiAgICogLSBOZWVkaW5nIHRvIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGF0IHRoZSBtZXNzYWdlIGlzIGluLiAoYFJFQURfTUVTU0FHRVNgIHBlcm1pc3Npb24uKVxuICAgKiAtIFJlcXVpcmluZyB0aGUgYE1FU1NBR0VfQ09OVEVOVGAgaW50ZW50LlxuICAgKlxuICAgKiBEb2VzIG5vdCBzdXBwb3J0IGVwaGVtZXJhbCBmb2xsb3ctdXAgbWVzc2FnZXMgZHVlIHRvIHRoZXNlIGJlaW5nIHN0YXRlbGVzcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNnZXQtZm9sbG93dXAtbWVzc2FnZX1cbiAgICovXG4gIGdldEZvbGxvd3VwTWVzc2FnZTogKHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj47XG4gIC8qKiBHZXQgdGhlIGJvdHMgR2F0ZXdheSBtZXRhZGF0YSB0aGF0IGNhbiBoZWxwIGR1cmluZyB0aGUgb3BlcmF0aW9uIG9mIGxhcmdlIG9yIHNoYXJkZWQgYm90cy4gKi9cbiAgZ2V0R2F0ZXdheUJvdDogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4+O1xuICAvKipcbiAgICogR2V0cyBhIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZDogKGNvbW1hbmRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgeW91ciBib3QncyBnbG9iYWwgYXBwbGljYXRpb24gY29tbWFuZHMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiBnbG9iYWwgYXBwbGljYXRpb24gY29tbWFuZHNcbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmRzfVxuICAgKi9cbiAgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kczogKG9wdGlvbnM/OiBHZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPltdPjtcbiAgLyoqXG4gICAqIEdldHMgYSBndWlsZCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgZ3VpbGQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkR3VpbGR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkfVxuICAgKi9cbiAgZ2V0R3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiB7IGNvdW50cz86IGJvb2xlYW4gfSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGQ+PjtcbiAgLyoqXG4gICAqIEdldCB0aGUgdXNlciBndWlsZHMuXG4gICAqXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXIsIGlmIHVuc3BlY2lmaWVkIHRoZSBib3QgdG9rZW4gaXMgdXNlZCBpbnN0ZWFkXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgZ3VpbGQuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcnRpYWwge0BsaW5rIERpc2NvcmRHdWlsZH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHVzZWQgd2l0aCBhbiBhY2Nlc3MgdG9rZW4sIHRoZSB0b2tlbiBuZWVkcyB0byBoYXZlIHRoZSBgZ3VpbGRzYCBzY29wZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvdXNlciNnZXQtY3VycmVudC11c2VyLWd1aWxkc31cbiAgICovXG4gIGdldEd1aWxkczogKGJlYXJlclRva2VuPzogc3RyaW5nLCBvcHRpb25zPzogR2V0VXNlckd1aWxkcykgPT4gUHJvbWlzZTxQYXJ0aWFsPENhbWVsaXplPERpc2NvcmRHdWlsZD4+W10+O1xuICAvKipcbiAgICogR2V0cyBhIGd1aWxkIGFwcGxpY2F0aW9uIGNvbW1hbmQgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kSWQ6IEJpZ1N0cmluZywgZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgYXBwbGljYXRpb24gY29tbWFuZHMgcmVnaXN0ZXJlZCBieSB5b3VyIGJvdCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmRzIGFyZSByZWdpc3RlcmVkIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgZ3VpbGQgYXBwbGljYXRpb24gY29tbWFuZHNcbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmRzc31cbiAgICovXG4gIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kc09wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD5bXT47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwcmV2aWV3IG9mIGEgZ3VpbGQgYnkgYSBndWlsZCdzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBwcmV2aWV3IG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEd1aWxkUHJldmlld30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHRoZSBib3QgdXNlciBpcyBub3QgaW4gdGhlIGd1aWxkLCB0aGUgZ3VpbGQgbXVzdCBiZSBkaXNjb3ZlcmFibGUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtcHJldmlld31cbiAgICovXG4gIGdldEd1aWxkUHJldmlldzogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRQcmV2aWV3Pj47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RpY2tlciBvYmplY3QgZm9yIHRoZSBnaXZlbiBndWlsZCBhbmQgc3RpY2tlciBJRHMuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0XG4gICAqIEBwYXJhbSBzdGlja2VySWQgVGhlIElEIG9mIHRoZSBzdGlja2VyIHRvIGdldFxuICAgKiBAcmV0dXJuIEEge0BsaW5rIERpc2NvcmRTdGlja2VyfVxuICAgKlxuICAgKiBAcmVtYXJrcyBJbmNsdWRlcyB0aGUgdXNlciBmaWVsZCBpZiB0aGUgYm90IGhhcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3N0aWNrZXIjZ2V0LWd1aWxkLXN0aWNrZXJ9XG4gICAqL1xuICBnZXRHdWlsZFN0aWNrZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHN0aWNrZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGlja2VyPj47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHN0aWNrZXIgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRTdGlja2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHN0aWNrZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzIEluY2x1ZGVzIHVzZXIgZmllbGRzIGlmIHRoZSBib3QgaGFzIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvc3RpY2tlciNsaXN0LWd1aWxkLXN0aWNrZXJzfVxuICAgKi9cbiAgZ2V0R3VpbGRTdGlja2VyczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlcj5bXT47XG4gIC8qKlxuICAgKiBHZXRzIGEgdGVtcGxhdGUgYnkgaXRzIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZUNvZGUgLSBUaGUgY29kZSBvZiB0aGUgdGVtcGxhdGUgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFRlbXBsYXRlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBnZXRHdWlsZFRlbXBsYXRlOiAodGVtcGxhdGVDb2RlOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHRlbXBsYXRlcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXMgZm9yLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRUZW1wbGF0ZX0gb2JqZWN0cyBhc3NvcnRlZCBieSB0ZW1wbGF0ZSBjb2RlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI2dldC1ndWlsZC10ZW1wbGF0ZXN9XG4gICAqL1xuICBnZXRHdWlsZFRlbXBsYXRlczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+W10+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB3ZWJob29rcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiB3ZWJob29rcyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9IG9iamVjdHMgYXNzb3J0ZWQgYnkgd2ViaG9vayBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy93ZWJob29rI2dldC1ndWlsZC13ZWJob29rc31cbiAgICovXG4gIGdldEd1aWxkV2ViaG9va3M6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+W10+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBpbnRlZ3JhdGlvbnMgYXR0YWNoZWQgdG8gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiBpbnRlZ3JhdGlvbnMgZnJvbS5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkSW50ZWdyYXRpb259IG9iamVjdHMgYXNzb3J0ZWQgYnkgaW50ZWdyYXRpb24gSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLWludGVncmF0aW9uc31cbiAgICovXG4gIGdldEludGVncmF0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW50ZWdyYXRpb24+W10+O1xuICAvKipcbiAgICogR2V0cyBhbiBpbnZpdGUgdG8gYSBjaGFubmVsIGJ5IGl0cyBpbnZpdGUgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIGludml0ZUNvZGUgLSBUaGUgaW52aXRlIGNvZGUgb2YgdGhlIGludml0ZSB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgaW52aXRlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2ludml0ZSNnZXQtaW52aXRlfVxuICAgKi9cbiAgZ2V0SW52aXRlOiAoaW52aXRlQ29kZTogc3RyaW5nLCBvcHRpb25zPzogR2V0SW52aXRlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGVNZXRhZGF0YT4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBpbnZpdGVzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBpbnZpdGVzIGZyb20uXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfSBvYmplY3RzIGFzc29ydGVkIGJ5IGludml0ZSBjb2RlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgb3IgYFZJRVdfQVVESVRfTE9HYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvaW52aXRlI2dldC1pbnZpdGVzfVxuICAgKi9cbiAgZ2V0SW52aXRlczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW52aXRlTWV0YWRhdGE+W10+O1xuICAvKipcbiAgICogR2V0cyBhIG1lc3NhZ2UgZnJvbSBhIGNoYW5uZWwgYnkgdGhlIElEIG9mIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGZyb20gd2hpY2ggdG8gZ2V0IHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhhdCB0aGUgYm90IHVzZXIgYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRoZSBtZXNzYWdlIHdhcyBwb3N0ZWQuXG4gICAqXG4gICAqIElmIGdldHRpbmcgYSBtZXNzYWdlIGZyb20gYSBndWlsZCBjaGFubmVsOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2dldC1jaGFubmVsLW1lc3NhZ2V9XG4gICAqL1xuICBnZXRNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj47XG4gIC8qKlxuICAgKiBHZXRzIG11bHRpcGxlIG1lc3NhZ2VzIGZyb20gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGZyb20gd2hpY2ggdG8gZ2V0IHRoZSBtZXNzYWdlcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBtZXNzYWdlcy5cbiAgICogQHJldHVybnMgUmV0dXJucyBhbiBhcnJheSBvZiB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9IG9iamVjdHMgZnJvbSBuZXdlc3QgdG8gb2xkZXN0IG9uIHN1Y2Nlc3MuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoYXQgdGhlIGJvdCB1c2VyIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0aGUgbWVzc2FnZXMgd2VyZSBwb3N0ZWQuXG4gICAqXG4gICAqIElmIGdldHRpbmcgYSBtZXNzYWdlcyBmcm9tIGEgZ3VpbGQgY2hhbm5lbDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtY2hhbm5lbC1tZXNzYWdlc31cbiAgICovXG4gIGdldE1lc3NhZ2VzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRNZXNzYWdlc09wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+W10+O1xuICAvKipcbiAgICogUmV0dXJucyBhIHN0aWNrZXIgcGFjayBmb3IgdGhlIGdpdmVuIElELlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEaXNjb3JkU3RpY2tlclBhY2t9IG9iamVjdC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3N0aWNrZXIjZ2V0LXN0aWNrZXItcGFja31cbiAgICovXG4gIGdldFN0aWNrZXJQYWNrOiAoc3RpY2tlclBhY2tJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGlja2VyUGFjaz4+O1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBzdGlja2VyIHBhY2tzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkU3RpY2tlclBhY2t9IG9iamVjdHMgYXNzb3J0ZWQgYnkgc3RpY2tlciBJRC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3N0aWNrZXIjbGlzdC1zdGlja2VyLXBhY2tzfVxuICAgKi9cbiAgZ2V0U3RpY2tlclBhY2tzOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGlja2VyUGFjaz5bXT47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbml0aWFsIG1lc3NhZ2UgcmVzcG9uc2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBnZXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQ6XG4gICAqIC0gTmVlZGluZyB0byBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbi4gKGBSRUFEX01FU1NBR0VTYCBwZXJtaXNzaW9uLilcbiAgICogLSBSZXF1aXJpbmcgdGhlIGBNRVNTQUdFX0NPTlRFTlRgIGludGVudC5cbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZ2V0LW9yaWdpbmFsLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgKi9cbiAgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlOiAodG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+O1xuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHBpbnMgaW4gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgcGlucyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgcGlucy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzY29yZEdldENoYW5uZWxQaW5zfSBvYmplY3RzXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgVklFV19DSEFOTkVMYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiB0aGUgdXNlciBpcyBtaXNzaW5nIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24gaW4gdGhlIGNoYW5uZWwsIHRoZW4gbm8gcGlucyB3aWxsIGJlIHJldHVybmVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvbWVzc2FnZSNnZXQtY2hhbm5lbC1waW5zfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbFBpbnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldENoYW5uZWxQaW5zT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR2V0Q2hhbm5lbFBpbnM+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIHBpbm5lZCBtZXNzYWdlcyBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgcGlubmVkIG1lc3NhZ2VzIGZvci5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkTWVzc2FnZX0gb2JqZWN0cyBhc3NvcnRlZCBieSBtZXNzYWdlIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGF0IHRoZSBib3QgdXNlciBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdGhlIG1lc3NhZ2VzIHdlcmUgcG9zdGVkLlxuICAgKlxuICAgKiBJZiBnZXR0aW5nIGEgbWVzc2FnZSBmcm9tIGEgZ3VpbGQgY2hhbm5lbDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvbWVzc2FnZSNnZXQtcGlubmVkLW1lc3NhZ2VzLWRlcHJlY2F0ZWR9XG4gICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgZ2V0Q2hhbm5lbFBpbnN9IGluc3RlYWQuXG4gICAqL1xuICBnZXRQaW5uZWRNZXNzYWdlczogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPltdPjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgcHJpdmF0ZSBhcmNoaXZlZCB0aHJlYWRzIGZvciBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBhcmNoaXZlZCB0aHJlYWRzIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRocmVhZHMuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJldHVybnMgdGhyZWFkcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkUHJpdmF0ZVRocmVhZC5cbiAgICpcbiAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGFyY2hpdmVfdGltZXN0YW1wYCBwcm9wZXJ0eSBpbmNsdWRlZCBpbiB0aGUgbWV0YWRhdGEgb2YgdGhlIG9iamVjdCBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNsaXN0LXByaXZhdGUtYXJjaGl2ZWQtdGhyZWFkc31cbiAgICovXG4gIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RBcmNoaXZlZFRocmVhZHMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgcHJpdmF0ZSBhcmNoaXZlZCB0aHJlYWRzIHRoZSBib3QgaXMgYSBtZW1iZXIgb2YgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGFyY2hpdmVkIHRocmVhZHMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhyZWFkcy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogUmV0dXJucyB0aHJlYWRzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRQcml2YXRlVGhyZWFkLlxuICAgKlxuICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgaWRgIHByb3BlcnR5IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2xpc3Qtam9pbmVkLXByaXZhdGUtYXJjaGl2ZWQtdGhyZWFkc31cbiAgICovXG4gIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RBcmNoaXZlZFRocmVhZHMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWJlciBvZiBtZW1iZXJzIHRoYXQgd291bGQgYmUga2lja2VkIGZyb20gYSBndWlsZCBkdXJpbmcgcHJ1bmluZy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgcHJ1bmUgY291bnQgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgcHJ1bmUgY291bnQuXG4gICAqIEByZXR1cm5zIEEgbnVtYmVyIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBtZW1iZXJzIHRoYXQgd291bGQgYmUga2lja2VkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgYW5kIGBLSUNLX01FTUJFUlNgIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXBydW5lLWNvdW50fVxuICAgKi9cbiAgZ2V0UHJ1bmVDb3VudDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldEd1aWxkUHJ1bmVDb3VudFF1ZXJ5KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRQcnVuZWRDb3VudD4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBwdWJsaWMgYXJjaGl2ZWQgdGhyZWFkcyBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aHJlYWRzLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHN9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRUZXh0LCByZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZFB1YmxpY1RocmVhZC5cbiAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkTmV3cywgcmV0dXJucyB0aHJlYWRzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGROZXdzVGhyZWFkLlxuICAgKlxuICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgYXJjaGl2ZV90aW1lc3RhbXBgIHByb3BlcnR5IGluY2x1ZGVkIGluIHRoZSBtZXRhZGF0YSBvZiB0aGUgb2JqZWN0IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2xpc3QtcHVibGljLWFyY2hpdmVkLXRocmVhZHN9XG4gICAqL1xuICBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RBcmNoaXZlZFRocmVhZHMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygcm9sZXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2Ygcm9sZXMgZm9yLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRSb2xlfSBvYmplY3RzIGFzc29ydGVkIGJ5IHJvbGUgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBUaGlzIGVuZHBvaW50IHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSBkdWUgdG8ge0BsaW5rIERpc2NvcmRSb2xlfSBvYmplY3RzIGFscmVhZHkgYmVpbmcgaW5jbHVkZWQgaW4gZ3VpbGQgcGF5bG9hZHMuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtcm9sZXN9XG4gICAqL1xuICBnZXRSb2xlczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZT5bXT47XG4gIC8qKlxuICAgKiBHZXRzIGEgcm9sZSBieSBpZCBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCByb2xlIGZvci5cbiAgICogQHBhcmFtIHJvbGVJZCAtIFRoZSBJRCBvZiB0aGUgcm9sZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzY29yZFJvbGV9IG9iamVjdC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1yb2xlfVxuICAgKi9cbiAgZ2V0Um9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGU+PjtcbiAgLyoqXG4gICAqIEdldHMgYSBzY2hlZHVsZWQgZXZlbnQgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBzY2hlZHVsZWQgZXZlbnQgZnJvbS5cbiAgICogQHBhcmFtIGV2ZW50SWQgLSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudCB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFNjaGVkdWxlZEV2ZW50fS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNnZXQtZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgKi9cbiAgZ2V0U2NoZWR1bGVkRXZlbnQ6IChndWlsZElkOiBCaWdTdHJpbmcsIGV2ZW50SWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IHsgd2l0aFVzZXJDb3VudD86IGJvb2xlYW4gfSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygc2NoZWR1bGVkIGV2ZW50cyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc2NoZWR1bGVkIGV2ZW50cyBmcm9tLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHNjaGVkdWxlZCBldmVudHMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFNjaGVkdWxlZEV2ZW50fSBvYmplY3RzIGFzc29ydGVkIGJ5IGV2ZW50IElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2xpc3Qtc2NoZWR1bGVkLWV2ZW50cy1mb3ItZ3VpbGR9XG4gICAqL1xuICBnZXRTY2hlZHVsZWRFdmVudHM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudHMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50PltdPjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygc3Vic2NyaWJlcnMgdG8gYSBzY2hlZHVsZWQgZXZlbnQgZnJvbSBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBzdWJzY3JpYmVycyB0byB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZ2V0IHRoZSBzdWJzY3JpYmVycyBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBzdWJzY3JpYmVycy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVXNlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FVkVOVFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFVzZXJzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIElEcyBpbiBfYXNjZW5kaW5nXyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNnZXQtZ3VpbGQtc2NoZWR1bGVkLWV2ZW50LXVzZXJzfVxuICAgKi9cbiAgZ2V0U2NoZWR1bGVkRXZlbnRVc2VyczogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBldmVudElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9ucz86IEdldFNjaGVkdWxlZEV2ZW50VXNlcnMsXG4gICkgPT4gUHJvbWlzZTxBcnJheTx7IHVzZXI6IENhbWVsaXplPERpc2NvcmRVc2VyPjsgbWVtYmVyPzogQ2FtZWxpemU8RGlzY29yZE1lbWJlcj4gfT4+O1xuICAvKiogR2V0IHRoZSBib3RzIEdhdGV3YXkgbWV0YWRhdGEgdGhhdCBjYW4gaGVscCBkdXJpbmcgdGhlIG9wZXJhdGlvbiBvZiBsYXJnZSBvciBzaGFyZGVkIGJvdHMuICovXG4gIGdldFNlc3Npb25JbmZvOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHZXRHYXRld2F5Qm90Pj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLCBpZiBvbmUgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkU3RhZ2VJbnN0YW5jZX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9zdGFnZS1pbnN0YW5jZSNnZXQtc3RhZ2UtaW5zdGFuY2V9XG4gICAqL1xuICBnZXRTdGFnZUluc3RhbmNlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0YWdlSW5zdGFuY2U+PjtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdXNlcidzIHZvaWNlIHN0YXRlIGluIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgdm9pY2Ugc3RhdGUgZnJvbS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRWb2ljZVN0YXRlfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3ZvaWNlI2dldC1jdXJyZW50LXVzZXItdm9pY2Utc3RhdGV9XG4gICAqL1xuICBnZXRPd25Wb2ljZVN0YXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRWb2ljZVN0YXRlPj47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgdXNlcidzIHZvaWNlIHN0YXRlIGluIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgdm9pY2Ugc3RhdGUgZnJvbS5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBnZXQgdGhlIHZvaWNlIHN0YXRlIGZyb21cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRWb2ljZVN0YXRlfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3ZvaWNlI2dldC11c2VyLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgZ2V0VXNlclZvaWNlU3RhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRWb2ljZVN0YXRlPj47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RpY2tlciBvYmplY3QgZm9yIHRoZSBnaXZlbiBzdGlja2VyIElELlxuICAgKlxuICAgKiBAcGFyYW0gc3RpY2tlcklkIFRoZSBJRCBvZiB0aGUgc3RpY2tlciB0byBnZXRcbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJ9XG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9zdGlja2VyI2dldC1zdGlja2VyfVxuICAgKi9cbiAgZ2V0U3RpY2tlcjogKHN0aWNrZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGlja2VyPj47XG4gIC8qKlxuICAgKiBHZXRzIGEgdGhyZWFkIG1lbWJlciBieSB0aGVpciB1c2VyIElELlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gZ2V0IHRoZSB0aHJlYWQgbWVtYmVyIG9mLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIHRocmVhZCBtZW1iZXIgdG8gZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHRocmVhZCBtZW1iZXIuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkVGhyZWFkTWVtYmVyfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LXRocmVhZC1tZW1iZXJ9XG4gICAqL1xuICBnZXRUaHJlYWRNZW1iZXI6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRUaHJlYWRNZW1iZXIpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRocmVhZE1lbWJlcj4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB0aHJlYWQgbWVtYmVycyBmb3IgYSB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byBnZXQgdGhlIHRocmVhZCBtZW1iZXJzIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHRocmVhZCBtZW1iZXJzLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRUaHJlYWRNZW1iZXJ9IGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBhcHBsaWNhdGlvbiB0byBoYXZlIHRoZSBgR1VJTERfTUVNQkVSU2AgcHJpdmlsZWdlZCBpbnRlbnQgZW5hYmxlZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC10aHJlYWQtbWVtYmVyc31cbiAgICovXG4gIGdldFRocmVhZE1lbWJlcnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RUaHJlYWRNZW1iZXJzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUaHJlYWRNZW1iZXI+W10+O1xuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB1c2VycyB0aGF0IHJlYWN0ZWQgd2l0aCBhbiBlbW9qaSB0byBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgdG8gZ2V0IHRoZSB1c2VycyBmb3IgaXMgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZ2V0IHRoZSB1c2VycyBmb3IuXG4gICAqIEBwYXJhbSByZWFjdGlvbiAtIFRoZSByZWFjdGlvbiBmb3Igd2hpY2ggdG8gZ2V0IHRoZSB1c2Vycy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSB1c2Vycy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVXNlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtcmVhY3Rpb25zfVxuICAgKi9cbiAgZ2V0UmVhY3Rpb25zOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFjdGlvbjogc3RyaW5nLCBvcHRpb25zPzogR2V0UmVhY3Rpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRVc2VyPltdPjtcbiAgLyoqXG4gICAqIEdldCBhIHVzZXIncyBkYXRhIGZyb20gdGhlIGFwaVxuICAgKlxuICAgKiBAcGFyYW0gaWQgVGhlIHVzZXIncyBpZFxuICAgKiBAcmV0dXJucyB7RGlzY29yZFVzZXJ9XG4gICAqL1xuICBnZXRVc2VyOiAoaWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVXNlcj4+O1xuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHVzZXIgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlclxuICAgKiBAcmV0dXJucyB7RGlzY29yZFVzZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhlIGBpZGVudGlmeWAgc2NvcGUuXG4gICAqXG4gICAqIFRvIGdldCB0aGUgbWFpbCB0aGlzIGFsc28gcmVxdWlyZXMgdGhlIGBlbWFpbGAgc2NvcGVcbiAgICovXG4gIGdldEN1cnJlbnRVc2VyOiAoYmVhcmVyVG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVXNlcj4+O1xuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHVzZXIgY29ubmVjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXJcbiAgICogQHJldHVybnMge0Rpc2NvcmRDb25uZWN0aW9uW119XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhlIGBjb25uZWN0aW9uc2Agc2NvcGUuXG4gICAqL1xuICBnZXRVc2VyQ29ubmVjdGlvbnM6IChiZWFyZXJUb2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDb25uZWN0aW9uPltdPjtcbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB1c2VyIGFwcGxpY2F0aW9uIHJvbGUgY29ubmVjdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuIG9mIHRoZSB1c2VyXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGlkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIHJvbGUgY29ubmVjdGlvblxuICAgKiBAcmV0dXJucyB7RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb259XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhY2Nlc3MgdG9rZW4gcmVxdWlyZXMgdGhlIGByb2xlX2Nvbm5lY3Rpb25zLndyaXRlYCBzY29wZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3VzZXIjZ2V0LXVzZXItYXBwbGljYXRpb24tcm9sZS1jb25uZWN0aW9ufVxuICAgKi9cbiAgZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb246IChiZWFyZXJUb2tlbjogc3RyaW5nLCBhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+PjtcbiAgLyoqXG4gICAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhbml0eSB1cmwgb2YgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgdmFuaXR5IHVybCBpbmZvcm1hdGlvbiBmb3IuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkVmFuaXR5VXJsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFRoZSBgY29kZWAgcHJvcGVydHkgd2lsbCBiZSBgbnVsbGAgaWYgdGhlIGd1aWxkIGRvZXMgbm90IGhhdmUgYSBzZXQgdmFuaXR5IHVybC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC12YW5pdHktdXJsfVxuICAgKi9cbiAgZ2V0VmFuaXR5VXJsOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRWYW5pdHlVcmw+PjtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygdm9pY2UgcmVnaW9ucyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgdm9pY2UgcmVnaW9ucyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFZvaWNlUmVnaW9ufSBvYmplY3RzIGFzc29ydGVkIGJ5IHZvaWNlIHJlZ2lvbiBJRC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC12b2ljZS1yZWdpb25zfVxuICAgKi9cbiAgZ2V0Vm9pY2VSZWdpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRWb2ljZVJlZ2lvbj5bXT47XG4gIC8qKlxuICAgKiBHZXRzIGEgd2ViaG9vayBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbiB1bmxlc3MgdGhlIGFwcGxpY2F0aW9uIG1ha2luZyB0aGUgcmVxdWVzdCBvd25zIHRoZSB3ZWJob29rLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtd2ViaG9va31cbiAgICovXG4gIGdldFdlYmhvb2s6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+O1xuICAvKipcbiAgICogR2V0cyBhIHdlYmhvb2sgbWVzc2FnZSBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZ2V0IGEgbWVzc2FnZSBvZi5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZ2V0IHdlYmhvb2sgbWVzc2FnZXMuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSB0aGUgSUQgb2YgdGhlIHdlYmhvb2sgbWVzc2FnZSB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2stbWVzc2FnZX1cbiAgICovXG4gIGdldFdlYmhvb2tNZXNzYWdlOiAoXG4gICAgd2ViaG9va0lkOiBCaWdTdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBtZXNzYWdlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zPzogR2V0V2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PjtcbiAgLyoqXG4gICAqIEdldHMgYSB3ZWJob29rIHVzaW5nIHRoZSB3ZWJob29rIHRva2VuLCB0aGVyZWJ5IGJ5cGFzc2luZyB0aGUgbmVlZCBmb3IgYXV0aGVudGljYXRpb24gKyBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBnZXQuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGdldCB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2std2l0aC10b2tlbn1cbiAgICovXG4gIGdldFdlYmhvb2tXaXRoVG9rZW46ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgd2VsY29tZSBzY3JlZW4gZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHdlbGNvbWUgc2NyZWVuIGZvci5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRXZWxjb21lU2NyZWVufS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgdGhlIHdlbGNvbWUgc2NyZWVuIGlzIG5vdCBlbmFibGVkOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXdlbGNvbWUtc2NyZWVufVxuICAgKi9cbiAgZ2V0V2VsY29tZVNjcmVlbjogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2VsY29tZVNjcmVlbj4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgZ3VpbGQgd2lkZ2V0IGJ5IGd1aWxkIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB3aWRnZXQgb2YuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkR3VpbGRXaWRnZXR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhbiBgSU5WSVRFX0NSRUFURURgIEdhdGV3YXkgZXZlbnQgd2hlbiBhbiBpbnZpdGUgY2hhbm5lbCBpcyBkZWZpbmVkIGFuZCBhIG5ldyBgSW52aXRlYCBpcyBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtd2lkZ2V0fVxuICAgKi9cbiAgZ2V0V2lkZ2V0OiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZFdpZGdldD4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgc2V0dGluZ3Mgb2YgYSBndWlsZCdzIHdpZGdldC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgd2lkZ2V0IG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3N9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC13aWRnZXQtc2V0dGluZ3N9XG4gICAqL1xuICBnZXRXaWRnZXRTZXR0aW5nczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4+O1xuICAvKipcbiAgICogQWRkcyB0aGUgYm90IHVzZXIgdG8gYSB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byBhZGQgdGhlIGJvdCB1c2VyIHRvLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgdGhyZWFkIG5vdCBiZSBhcmNoaXZlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIE1lbWJlcnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNqb2luLXRocmVhZH1cbiAgICovXG4gIGpvaW5UaHJlYWQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIExlYXZlcyBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gbGVhdmUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX0d1aWxkIERlbGV0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy91c2VyI2xlYXZlLWd1aWxkfVxuICAgKi9cbiAgbGVhdmVHdWlsZDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGJvdCB1c2VyIGZyb20gYSB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byByZW1vdmUgdGhlIGJvdCB1c2VyIGZyb20uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI2xlYXZlLXRocmVhZH1cbiAgICovXG4gIGxlYXZlVGhyZWFkOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBDcm9zcy1wb3N0cyBhIG1lc3NhZ2UgcG9zdGVkIGluIGFuIGFubm91bmNlbWVudCBjaGFubmVsIHRvIHN1YnNjcmliZWQgY2hhbm5lbHMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGFubm91bmNlbWVudCBjaGFubmVsLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGNyb3NzLXBvc3QuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcm9zcy1wb3N0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBTRU5EX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBub3QgY3Jvc3MtcG9zdGluZyBvd24gbWVzc2FnZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBDcmVhdGVfIGV2ZW50IGluIHRoZSBndWlsZHMgdGhlIHN1YnNjcmliZWQgY2hhbm5lbHMgYXJlIGluLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNjcm9zc3Bvc3QtbWVzc2FnZX1cbiAgICovXG4gIHB1Ymxpc2hNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj47XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcm9sZSBmcm9tIGEgbWVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIG1lbWJlciB0byByZW1vdmUgdGhlIHJvbGUgZnJvbSBpcyBpbi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gcmVtb3ZlIHRoZSByb2xlIGZyb20uXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gcmVtb3ZlIGZyb20gdGhlIG1lbWJlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI3JlbW92ZS1ndWlsZC1tZW1iZXItcm9sZX1cbiAgICovXG4gIHJlbW92ZVJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogUmVtb3ZlcyBhIG1lbWJlciBmcm9tIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gcmVtb3ZlIHRoZSB0aHJlYWQgbWVtYmVyIG9mLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIHRocmVhZCBtZW1iZXIgdG8gcmVtb3ZlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgdGhyZWFkIGlzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRQcml2YXRlVGhyZWFkLCByZXF1aXJlcyB0byBiZSB0aGUgY3JlYXRvciBvZiB0aGUgdGhyZWFkLlxuICAgKiBPdGhlcndpc2UsIHJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9jaGFubmVsI3JlbW92ZS10aHJlYWQtbWVtYmVyfVxuICAgKi9cbiAgcmVtb3ZlVGhyZWFkTWVtYmVyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogUmVtb3ZlcyBhIG1lbWJlciBmcm9tIGEgR3JvdXAgRE0uXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gcmVtb3ZlIHRoZSByZWNpcGllbnQgdXNlciBvZi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSB1c2VyIHRvIHJlbW92ZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjZ3JvdXAtZG0tcmVtb3ZlLXJlY2lwaWVudH1cbiAgICovXG4gIHJlbW92ZURtUmVjaXBpZW50OiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogU2VuZHMgYSBtZXNzYWdlIHRvIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBzZW5kIHRoZSBtZXNzYWdlIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoYXQgdGhlIGJvdCB1c2VyIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyB0byBiZSBzZW50IGluLlxuICAgKlxuICAgKiBJZiBzZW5kaW5nIGEgbWVzc2FnZSB0byBhIGd1aWxkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBTRU5EX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBzZW5kaW5nIGEgVFRTIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBTRU5EX1RUU19NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgc2VuZGluZyBhIG1lc3NhZ2UgYXMgYSByZXBseSB0byBhbm90aGVyIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICogLSBUaGUgbWVzc2FnZSBiZWluZyByZXBsaWVkIHRvIGNhbm5vdCBiZSBhIHN5c3RlbSBtZXNzYWdlLlxuICAgKlxuICAgKiDimqDvuI8gVGhlIG1heGltdW0gc2l6ZSBvZiBhIHJlcXVlc3QgKGFjY291bnRpbmcgZm9yIGFueSBhdHRhY2htZW50cyBhbmQgbWVzc2FnZSBjb250ZW50KSBmb3IgYm90IHVzZXJzIGlzIF84IE1pQl8uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvY2hhbm5lbCNjcmVhdGUtbWVzc2FnZX1cbiAgICovXG4gIHNlbmRNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZU1lc3NhZ2VPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj47XG4gIC8qKlxuICAgKiBTZW5kcyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIEludGVyYWN0aW9uIHRva2VucyBhcmUgb25seSB2YWxpZCBmb3IgXzE1IG1pbnV0ZXNfLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtZW50aW9ucyBhcmUgc3VwcHJlc3NlZC4gVG8gZW5hYmxlIG1lbnRpb25zLCBwYXNzIGEgbWVudGlvbiBvYmplY3Qgd2l0aCB0aGUgY2FsbGJhY2sgZGF0YS5cbiAgICpcbiAgICogVW5saWtlIGBzZW5kTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIEFwcHMgYXJlIGxpbWl0ZWQgdG8gNSBmb2xsb3d1cCBtZXNzYWdlcyBwZXIgaW50ZXJhY3Rpb24gaWYgaXQgd2FzIGluaXRpYXRlZCBmcm9tIGEgdXNlci1pbnN0YWxsZWQgYXBwIGFuZCBpc24ndCBpbnN0YWxsZWQgaW4gdGhlIHNlcnZlclxuICAgKiBZb3UgY2FuIGNoZWNrIGlmIGl0IHdhcyBpbml0aWF0ZWQgZnJvbSBhIHVzZXItaW5zdGFsbGVkIGFwcCB0aGF0IGlzbid0IGluc3RhbGxlZCBpbiB0aGUgc2VydmVyIGJ5IGNoZWNraW5nIGlmIHtAbGluayBEaXNjb3JkSW50ZXJhY3Rpb24uYXV0aG9yaXppbmdfaW50ZWdyYXRpb25fb3duZXJzIHwgYXV0aG9yaXppbmdJbnRlZ3JhdGlvbk93bmVyc30gb25seSBjb250YWlucyB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uSW50ZWdyYXRpb25UeXBlLlVzZXJJbnN0YWxsIHwgVXNlckluc3RhbGx9LlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjY3JlYXRlLWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAqL1xuICBzZW5kRm9sbG93dXBNZXNzYWdlOiAodG9rZW46IHN0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PjtcbiAgLyoqXG4gICAqIFNlbmRzIGEgcmVzcG9uc2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBpbnRlcmFjdGlvbklkIC0gVGhlIElEIG9mIHRoZSBpbnRlcmFjdGlvbiB0byByZXNwb25kIHRvLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgcmVzcG9uc2Ugb2YgdGhlIGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIE5vdGhpbmcgb3IgdGhlIHtAbGluayBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlfSBpZiB3aXRoUmVzcG9uc2UgcGFyYW0gaXMgdHJ1ZVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDimqDvuI8gSW50ZXJhY3Rpb24gdG9rZW5zIGFyZSBvbmx5IHZhbGlkIGZvciBfMTUgbWludXRlc18uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIG1lbnRpb25zIGFyZSBzdXBwcmVzc2VkLiBUbyBlbmFibGUgbWVudGlvbnMsIHBhc3MgYSBtZW50aW9uIG9iamVjdCB3aXRoIHRoZSBjYWxsYmFjayBkYXRhLlxuICAgKlxuICAgKiBVbmxpa2UgYHNlbmRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQ6XG4gICAqIC0gTmVlZGluZyB0byBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbi4gKGBSRUFEX01FU1NBR0VTYCBwZXJtaXNzaW9uLilcbiAgICogLSBSZXF1aXJpbmcgdGhlIGBNRVNTQUdFX0NPTlRFTlRgIGludGVudC5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBDcmVhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2NyZWF0ZS1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICovXG4gIHNlbmRJbnRlcmFjdGlvblJlc3BvbnNlOiAoXG4gICAgaW50ZXJhY3Rpb25JZDogQmlnU3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSW50ZXJhY3Rpb25SZXNwb25zZSxcbiAgICBwYXJhbXM/OiBJbnRlcmFjdGlvbkNhbGxiYWNrT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPHZvaWQgfCBDYW1lbGl6ZTxEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlPj47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGhyZWFkLCB1c2luZyBhbiBleGlzdGluZyBtZXNzYWdlIGFzIGl0cyBwb2ludCBvZiBvcmlnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSB0aHJlYWQuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gdXNlIGFzIHRoZSB0aHJlYWQncyBwb2ludCBvZiBvcmlnaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgdG8gdXNlIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRUZXh0LCBjcmVhdGVzIGEge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRQdWJsaWNUaHJlYWQuXG4gICAqIElmIGNhbGxlZCBvbiBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZE5ld3MsIGNyZWF0ZXMgYSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZE5ld3NUaHJlYWQuXG4gICAqIERvZXMgbm90IHdvcmsgb24gY2hhbm5lbHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZEZvcnVtLlxuICAgKlxuICAgKiBUaGUgSUQgb2YgdGhlIGNyZWF0ZWQgdGhyZWFkIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIElEIG9mIHRoZSBzb3VyY2UgbWVzc2FnZS5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjc3RhcnQtdGhyZWFkLWZyb20tbWVzc2FnZX1cbiAgICovXG4gIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2U6IChcbiAgICBjaGFubmVsSWQ6IEJpZ1N0cmluZyxcbiAgICBtZXNzYWdlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBTdGFydFRocmVhZFdpdGhNZXNzYWdlLFxuICAgIHJlYXNvbj86IHN0cmluZyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGhyZWFkIHdpdGhvdXQgdXNpbmcgYSBtZXNzYWdlIGFzIHRoZSB0aHJlYWQncyBwb2ludCBvZiBvcmlnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSB0aHJlYWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgdG8gdXNlIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWwgfCBUaHJlYWR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBDcmVhdGluZyBhIHByaXZhdGUgdGhyZWFkIHJlcXVpcmVzIHRoZSBzZXJ2ZXIgdG8gYmUgYm9vc3RlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjc3RhcnQtdGhyZWFkLXdpdGhvdXQtbWVzc2FnZX1cbiAgICovXG4gIHN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogU3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj47XG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIHVzZXJzIHRoYXQgdm90ZWQgZm9yIHRoaXMgc3BlY2lmaWMgYW5zd2VyLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRoZSBtZXNzYWdlIHdpdGggdGhlIHBvbGwgbGl2ZXNcbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSBpbiB3aGljaCB0aGUgcG9sbCBsaXZlc1xuICAgKiBAcGFyYW0gYW5zd2VySWQgLSBUaGUgSUQgb2YgdGhlIGFuc3dlciB0byBnZXQgdGhlIHVzZXJzIHRoYXQgdm90ZWQgdGhhdCBhbnN3ZXJcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGxpc3Qgb2YgdXNlcnMgdGhhdCB2b3RlZCBmb3IgdGhlIHNwZWNpZmljIGFuc3dlci5cbiAgICovXG4gIGdldFBvbGxBbnN3ZXJWb3RlcnM6IChcbiAgICBjaGFubmVsSWQ6IEJpZ1N0cmluZyxcbiAgICBtZXNzYWdlSWQ6IEJpZ1N0cmluZyxcbiAgICBhbnN3ZXJJZDogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBHZXRQb2xsQW5zd2VyVm90ZXMsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4+O1xuICAvKipcbiAgICogSW1tZWRpYXRlbHkgZW5kcyB0aGUgcG9sbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0aGUgbWVzc2FnZSB3aXRoIHRoZSBwb2xsIGxpdmVzXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgaW4gd2hpY2ggdGhlIHBvbGwgbGl2ZXNcbiAgICogQHJldHVybnMgVGhlIG1lc3NhZ2Ugd2l0aCB0aGUgZXhwaXJlZCBwb2xsXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFlvdSBjYW5ub3QgZW5kIHBvbGxzIGZyb20gb3RoZXIgdXNlcnMuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50XG4gICAqL1xuICBlbmRQb2xsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj47XG4gIC8qKlxuICAgKiBTeW5jaHJvbmlzZXMgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBzeW5jaHJvbmlzZSBhIHRlbXBsYXRlIG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkVGVtcGxhdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZ2V0LWd1aWxkLXRlbXBsYXRlc31cbiAgICovXG4gIHN5bmNHdWlsZFRlbXBsYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+O1xuICAvKipcbiAgICogVHJpZ2dlcnMgYSB0eXBpbmcgaW5kaWNhdG9yIGZvciB0aGUgc3BlY2lmaWVkIGNoYW5uZWwsIHdoaWNoIGV4cGlyZXMgYWZ0ZXIgMTAgc2Vjb25kcy5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0byB0cmlnZ2VyIHRoZSB0eXBpbmcgaW5kaWNhdG9yLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBHZW5lcmFsbHkgYm90cyBzaG91bGQgKipub3QqKiB1c2UgdGhpcyByb3V0ZS5cbiAgICogSG93ZXZlciwgaWYgYSBib3QgaXMgcmVzcG9uZGluZyB0byBhIGNvbW1hbmQgYW5kIGV4cGVjdHMgdGhlIGNvbXB1dGF0aW9uIHRvIHRha2UgYSBmZXcgc2Vjb25kcyxcbiAgICogdGhpcyBlbmRwb2ludCBtYXkgYmUgY2FsbGVkIHRvIGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlIGJvdCBpcyBwcm9jZXNzaW5nIHRoZWlyIG1lc3NhZ2UuXG4gICAqXG4gICAqIEZpcmVzIGEgX1R5cGluZyBTdGFydF8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2NoYW5uZWwjdHJpZ2dlci10eXBpbmctaW5kaWNhdG9yfVxuICAgKi9cbiAgdHJpZ2dlclR5cGluZ0luZGljYXRvcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogUmUtcmVnaXN0ZXJzIHRoZSBsaXN0IG9mIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kcywgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIGNvbW1hbmRzIGNvbXBsZXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBsaXN0IG9mIGNvbW1hbmRzIHRvIHVzZSB0byBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGxpc3QuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgZW5kcG9pbnQuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDinZcgQ29tbWFuZHMgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGBjb21tYW5kc2AgYXJyYXkgd2lsbCBiZSBfX2RlbGV0ZWRfXy5cbiAgICpcbiAgICog4pqg77iPIENvbW1hbmRzIHRoYXQgZG8gbm90IGFscmVhZHkgZXhpc3Qgd2lsbCBjb3VudCB0b3dhcmRzIHRoZSBkYWlseSBsaW1pdCBvZiBfMjAwXyBuZXcgY29tbWFuZHMuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgdGhlIGJlYXJlciB0b2tlbiB0aGUgdG9rZW4gbmVlZHMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMudXBkYXRlYCBzY29wZSBhbmQgbXVzdCBiZSBhIGBDbGllbnQgZ3JhbnRgIHRva2VuLlxuICAgKiAgWW91IHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgb25seSB5b3VyIG93biBhcHBsaWNhdGlvbiBjb21tYW5kc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjYnVsay1vdmVyd3JpdGUtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmRzfVxuICAgKi9cbiAgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kczogKFxuICAgIGNvbW1hbmRzOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmRbXSxcbiAgICBvcHRpb25zPzogVXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+W10+O1xuICAvKipcbiAgICogUmUtcmVnaXN0ZXJzIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uIGNvbW1hbmRzIHJlZ2lzdGVyZWQgaW4gYSBndWlsZCwgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIGNvbW1hbmRzIGNvbXBsZXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB3aG9zZSBsaXN0IG9mIGNvbW1hbmRzIHRvIG92ZXJ3cml0ZS5cbiAgICogQHBhcmFtIGNvbW1hbmRzIC0gVGhlIGxpc3Qgb2YgY29tbWFuZHMgdG8gdXNlIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgbGlzdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBlbmRwb2ludC5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKdlyBDb21tYW5kcyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgYGNvbW1hbmRzYCBhcnJheSB3aWxsIGJlIF9fZGVsZXRlZF9fLlxuICAgKlxuICAgKiDimqDvuI8gQ29tbWFuZHMgdGhhdCBkbyBub3QgYWxyZWFkeSBleGlzdCB3aWxsIGNvdW50IHRvd2FyZHMgdGhlIGRhaWx5IGxpbWl0IG9mIF8yMDBfIG5ldyBjb21tYW5kcy5cbiAgICpcbiAgICogV2hlbiB1c2luZyB0aGUgYmVhcmVyIHRva2VuIHRoZSB0b2tlbiBuZWVkcyB0aGUgYGFwcGxpY2F0aW9ucy5jb21tYW5kcy51cGRhdGVgIHNjb3BlIGFuZCBtdXN0IGJlIGEgYENsaWVudCBncmFudGAgdG9rZW4uXG4gICAqICBZb3Ugd2lsbCBiZSBhYmxlIHRvIHVwZGF0ZSBvbmx5IHlvdXIgb3duIGFwcGxpY2F0aW9uIGNvbW1hbmRzXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNidWxrLW92ZXJ3cml0ZS1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kc31cbiAgICovXG4gIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kczogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBjb21tYW5kczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kW10sXG4gICAgb3B0aW9ucz86IFVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+W10+O1xuICAvKipcbiAgICogQmFucyBhIHVzZXIgZnJvbSBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gYmFuIHRoZSB1c2VyIGZyb20uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gYmFuIGZyb20gdGhlIGd1aWxkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGJhbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBCYW4gQWRkXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjY3JlYXRlLWd1aWxkLWJhbn1cbiAgICovXG4gIGJhbk1lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBDcmVhdGVHdWlsZEJhbiwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQmFucyB1cCB0byAyMDAgdXNlcnMgZnJvbSBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gYmFuIHRoZSB1c2VycyBmcm9tLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB1c2VycyB0byBiYW4gYW5kIHRoZSBvdGhlciBvcHRpb25zIGZvciB0aGUgYmFuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIGFuZCBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogSWYgYWxsIHByb3ZpZGVkIHVzZXJzIGZhaWwgdG8gYmUgYmFubmVkLCBkaXNjb3JkIHdpbGwgcmVzcG9uZCB3aXRoIGFuIGVycm9yIChjb2RlOiBgNTAwMDAwOiBGYWlsZWQgdG8gYmFuIHVzZXJzYClcbiAgICpcbiAgICogRmlyZXMgYXMgbWFueSBfR3VpbGQgQmFuIEFkZF8gZ2F0ZXdheSBldmVudHMgYXMgbWFueSB1c2VyIHdoZXJlIGJhbm5lZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2J1bGstZ3VpbGQtYmFufVxuICAgKi9cbiAgYnVsa0Jhbk1lbWJlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkQnVsa0JhbiwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRCdWxrQmFuPj47XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgbmlja25hbWUgb2YgdGhlIGJvdCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgbmlja25hbWUgb2YgdGhlIGJvdCB1c2VyIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbmlja25hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lbWJlcn1cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1jdXJyZW50LW1lbWJlcn1cbiAgICovXG4gIGVkaXRCb3RNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRCb3RNZW1iZXJPcHRpb25zLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcj4+O1xuICAvKipcbiAgICogRWRpdHMgYSBtZW1iZXIncyBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgbWVtYmVyIG9mLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBlZGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGVuZHBvaW50IHJlcXVpcmVzIHZhcmlvdXMgcGVybWlzc2lvbnMgZGVwZW5kaW5nIG9uIHdoYXQgaXMgZWRpdGVkIGFib3V0IHRoZSBtZW1iZXIuXG4gICAqIFRvIGZpbmQgb3V0IHRoZSByZXF1aXJlZCBwZXJtaXNzaW9uIHRvIGVuYWN0IGEgY2hhbmdlLCByZWFkIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoaXMgZW5kcG9pbnQncyB7QGxpbmsgTW9kaWZ5R3VpbGRNZW1iZXIgfCBwYXJhbWV0ZXJzfS5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1tZW1iZXJ9XG4gICAqL1xuICBlZGl0TWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRNZW1iZXIsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBtZW1iZXIgb2JqZWN0IGJ5IHVzZXIgSUQuXG4gICAqXG4gIFxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBtZW1iZXIgb2JqZWN0IGZvci5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBnZXQgdGhlIG1lbWJlciBvYmplY3QgZm9yLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcldpdGhVc2VyfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1tZW1iZXJ9XG4gICAqL1xuICBnZXRNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcj4+O1xuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBtZW1iZXIgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuIG9mIHRoZSB1c2VyXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIG1lbWJlciBvYmplY3QgZm9yLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcldpdGhVc2VyfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFjY2VzcyB0b2tlbnMgbmVlZHMgdGhlIGBndWlsZHMubWVtYmVycy5yZWFkYCBzY29wZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvdXNlciNnZXQtY3VycmVudC11c2VyLWd1aWxkLW1lbWJlcn1cbiAgICovXG4gIGdldEN1cnJlbnRNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIGJlYXJlclRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyPj47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2YgbWVtYmVycyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVtYmVycy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkTWVtYmVyV2l0aFVzZXJ9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdXNlciBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBHVUlMRF9NRU1CRVJTYCBpbnRlbnQuXG4gICAqXG4gICAqIOKaoO+4jyBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgZW5kcG9pbnQgd2l0aCB2ZXJ5IGxhcmdlIGJvdHMuIEluc3RlYWQsIG9wdCB0byB1c2UgYGZldGNoTWVtYmVycygpYDpcbiAgICogUkVTVCBjb21tdW5pY2F0aW9uIG9ubHkgcGVybWl0cyA1MCByZXF1ZXN0cyB0byBiZSBtYWRlIHBlciBzZWNvbmQsIHdoaWxlIGdhdGV3YXlzIGFsbG93IGZvciB1cCB0byAxMjAgcmVxdWVzdHNcbiAgICogcGVyIG1pbnV0ZSBwZXIgc2hhcmQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy90b3BpY3MvcmF0ZS1saW1pdHMjcmF0ZS1saW1pdHN9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9yZXNvdXJjZXMvZ3VpbGQjbGlzdC1ndWlsZC1tZW1iZXJzfVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy9ldmVudHMvZ2F0ZXdheS1ldmVudHMjcmVxdWVzdC1ndWlsZC1tZW1iZXJzfVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MuZGlzY29yZC5jb20vZGV2ZWxvcGVycy90b3BpY3MvcmF0ZS1saW1pdHMjcmF0ZS1saW1pdHN9XG4gICAqL1xuICBnZXRNZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBMaXN0R3VpbGRNZW1iZXJzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcj5bXT47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2VyaWFsaXplZCBhY3Rpdml0eSBpbnN0YW5jZSwgaWYgaXQgZXhpc3RzLiBVc2VmdWwgZm9yIHByZXZlbnRpbmcgdW53YW50ZWQgYWN0aXZpdHkgc2Vzc2lvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBhcHBsaWNhdGlvblxuICAgKiBAcGFyYW0gaW5zdGFuY2VJZCAtIFRoZSBJRCBvZiB0aGUgYWN0aXZpdHkgaW5zdGFuY2VcbiAgICovXG4gIGdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZTogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgaW5zdGFuY2VJZDogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPj47XG4gIC8qKlxuICAgKiBLaWNrcyBhIG1lbWJlciBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gIFxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8ga2ljayB0aGUgbWVtYmVyIGZyb20uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGtpY2sgZnJvbSB0aGUgZ3VpbGQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBLSUNLX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNyZW1vdmUtZ3VpbGQtbWVtYmVyfVxuICAgKi9cbiAga2lja01lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFBpbnMgYSBtZXNzYWdlIGluIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB3aGVyZSB0aGUgbWVzc2FnZSBpcyB0byBiZSBwaW5uZWQuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gcGluLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUElOX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFBpbnMgVXBkYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL21lc3NhZ2UjcGluLW1lc3NhZ2V9XG4gICAqL1xuICBwaW5NZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgdGhlIHByb2Nlc3Mgb2YgcHJ1bmluZyBpbmFjdGl2ZSBtZW1iZXJzLlxuICAgKlxuICBcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIHBydW5lIHRoZSBtZW1iZXJzIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcHJ1bmluZyBvZiBtZW1iZXJzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEEgbnVtYmVyIGluZGljYXRpbmcgaG93IG1hbnkgbWVtYmVycyB3ZXJlIHBydW5lZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIGFuZCBgS0lDS19NRU1CRVJTYCBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICog4p2XIFJlcXVlc3RzIHRvIHRoaXMgZW5kcG9pbnQgd2lsbCB0aW1lIG91dCBmb3IgbGFyZ2UgZ3VpbGRzLiBUbyBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcsIHNldCB0aGUge0BsaW5rIEJlZ2luR3VpbGRQcnVuZS5jb21wdXRlUHJ1bmVDb3VudH0gcHJvcGVydHkgb2YgdGhlIG9wdGlvbnMgb2JqZWN0IHBhcmFtZXRlciB0byBgZmFsc2VgLiBUaGlzIHdpbGwgYmVnaW4gdGhlIHByb2Nlc3Mgb2YgcHJ1bmluZywgYW5kIGltbWVkaWF0ZWx5IHJldHVybiBgdW5kZWZpbmVkYCwgcmF0aGVyIHRoYW4gd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gY29tcGxldGUgYmVmb3JlIHJldHVybmluZyB0aGUgYWN0dWFsIGNvdW50IG9mIG1lbWJlcnMgdGhhdCBoYXZlIGJlZW4ga2lja2VkLlxuICAgKlxuICAgKiDimqDvuI8gQnkgZGVmYXVsdCwgdGhpcyBwcm9jZXNzIHdpbGwgbm90IHJlbW92ZSBtZW1iZXJzIHdpdGggYSByb2xlLiBUbyBpbmNsdWRlIHRoZSBtZW1iZXJzIHdobyBoYXZlIGEgX3BhcnRpY3VsYXIgc3Vic2V0IG9mIHJvbGVzXywgc3BlY2lmeSB0aGUgcm9sZShzKSBpbiB0aGUge0BsaW5rIEJlZ2luR3VpbGRQcnVuZS5pbmNsdWRlUm9sZXMgfCBpbmNsdWRlUm9sZXN9IHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIG9iamVjdCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBSZW1vdmVfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IG1lbWJlciBraWNrZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNiZWdpbi1ndWlsZC1wcnVuZX1cbiAgICovXG4gIHBydW5lTWVtYmVyczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQmVnaW5HdWlsZFBydW5lLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT47XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIG1lbWJlcnMgd2hvc2UgdXNlcm5hbWVzIG9yIG5pY2tuYW1lcyBzdGFydCB3aXRoIGEgcHJvdmlkZWQgc3RyaW5nLlxuICAgKlxuICBcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIHNlYXJjaCBpbi5cbiAgICogQHBhcmFtIHF1ZXJ5IC0gVGhlIHN0cmluZyB0byBtYXRjaCB1c2VybmFtZXMgb3Igbmlja25hbWVzIGFnYWluc3QuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHNlYXJjaGluZyB0aHJvdWdoIHRoZSBtZW1iZXJzLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRNZW1iZXJ9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdXNlciBJRC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzL2d1aWxkI3NlYXJjaC1ndWlsZC1tZW1iZXJzfVxuICAgKi9cbiAgc2VhcmNoTWVtYmVyczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcXVlcnk6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8U2VhcmNoTWVtYmVycywgJ3F1ZXJ5Jz4pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyPltdPjtcbiAgLyoqXG4gICAqIFVuYmFucyBhIHVzZXIgZnJvbSBhIGd1aWxkLlxuICAgKlxuICBcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIHVuYmFuIHRoZSB1c2VyIGluLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIHVuYmFuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEJhbiBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9ndWlsZCNyZW1vdmUtZ3VpbGQtYmFufVxuICAgKi9cbiAgdW5iYW5NZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBVbnBpbiBhIG1lc3NhZ2UgaW4gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHdoZXJlIHRoZSBtZXNzYWdlIGlzIHBpbm5lZC5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byB1bnBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFBJTl9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBQaW5zIFVwZGF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy9tZXNzYWdlI3VucGluLW1lc3NhZ2V9XG4gICAqL1xuICB1bnBpbk1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEdldCB0aGUgZ3VpbGQgb25ib2FyZGluZ1xuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBndWlsZCB0byBnZXQgdGhlIG9uYm9hcmRpbmcgZnJvbVxuICAgKi9cbiAgZ2V0R3VpbGRPbmJvYXJkaW5nOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+PjtcbiAgLyoqXG4gICAqIE1vZGlmaWVzIHRoZSBvbmJvYXJkaW5nIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBndWlsZCB0byBlZGl0IHRoZSBvbmJvYXJkaW5nIGZyb21cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgYW5kIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBPbmJvYXJkaW5nIGVuZm9yY2VzIGNvbnN0cmFpbnRzIHdoZW4gZW5hYmxlZC4gVGhlc2UgY29uc3RyYWludHMgYXJlOlxuICAgKiAgLSBhdCBsZWFzdCA3IGRlZmF1bHQgY2hhbm5lbHNcbiAgICogIC0gYXQgbGVhc3QgNSBvZiB0aGUgNyBjaGFubmVscyBtdXN0IGFsbG93IHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhlIFxcQGV2ZXJ5b25lIHJvbGVcbiAgICpcbiAgICogVGhlIGBtb2RlYCBmaWVsZCBtb2RpZmllcyB3aGF0IGlzIGNvbnNpZGVyZWQgd2hlbiBlbmZvcmNpbmcgdGhlc2UgY29uc3RyYWludHMuXG4gICAqL1xuICBlZGl0R3VpbGRPbmJvYXJkaW5nOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0R3VpbGRPbmJvYXJkaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkT25ib2FyZGluZz4+O1xuICAvKipcbiAgICogTW9kaWZpZXMgdGhlIGluY2lkZW50IGFjdGlvbnMgb2YgdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBndWlsZCB0byBlZGl0IHRoZSBpbmNpZGVudCBhY3Rpb25zIGZyb21cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGluY2lkZW50IGFjdGlvbnNcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqL1xuICBtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEluY2lkZW50c0RhdGE+PjtcbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGVudGl0bGVtZW50cyBmb3IgYSBnaXZlbiBhcHAsIGFjdGl2ZSBhbmQgZXhwaXJlZC5cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgaWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgZW50aXRsZW1lbnRzXG4gICAqIEBwYXJhbSB7R2V0RW50aXRsZW1lbnRzfSBbb3B0aW9uc10gLSBUaGUgb3B0aW9uYWwgcXVlcnkgcGFyYW1zIGZvciB0aGUgZW5kcG9pbnRcbiAgICovXG4gIGxpc3RFbnRpdGxlbWVudHM6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRFbnRpdGxlbWVudHMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVudGl0bGVtZW50PltdPjtcbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZW50aXRsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGlkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIGVudGl0bGVtZW50XG4gICAqIEBwYXJhbSBlbnRpdGxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbnRpdGxlbWVudCB0byBnZXRcbiAgICovXG4gIGdldEVudGl0bGVtZW50OiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBlbnRpdGxlbWVudElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVudGl0bGVtZW50Pj47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGVzdCBlbnRpdGxlbWVudCB0byBhIGdpdmVuIFNLVSBmb3IgYSBnaXZlbiBndWlsZCBvciB1c2VyLiBEaXNjb3JkIHdpbGwgYWN0IGFzIHRob3VnaCB0aGF0IHVzZXIgb3IgZ3VpbGQgaGFzIGVudGl0bGVtZW50IHRvIHlvdXIgcHJlbWl1bSBvZmZlcmluZy5cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgaWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGNyZWF0ZSB0aGUgZW50aXRsZW1lbnRcbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgb3B0aW9ucyBmb3IgbmV3IGVudGl0bGVtZW50XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgZW5kcG9pbnQgcmV0dXJucyBhIHBhcnRpYWwgZW50aXRsZW1lbnQgb2JqZWN0LlxuICAgKiBJdCB3aWxsIG5vdCBjb250YWluIHN1YnNjcmlwdGlvbl9pZCwgc3RhcnRzX2F0LCBvciBlbmRzX2F0LCBhcyBpdCdzIHZhbGlkIGluIHBlcnBldHVpdHkuXG4gICAqL1xuICBjcmVhdGVUZXN0RW50aXRsZW1lbnQ6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGJvZHk6IENyZWF0ZVRlc3RFbnRpdGxlbWVudCkgPT4gUHJvbWlzZTxQYXJ0aWFsPENhbWVsaXplPERpc2NvcmRFbnRpdGxlbWVudD4+PjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBjdXJyZW50bHktYWN0aXZlIHRlc3QgZW50aXRsZW1lbnQuIERpc2NvcmQgd2lsbCBhY3QgYXMgdGhvdWdoIHRoYXQgdXNlciBvciBndWlsZCBubyBsb25nZXIgaGFzIGVudGl0bGVtZW50IHRvIHlvdXIgcHJlbWl1bSBvZmZlcmluZy5cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgaWQgb2YgdGhlIGFwcGxpY2F0aW9uIGZyb20gd2hlcmUgZGVsZXRlIHRoZSBlbnRpdGxlbWVudFxuICAgKiBAcGFyYW0gZW50aXRsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZW50aXRsZW1lbnQgdG8gZGVsZXRlXG4gICAqL1xuICBkZWxldGVUZXN0RW50aXRsZW1lbnQ6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGVudGl0bGVtZW50SWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEZvciBPbmUtVGltZSBQdXJjaGFzZSBjb25zdW1hYmxlIFNLVXMsIG1hcmtzIGEgZ2l2ZW4gZW50aXRsZW1lbnQgZm9yIHRoZSB1c2VyIGFzIGNvbnN1bWVkLiBUaGUgZW50aXRsZW1lbnQgd2lsbCBoYXZlIGBjb25zdW1lZDogdHJ1ZWAgd2hlbiB1c2luZyB7QGxpbmsgbGlzdEVudGl0bGVtZW50cyB8IExpc3QgRW50aXRsZW1lbnRzfVxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSBlbnRpdGxlbWVudFxuICAgKiBAcGFyYW0gZW50aXRsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZW50aXRsZW1lbnQgdG8gZ2V0XG4gICAqL1xuICBjb25zdW1lRW50aXRsZW1lbnQ6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGVudGl0bGVtZW50SWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIFNLVXMgZm9yIGEgZ2l2ZW4gYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgaWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgU0tVc1xuICAgKi9cbiAgbGlzdFNrdXM6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNrdT5bXT47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBzdWJzY3JpcHRpb25zIGNvbnRhaW5pbmcgdGhlIFNLVSwgZmlsdGVyZWQgYnkgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHNrdUlkIC0gVGhlIGlkIG9mIHRoZSBza3Ugb2YgZ2V0IHRoZSBzdWJzY3JpcHRpb25zIGZvclxuICAgKi9cbiAgbGlzdFN1YnNjcmlwdGlvbnM6IChza3VJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdFNrdVN1YnNjcmlwdGlvbnNPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdWJzY3JpcHRpb25bXT4+O1xuICAvKipcbiAgICogR2V0IGEgc3Vic2NyaXB0aW9uIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIHNrdUlkIC0gVGhlIGlkIG9mIHRoZSBza3Ugb2YgZ2V0IHRoZSBzdWJzY3JpcHRpb25zIGZvclxuICAgKi9cbiAgZ2V0U3Vic2NyaXB0aW9uOiAoc2t1SWQ6IEJpZ1N0cmluZywgc3Vic2NyaXB0aW9uSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3Vic2NyaXB0aW9uPj47XG4gIC8qKlxuICAgKiBTZW5kIGEgc291bmRib2FyZCBzb3VuZCB0byBhIHZvaWNlIGNoYW5uZWwgdGhlIHVzZXIgaXMgY29ubmVjdGVkIHRvLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIGlkIG9mIHRoZSB2b2ljZSBjaGFubmVsXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX1ZvaWNlIENoYW5uZWwgRWZmZWN0IFNlbmRfIEdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgU1BFQUtgIGFuZCBgVVNFX1NPVU5EQk9BUkRgIHBlcm1pc3Npb25zLCBhbmQgYWxzbyB0aGUgYFVTRV9FWFRFUk5BTF9TT1VORFNgIHBlcm1pc3Npb24gaWYgdGhlIHNvdW5kIGlzIGZyb20gYSBkaWZmZXJlbnQgc2VydmVyLlxuICAgKiBBZGRpdGlvbmFsbHksIHJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGNvbm5lY3RlZCB0byB0aGUgdm9pY2UgY2hhbm5lbCwgaGF2aW5nIGEgdm9pY2Ugc3RhdGUgd2l0aG91dCBgZGVhZmAsIGBzZWxmX2RlYWZgLCBgbXV0ZWAsIG9yIGBzdXBwcmVzc2AgZW5hYmxlZC5cbiAgICovXG4gIHNlbmRTb3VuZGJvYXJkU291bmQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogU2VuZFNvdW5kYm9hcmRTb3VuZCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJldHVybnMgYW4gYXJyYXkgb2Ygc291bmRib2FyZCBzb3VuZCBvYmplY3RzIHRoYXQgY2FuIGJlIHVzZWQgYnkgYWxsIHVzZXJzLiAqL1xuICBsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHM6ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD5bXT47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgZ3VpbGQncyBzb3VuZGJvYXJkIHNvdW5kcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgZ3VpbGQgdG8gZ2V0IHRoZSBzb3VuZHMgZnJvbVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJbmNsdWRlcyBgdXNlcmAgZmllbGRzIGlmIHRoZSBib3QgaGFzIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKi9cbiAgbGlzdEd1aWxkU291bmRib2FyZFNvdW5kczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx7IGl0ZW1zOiBDYW1lbGl6ZTxEaXNjb3JkU291bmRib2FyZFNvdW5kPltdIH0+O1xuICAvKipcbiAgICogUmV0dXJucyBhIHNvdW5kYm9hcmQgc291bmQgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gc291bmQgaWQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGdldCB0aGUgc291bmRzIGZyb21cbiAgICogQHBhcmFtIHNvdW5kSWQgLSBUaGUgc291bmQgaWRcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW5jbHVkZXMgYHVzZXJgIGZpZWxkcyBpZiB0aGUgYm90IGhhcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICovXG4gIGdldEd1aWxkU291bmRib2FyZFNvdW5kOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBzb3VuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4+O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHNvdW5kYm9hcmQgc291bmQgZm9yIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSBzb3VuZHMgaW5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBjcmVhdGUgdGhlIHNvdW5kXG4gICAqIEBwYXJhbSByZWFzb24gLSBUaGUgYXVkaXQgbG9nIHJlYXNvblxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9HdWlsZCBTb3VuZGJvYXJkIFNvdW5kIENyZWF0ZV8gR2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBDUkVBVEVfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqL1xuICBjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU291bmRib2FyZFNvdW5kPj47XG4gIC8qKlxuICAgKiBNb2RpZnkgdGhlIGdpdmVuIHNvdW5kYm9hcmQgc291bmQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgc291bmRzIGluXG4gICAqIEBwYXJhbSBzb3VuZElkIC0gVGhlIHNvdW5kIGlkIHRvIHVwZGF0ZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHVwZGF0ZSB0aGUgc291bmRcbiAgICogQHBhcmFtIHJlYXNvbiAtIFRoZSBhdWRpdCBsb2cgcmVhc29uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX0d1aWxkIFNvdW5kYm9hcmQgU291bmQgVXBkYXRlXyBHYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBGb3Igc291bmRzIGNyZWF0ZWQgYnkgdGhlIGN1cnJlbnQgdXNlciwgcmVxdWlyZXMgZWl0aGVyIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGb3Igb3RoZXIgc291bmRzLCByZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICovXG4gIG1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIHNvdW5kSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBNb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCxcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU291bmRib2FyZFNvdW5kPj47XG4gIC8qKlxuICAgKiBEZWxldGUgdGhlIGdpdmVuIHNvdW5kYm9hcmQgc291bmQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgc291bmRzIGluXG4gICAqIEBwYXJhbSBzb3VuZElkIC0gVGhlIHNvdW5kIGlkIHRvIGRlbGV0ZVxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIGF1ZGl0IGxvZyByZWFzb25cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfR3VpbGQgU291bmRib2FyZCBTb3VuZCBEZWxldGVfIEdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEZvciBzb3VuZHMgY3JlYXRlZCBieSB0aGUgY3VycmVudCB1c2VyLCByZXF1aXJlcyBlaXRoZXIgdGhlIGBDUkVBVEVfR1VJTERfRVhQUkVTU0lPTlNgIG9yIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqIEZvciBvdGhlciBzb3VuZHMsIHJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKi9cbiAgZGVsZXRlR3VpbGRTb3VuZGJvYXJkU291bmQ6IChndWlsZElkOiBCaWdTdHJpbmcsIHNvdW5kSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYXBwbGljYXRpb24gcm9sZSBjb25uZWN0aW9uIG1ldGFkYXRhIG9iamVjdHMgZm9yIHRoZSBnaXZlbiBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSByb2xlIGNvbm5lY3Rpb25zIGZyb21cbiAgICogQHJldHVybnMgQSBsaXN0IG9mIGFwcGxpY2F0aW9uIHJvbGUgY29ubmVjdGlvbiBtZXRhZGF0YSBvYmplY3RzXG4gICAqL1xuICBsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHM6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YT5bXT47XG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBhcHBsaWNhdGlvbiByb2xlIGNvbm5lY3Rpb24gbWV0YWRhdGEgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIHJvbGUgY29ubmVjdGlvbnMgZnJvbVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHVwZGF0ZSB0aGUgcm9sZSBjb25uZWN0aW9uc1xuICAgKiBAcmV0dXJucyBBIGxpc3Qgb2YgYXBwbGljYXRpb24gcm9sZSBjb25uZWN0aW9uIG1ldGFkYXRhIG9iamVjdHNcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQW4gYXBwbGljYXRpb24gY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDUgbWV0YWRhdGEgcmVjb3Jkcy5cbiAgICovXG4gIHVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzOiAoXG4gICAgYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGE+W10sXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhPltdPjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgbG9iYnksIGFkZGluZyBhbnkgb2YgdGhlIHNwZWNpZmllZCBtZW1iZXJzIHRvIGl0LCBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBjcmVhdGUgdGhlIGxvYmJ5XG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGxvYmJ5XG4gICAqL1xuICBjcmVhdGVMb2JieTogKG9wdGlvbnM6IENyZWF0ZUxvYmJ5KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMb2JieT4+O1xuICAvKipcbiAgICogUmV0dXJucyBhIGxvYmJ5IG9iamVjdCBmb3IgdGhlIHNwZWNpZmllZCBsb2JieSBpZCwgaWYgaXQgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gbG9iYnlJZCAtIFRoZSBJRCBvZiB0aGUgbG9iYnkgdG8gZ2V0XG4gICAqIEByZXR1cm5zIFRoZSBsb2JieSBvYmplY3RcbiAgICovXG4gIGdldExvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMb2JieT4+O1xuICAvKipcbiAgICogTW9kaWZpZXMgdGhlIHNwZWNpZmllZCBsb2JieSB3aXRoIG5ldyB2YWx1ZXMsIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gbG9iYnlJZCAtIFRoZSBJRCBvZiB0aGUgbG9iYnkgdG8gbW9kaWZ5XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBsb2JieVxuICAgKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgbG9iYnlcbiAgICovXG4gIG1vZGlmeUxvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlMb2JieSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTG9iYnk+PjtcbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHNwZWNpZmllZCBsb2JieSBpZiBpdCBleGlzdHMuXG4gICAqXG4gICAqIEl0IGlzIHNhZmUgdG8gY2FsbCBldmVuIGlmIHRoZSBsb2JieSBpcyBhbHJlYWR5IGRlbGV0ZWQgYXMgd2VsbC5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJucyBOb3RoaW5nXG4gICAqL1xuICBkZWxldGVMb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEFkZHMgdGhlIHByb3ZpZGVkIHVzZXIgdG8gdGhlIHNwZWNpZmllZCBsb2JieS4gSWYgY2FsbGVkIHdoZW4gdGhlIHVzZXIgaXMgYWxyZWFkeSBhIG1lbWJlciBvZiB0aGUgbG9iYnkgd2lsbCB1cGRhdGUgZmllbGRzIHN1Y2ggYXMgbWV0YWRhdGEgb24gdGhhdCB1c2VyIGluc3RlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBsb2JieUlkIC0gVGhlIElEIG9mIHRoZSBsb2JieSB0byBhZGQgdGhlIHVzZXIgdG9cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBhZGQgdG8gdGhlIGxvYmJ5XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gYWRkIHRoZSB1c2VyIHRvIHRoZSBsb2JieVxuICAgKiBAcmV0dXJucyBUaGUgbG9iYnkgbWVtYmVyIG9iamVjdFxuICAgKi9cbiAgYWRkTWVtYmVyVG9Mb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEFkZExvYmJ5TWVtYmVyKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMb2JieU1lbWJlcj4+O1xuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgcHJvdmlkZWQgdXNlciBmcm9tIHRoZSBzcGVjaWZpZWQgbG9iYnkuIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgdGhlIHVzZXIgaXMgbm8gbG9uZ2VyIGEgbWVtYmVyIG9mIHRoZSBsb2JieSwgYnV0IHdpbGwgZmFpbCBpZiB0aGUgbG9iYnkgZG9lcyBub3QgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSBsb2JieUlkIC0gVGhlIElEIG9mIHRoZSBsb2JieSB0byByZW1vdmUgdGhlIHVzZXIgZnJvbVxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIHJlbW92ZSBmcm9tIHRoZSBsb2JieVxuICAgKiBAcmV0dXJucyBOb3RoaW5nXG4gICAqL1xuICByZW1vdmVNZW1iZXJGcm9tTG9iYnk6IChsb2JieUlkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgY3VycmVudCB1c2VyIGZyb20gdGhlIHNwZWNpZmllZCBsb2JieS4gSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZXZlbiBpZiB0aGUgdXNlciBpcyBubyBsb25nZXIgYSBtZW1iZXIgb2YgdGhlIGxvYmJ5LCBidXQgd2lsbCBmYWlsIGlmIHRoZSBsb2JieSBkb2VzIG5vdCBleGlzdC5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIHJlbW92ZSB0aGUgdXNlciBmcm9tXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXJcbiAgICogQHJldHVybnMgTm90aGluZ1xuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIHJlcXVpcmVzIGEgYmVhcmVyIHRva2VuIGZvciBhdXRob3JpemF0aW9uXG4gICAqL1xuICBsZWF2ZUxvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nLCBiZWFyZXJUb2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogTGlua3MgYW4gZXhpc3RpbmcgdGV4dCBjaGFubmVsIHRvIGEgbG9iYnkuXG4gICAqXG4gICAqIEBwYXJhbSBsb2JieUlkIC0gVGhlIElEIG9mIHRoZSBsb2JieSB0byBsaW5rIHRoZSBjaGFubmVsIHRvXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXJcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBsaW5rIHRoZSBjaGFubmVsIHRvIHRoZSBsb2JieVxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBsb2JieSBvYmplY3RcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVXNlcyBiZWFyZXIgdG9rZW4gZm9yIGF1dGhvcml6YXRpb24gYW5kIHRoZSB1c2VyIG11c3QgYmUgYSBsb2JieSBtZW1iZXIgd2l0aCB0aGUgQ2FuTGlua0xvYmJ5IGxvYmJ5IG1lbWJlciBmbGFnLlxuICAgKi9cbiAgbGlua0NoYW5uZWxUb0xvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nLCBiZWFyZXJUb2tlbjogc3RyaW5nLCBvcHRpb25zOiBMaW5rQ2hhbm5lbFRvTG9iYnkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExvYmJ5Pj47XG4gIC8qKlxuICAgKiBVbmxpbmtzIGFueSBjdXJyZW50bHkgbGlua2VkIGNoYW5uZWxzIGZyb20gdGhlIHNwZWNpZmllZCBsb2JieS5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIHVubGluayB0aGUgY2hhbm5lbCBmcm9tXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXJcbiAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgbG9iYnkgb2JqZWN0XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVzZXMgYmVhcmVyIHRva2VuIGZvciBhdXRob3JpemF0aW9uIGFuZCB0aGUgdXNlciBtdXN0IGJlIGEgbG9iYnkgbWVtYmVyIHdpdGggdGhlIENhbkxpbmtMb2JieSBsb2JieSBtZW1iZXIgZmxhZy5cbiAgICovXG4gIHVubGlua0NoYW5uZWxUb0xvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nLCBiZWFyZXJUb2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMb2JieT4+O1xufVxuXG5leHBvcnQgdHlwZSBSZXF1ZXN0TWV0aG9kcyA9ICdHRVQnIHwgJ1BPU1QnIHwgJ0RFTEVURScgfCAnUEFUQ0gnIHwgJ1BVVCc7XG5leHBvcnQgdHlwZSBBcGlWZXJzaW9ucyA9IDkgfCAxMDtcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMge1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYm9keT86IGFueTtcbiAgdW5hdXRob3JpemVkPzogYm9vbGVhbjtcbiAgcmVhc29uPzogc3RyaW5nO1xuICBmaWxlcz86IEZpbGVDb250ZW50W107XG59XG5cbmV4cG9ydCB0eXBlIE1ha2VSZXF1ZXN0T3B0aW9ucyA9IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnbWV0aG9kJz4gJiBQaWNrPFNlbmRSZXF1ZXN0T3B0aW9ucywgJ3J1blRocm91Z2hRdWV1ZSc+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RCb2R5IHtcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYm9keT86IHN0cmluZyB8IEZvcm1EYXRhO1xuICBtZXRob2Q6IFJlcXVlc3RNZXRob2RzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRSZXF1ZXN0T3B0aW9ucyB7XG4gIC8qKiBUaGUgcm91dGUgdG8gc2VuZCB0aGUgcmVxdWVzdCB0by4gKi9cbiAgcm91dGU6IHN0cmluZztcbiAgLyoqIFRoZSBtZXRob2QgdG8gdXNlIGZvciBzZW5kaW5nIHRoZSByZXF1ZXN0LiAqL1xuICBtZXRob2Q6IFJlcXVlc3RNZXRob2RzO1xuICAvKiogVGhlIGFtb3VudCBvZiB0aW1lcyB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gcmV0cmllZC4gKi9cbiAgcmV0cnlDb3VudDogbnVtYmVyO1xuICAvKiogSGFuZGxlciB0byByZXRyeSBhIHJlcXVlc3Qgc2hvdWxkIGl0IGJlIHJhdGUgbGltaXRlZC4gKi9cbiAgcmV0cnlSZXF1ZXN0PzogKG9wdGlvbnM6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJlc29sdmUgaGFuZGxlciB3aGVuIGEgcmVxdWVzdCBzdWNjZWVkcy4gKi9cbiAgcmVzb2x2ZTogKHZhbHVlOiBSZXN0UmVxdWVzdFJlc3BvbnNlKSA9PiB2b2lkO1xuICAvKiogUmVqZWN0IGhhbmRsZXIgd2hlbiBhIHJlcXVlc3QgZmFpbHMuICovXG4gIHJlamVjdDogKHZhbHVlOiBSZXN0UmVxdWVzdFJlamVjdGlvbikgPT4gdm9pZDtcbiAgLyoqIElmIHRoaXMgcmVxdWVzdCBoYXMgYSBidWNrZXQgaWQgd2hpY2ggaXQgZmFsbHMgdW5kZXIgZm9yIHJhdGUgbGltaXQgKi9cbiAgYnVja2V0SWQ/OiBzdHJpbmc7XG4gIC8qKiBBZGRpdGlvbmFsIHJlcXVlc3Qgb3B0aW9ucywgdXNlZCBmb3IgdGhpbmdzIGxpa2Ugb3ZlcnJpZGluZyBhdXRob3JpemF0aW9uIGhlYWRlci4gKi9cbiAgcmVxdWVzdEJvZHlPcHRpb25zPzogQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcmVxdWVzdCBzaG91bGQgYmUgcnVuIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgKiBVc2VmdWwgZm9yIHJvdXRlcyB3aGljaCBkbyBub3QgaGF2ZSBhbnkgcmF0ZSBsaW1pdHMuXG4gICAqL1xuICBydW5UaHJvdWdoUXVldWU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RSYXRlTGltaXRlZFBhdGgge1xuICB1cmw6IHN0cmluZztcbiAgcmVzZXRUaW1lc3RhbXA6IG51bWJlcjtcbiAgYnVja2V0SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdFJlcXVlc3RSZXNwb25zZSB7XG4gIG9rOiBib29sZWFuO1xuICBzdGF0dXM6IG51bWJlcjtcbiAgLyoqIFRoZSByZXR1cm5lZCBib2R5IHBhcnNlZCBpZiBpdCB3YXMgSlNPTiwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgdGhlIHJhdyBib2R5IGFzIGEgc3RyaW5nICovXG4gIGJvZHk/OiBzdHJpbmcgfCBvYmplY3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdFJlcXVlc3RSZWplY3Rpb24ge1xuICBvazogYm9vbGVhbjtcbiAgc3RhdHVzOiBudW1iZXI7XG4gIC8qKiBUaGUgSFRUUCAxLjEgc3RhdHVzIGNvZGUgdGV4dCAqL1xuICBzdGF0dXNUZXh0Pzogc3RyaW5nO1xuICAvKiogVGhlIHJldHVybmVkIGJvZHkgcGFyc2VkIGlmIGl0IHdhcyBKU09OLCBvdGhlcndpc2UgaXQgd2lsbCBiZSB0aGUgcmF3IGJvZHkgYXMgYSBzdHJpbmcgKi9cbiAgYm9keT86IHN0cmluZyB8IG9iamVjdDtcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIGVycm9yT2JqZWN0PzogRXJyb3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdE1hbmFnZXJFdmVudHMge1xuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcmVxdWVzdCBpcyBtYWRlIHRvIHRoZSBBUEkuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBib2R5IHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBBUEkgaXMgYXZhaWxhYmxlIGluIHRoZSBgZXh0cmFgIHBhcmFtZXRlci4gRG8gbm90IGNvbnN1bWUgdGhlIGJvZHkgaW4gdGhlIGBSZXF1ZXN0YCBvYmplY3QgYW5kIHVzZSB0aGUgb25lIGluIHRoZSBgZXh0cmFgIHBhcmFtZXRlciBpbnN0ZWFkLlxuICAgKi9cbiAgcmVxdWVzdDogKHJlcXVlc3Q6IFJlcXVlc3QsIGV4dHJhOiB7IGJvZHk6IGFueSB9KSA9PiB2b2lkO1xuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgQVBJLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGlzIGZpcmVkIGZvciBib3RoIHN1Y2Nlc3NmdWwgYW5kIGZhaWxlZCByZXF1ZXN0cywgeW91IHNob3VsZCBjaGVjayB0aGUgUmVzcG9uc2Ugb2JqZWN0IHRvIGRldGVybWluZSBpZiB0aGUgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bCBvciBub3QuXG4gICAqXG4gICAqIEJvdGggdGhlIHJlcXVlc3QgYW5kIHRoZSByZXNwb25zZSBib2R5IGFyZSBhdmFpbGFibGUgaW4gdGhlIGBleHRyYWAgcGFyYW1ldGVyLiBEbyBub3QgY29uc3VtZSB0aGUgYm9keSBpbiB0aGUgYFJlcXVlc3RgIG9yIGBSZXNwb25zZWAgb2JqZWN0IGFuZCB1c2UgdGhlIG9uZSBpbiB0aGUgYGV4dHJhYCBwYXJhbWV0ZXIgaW5zdGVhZC5cbiAgICovXG4gIHJlc3BvbnNlOiAocmVxdWVzdDogUmVxdWVzdCwgcmVzcG9uc2U6IFJlc3BvbnNlLCBleHRyYTogeyByZXF1ZXN0Qm9keTogYW55OyByZXNwb25zZUJvZHk6IHN0cmluZyB8IG9iamVjdCB9KSA9PiB2b2lkO1xuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcmVxdWVzdCBlcnJvcnMgZHVlIHRvIGZldGNoIGVycm9yLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYm9keSB0aGF0IHdhcyBzZW50IHRvIHRoZSBBUEkgaXMgYXZhaWxhYmxlIGluIHRoZSBgZXh0cmFgIHBhcmFtZXRlci5cbiAgICovXG4gIHJlcXVlc3RFcnJvcjogKHJlcXVlc3Q6IFJlcXVlc3QsIGVycm9yOiBhbnksIGV4dHJhOiB7IGJvZHk6IGFueSB9KSA9PiB2b2lkO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW13R0EsV0F3QkMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@discordeno/rest",
|
|
3
|
-
"version": "22.0.1-next.
|
|
3
|
+
"version": "22.0.1-next.ff1a349",
|
|
4
4
|
"exports": "./dist/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -25,26 +25,26 @@
|
|
|
25
25
|
"test:type": "tsc --noEmit"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@discordeno/types": "22.0.1-next.
|
|
29
|
-
"@discordeno/utils": "22.0.1-next.
|
|
28
|
+
"@discordeno/types": "22.0.1-next.ff1a349",
|
|
29
|
+
"@discordeno/utils": "22.0.1-next.ff1a349"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@biomejs/biome": "2.4.
|
|
33
|
-
"@swc/cli": "^0.8.
|
|
34
|
-
"@swc/core": "^1.15.
|
|
32
|
+
"@biomejs/biome": "2.4.12",
|
|
33
|
+
"@swc/cli": "^0.8.1",
|
|
34
|
+
"@swc/core": "^1.15.30",
|
|
35
35
|
"@types/chai": "^5.2.3",
|
|
36
36
|
"@types/chai-as-promised": "^8.0.2",
|
|
37
37
|
"@types/mocha": "^10.0.10",
|
|
38
|
-
"@types/node": "^25.
|
|
39
|
-
"@types/sinon": "^21.0.
|
|
38
|
+
"@types/node": "^25.6.0",
|
|
39
|
+
"@types/sinon": "^21.0.1",
|
|
40
40
|
"c8": "^11.0.0",
|
|
41
41
|
"chai": "^6.2.2",
|
|
42
42
|
"chai-as-promised": "^8.0.2",
|
|
43
|
-
"dotenv": "^17.
|
|
43
|
+
"dotenv": "^17.4.2",
|
|
44
44
|
"mocha": "^11.7.5",
|
|
45
|
-
"sinon": "^21.
|
|
45
|
+
"sinon": "^21.1.2",
|
|
46
46
|
"ts-node": "^10.9.2",
|
|
47
47
|
"tsconfig": "*",
|
|
48
|
-
"typescript": "^
|
|
48
|
+
"typescript": "^6.0.3"
|
|
49
49
|
}
|
|
50
50
|
}
|