oxygen-cli 1.37.5 → 1.37.7
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/CHANGELOG.md +10 -0
- package/build/lib/cli.js +1 -1
- package/build/ox_modules/module-mob.js +15 -30
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## v1.37.7 (2025-02-18)
|
|
4
|
+
|
|
5
|
+
#### :nail_care: Polish
|
|
6
|
+
* Make bstack options copying more generic.
|
|
7
|
+
|
|
8
|
+
## v1.37.6 (2025-01-08)
|
|
9
|
+
|
|
10
|
+
#### :beetle: Bug Fix
|
|
11
|
+
* Fix pass through of the `bstack:localIdentifier` capability.
|
|
12
|
+
|
|
3
13
|
## v1.37.5 (2025-01-07)
|
|
4
14
|
|
|
5
15
|
#### :beetle: Bug Fix
|
package/build/lib/cli.js
CHANGED
|
@@ -134,4 +134,4 @@ Web test options:
|
|
|
134
134
|
Mobile test options:
|
|
135
135
|
-s, --server=SERVER_URL Appium server URL. Default is http://localhost:4723/wd/hub.`);
|
|
136
136
|
}
|
|
137
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLmpzIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJvbiIsImhhbmRsZVNpZ0ludCIsImVycm9yIiwiY29uc29sZSIsImFyZ3YiLCJyZXF1aXJlIiwic2xpY2UiLCJ2IiwidmVyc2lvbiIsImxvZyIsImV4aXQiLCJfIiwiaGVscCIsInByaW50VXNhZ2UiLCJkIiwiZGVsYXkiLCJwYXJzZUludCIsInRhcmdldEZpbGUiLCJjbGl1dGlsIiwicHJvY2Vzc1RhcmdldFBhdGgiLCJjd2QiLCJjb25maWciLCJnZXRDb25maWd1cmF0aW9ucyIsImdlbmVyYXRlVGVzdE9wdGlvbnMiLCJ0aGVuIiwib3B0aW9ucyIsInByZXBhcmVBbmRTdGFydFRoZVRlc3QiLCJjb2RlIiwiZSIsImZyYW1ld29yayIsInN1aXRlcyIsIkFycmF5IiwiaXNBcnJheSIsIkVycm9yIiwiY2Fwc0FyciIsImNhcGFiaWxpdGllcyIsImV4aXRDb2RlIiwicmVwb3J0ZXIiLCJSZXBvcnRBZ2dyZWdhdG9yIiwibGF1bmNoZXIiLCJwYXJhbGxlbCIsIndvcmtlcnMiLCJpc05hTiIsIlBhcmFsbGVsTGF1bmNoZXIiLCJMYXVuY2hlciIsInJ1biIsImdlbmVyYXRlUmVwb3J0cyIsImdldEV4aXRDb2RlIiwidHJhY2UiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFTQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQUEsT0FBTyxDQUFDQyxFQUFSLENBQVcsUUFBWCxFQUFxQkMsWUFBckI7QUFDQUYsT0FBTyxDQUFDQyxFQUFSLENBQVcsbUJBQVgsRUFBZ0NFLEtBQUssSUFBSTtBQUNyQ0MsRUFBQUEsT0FBTyxDQUFDRCxLQUFSLENBQWMsbUJBQWQsRUFBbUNBLEtBQW5DO0FBQ0gsQ0FGRDtBQUlBSCxPQUFPLENBQUNDLEVBQVIsQ0FBVyxvQkFBWCxFQUFpQ0UsS0FBSyxJQUFJO0FBQ3RDQyxFQUFBQSxPQUFPLENBQUNELEtBQVIsQ0FBYyxvQkFBZCxF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bEJWLEVBQUFBLE9BQU8sQ0FBQ00sR0FBUixDQUFhO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUZBaENJO0FBaUNIIiwic291cmNlc0NvbnRlbnQiOlsiIyEgL3Vzci9iaW4vZW52IG5vZGVcclxuLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcbmltcG9ydCAqIGFzIGNsaXV0aWwgZnJvbSAnLi9jbGktdXRpbCc7XHJcbmltcG9ydCBMYXVuY2hlciBmcm9tICcuL2xhdW5jaGVyJztcclxuaW1wb3J0IFBhcmFsbGVsTGF1bmNoZXIgZnJvbSAnLi9wYXJhbGxlbC1sYXVuY2hlcic7XHJcbmltcG9ydCBSZXBvcnRBZ2dyZWdhdG9yIGZyb20gJy4uL3JlcG9ydGVyL1JlcG9ydEFnZ3JlZ2F0b3InO1xyXG5cclxucHJvY2Vzcy5vbignU0lHSU5UJywgaGFuZGxlU2lnSW50KTtcclxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmNhdWdodEV4Y2VwdGlvbicsIGVycm9yKTtcclxufSk7XHJcblxyXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvcik7XHJcbn0pO1xyXG5cclxuLy8gcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG5jb25zdCBhcmd2ID0gcmVxdWlyZSgnbWluaW1pc3QnKShwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpO1xyXG5cclxuaWYgKGFyZ3YudiB8fCBhcmd2LnZlcnNpb24pIHtcclxuICAgIGNvbnNvbGUubG9nKHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24pO1xyXG4gICAgcHJvY2Vzcy5leGl0KDApO1xyXG59IGVsc2UgaWYgKHR5cGVvZihhcmd2Ll9bMF0pID09PSAndW5kZWZpbmVkJyB8fCBhcmd2LmhlbHApIHtcclxuICAgIHByaW50VXNhZ2UoKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuaWYgKGFyZ3YuZCB8fCBhcmd2LmRlbGF5KSB7XHJcbiAgICBjb25zdCBkZWxheSA9IGFyZ3YuZCB8fCBhcmd2LmRlbGF5O1xyXG4gICAgaWYgKCEocGFyc2VJbnQoZGVsYXkpID4gMCkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBhcmd1bWVudCAtICdkZWxheScgc2hvdWxkIGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5cIik7XHJcbiAgICAgICAgcHJpbnRVc2FnZSgpO1xyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgdGFyZ2V0RmlsZSA9IGNsaXV0aWwucHJvY2Vzc1RhcmdldFBhdGgoYXJndi5fWzBdLCBhcmd2LmN3ZCk7XHJcbmlmICh0YXJnZXRGaWxlID09IG51bGwpIHtcclxuICAgIHByaW50VXNhZ2UoKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gY2xpdXRpbC5nZXRDb25maWd1cmF0aW9ucyh0YXJnZXRGaWxlLCBhcmd2KTtcclxuXHJcbmNsaXV0aWwuZ2VuZXJhdGVUZXN0T3B0aW9ucyhjb25maWcsIGFyZ3YpLnRoZW4oXHJcbiAgICAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHByZXBhcmVBbmRTdGFydFRoZVRlc3Qob3B0aW9ucykudGhlbihcclxuICAgICAgICAgICAgKGNvZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEb25lIScpO1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGVzdCBmYWlsZWQ6ICcsIGUpO1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0sXHJcbiAgICAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Rlc3QgZmFpbGVkIG9uIGdlbmVyYXRlIHN0YXRlOiAnLCBlKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICB9XHJcbik7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kU3RhcnRUaGVUZXN0KG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zLmZyYW1ld29yayA9PT0gJ294eWdlbicgJiYgKCFvcHRpb25zLnN1aXRlcyB8fCAhQXJyYXkuaXNBcnJheShvcHRpb25zLnN1aXRlcykpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdGhlIHRlc3QgLSBubyBzdWl0ZXMgYXJlIHNwZWNpZmllZC4nKTtcclxuICAgIH1cclxuICAgIGxldCBjYXBzQXJyID0gb3B0aW9ucy5jYXBhYmlsaXRpZXMgfHwgW3t9XTtcclxuICAgIC8vIGNoZWNrIGlmIGNhcGFiaWxpdGllcyBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSBoYXNodGFibGVcclxuICAgIGlmICghKGNhcHNBcnIgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICBjYXBzQXJyID0gW2NhcHNBcnJdO1xyXG4gICAgfVxyXG4gICAgbGV0IGV4aXRDb2RlID0gMDtcclxuICAgIC8vIHN0YXJ0IGxhdW5jaGVyXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydGVyID0gbmV3IFJlcG9ydEFnZ3JlZ2F0b3Iob3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgbGF1bmNoZXIgPSBvcHRpb25zLnBhcmFsbGVsICYmIG9wdGlvbnMucGFyYWxsZWwud29ya2VycyAmJiAhaXNOYU4ob3B0aW9ucy5wYXJhbGxlbC53b3JrZXJzKSAmJiBvcHRpb25zLnBhcmFsbGVsLndvcmtlcnMgPiAxXHJcbiAgICAgICAgICAgID8gbmV3IFBhcmFsbGVsTGF1bmNoZXIob3B0aW9ucywgcmVwb3J0ZXIpIDogbmV3IExhdW5jaGVyKG9wdGlvbnMsIHJlcG9ydGVyKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVGVzdCBzdGFydGVkLi4uJyk7XHJcbiAgICAgICAgYXdhaXQgbGF1bmNoZXIucnVuKGNhcHNBcnIpO1xyXG4gICAgICAgIHJlcG9ydGVyLmdlbmVyYXRlUmVwb3J0cygpO1xyXG4gICAgICAgIGV4aXRDb2RlID0gcmVwb3J0ZXIuZ2V0RXhpdENvZGUoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmF0YWwgZXJyb3InLCBlKTtcclxuICAgICAgICBjb25zb2xlLnRyYWNlKCk7XHJcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV4aXRDb2RlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVTaWdJbnQoKSB7XHJcbiAgICAvLyBkZWxheSBwcm9jZXNzIGV4aXQgdG8gbGV0IE94eWdlbiB0byBwcm9wZXJseSBkaXNwb3NlXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHByb2Nlc3MuZXhpdCgwKSwgMjAwMCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByaW50VXNhZ2UoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhgVXNhZ2U6IG94eWdlbiBbT1BUSU9OU10uLi4gRklMRVxyXG5cclxuRklMRSAtIFBhdGggdG8gYSB0ZXN0IHNjcmlwdCAoLmpzKSBvciBhIHByb2plY3QgY29uZmlndXJhdGlvbiAoLmpzb24pIGZpbGUuXHJcblxyXG5HZW5lcmFsIG9wdGlvbnM6XHJcbiAgLWQsIC0tZGVsYXk9U0VDT05EUyAgICAgICAgRGVsYXkgYmV0d2VlbiBlYWNoIGNvbW1hbmQgaW4gc2Vjb25kcy5cclxuICAgICAgLS1yZj17aHRtbHxwZGZ8eG1sfGV4Y2VsfGp1bml0fGpzb259ICBSZXBvcnRzIGZpbGUgZm9ybWF0LiBEZWZhdWx0IGlzIGh0bWwuXHJcbiAgICAgIC0tcm89UEFUSCAgICAgICAgICAgICAgT3V0cHV0IHBhdGggZm9yIHJlcG9ydCBmaWxlLiBJZiBzcGVjaWZpZWQsIHRoZSByZXBvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMgcmVwb3J0cy5cclxuICAtaSwgLS1pdGVyPUNPVU5UICAgICAgICAgICBOdW1iZXIgb2YgdGltZXMgdG8gcnVuIHRoZSB0ZXN0LiBEZWZhdWx0IGlzIDEuXHJcbiAgLXAsIC0tcGFyYW09RklMRSAgICAgICAgICAgUGFyYW1ldGVycyBmaWxlLiBJZiBub3Qgc3BlY2lmaWVkIGFuIGF0dGVtcHQgd2lsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIG1hZGUgdG8gbG9hZCBwYXJhbWV0ZXJzIGZyb20gYSBmaWxlIG5hbWVkIHNhbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGUgdGVzdCBzY3JpcHQsIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBoYXZpbmcgZXh0ZW5zaW9uIC0geGxzeCwgeGxzLCBjc3YsIG9yIHR4dC5cclxuICAgICAgLS1wbT17c2VxfHJhbmRvbXxhbGx9ICBPcmRlciBpbiB3aGljaCB0byByZWFkIHRoZSBwYXJhbWV0ZXJzIC0gc2VxdWVudGlhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb20sIGFsbC4gRGVmYXVsdCBpcyBzZXEuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gJ3NlcScgYW5kICdyYW5kb20nIG1vZGVzIHRlc3Qgd2lsbCBydW4gZXhhY3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGltZXMgc3BlY2lmaWVkIHdpdGggdGhlIC1pIG9wdGlvbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiAnYWxsJyBtb2RlLCBhbGwgYXZhaWxhYmxlIHBhcmFtZXRlcnMgd2lsbCBiZSByZWFkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVudGlhbGx5LiBUaGlzIG9wdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1pIG9wdGlvbi5cclxuICAgICAgLS1kYmdwb3J0PVBPUlQgICAgICAgICBEZWJ1Z2dlciBwb3J0LlxyXG4gICAgICAtLXN1aXRlcyAgICAgICAgICAgICAgIEZpbHRlciBvdXQgc3VpdGVzIGJ5IG5hbWVcclxuICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBEaXNwbGF5IHRoaXMgaW5mb3JtYXRpb24gYW5kIGV4aXQuXHJcbiAgLXYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgRGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0LlxyXG5cclxuV2ViIHRlc3Qgb3B0aW9uczpcclxuICAtYiwgLS1icm93c2VyPXtjaHJvbWV8aWV8c2FmYXJpfGZpcmVmb3h9ICBCcm93c2VyIG5hbWUuIERlZmF1bHQgaXMgY2hyb21lLlxyXG4gIC1zLCAtLXNlcnZlcj1TRVJWRVJfVVJMICAgIFNlbGVuaXVtIGh1YiBVUkwuIERlZmF1bHQgaXMgaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1Yi5cclxuICAgICAgLS1yZW9wZW49e3RydWV8ZmFsc2V9ICBSZW9wZW4gYnJvd3NlciBvbiBlYWNoIGl0ZXJhdGlvbi4gRGVmYXVsdCBpcyBmYWxzZS5cclxuICAgICAgXHJcbk1vYmlsZSB0ZXN0IG9wdGlvbnM6XHJcbiAgICAtcywgLS1zZXJ2ZXI9U0VSVkVSX1VSTCAgQXBwaXVtIHNlcnZlciBVUkwuIERlZmF1bHQgaXMgaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yi5gKTtcclxufSJdfQ==
|
|
137
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLmpzIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJvbiIsImhhbmRsZVNpZ0ludCIsImVycm9yIiwiY29uc29sZSIsImFyZ3YiLCJyZXF1aXJlIiwic2xpY2UiLCJ2IiwidmVyc2lvbiIsImxvZyIsImV4aXQiLCJfIiwiaGVscCIsInByaW50VXNhZ2UiLCJkIiwiZGVsYXkiLCJwYXJzZUludCIsInRhcmdldEZpbGUiLCJjbGl1dGlsIiwicHJvY2Vzc1RhcmdldFBhdGgiLCJjd2QiLCJjb25maWciLCJnZXRDb25maWd1cmF0aW9ucyIsImdlbmVyYXRlVGVzdE9wdGlvbnMiLCJ0aGVuIiwib3B0aW9ucyIsInByZXBhcmVBbmRTdGFydFRoZVRlc3QiLCJjb2RlIiwiZSIsImZyYW1ld29yayIsInN1aXRlcyIsIkFycmF5IiwiaXNBcnJheSIsIkVycm9yIiwiY2Fwc0FyciIsImNhcGFiaWxpdGllcyIsImV4aXRDb2RlIiwicmVwb3J0ZXIiLCJSZXBvcnRBZ2dyZWdhdG9yIiwibGF1bmNoZXIiLCJwYXJhbGxlbCIsIndvcmtlcnMiLCJpc05hTiIsIlBhcmFsbGVsTGF1bmNoZXIiLCJMYXVuY2hlciIsInJ1biIsImdlbmVyYXRlUmVwb3J0cyIsImdldEV4aXRDb2RlIiwidHJhY2UiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFTQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQUEsT0FBTyxDQUFDQyxFQUFSLENBQVcsUUFBWCxFQUFxQkMsWUFBckI7QUFDQUYsT0FBTyxDQUFDQyxFQUFSLENBQVcsbUJBQVgsRUFBZ0NFLEtBQUssSUFBSTtBQUNyQ0MsRUFBQUEsT0FBTyxDQUFDRCxLQUFSLENBQWMsbUJBQWQsRUFBbUNBLEtBQW5DO0FBQ0gsQ0FGRDtBQUlBSCxPQUFPLENBQUNDLEVBQVIsQ0FBVyxvQkFBWCxFQUFpQ0UsS0FBSyxJQUFJO0FBQ3RDQyxFQUFBQSxPQUFPLENBQUNELEtBQVIsQ0FBYyxvQkFBZCxF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bEJWLEVBQUFBLE9BQU8sQ0FBQ00sR0FBUixDQUFhO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUZBaENJO0FBaUNIIiwic291cmNlc0NvbnRlbnQiOlsiIyEgL3Vzci9iaW4vZW52IG5vZGVcbi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKi9cbmltcG9ydCAqIGFzIGNsaXV0aWwgZnJvbSAnLi9jbGktdXRpbCc7XG5pbXBvcnQgTGF1bmNoZXIgZnJvbSAnLi9sYXVuY2hlcic7XG5pbXBvcnQgUGFyYWxsZWxMYXVuY2hlciBmcm9tICcuL3BhcmFsbGVsLWxhdW5jaGVyJztcbmltcG9ydCBSZXBvcnRBZ2dyZWdhdG9yIGZyb20gJy4uL3JlcG9ydGVyL1JlcG9ydEFnZ3JlZ2F0b3InO1xuXG5wcm9jZXNzLm9uKCdTSUdJTlQnLCBoYW5kbGVTaWdJbnQpO1xucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnJvciA9PiB7XG4gICAgY29uc29sZS5lcnJvcigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnJvcik7XG59KTtcblxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgZXJyb3IgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ3VuaGFuZGxlZFJlamVjdGlvbicsIGVycm9yKTtcbn0pO1xuXG4vLyBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG5jb25zdCBhcmd2ID0gcmVxdWlyZSgnbWluaW1pc3QnKShwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpO1xuXG5pZiAoYXJndi52IHx8IGFyZ3YudmVyc2lvbikge1xuICAgIGNvbnNvbGUubG9nKHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24pO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbn0gZWxzZSBpZiAodHlwZW9mKGFyZ3YuX1swXSkgPT09ICd1bmRlZmluZWQnIHx8IGFyZ3YuaGVscCkge1xuICAgIHByaW50VXNhZ2UoKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmlmIChhcmd2LmQgfHwgYXJndi5kZWxheSkge1xuICAgIGNvbnN0IGRlbGF5ID0gYXJndi5kIHx8IGFyZ3YuZGVsYXk7XG4gICAgaWYgKCEocGFyc2VJbnQoZGVsYXkpID4gMCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgYXJndW1lbnQgLSAnZGVsYXknIHNob3VsZCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuXCIpO1xuICAgICAgICBwcmludFVzYWdlKCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG59XG5cbmNvbnN0IHRhcmdldEZpbGUgPSBjbGl1dGlsLnByb2Nlc3NUYXJnZXRQYXRoKGFyZ3YuX1swXSwgYXJndi5jd2QpO1xuaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkge1xuICAgIHByaW50VXNhZ2UoKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmNvbnN0IGNvbmZpZyA9IGNsaXV0aWwuZ2V0Q29uZmlndXJhdGlvbnModGFyZ2V0RmlsZSwgYXJndik7XG5cbmNsaXV0aWwuZ2VuZXJhdGVUZXN0T3B0aW9ucyhjb25maWcsIGFyZ3YpLnRoZW4oXG4gICAgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgcHJlcGFyZUFuZFN0YXJ0VGhlVGVzdChvcHRpb25zKS50aGVuKFxuICAgICAgICAgICAgKGNvZGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRG9uZSEnKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUZXN0IGZhaWxlZDogJywgZSk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0sXG4gICAgKGUpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVGVzdCBmYWlsZWQgb24gZ2VuZXJhdGUgc3RhdGU6ICcsIGUpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUFuZFN0YXJ0VGhlVGVzdChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuZnJhbWV3b3JrID09PSAnb3h5Z2VuJyAmJiAoIW9wdGlvbnMuc3VpdGVzIHx8ICFBcnJheS5pc0FycmF5KG9wdGlvbnMuc3VpdGVzKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdGhlIHRlc3QgLSBubyBzdWl0ZXMgYXJlIHNwZWNpZmllZC4nKTtcbiAgICB9XG4gICAgbGV0IGNhcHNBcnIgPSBvcHRpb25zLmNhcGFiaWxpdGllcyB8fCBbe31dO1xuICAgIC8vIGNoZWNrIGlmIGNhcGFiaWxpdGllcyBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSBoYXNodGFibGVcbiAgICBpZiAoIShjYXBzQXJyIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgIGNhcHNBcnIgPSBbY2Fwc0Fycl07XG4gICAgfVxuICAgIGxldCBleGl0Q29kZSA9IDA7XG4gICAgLy8gc3RhcnQgbGF1bmNoZXJcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXBvcnRlciA9IG5ldyBSZXBvcnRBZ2dyZWdhdG9yKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsYXVuY2hlciA9IG9wdGlvbnMucGFyYWxsZWwgJiYgb3B0aW9ucy5wYXJhbGxlbC53b3JrZXJzICYmICFpc05hTihvcHRpb25zLnBhcmFsbGVsLndvcmtlcnMpICYmIG9wdGlvbnMucGFyYWxsZWwud29ya2VycyA+IDFcbiAgICAgICAgICAgID8gbmV3IFBhcmFsbGVsTGF1bmNoZXIob3B0aW9ucywgcmVwb3J0ZXIpIDogbmV3IExhdW5jaGVyKG9wdGlvbnMsIHJlcG9ydGVyKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1Rlc3Qgc3RhcnRlZC4uLicpO1xuICAgICAgICBhd2FpdCBsYXVuY2hlci5ydW4oY2Fwc0Fycik7XG4gICAgICAgIHJlcG9ydGVyLmdlbmVyYXRlUmVwb3J0cygpO1xuICAgICAgICBleGl0Q29kZSA9IHJlcG9ydGVyLmdldEV4aXRDb2RlKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhdGFsIGVycm9yJywgZSk7XG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICByZXR1cm4gZXhpdENvZGU7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNpZ0ludCgpIHtcbiAgICAvLyBkZWxheSBwcm9jZXNzIGV4aXQgdG8gbGV0IE94eWdlbiB0byBwcm9wZXJseSBkaXNwb3NlXG4gICAgc2V0VGltZW91dCgoKSA9PiBwcm9jZXNzLmV4aXQoMCksIDIwMDApO1xufVxuXG5mdW5jdGlvbiBwcmludFVzYWdlKCkge1xuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogb3h5Z2VuIFtPUFRJT05TXS4uLiBGSUxFXG5cbkZJTEUgLSBQYXRoIHRvIGEgdGVzdCBzY3JpcHQgKC5qcykgb3IgYSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gKC5qc29uKSBmaWxlLlxuXG5HZW5lcmFsIG9wdGlvbnM6XG4gIC1kLCAtLWRlbGF5PVNFQ09ORFMgICAgICAgIERlbGF5IGJldHdlZW4gZWFjaCBjb21tYW5kIGluIHNlY29uZHMuXG4gICAgICAtLXJmPXtodG1sfHBkZnx4bWx8ZXhjZWx8anVuaXR8anNvbn0gIFJlcG9ydHMgZmlsZSBmb3JtYXQuIERlZmF1bHQgaXMgaHRtbC5cbiAgICAgIC0tcm89UEFUSCAgICAgICAgICAgICAgT3V0cHV0IHBhdGggZm9yIHJlcG9ydCBmaWxlLiBJZiBzcGVjaWZpZWQsIHRoZSByZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBvdmVyd3JpdGUgYW55IHByZXZpb3VzIHJlcG9ydHMuXG4gIC1pLCAtLWl0ZXI9Q09VTlQgICAgICAgICAgIE51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHRlc3QuIERlZmF1bHQgaXMgMS5cbiAgLXAsIC0tcGFyYW09RklMRSAgICAgICAgICAgUGFyYW1ldGVycyBmaWxlLiBJZiBub3Qgc3BlY2lmaWVkIGFuIGF0dGVtcHQgd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBtYWRlIHRvIGxvYWQgcGFyYW1ldGVycyBmcm9tIGEgZmlsZSBuYW1lZCBzYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSB0ZXN0IHNjcmlwdCwgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBoYXZpbmcgZXh0ZW5zaW9uIC0geGxzeCwgeGxzLCBjc3YsIG9yIHR4dC5cbiAgICAgIC0tcG09e3NlcXxyYW5kb218YWxsfSAgT3JkZXIgaW4gd2hpY2ggdG8gcmVhZCB0aGUgcGFyYW1ldGVycyAtIHNlcXVlbnRpYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSwgYWxsLiBEZWZhdWx0IGlzIHNlcS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gJ3NlcScgYW5kICdyYW5kb20nIG1vZGVzIHRlc3Qgd2lsbCBydW4gZXhhY3QgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRpbWVzIHNwZWNpZmllZCB3aXRoIHRoZSAtaSBvcHRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluICdhbGwnIG1vZGUsIGFsbCBhdmFpbGFibGUgcGFyYW1ldGVycyB3aWxsIGJlIHJlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVudGlhbGx5LiBUaGlzIG9wdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtaSBvcHRpb24uXG4gICAgICAtLWRiZ3BvcnQ9UE9SVCAgICAgICAgIERlYnVnZ2VyIHBvcnQuXG4gICAgICAtLXN1aXRlcyAgICAgICAgICAgICAgIEZpbHRlciBvdXQgc3VpdGVzIGJ5IG5hbWVcbiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIGluZm9ybWF0aW9uIGFuZCBleGl0LlxuICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuXG5cbldlYiB0ZXN0IG9wdGlvbnM6XG4gIC1iLCAtLWJyb3dzZXI9e2Nocm9tZXxpZXxzYWZhcml8ZmlyZWZveH0gIEJyb3dzZXIgbmFtZS4gRGVmYXVsdCBpcyBjaHJvbWUuXG4gIC1zLCAtLXNlcnZlcj1TRVJWRVJfVVJMICAgIFNlbGVuaXVtIGh1YiBVUkwuIERlZmF1bHQgaXMgaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1Yi5cbiAgICAgIC0tcmVvcGVuPXt0cnVlfGZhbHNlfSAgUmVvcGVuIGJyb3dzZXIgb24gZWFjaCBpdGVyYXRpb24uIERlZmF1bHQgaXMgZmFsc2UuXG4gICAgICBcbk1vYmlsZSB0ZXN0IG9wdGlvbnM6XG4gICAgLXMsIC0tc2VydmVyPVNFUlZFUl9VUkwgIEFwcGl1bSBzZXJ2ZXIgVVJMLiBEZWZhdWx0IGlzIGh0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWIuYCk7XG59Il19
|
|
@@ -287,39 +287,24 @@ class MobileModule extends _WebDriverModule.default {
|
|
|
287
287
|
} // merge user-provided BS options into the final options object
|
|
288
288
|
|
|
289
289
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
if (wdioOpts.capabilities['bstack:local']) {
|
|
296
|
-
bsOptions.local = wdioOpts.capabilities['bstack:local'];
|
|
297
|
-
delete wdioOpts.capabilities['bstack:local'];
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
if (wdioOpts.capabilities['bstack:networkLogs']) {
|
|
301
|
-
bsOptions.networkLogs = wdioOpts.capabilities['bstack:networkLogs'];
|
|
302
|
-
delete wdioOpts.capabilities['bstack:networkLogs'];
|
|
303
|
-
}
|
|
290
|
+
for (const capName in wdioOpts.capabilities) {
|
|
291
|
+
if (capName.startsWith('bstack:')) {
|
|
292
|
+
const bsCapName = capName.substring('bstack:'.length);
|
|
304
293
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
}
|
|
294
|
+
if (bsCapName === 'options') {
|
|
295
|
+
continue;
|
|
296
|
+
} // for backward compatibility... needs to be removed eventually
|
|
309
297
|
|
|
310
|
-
if (wdioOpts.capabilities['bstack:gpsLocation']) {
|
|
311
|
-
bsOptions.gpsLocation = wdioOpts.capabilities['bstack:gpsLocation'];
|
|
312
|
-
delete wdioOpts.capabilities['bstack:gpsLocation'];
|
|
313
|
-
}
|
|
314
298
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
299
|
+
if (bsCapName === 'recordVideo') {
|
|
300
|
+
bsOptions.video = wdioOpts.capabilities[capName];
|
|
301
|
+
delete wdioOpts.capabilities[capName];
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
319
304
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
305
|
+
bsOptions[bsCapName] = wdioOpts.capabilities[capName];
|
|
306
|
+
delete wdioOpts.capabilities[capName];
|
|
307
|
+
}
|
|
323
308
|
}
|
|
324
309
|
}
|
|
325
310
|
}
|
|
@@ -793,4 +778,4 @@ class MobileModule extends _WebDriverModule.default {
|
|
|
793
778
|
}
|
|
794
779
|
|
|
795
780
|
exports.default = MobileModule;
|
|
796
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1tb2IuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0JST1dTRVJfTkFNRSIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIk1vYmlsZU1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsImFwcENvbnRleHQiLCJfbG9hZEhlbHBlckZ1bmN0aW9ucyIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJ3YWl0Rm9yVGltZW91dCIsIm5hbWUiLCJnZXREcml2ZXIiLCJnZXRDYXBhYmlsaXRpZXMiLCJjYXBzIiwiaW5pdCIsImFwcGl1bVVybCIsImlzSW5pdGlhbGl6ZWQiLCJyZW9wZW5TZXNzaW9uIiwiZGVidWciLCJkcml2ZXIiLCJyZWxvYWRTZXNzaW9uIiwiX2lzSW5pdGlhbGl6ZWQiLCJjdHgiLCJwbGF0Zm9ybU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VOYW1lIiwiYnJvd3Nlck5hbWUiLCJhdXRvbWF0aW9uTmFtZSIsInVkaWQiLCJhcHAiLCJlbmFibGVBcHBpdW1CZWhhdmlvciIsInVzZUFwcGl1bUZvcldlYiIsImNvbGxlY3REZXZpY2VMb2dzIiwiYXBwUGFja2FnZSIsImJ1bmRsZUlkIiwidG9Mb3dlckNhc2UiLCJyZWNvcmRIQVIiLCJicm93c2VyIiwicGVyZm9ybWFuY2UiLCJ1cmwiLCJVUkwiLCJwYXJzZSIsInByb3RvY29sIiwicmVwbGFjZSIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwYXJzZUludCIsInBhdGgiLCJwYXRobmFtZSIsImF1dGgiLCJzcGxpdCIsIndkaW9PcHRzIiwidXNlciIsImtleSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJwcm92aWRlciIsIm1vZFV0aWxzIiwiZGV0ZXJtaW5lUHJvdmlkZXIiLCJQRVJGRUNUTyIsIm1heEluc3RhbmNlcyIsIm9wZW5EZXZpY2VUaW1lb3V0IiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJCUk9XU0VSU1RBQ0siLCJic09wdGlvbnMiLCJvc05hbWUiLCJvcyIsInJlYWxNb2JpbGUiLCJ2aWRlbyIsImxvY2FsIiwibmV0d29ya0xvZ3MiLCJncHNMb2NhdGlvbiIsImJ1aWxkTmFtZSIsImlkbGVUaW1lb3V0Iiwid2RpbyIsInJlbW90ZSIsInNlbGVuaXVtQnJvd3NlclRpbWVvdXQiLCJzZWxlbml1bVRpbWVvdXQiLCJwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJwZXJmZWN0b1JlcG9ydGluZyIsIlBlcmZlY3RvIiwiUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0Iiwid2ViZHJpdmVyIiwiZXhlY3V0ZVNjcmlwdCIsImNvbW1hbmQiLCJwYXJhbXMiLCJleGVjdXRlIiwicmVwb3J0aW5nQ2xpZW50IiwiUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQiLCJ0ZXN0U3RhcnQiLCJlIiwiZ2V0QXBwaXVtSW5pdEVycm9yIiwiZ2V0Q29udGV4dCIsInNldFdlYlZpZXdDb250ZXh0Iiwic2V0VGltZW91dCIsIm92ZXJ3cml0ZVdkaW9Db21tYW5kcyIsImRpc3Bvc2UiLCJzdGF0dXMiLCJzdGVwcyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImZhaWxlZEZpbmRlZCIsImZpbmQiLCJpdGVtIiwidG9VcHBlckNhc2UiLCJ0ZXN0U3RvcCIsIkNvbnN0YW50cyIsInJlc3VsdHMiLCJwYXNzZWQiLCJmYWlsZWQiLCJfc2V0QnJvd3NlclN0YWNrUmVzdWx0U3RhdHVzIiwiZGVsZXRlU2Vzc2lvbiIsImluY2x1ZGVzIiwic2VsZW5pdW1TZXNzaW9uVGltZW91dCIsIndhcm4iLCJ0cmFuc2FjdGlvbiIsInRvU3RyaW5nIiwic2xpY2UiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsImVycm9yIiwidGFrZVNjcmVlbnNob3QiLCJyZXR2YWwiLCJjYWxsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ3YWl0VW50aWxSZXRWYWwiLCJ3YWl0VW50aWwiLCJpbWFnZXMiLCJwdXNoSW1hZ2VUb0ltYWdlcyIsImZldGNoVGl0bGUiLCJpbWFnZSIsInRpdGxlIiwiZ2V0VGl0bGUiLCJ0ZXh0VG9JbWFnZSIsInJlcXVpcmUiLCJ0aXRsZUltYWdlIiwiZ2VuZXJhdGUiLCJwdXNoIiwiaXNXZWJWaWV3Q29udGV4dCIsImhhbmRsZXMiLCJnZXRXaW5kb3dIYW5kbGVzIiwiaGFuZGxlIiwic3dpdGNoVG9XaW5kb3ciLCJtZXJnZWRJbWFnZSIsImRpcmVjdGlvbiIsInRpbWVvdXQiLCJ0aGVuIiwiY2F0Y2giLCJlcnIiLCJfYWRqdXN0QXBwaXVtTG9nIiwibG9nIiwic3JjIiwidGltZSIsInRpbWVzdGFtcCIsIm1zZyIsIm1lc3NhZ2UiLCJsZXZlbCIsIl9pdGVyYXRpb25TdGFydCIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJBUFBJVU1fU0VTU0lPTl9USU1FT1VUIiwibG9ncyIsImdldERldmljZUxvZ3MiLCJjb2xsZWN0QnJvd3NlckxvZ3MiLCJnZXRCcm93c2VyTG9ncyIsImNvbGxlY3RBcHBpdW1Mb2dzIiwiZ2V0QXBwaXVtTG9ncyIsImxvZ0VudHJ5IiwicmVzdWx0VXJsIiwiX2dldEJyb3dzZXJTdGFja1Jlc3VsdFVybCIsImF0dHJpYnV0ZXMiLCJfZ2V0V2Rpb0xvY2F0b3IiLCJsb2NhdG9yIiwiU0NSSVBUX0VSUk9SIiwiaW5kZXhPZiIsInBsYXRmb3JtIiwic3Vic3RyIiwiZ2V0V2Rpb0xvY2F0b3IiLCJtYXRjaFBhdHRlcm4iLCJnZXRFbGVtZW50IiwiZ2V0RWxlbWVudHMiLCJnZXRDaGlsZEVsZW1lbnQiLCJnZXRDaGlsZEVsZW1lbnRzIiwic2V0VGltZW91dEltcGxpY2l0IiwicmVzdG9yZVRpbWVvdXRJbXBsaWNpdCIsImFzc2VydEFyZ3VtZW50IiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiYXNzZXJ0Q29udGV4dCIsImNvbnRleHRMaXN0IiwiZ2V0TG9nVHlwZXMiLCJic0FwaVVybCIsInNlc3Npb25JZCIsIm1ldGhvZCIsImpzb24iLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJib2R5IiwidXNlck5hbWUiLCJhY2Nlc3NLZXkiLCJyZXMiLCJhdXRvbWF0aW9uX3Nlc3Npb24iLCJicm93c2VyX3VybCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFHQSxNQUFNQSxXQUFXLEdBQUcsS0FBcEI7QUFDQSxNQUFN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Q1Y7QUFDSixLQWhDTSxDQUFQO0FBaUNIOztBQXRyQnFEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSBtb2JcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIG1vYmlsZSBhdXRvbWF0aW9uLlxyXG4gKiBAc2FtcGxlICoqTG9jYXRvcnM6KiogIFxyXG4gKiBcclxuICogTmF0aXZlIGFwcGxpY2F0aW9uIGxvY2F0b3JzIGZvciFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYW5kcm9pZC5wbmcpICBcclxuICogKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogKiBgfkFDQ0VTU0lCSUxJVFlfSURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBBY2Nlc3NpYmlsaXR5IElkLlxyXG4gKiAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGlkLlxyXG4gKiAqIGBjbGFzcz1DTEFTU2AgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGNsYXNzLlxyXG4gKiAqIGB0ZXh0PVRFWFRgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyB2aXNpYmxlIHRleHQuXHJcbiAqICogYHRleHQtY29udGFpbnM9VEVYVGAgLSBMb2NhdGVzIGVsZW1lbnQgd2hvc2UgdmlzaWJsZSB0ZXh0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3RyaW5nLlxyXG4gKiAqIGBkZXNjPURFU0NSSVBUSU9OYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgZGVzY3JpcHRpb24uXHJcbiAqICogYGRlc2MtY29udGFpbnM9REVTQ1JJUFRJT05gIC0gTG9jYXRlcyBlbGVtZW50IHdob3NlIGRlc2NyaXB0aW9uIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3RyaW5nLlxyXG4gKiAqIGBzY3JvbGxhYmxlYCAtIExvY2F0ZXMgZWxlbWVudHMgdGhhdCBhcmUgc2Nyb2xsYWJsZS4gIFxyXG4gKiAgXHJcbiAqIE5hdGl2ZSBhcHBsaWNhdGlvbiBsb2NhdG9ycyBmb3IhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FwcGxlLnBuZykgIFxyXG4gKiAgXHJcbiAqICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICogYGlkPUlEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgSUQuXHJcbiAqICogYH5BQ0NFU1NJQklMSVRZX0lEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJZC4gIFxyXG4gKiAqIGAtaW9zIHByZWRpY2F0ZSBzdHJpbmc6UFJFRElDQVRFX1NUUklOR2AgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYSBbcHJlZGljYXRlIHF1ZXJ5XShodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2thcmNoaXZlL1dlYkRyaXZlckFnZW50L3dpa2kvUHJlZGljYXRlLVF1ZXJpZXMtQ29uc3RydWN0aW9uLVJ1bGVzKS4gIFxyXG4gKiAqIGAtaW9zIGNsYXNzIGNoYWluOkNMQVNTX0NIQUlOYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIFtjbGFzcyBjaGFpbiBleHByZXNzaW9uXShodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2thcmNoaXZlL1dlYkRyaXZlckFnZW50L3dpa2kvQ2xhc3MtQ2hhaW4tUXVlcmllcy1Db25zdHJ1Y3Rpb24tUnVsZXMpLiAgXHJcbiAqICBcclxuICogSHlicmlkIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9oeWJyaWQucG5nKSAgYW5kIFdlYiFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvd2ViLnBuZykgIGFwcGxpY2F0aW9uIGxvY2F0b3JzIGZvciFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYW5kcm9pZC5wbmcpICAhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FwcGxlLnBuZykgIFxyXG4gKiAgXHJcbiAqICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICogYGlkPUlEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgaWQuXHJcbiAqICogYG5hbWU9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIG5hbWUgYXR0cmlidXRlLlxyXG4gKiAqIGB0YWc9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxyXG4gKiAqIGBsaW5rPVRFWFRgIC0gTG9jYXRlcyBhbmNob3IgZWxlbWVudCB3aG9zZSB0ZXh0IG1hdGNoZXMgdGhlIGdpdmVuIHN0cmluZy5cclxuICogKiBgbGluay1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgYW5jaG9yIGVsZW1lbnQgd2hvc2UgdGV4dCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAqIGBjc3M9Q1NTX1NFTEVDVE9SYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIENTUyBzZWxlY3Rvci5cclxuICogXHJcbiAqICoqUGF0dGVybiBhcmd1bWVudHM6KipcclxuICogXHJcbiAqIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAqIGByZWdleDpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogKiBgUEFUVEVSTmAgLSBWZXJiYXRpbSBtYXRjaGluZy5cclxuICogXHJcbiAqL1xyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgcGVyZmVjdG9SZXBvcnRpbmcgZnJvbSAncGVyZmVjdG8tcmVwb3J0aW5nJztcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XHJcbmltcG9ydCBtZXJnZUltYWdlcyBmcm9tICcuLi9saWIvaW1nLW1lcmdlJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnbW9iJztcclxuY29uc3QgREVGQVVMVF9BUFBJVU1fVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWInO1xyXG5jb25zdCBERUZBVUxUX0JST1dTRVJfTkFNRSA9ICdkZWZhdWx0JztcclxuY29uc3QgTk9fU0NSRUVOU0hPVF9DT01NQU5EUyA9IFsnaW5pdCcsICdhc3NlcnRBbGVydCddO1xyXG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCd0YXAnLCdjbGljaycsJ3N3aXBlJywnc3VibWl0Jywnc2V0VmFsdWUnXTtcclxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVPVVQgPSA2MCAqIDEwMDA7ICAgICAgICAgICAgLy8gZGVmYXVsdCA2MHMgd2FpdCB0aW1lb3V0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2JpbGVNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5ldHdvcmtSZXF1ZXN0cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gJ05BVElWRV9BUFAnO1xyXG4gICAgICAgIHRoaXMuX2xvYWRIZWxwZXJGdW5jdGlvbnMoKTtcclxuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXHJcbiAgICAgICAgdGhpcy5PeEVycm9yID0gT3hFcnJvcjtcclxuICAgICAgICB0aGlzLmVyckhlbHBlciA9IGVyckhlbHBlcjtcclxuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yVGltZW91dCA9IERFRkFVTFRfV0FJVF9USU1FT1VUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgQXBwaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGFwcGl1bVVybCAtIFJlbW90ZSBBcHBpdW0gc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2FwcywgYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgLy8gaWYgcmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVpbml0aWxpemUgdGhlIG1vZHVsZVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZW9wZW5TZXNzaW9uICE9PSBmYWxzZSkgeyAvLyB0cnVlIG9yIGZhbHNlIGlmIGV4cGxpc2l0bHkgc2V0LiB0cnVlIG9uIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3Jlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlbG9hZGluZyB0aGUgc2Vzc2lvbi4uLicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIucmVsb2FkU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnbW9iLmluaXQgd2FzIGNhbGxlZCBmb3IgYWxyZWFkeSBpbml0aWFsaXplZCBtb2R1bGUuIHJlb3BlblNlc3Npb24gaXMgZmFsc2Ugc28gdGhlIGNhbGwgaXMgaWdub3JlZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZFxyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzICYmIHRoaXMuY3R4LmNhcHNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMucGxhdGZvcm1OYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMucGxhdGZvcm1WZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuZGV2aWNlTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuYXV0b21hdGlvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy51ZGlkO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXBzLmFwcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHMuZW5hYmxlQXBwaXVtQmVoYXZpb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXBzLnVzZUFwcGl1bUZvcldlYiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2Fwcy5lbmFibGVBcHBpdW1CZWhhdmlvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5jYXBzLnVzZUFwcGl1bUZvcldlYiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5jYXBzLmVuYWJsZUFwcGl1bUJlaGF2aW9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhcHBpdW1VcmwpIHtcclxuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBjbGVhciB0aGUgZXhpc3RpbmcgZGV2aWNlIGxvZ3MsIGlmIGNvbGxlY3REZXZpY2VMb2dzIG9wdGlvbiBpcyB0cnVlICh3ZSB3YW50IHRvIGluY2x1ZGUgbG9ncyBvbmx5IHJlbGV2YW50IGZvciB0aGlzIHNlc3Npb24pXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0RGV2aWNlTG9ncykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHNbJ2NsZWFyRGV2aWNlTG9nc09uU3RhcnQnXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiBib3RoIGJyb3dzZXJOYW1lIGFuZCBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCB3ZXJlIHNwZWNpZmllZCAtIGFzc3VtZSB3ZSB3YW50IHRvIHJ1biB0aGUgYXBwbGljYXRpb24gYW5kIHJlbW92ZSBicm93c2VyTmFtZVxyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgKHRoaXMuY2Fwcy5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHAgfHwgdGhpcy5jYXBzLmJ1bmRsZUlkKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYXBzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBubyBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCBjYXBhYmlsaXR5IG5vciBicm93c2VyTmFtZSBhcmUgZGVmaW5lZCwgYXNzdW1lIHdlIHdhbnQgdG8gcnVuIHRoZSB0ZXN0IGFnYWluc3QgZGVmYXVsdCBicm93c2VyXHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiAhdGhpcy5jYXBzLmFwcFBhY2thZ2UgJiYgIXRoaXMuY2Fwcy5hcHAgJiYgIXRoaXMuY2Fwcy5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2ViZHJpdmVyIGV4cGVjdHMgbG93ZXIgY2FzZSBuYW1lc1xyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgdHlwZW9mIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShhcHBpdW1VcmwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBwcm92aWRlciA9IG1vZFV0aWxzLmRldGVybWluZVByb3ZpZGVyKHdkaW9PcHRzKTtcclxuICAgICAgICBsZXQgbmFtZSA9ICduYW1lJztcclxuXHJcbiAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMubWF4SW5zdGFuY2VzID0gMTtcclxuICAgICAgICAgICAgd2Rpb09wdHMucGF0aCA9ICcvbmV4cGVyaWVuY2UvcGVyZmVjdG9tb2JpbGUvd2QvaHViJztcclxuICAgICAgICAgICAgd2Rpb09wdHMucG9ydCA9IDgwO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wcm90b2NvbCA9ICdodHRwJztcclxuICAgICAgICAgICAgd2Rpb09wdHMub3BlbkRldmljZVRpbWVvdXQgPSAxNTtcclxuXHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMubWFudWZhY3R1cmVyO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLm1vZGVsO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmhvc3Q7XHJcblxyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICBjb25zdCBic09wdGlvbnMgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ107XHJcbiAgICAgICAgICAgIGlmIChic09wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRldmljZU5hbWUgPSBic09wdGlvbnMuZGV2aWNlTmFtZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9zTmFtZSA9IGJzT3B0aW9ucy5vcztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGV2aWNlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJzT3B0aW9ucy5yZWFsTW9iaWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2FwcGl1bTpkZXZpY2VOYW1lJ10gPSBkZXZpY2VOYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHNldCBhdXRvbWF0aW9uTmFtZSBBcHBpdW0gY2FwYWJpbGl0eVxyXG4gICAgICAgICAgICAgICAgaWYgKG9zTmFtZSAmJiBvc05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2FuZHJvaWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLnBsYXRmb3JtTmFtZSA9ICdBbmRyb2lkJztcclxuICAgICAgICAgICAgICAgICAgICB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2FwcGl1bTphdXRvbWF0aW9uTmFtZSddID0gJ1VJQXV0b21hdG9yMic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChvc05hbWUgJiYgb3NOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpb3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLnBsYXRmb3JtTmFtZSA9ICdpT1MnO1xyXG4gICAgICAgICAgICAgICAgICAgIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYXBwaXVtOmF1dG9tYXRpb25OYW1lJ10gPSAnWENVSVRlc3QnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG1lcmdlIHVzZXItcHJvdmlkZWQgQlMgb3B0aW9ucyBpbnRvIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOnJlY29yZFZpZGVvJ10pIHtcclxuICAgICAgICAgICAgICAgICAgICBic09wdGlvbnMudmlkZW8gPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpyZWNvcmRWaWRlbyddO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpyZWNvcmRWaWRlbyddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOmxvY2FsJ10pIHtcclxuICAgICAgICAgICAgICAgICAgICBic09wdGlvbnMubG9jYWwgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpsb2NhbCddO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpsb2NhbCddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm5ldHdvcmtMb2dzJ10pIHtcclxuICAgICAgICAgICAgICAgICAgICBic09wdGlvbnMubmV0d29ya0xvZ3MgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpuZXR3b3JrTG9ncyddO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpuZXR3b3JrTG9ncyddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOmRlYnVnJ10pIHtcclxuICAgICAgICAgICAgICAgICAgICBic09wdGlvbnMuZGVidWcgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpkZWJ1ZyddO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpkZWJ1ZyddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOmdwc0xvY2F0aW9uJ10pIHtcclxuICAgICAgICAgICAgICAgICAgICBic09wdGlvbnMuZ3BzTG9jYXRpb24gPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpncHNMb2NhdGlvbiddO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpncHNMb2NhdGlvbiddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOmJ1aWxkTmFtZSddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnNPcHRpb25zLmJ1aWxkTmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOmJ1aWxkTmFtZSddO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpidWlsZE5hbWUnXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazppZGxlVGltZW91dCddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnNPcHRpb25zLmlkbGVUaW1lb3V0ID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6aWRsZVRpbWVvdXQnXTtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6aWRsZVRpbWVvdXQnXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXSAmJiB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ11bJ25hbWUnXSkge1xyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLndkaW9PcHRzID0gd2Rpb09wdHM7XHJcblxyXG4gICAgICAgIC8vIGluaXQgd2ViZHJpdmVyXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBhd2FpdCB3ZGlvLnJlbW90ZSh3ZGlvT3B0cyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlci5wcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQgPSBhd2FpdCBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICB3ZWJkcml2ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVNjcmlwdDogYXN5bmMgKGNvbW1hbmQsIHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoY29tbWFuZCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdDbGllbnQgPSBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQocGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdGFydChuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJySGVscGVyLmdldEFwcGl1bUluaXRFcnJvcihlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dCA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldENvbnRleHQoKTtcclxuXHJcbiAgICAgICAgLy8gaWYgd2UgYXJlIHJ1bm5pbmcgb24gQW5kcm9pZCA3KyBlbXVsYXRvciwgYW5kIHRodXMvb3IgdXNpbmcgYSBXZWJWaWV3IEJyb3dzZXIgVGVzdGVyIC1cclxuICAgICAgICAvLyBwZXJmb3JtIGFuIGFjdHVhbCBhcHBDb250ZXh0IHN3aXRjaCB0byBXRUJcclxuICAgICAgICAvLyBzbyBBcHBpdW0gd2lsbCBkZWxlZ2F0ZSBjb21tYW5kcyB0byBDaHJvbWUgRHJpdmVyIGluc3RlYWQgb2YgQXBwaXVtIERyaXZlclxyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICAnY2hyb21pdW0td2VidmlldycpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRXZWJWaWV3Q29udGV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5CUk9XU0VSU1RBQ0spIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIC8vIGZhaWxzIG9uIGJyb3dzZXJzdGFja1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoeyAnaW1wbGljaXQnOiB0aGlzLndhaXRGb3JUaW1lb3V0IH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgbW9kVXRpbHMub3ZlcndyaXRlV2Rpb0NvbW1hbmRzKHRoaXMuZHJpdmVyKTtcclxuXHJcbiAgICAgICAgc3VwZXIuaW5pdCh0aGlzLmRyaXZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHN1bW1hcnkgRW5kcyB0aGUgY3VycmVudCBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBzdGF0dXMgLSBUZXN0IHN0YXR1cywgZWl0aGVyIGBwYXNzZWRgIG9yIGBmYWlsZWRgLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xyXG4gICAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9ICdwYXNzZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucnMuc3RlcHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnJzLnN0ZXBzKSAmJiB0aGlzLnJzLnN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZEZpbmRlZCA9IHRoaXMucnMuc3RlcHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWRGaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdG9wKHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLnBhc3NlZCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdG9SZXBvcnRpbmcuQ29uc3RhbnRzLnJlc3VsdHMuZmFpbGVkXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuQlJPV1NFUlNUQUNLKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zZXRCcm93c2VyU3RhY2tSZXN1bHRTdGF0dXMoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFbJ0NBTkNFTEVEJywgJ0ZBSUxFRCddLmluY2x1ZGVzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGVTZXNzaW9uIHdpbGwgdGFrZSA1IG1pbiB0byBjYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignRXJyb3IgZGlzcG9zaW5nIGRyaXZlcjogJyArIGUpOyAgICAvLyBpZ25vcmUgYW55IGVycm9ycyBhdCBkaXNwb3NhbCBzdGFnZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqIEBmb3IgYW5kcm9pZCwgaW9zLCBoeWJyaWQsIHdlYlxyXG4gICAgICovXHJcbiAgICB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8ganVzdCBpbiBjYXNlIHVzZXIgcGFzc2VkIGEgY29tcGxleCBvYmplY3QgYnkgbWlzdGFrZVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIC8vIGxpbWl0IHRoZSBuYW1lIGxlbmd0aCAoc2luY2Ugd2UgY2FuJ3Qgc3RvcmUgdmFsdWVzIGxhcmdlciB0aGFuIDUxMkIgaW4gdGhlIGRhdGFiYXNlKVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIDUxMik7XHJcblxyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIFByaXZhdGVcclxuICAgICAqL1xyXG5cclxuICAgIF9pc0FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIEFDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNjcmVlbnNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU0NSRUVOU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdXNoSW1hZ2VUb0ltYWdlcyA9IGFzeW5jKGZldGNoVGl0bGUgPSB0cnVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmV0Y2hUaXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VGl0bGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFRvSW1hZ2UgPSByZXF1aXJlKCcuLi9saWIvdGV4dC10by1pbWFnZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGVJbWFnZSA9IGF3YWl0IHRleHRUb0ltYWdlLmdlbmVyYXRlKHRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlSW1hZ2UgJiYgdHlwZW9mIHRpdGxlSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUltYWdlID0gdGl0bGVJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2godGl0bGVJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goaW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNXZWJWaWV3Q29udGV4dCA9IGF3YWl0IHRoaXMuaXNXZWJWaWV3Q29udGV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNXZWJWaWV3Q29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sbGVjdCBhbGwgKHNjcmVlbnNob3QgYW5kIHRpdGxlKSBpbWFnZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRXaW5kb3dIYW5kbGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoaGFuZGxlcykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlIG9mIGhhbmRsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc3dpdGNoVG9XaW5kb3coaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHVzaEltYWdlVG9JbWFnZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwdXNoSW1hZ2VUb0ltYWdlcyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFsbCBpbWFnZXMgaW50byBvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkSW1hZ2UgPSBhd2FpdCBtZXJnZUltYWdlcyhpbWFnZXMsIHsgZGlyZWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVyZ2VkSW1hZ2UgJiYgdHlwZW9mIG1lcmdlZEltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gbWVyZ2VkSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FpdFVudGlsUmV0VmFsICYmIHdhaXRVbnRpbFJldFZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFVudGlsUmV0VmFsLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90JywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90IGlubmVyIGVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gX2dldExvZ3MobmFtZSkge1xyXG4gICAgLy8gICAgIGlmICghTk9fTE9HU19DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2dzKCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIF9hZGp1c3RBcHBpdW1Mb2cobG9nLCBzcmMpIHtcclxuICAgICAgICBpZiAoIWxvZyB8fCB0eXBlb2YgbG9nICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogY29udmVydCBsb2cudGltZXN0YW1wIGZyb20gdGhlIGRldmljZSB0aW1lIHpvbmUgdG8gdGhlIGxvY2FsIG9uZSAoc28gd2UgY2FuIGxhdGVyIGNvcnJlbGF0ZSBiZXR3ZWVuIHN0ZXBzIGFuZCBsb2dzKSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZTogbG9nLnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgbXNnOiBsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgbGV2ZWw6IGxvZy5sZXZlbCxcclxuICAgICAgICAgICAgc3JjOiBzcmNcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25TdGFydCgpIHtcclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pdGVyYXRpb25FbmQoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkFQUElVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZ25vcmUgdGhlIHJlc3QgaWYgbW9iIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIHRoZSBkZXZpY2UgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0RGV2aWNlTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2csICdkZXZpY2UnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGRldmljZSBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCB0aGUgYnJvd3NlciBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0QnJvd3NlckxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nLCAnYnJvd3NlcicpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QXBwaXVtTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZ0VudHJ5IG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdFVybCA9IGF3YWl0IHRoaXMuX2dldEJyb3dzZXJTdGFja1Jlc3VsdFVybCgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRVcmwpIHtcclxuICAgICAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gY29udGV4dC5yZXN1bHREYXRhIGluc3RlYWRcclxuICAgICAgICAgICAgdGhpcy5ycy5hdHRyaWJ1dGVzWydCcm93c2VyU3RhY2tVcmwnXSA9IHJlc3VsdFVybDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2dldFdkaW9Mb2NhdG9yKGxvY2F0b3IpIHtcclxuICAgICAgICBpZiAoIWxvY2F0b3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gbG9jYXRvciBub3Qgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgbG9jYXRvciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJy8nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjsgLy8gbGVhdmUgeHBhdGggbG9jYXRvciBhcyBpc1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMuY2FwcyAmJiB0aGlzLmNhcHMucGxhdGZvcm1OYW1lID8gdGhpcy5jYXBzLnBsYXRmb3JtTmFtZS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXBwQ29udGV4dCA9PT0gJ05BVElWRV9BUFAnICYmIHBsYXRmb3JtID09PSAnYW5kcm9pZCcpIHtcclxuICAgICAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignaWQ9JykgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIHByZXBlbmQgcGFja2FnZSBuYW1lIGlmIGl0J3Mgbm90IHNwZWNpZmllZFxyXG4gICAgICAgICAgICAgICAgLy8gTk9URTogZ2V0Q3VycmVudFBhY2thZ2UoKSBzZWVtcyB0byBjcmFzaCBwb3NzaWJseSBkdWUgdG8gYSB3ZGlvIGJ1Zy4gXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgICBzbyB3ZSBnZXQgcGFja2FnZSBuYW1lIGZyb20gY2FwcyBpbnN0ZWFkLlxyXG4gICAgICAgICAgICAgICAgbG9jYXRvciA9IGxvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCc6aWQvJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRvciA9IHRoaXMuY2Fwcy5hcHBQYWNrYWdlICsgJzppZC8nICsgbG9jYXRvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnJlc291cmNlSWQoXCInICsgbG9jYXRvciArICdcIiknO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignY2xhc3M9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5jbGFzc05hbWUoXCInICsgbG9jYXRvci5zdWJzdHIoJ2NsYXNzPScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ3RleHQ9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS50ZXh0KFwiJyArIGxvY2F0b3Iuc3Vic3RyKCd0ZXh0PScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ3RleHQtY29udGFpbnM9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS50ZXh0Q29udGFpbnMoXCInICsgbG9jYXRvci5zdWJzdHIoJ3RleHQtY29udGFpbnM9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignZGVzYz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uKFwiJyArIGxvY2F0b3Iuc3Vic3RyKCdkZXNjPScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2Rlc2MtY29udGFpbnM9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5kZXNjcmlwdGlvbkNvbnRhaW5zKFwiJyArIGxvY2F0b3Iuc3Vic3RyKCdkZXNjLWNvbnRhaW5zPScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ3Njcm9sbGFibGUnKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnNjcm9sbGFibGUodHJ1ZSknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ34nKSA9PT0gMCkgICAgLy8gYWNjZXNzaWJpbGl0eSBpZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcENvbnRleHQgPT09ICdOQVRJVkVfQVBQJyAmJiBwbGF0Zm9ybSA9PT0gJ2lvcycpIHtcclxuICAgICAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignficpID09PSAwKSAvLyBhY2Nlc3NpYmlsaXR5IGlkXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwQ29udGV4dCAhPT0gJ05BVElWRV9BUFAnKSB7ICAgICAgICAgICAgLy8gSHlicmlkIG9yIFdlYiBhcHBsaWNhdGlvblxyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnIycgKyBsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpOyAgICAgIC8vIGNvbnZlcnQgJ2lkPScgdG8gJyMnXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbmFtZT0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnW25hbWU9JyArIGxvY2F0b3Iuc3Vic3RyKCduYW1lPScubGVuZ3RoKSArICddJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICc9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rLWNvbnRhaW5zPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcqPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignY3NzPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3Iuc3Vic3RyKCdjc3M9Jy5sZW5ndGgpOyAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBjc3MsIGp1c3QgcmVtb3ZlIGNzcz0gcHJlZml4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSB0aGlzLl9nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0Q29udGV4dCA9IG1vZFV0aWxzLmFzc2VydENvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNvbnRleHRMaXN0ID0gbW9kVXRpbHMuY29udGV4dExpc3Q7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldExvZ1R5cGVzID0gbW9kVXRpbHMuZ2V0TG9nVHlwZXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlU2Vzc2lvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVsZXRlU2Vzc2lvbiBlcnJvcicsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2V0QnJvd3NlclN0YWNrUmVzdWx0U3RhdHVzKHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGRpZmZlcmVudCBBUElzIGFyZSB1c2VkIGRlcGVuZGluZyBvbiB0ZXN0IHR5cGUuXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LmJyb3dzZXJzdGFjay5jb20vZG9jcy9hdXRvbWF0ZS9hcGktcmVmZXJlbmNlL3NlbGVuaXVtL3Nlc3Npb24jc2V0LXRlc3Qtc3RhdHVzXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LmJyb3dzZXJzdGFjay5jb20vZG9jcy9hcHAtYXV0b21hdGUvYXBpLXJlZmVyZW5jZS9hcHBpdW0vc2Vzc2lvbnMjdXBkYXRlLXNlc3Npb24tc3RhdHVzXHJcbiAgICAgICAgICAgIGNvbnN0IGJzQXBpVXJsID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2FwcGl1bTphcHAnXSA/XHJcbiAgICAgICAgICAgICAgYGh0dHBzOi8vYXBpLWNsb3VkLmJyb3dzZXJzdGFjay5jb20vYXBwLWF1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYCA6XHJcbiAgICAgICAgICAgICAgYGh0dHBzOi8vYXBpLmJyb3dzZXJzdGFjay5jb20vYXV0b21hdGUvc2Vzc2lvbnMvJHt0aGlzLmRyaXZlci5zZXNzaW9uSWR9Lmpzb25gO1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIC8vIHNldCB0ZXN0IHN0YXR1c1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBic0FwaVVybCxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/ICdwYXNzZWQnIDogJ2ZhaWxlZCdcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICdhdXRoJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAndXNlcic6IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddLnVzZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAncGFzcyc6IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddLmFjY2Vzc0tleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbmRJbW1lZGlhdGVseSc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgKGVyciwgcmVzLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3Igc2V0dGluZyBCcm93c2VyU3RhY2sgdGVzdCByZXN1bHQgc3RhdHVzOiAnICsgZXJyLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIHNldHRpbmcgQnJvd3NlclN0YWNrIHRlc3QgcmVzdWx0IHN0YXR1czogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZ2V0QnJvd3NlclN0YWNrUmVzdWx0VXJsKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGRpZmZlcmVudCBBUElzIGFyZSB1c2VkIGRlcGVuZGluZyBvbiB0ZXN0IHR5cGUuXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LmJyb3dzZXJzdGFjay5jb20vZG9jcy9hdXRvbWF0ZS9hcGktcmVmZXJlbmNlL3NlbGVuaXVtL3Nlc3Npb24jc2V0LXRlc3Qtc3RhdHVzXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LmJyb3dzZXJzdGFjay5jb20vZG9jcy9hcHAtYXV0b21hdGUvYXBpLXJlZmVyZW5jZS9hcHBpdW0vc2Vzc2lvbnMjdXBkYXRlLXNlc3Npb24tc3RhdHVzXHJcbiAgICAgICAgICAgIGNvbnN0IGJzQXBpVXJsID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2FwcGl1bTphcHAnXSA/XHJcbiAgICAgICAgICAgICAgYGh0dHBzOi8vYXBpLWNsb3VkLmJyb3dzZXJzdGFjay5jb20vYXBwLWF1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYCA6XHJcbiAgICAgICAgICAgICAgYGh0dHBzOi8vYXBpLmJyb3dzZXJzdGFjay5jb20vYXV0b21hdGUvc2Vzc2lvbnMvJHt0aGlzLmRyaXZlci5zZXNzaW9uSWR9Lmpzb25gO1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIC8vIHJldHJlaXZlIEJTIHRlc3QgcmVzdWx0IHVybFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBic0FwaVVybCxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAnYXV0aCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXS51c2VyTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3MnOiB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXS5hY2Nlc3NLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZW5kSW1tZWRpYXRlbHknOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIChlcnIsIHJlcywgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGdldHRpbmcgQnJvd3NlclN0YWNrIHRlc3QgcmVzdWx0IHVybDogJyArIGVyci50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYm9keT8uYXV0b21hdGlvbl9zZXNzaW9uPy5icm93c2VyX3VybCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBnZXR0aW5nIEJyb3dzZXJTdGFjayB0ZXN0IHJlc3VsdCB1cmw6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
781
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1tb2IuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0JST1dTRVJfTkFNRSIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIk1vYmlsZU1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsImFwcENvbnRleHQiLCJfbG9hZEhlbHBlckZ1bmN0aW9ucyIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJ3YWl0Rm9yVGltZW91dCIsIm5hbWUiLCJnZXREcml2ZXIiLCJnZXRDYXBhYmlsaXRpZXMiLCJjYXBzIiwiaW5pdCIsImFwcGl1bVVybCIsImlzSW5pdGlhbGl6ZWQiLCJyZW9wZW5TZXNzaW9uIiwiZGVidWciLCJkcml2ZXIiLCJyZWxvYWRTZXNzaW9uIiwiX2lzSW5pdGlhbGl6ZWQiLCJjdHgiLCJwbGF0Zm9ybU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VOYW1lIiwiYnJvd3Nlck5hbWUiLCJhdXRvbWF0aW9uTmFtZSIsInVkaWQiLCJhcHAiLCJlbmFibGVBcHBpdW1CZWhhdmlvciIsInVzZUFwcGl1bUZvcldlYiIsImNvbGxlY3REZXZpY2VMb2dzIiwiYXBwUGFja2FnZSIsImJ1bmRsZUlkIiwidG9Mb3dlckNhc2UiLCJyZWNvcmRIQVIiLCJicm93c2VyIiwicGVyZm9ybWFuY2UiLCJ1cmwiLCJVUkwiLCJwYXJzZSIsInByb3RvY29sIiwicmVwbGFjZSIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwYXJzZUludCIsInBhdGgiLCJwYXRobmFtZSIsImF1dGgiLCJzcGxpdCIsIndkaW9PcHRzIiwidXNlciIsImtleSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJwcm92aWRlciIsIm1vZFV0aWxzIiwiZGV0ZXJtaW5lUHJvdmlkZXIiLCJQRVJGRUNUTyIsIm1heEluc3RhbmNlcyIsIm9wZW5EZXZpY2VUaW1lb3V0IiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJCUk9XU0VSU1RBQ0siLCJic09wdGlvbnMiLCJvc05hbWUiLCJvcyIsInJlYWxNb2JpbGUiLCJjYXBOYW1lIiwic3RhcnRzV2l0aCIsImJzQ2FwTmFtZSIsInN1YnN0cmluZyIsImxlbmd0aCIsInZpZGVvIiwid2RpbyIsInJlbW90ZSIsInNlbGVuaXVtQnJvd3NlclRpbWVvdXQiLCJzZWxlbml1bVRpbWVvdXQiLCJwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJwZXJmZWN0b1JlcG9ydGluZyIsIlBlcmZlY3RvIiwiUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0Iiwid2ViZHJpdmVyIiwiZXhlY3V0ZVNjcmlwdCIsImNvbW1hbmQiLCJwYXJhbXMiLCJleGVjdXRlIiwicmVwb3J0aW5nQ2xpZW50IiwiUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQiLCJ0ZXN0U3RhcnQiLCJlIiwiZ2V0QXBwaXVtSW5pdEVycm9yIiwiZ2V0Q29udGV4dCIsInNldFdlYlZpZXdDb250ZXh0Iiwic2V0VGltZW91dCIsIm92ZXJ3cml0ZVdkaW9Db21tYW5kcyIsImRpc3Bvc2UiLCJzdGF0dXMiLCJzdGVwcyIsIkFycmF5IiwiaXNBcnJheSIsImZhaWxlZEZpbmRlZCIsImZpbmQiLCJpdGVtIiwidG9VcHBlckNhc2UiLCJ0ZXN0U3RvcCIsIkNvbnN0YW50cyIsInJlc3VsdHMiLCJwYXNzZWQiLCJmYWlsZWQiLCJfc2V0QnJvd3NlclN0YWNrUmVzdWx0U3RhdHVzIiwiZGVsZXRlU2Vzc2lvbiIsImluY2x1ZGVzIiwic2VsZW5pdW1TZXNzaW9uVGltZW91dCIsIndhcm4iLCJ0cmFuc2FjdGlvbiIsInRvU3RyaW5nIiwic2xpY2UiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsImVycm9yIiwidGFrZVNjcmVlbnNob3QiLCJyZXR2YWwiLCJjYWxsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ3YWl0VW50aWxSZXRWYWwiLCJ3YWl0VW50aWwiLCJpbWFnZXMiLCJwdXNoSW1hZ2VUb0ltYWdlcyIsImZldGNoVGl0bGUiLCJpbWFnZSIsInRpdGxlIiwiZ2V0VGl0bGUiLCJ0ZXh0VG9JbWFnZSIsInJlcXVpcmUiLCJ0aXRsZUltYWdlIiwiZ2VuZXJhdGUiLCJwdXNoIiwiaXNXZWJWaWV3Q29udGV4dCIsImhhbmRsZXMiLCJnZXRXaW5kb3dIYW5kbGVzIiwiaGFuZGxlIiwic3dpdGNoVG9XaW5kb3ciLCJtZXJnZWRJbWFnZSIsImRpcmVjdGlvbiIsInRpbWVvdXQiLCJ0aGVuIiwiY2F0Y2giLCJlcnIiLCJfYWRqdXN0QXBwaXVtTG9nIiwibG9nIiwic3JjIiwidGltZSIsInRpbWVzdGFtcCIsIm1zZyIsIm1lc3NhZ2UiLCJsZXZlbCIsIl9pdGVyYXRpb25TdGFydCIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJBUFBJVU1fU0VTU0lPTl9USU1FT1VUIiwibG9ncyIsImdldERldmljZUxvZ3MiLCJjb2xsZWN0QnJvd3NlckxvZ3MiLCJnZXRCcm93c2VyTG9ncyIsImNvbGxlY3RBcHBpdW1Mb2dzIiwiZ2V0QXBwaXVtTG9ncyIsImxvZ0VudHJ5IiwicmVzdWx0VXJsIiwiX2dldEJyb3dzZXJTdGFja1Jlc3VsdFVybCIsImF0dHJpYnV0ZXMiLCJfZ2V0V2Rpb0xvY2F0b3IiLCJsb2NhdG9yIiwiU0NSSVBUX0VSUk9SIiwiaW5kZXhPZiIsInBsYXRmb3JtIiwic3Vic3RyIiwiZ2V0V2Rpb0xvY2F0b3IiLCJtYXRjaFBhdHRlcm4iLCJnZXRFbGVtZW50IiwiZ2V0RWxlbWVudHMiLCJnZXRDaGlsZEVsZW1lbnQiLCJnZXRDaGlsZEVsZW1lbnRzIiwic2V0VGltZW91dEltcGxpY2l0IiwicmVzdG9yZVRpbWVvdXRJbXBsaWNpdCIsImFzc2VydEFyZ3VtZW50IiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiYXNzZXJ0Q29udGV4dCIsImNvbnRleHRMaXN0IiwiZ2V0TG9nVHlwZXMiLCJic0FwaVVybCIsInNlc3Npb25JZCIsIm1ldGhvZCIsImpzb24iLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJib2R5IiwidXNlck5hbWUiLCJhY2Nlc3NLZXkiLCJyZXMiLCJhdXRvbWF0aW9uX3Nlc3Npb24iLCJicm93c2VyX3VybCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFHQSxNQUFNQSxXQUFXLEdBQUcsS0FBcEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw4QkFBM0I7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxTQUE3QjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLENBQUMsTUFBRCxFQUFTLGFBQVQsQ0FBL0I7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FBQyxNQUFELEVBQVEsS0FBUixFQUFjLE9BQWQsRUFBc0IsT0FBdEIsRUFBOEIsUUFBOUIsRUFBdUMsVUFBdkMsQ0FBeEI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxLQUFLLElBQWxDLEMsQ0FBbUQ7O0FBRXBDLE1BQU1DLFlBQU4sU0FBMkJDLHdCQUEzQixDQUEyQztBQUN0REMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLE9BQVYsRUFBbUJDLEVBQW5CLEVBQXVCQyxNQUF2QixFQUErQkMsT0FBL0IsRUFBd0NDLFFBQXhDLEVBQWtEO0FBQ3pELFVBQU1MLE9BQU4sRUFBZUMsT0FBZixFQUF3QkMsRUFBeEIsRUFBNEJDLE1BQTVCLEVBQW9DQyxPQUFwQyxFQUE2Q0MsUUFBN0M7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLEVBQXBCO0FBQ0EsU0FBS0MsdUJBQUwsR0FBK0IsSUFBL0I7QUFDQSxTQUFLQyxlQUFMLEdBQXVCLElBQXZCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEVBQWY7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLFlBQWxCOztBQUNBLFNBQUtDLG9CQUFMLEdBUHlELENBUXpEOzs7QUFDQSxTQUFLQyxPQUFMLEdBQWVBLG9CQUFmO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQkEsZUFBakIsQ0FWeUQsQ0FXekQ7O0FBQ0EsU0FBS0MsY0FBTCxHQUFzQmxCLG9CQUF0QjtBQUNIOztBQUVPLE1BQUptQixJQUFJLEdBQUc7QUFDUCxXQUFPeEIsV0FBUDtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0l5QixFQUFBQSxTQUFTLEdBQUc7QUFDUixXQUFPLE1BQU1BLFNBQU4sRUFBUDtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lDLEVBQUFBLGVBQWUsR0FBRztBQUNkLFdBQU8sS0FBS0MsSUFBTCxJQUFhLE1BQU1ELGVBQU4sRUFBcEI7QUFDSDtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ2MsUUFBSkUsSUFBSSxDQUFDRCxJQUFELEVBQU9FLFNBQVAsRUFBa0I7QUFDeEI7QUFDQSxRQUFJLEtBQUtDLGFBQVQsRUFBd0I7QUFDcEIsVUFBSSxLQUFLckIsT0FBTCxDQUFhc0IsYUFBYixLQUErQixLQUFuQyxFQUEwQztBQUFFO0FBQ3hDLGFBQUtuQixNQUFMLENBQVlvQixLQUFaLENBQWtCLGtEQUFsQjtBQUNBLGFBQUtDLE1BQUwsQ0FBWUMsYUFBWjtBQUNBLGFBQUtDLGNBQUwsR0FBc0IsSUFBdEI7QUFDSCxPQUpELE1BSU87QUFDSCxhQUFLdkIsTUFBTCxDQUFZb0IsS0FBWixDQUFrQixvR0FBbEI7QUFDSDs7QUFDRDtBQUNILEtBWHVCLENBYXhCOzs7QUFDQSxRQUFJLEtBQUtJLEdBQUwsQ0FBU1QsSUFBVCxJQUFpQixLQUFLUyxHQUFMLENBQVNULElBQVQsQ0FBYyx3QkFBZCxDQUFyQixFQUE4RDtBQUMxRCxVQUFJQSxJQUFKLEVBQVU7QUFDTixlQUFPQSxJQUFJLENBQUNVLFlBQVo7QUFDQSxlQUFPVixJQUFJLENBQUNXLGVBQVo7QUFDQSxlQUFPWCxJQUFJLENBQUNZLFVBQVo7QUFDQSxlQUFPWixJQUFJLENBQUNhLFdBQVo7QUFDQSxlQUFPYixJQUFJLENBQUNjLGNBQVo7QUFDQSxlQUFPZCxJQUFJLENBQUNlLElBQVo7O0FBRUEsWUFBSWYsSUFBSSxDQUFDZ0IsR0FBVCxFQUFjO0FBQ1ZoQixVQUFBQSxJQUFJLENBQUNpQixvQkFBTCxHQUE0QixJQUE1QjtBQUNILFNBRkQsTUFFTztBQUNIakIsVUFBQUEsSUFBSSxDQUFDa0IsZUFBTCxHQUF1QixJQUF2QjtBQUNBbEIsVUFBQUEsSUFBSSxDQUFDaUIsb0JBQUwsR0FBNEIsSUFBNUI7QUFDSDtBQUNKLE9BZEQsTUFjTztBQUNILGFBQUtSLEdBQUwsQ0FBU1QsSUFBVCxDQUFja0IsZUFBZCxHQUFnQyxJQUFoQztBQUNBLGFBQUtULEdBQUwsQ0FBU1QsSUFBVCxDQUFjaUIsb0JBQWQsR0FBcUMsSUFBckM7QUFDSDtBQUNKOztBQUVELFFBQUksQ0FBQ2YsU0FBTCxFQUFnQjtBQUNaQSxNQUFBQSxTQUFTLEdBQUcsS0FBS3BCLE9BQUwsQ0FBYW9CLFNBQWIsSUFBMEI1QixrQkFBdEM7QUFDSCxLQXJDdUIsQ0F1Q3hCOzs7QUFDQSxTQUFLMEIsSUFBTCxHQUFZLEVBQVo7O0FBQ0EsUUFBSSxLQUFLUyxHQUFMLENBQVNULElBQWIsRUFBbUI7QUFDZixXQUFLQSxJQUFMLEdBQVksRUFBRSxHQUFHLEtBQUtTLEdBQUwsQ0FBU1Q7QUFBZCxPQUFaO0FBQ0g7O0FBQ0QsUUFBSUEsSUFBSixFQUFVO0FBQ04sV0FBS0EsSUFBTCxHQUFZLEVBQUUsR0FBRyxLQUFLQSxJQUFWO0FBQWdCLFdBQUdBO0FBQW5CLE9BQVo7QUFDSCxLQTlDdUIsQ0FnRHhCOzs7QUFDQSxRQUFJLEtBQUtsQixPQUFMLENBQWFxQyxpQkFBakIsRUFBb0M7QUFDaEMsV0FBS25CLElBQUwsQ0FBVSx3QkFBVixJQUFzQyxJQUF0QztBQUNILEtBbkR1QixDQXFEeEI7OztBQUNBLFFBQUksS0FBS0EsSUFBTCxDQUFVYSxXQUFWLEtBQTBCLEtBQUtiLElBQUwsQ0FBVW9CLFVBQVYsSUFBd0IsS0FBS3BCLElBQUwsQ0FBVWdCLEdBQWxDLElBQXlDLEtBQUtoQixJQUFMLENBQVVxQixRQUE3RSxDQUFKLEVBQTRGO0FBQ3hGLGFBQU8sS0FBS3JCLElBQUwsQ0FBVWEsV0FBakI7QUFDSCxLQUZELENBR0E7QUFIQSxTQUlLLElBQUksQ0FBQyxLQUFLYixJQUFMLENBQVVhLFdBQVgsSUFBMEIsQ0FBQyxLQUFLYixJQUFMLENBQVVvQixVQUFyQyxJQUFtRCxDQUFDLEtBQUtwQixJQUFMLENBQVVnQixHQUE5RCxJQUFxRSxDQUFDLEtBQUtoQixJQUFMLENBQVVxQixRQUFwRixFQUE4RjtBQUMvRixhQUFLckIsSUFBTCxDQUFVYSxXQUFWLEdBQXdCdEMsb0JBQXhCO0FBQ0gsT0E1RHVCLENBNkR4Qjs7O0FBQ0EsUUFBSSxLQUFLeUIsSUFBTCxDQUFVYSxXQUFWLElBQXlCLE9BQU8sS0FBS2IsSUFBTCxDQUFVYSxXQUFqQixLQUFpQyxRQUE5RCxFQUF3RTtBQUNwRSxXQUFLYixJQUFMLENBQVVhLFdBQVYsR0FBd0IsS0FBS2IsSUFBTCxDQUFVYSxXQUFWLENBQXNCUyxXQUF0QixFQUF4QjtBQUNILEtBaEV1QixDQWlFeEI7OztBQUNBLFFBQUksS0FBS3hDLE9BQUwsQ0FBYXlDLFNBQWIsSUFBMEIsS0FBS3ZCLElBQUwsQ0FBVWEsV0FBVixLQUEwQixRQUF4RCxFQUFrRTtBQUM5RCxXQUFLYixJQUFMLENBQVUsbUJBQVYsSUFBaUM7QUFBTTtBQUNuQ3dCLFFBQUFBLE9BQU8sRUFBRSxLQURvQjtBQUU3QkMsUUFBQUEsV0FBVyxFQUFFO0FBRmdCLE9BQWpDO0FBSUgsS0F2RXVCLENBeUV4Qjs7O0FBQ0EsVUFBTUMsR0FBRyxHQUFHQyxhQUFJQyxLQUFKLENBQVUxQixTQUFWLENBQVo7O0FBQ0EsVUFBTTJCLFFBQVEsR0FBR0gsR0FBRyxDQUFDRyxRQUFKLENBQWFDLE9BQWIsQ0FBcUIsSUFBckIsRUFBMkIsRUFBM0IsQ0FBakI7QUFDQSxVQUFNQyxJQUFJLEdBQUdMLEdBQUcsQ0FBQ00sUUFBakI7QUFDQSxVQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ1IsR0FBRyxDQUFDTyxJQUFKLEtBQWFKLFFBQVEsS0FBSyxPQUFiLEdBQXVCLEdBQXZCLEdBQTZCLEVBQTFDLENBQUQsQ0FBckI7QUFDQSxVQUFNTSxJQUFJLEdBQUdULEdBQUcsQ0FBQ1UsUUFBakIsQ0E5RXdCLENBZ0Z4Qjs7QUFDQSxRQUFJVixHQUFHLENBQUNXLElBQVIsRUFBYztBQUNWLFlBQU1BLElBQUksR0FBR1gsR0FBRyxDQUFDVyxJQUFKLENBQVNDLEtBQVQsQ0FBZSxHQUFmLENBQWI7QUFDQSxXQUFLeEQsT0FBTCxDQUFheUQsUUFBYixHQUF3QjtBQUNwQkMsUUFBQUEsSUFBSSxFQUFFSCxJQUFJLENBQUMsQ0FBRCxDQURVO0FBRXBCSSxRQUFBQSxHQUFHLEVBQUVKLElBQUksQ0FBQyxDQUFEO0FBRlcsT0FBeEI7QUFJSDs7QUFFRCxRQUFJRSxRQUFRLEdBQUcsRUFDWCxJQUFHLEtBQUt6RCxPQUFMLENBQWF5RCxRQUFiLElBQXlCLEVBQTVCLENBRFc7QUFFWFYsTUFBQUEsUUFBUSxFQUFFQSxRQUZDO0FBR1hHLE1BQUFBLFFBQVEsRUFBRUQsSUFIQztBQUlYRSxNQUFBQSxJQUFJLEVBQUVBLElBSks7QUFLWEUsTUFBQUEsSUFBSSxFQUFFQSxJQUxLO0FBTVhPLE1BQUFBLFlBQVksRUFBRSxLQUFLMUMsSUFOUjtBQU9YMkMsTUFBQUEsUUFBUSxFQUFFLFFBUEM7QUFRWEMsTUFBQUEsTUFBTSxFQUFFLE1BUkc7QUFTWEMsTUFBQUEsY0FBYyxFQUFFLElBVEw7QUFTVztBQUN0QkMsTUFBQUEsc0JBQXNCLEVBQUUsTUFBSSxJQVZqQjtBQVdYQyxNQUFBQSxvQkFBb0IsRUFBRTtBQVhYLEtBQWY7O0FBY0EsUUFBSUMsUUFBUSxHQUFHQyxlQUFTQyxpQkFBVCxDQUEyQlgsUUFBM0IsQ0FBZjs7QUFDQSxRQUFJMUMsSUFBSSxHQUFHLE1BQVg7O0FBRUEsUUFBSW1ELFFBQVEsS0FBS0MsZUFBU0QsUUFBVCxDQUFrQkcsUUFBbkMsRUFBNkM7QUFDekNaLE1BQUFBLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQlUsWUFBdEIsR0FBcUMsQ0FBckM7QUFDQWIsTUFBQUEsUUFBUSxDQUFDSixJQUFULEdBQWdCLG9DQUFoQjtBQUNBSSxNQUFBQSxRQUFRLENBQUNOLElBQVQsR0FBZ0IsRUFBaEI7QUFDQU0sTUFBQUEsUUFBUSxDQUFDVixRQUFULEdBQW9CLE1BQXBCO0FBQ0FVLE1BQUFBLFFBQVEsQ0FBQ2MsaUJBQVQsR0FBNkIsRUFBN0I7QUFFQSxhQUFPZCxRQUFRLENBQUNHLFlBQVQsQ0FBc0JZLFlBQTdCO0FBQ0EsYUFBT2YsUUFBUSxDQUFDRyxZQUFULENBQXNCYSxLQUE3QjtBQUNBLGFBQU9oQixRQUFRLENBQUNHLFlBQVQsQ0FBc0I3QixXQUE3QjtBQUNBLGFBQU8wQixRQUFRLENBQUNHLFlBQVQsQ0FBc0JYLElBQTdCO0FBRUFsQyxNQUFBQSxJQUFJLEdBQUcwQyxRQUFRLENBQUNHLFlBQVQsQ0FBc0Isd0JBQXRCLEVBQWdELE1BQWhELENBQVA7QUFDQSxhQUFPSCxRQUFRLENBQUNHLFlBQVQsQ0FBc0Isd0JBQXRCLENBQVA7QUFDSCxLQWRELE1BZ0JLLElBQUlNLFFBQVEsS0FBS0MsZUFBU0QsUUFBVCxDQUFrQlEsWUFBbkMsRUFBaUQ7QUFDbEQsWUFBTUMsU0FBUyxHQUFHbEIsUUFBUSxDQUFDRyxZQUFULENBQXNCLGdCQUF0QixDQUFsQjs7QUFDQSxVQUFJZSxTQUFKLEVBQWU7QUFDWCxjQUFNN0MsVUFBVSxHQUFHNkMsU0FBUyxDQUFDN0MsVUFBN0I7QUFDQSxjQUFNOEMsTUFBTSxHQUFHRCxTQUFTLENBQUNFLEVBQXpCOztBQUVBLFlBQUkvQyxVQUFKLEVBQWdCO0FBQ1o2QyxVQUFBQSxTQUFTLENBQUNHLFVBQVYsR0FBdUIsSUFBdkI7QUFDQXJCLFVBQUFBLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQixtQkFBdEIsSUFBNkM5QixVQUE3QztBQUNILFNBUFUsQ0FTWDs7O0FBQ0EsWUFBSThDLE1BQU0sSUFBSUEsTUFBTSxDQUFDcEMsV0FBUCxPQUF5QixTQUF2QyxFQUFrRDtBQUM5Q2lCLFVBQUFBLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQmhDLFlBQXRCLEdBQXFDLFNBQXJDO0FBQ0E2QixVQUFBQSxRQUFRLENBQUNHLFlBQVQsQ0FBc0IsdUJBQXRCLElBQWlELGNBQWpEO0FBQ0gsU0FIRCxNQUdPLElBQUlnQixNQUFNLElBQUlBLE1BQU0sQ0FBQ3BDLFdBQVAsT0FBeUIsS0FBdkMsRUFBOEM7QUFDakRpQixVQUFBQSxRQUFRLENBQUNHLFlBQVQsQ0FBc0JoQyxZQUF0QixHQUFxQyxLQUFyQztBQUNBNkIsVUFBQUEsUUFBUSxDQUFDRyxZQUFULENBQXNCLHVCQUF0QixJQUFpRCxVQUFqRDtBQUNILFNBaEJVLENBa0JYOzs7QUFDQSxhQUFLLE1BQU1tQixPQUFYLElBQXNCdEIsUUFBUSxDQUFDRyxZQUEvQixFQUE2QztBQUN6QyxjQUFJbUIsT0FBTyxDQUFDQyxVQUFSLENBQW1CLFNBQW5CLENBQUosRUFBbUM7QUFDL0Isa0JBQU1DLFNBQVMsR0FBR0YsT0FBTyxDQUFDRyxTQUFSLENBQWtCLFVBQVVDLE1BQTVCLENBQWxCOztBQUVBLGdCQUFJRixTQUFTLEtBQUssU0FBbEIsRUFBNkI7QUFDekI7QUFDSCxhQUw4QixDQU8vQjs7O0FBQ0EsZ0JBQUlBLFNBQVMsS0FBSyxhQUFsQixFQUFpQztBQUM3Qk4sY0FBQUEsU0FBUyxDQUFDUyxLQUFWLEdBQWtCM0IsUUFBUSxDQUFDRyxZQUFULENBQXNCbUIsT0FBdEIsQ0FBbEI7QUFDQSxxQkFBT3RCLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQm1CLE9BQXRCLENBQVA7QUFDQTtBQUNIOztBQUVESixZQUFBQSxTQUFTLENBQUNNLFNBQUQsQ0FBVCxHQUF1QnhCLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQm1CLE9BQXRCLENBQXZCO0FBQ0EsbUJBQU90QixRQUFRLENBQUNHLFlBQVQsQ0FBc0JtQixPQUF0QixDQUFQO0FBQ0g7QUFDSjtBQUNKO0FBQ0o7O0FBRUQsUUFBSXRCLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQixnQkFBdEIsS0FBMkNILFFBQVEsQ0FBQ0csWUFBVCxDQUFzQixnQkFBdEIsRUFBd0MsTUFBeEMsQ0FBL0MsRUFBZ0c7QUFDNUY3QyxNQUFBQSxJQUFJLEdBQUcwQyxRQUFRLENBQUNHLFlBQVQsQ0FBc0IsZ0JBQXRCLEVBQXdDLE1BQXhDLENBQVA7QUFDQSxhQUFPSCxRQUFRLENBQUNHLFlBQVQsQ0FBc0IsZ0JBQXRCLENBQVA7QUFDSDs7QUFFRCxTQUFLSCxRQUFMLEdBQWdCQSxRQUFoQixDQTFLd0IsQ0E0S3hCOztBQUNBLFFBQUk7QUFDQSxXQUFLakMsTUFBTCxHQUFjLE1BQU02RCxJQUFJLENBQUNDLE1BQUwsQ0FBWTdCLFFBQVosQ0FBcEI7QUFFQSxXQUFLakMsTUFBTCxDQUFZMEMsUUFBWixHQUF1QkEsUUFBdkI7O0FBRUEsVUFBSSxLQUFLbEUsT0FBTCxDQUFhdUYsc0JBQWpCLEVBQXlDO0FBQ3JDLGFBQUsvRCxNQUFMLENBQVkrRCxzQkFBWixHQUFxQyxLQUFLdkYsT0FBTCxDQUFhdUYsc0JBQWxEO0FBQ0g7O0FBRUQsVUFBSSxLQUFLdkYsT0FBTCxDQUFhd0YsZUFBakIsRUFBa0M7QUFDOUIsYUFBS2hFLE1BQUwsQ0FBWWdFLGVBQVosR0FBOEIsS0FBS3hGLE9BQUwsQ0FBYXdGLGVBQTNDO0FBQ0g7O0FBRUQsVUFBSXRCLFFBQVEsS0FBS0MsZUFBU0QsUUFBVCxDQUFrQkcsUUFBbkMsRUFBNkM7QUFDekMsY0FBTW9CLHdCQUF3QixHQUFHLE1BQU0sSUFBSUMsMkJBQWtCQyxRQUFsQixDQUEyQkMsd0JBQS9CLENBQXdEO0FBQzNGQyxVQUFBQSxTQUFTLEVBQUU7QUFDUEMsWUFBQUEsYUFBYSxFQUFFLE9BQU9DLE9BQVAsRUFBZ0JDLE1BQWhCLEtBQTJCO0FBQ3RDLHFCQUFPLE1BQU0sS0FBS3hFLE1BQUwsQ0FBWXlFLE9BQVosQ0FBb0JGLE9BQXBCLEVBQTZCQyxNQUE3QixDQUFiO0FBQ0g7QUFITTtBQURnRixTQUF4RCxDQUF2QztBQU9BLGFBQUtFLGVBQUwsR0FBdUIsSUFBSVIsMkJBQWtCQyxRQUFsQixDQUEyQlEsdUJBQS9CLENBQXVEVix3QkFBdkQsQ0FBdkI7QUFDQSxjQUFNLEtBQUtTLGVBQUwsQ0FBcUJFLFNBQXJCLENBQStCckYsSUFBL0IsQ0FBTjtBQUNIO0FBQ0osS0F4QkQsQ0F3QkUsT0FBT3NGLENBQVAsRUFBVTtBQUNSLFlBQU14RixnQkFBVXlGLGtCQUFWLENBQTZCRCxDQUE3QixDQUFOO0FBQ0g7O0FBRUQsU0FBSzNGLFVBQUwsR0FBa0IsTUFBTSxLQUFLYyxNQUFMLENBQVkrRSxVQUFaLEVBQXhCLENBek13QixDQTJNeEI7QUFDQTtBQUNBOztBQUNBLFFBQUksS0FBS3JGLElBQUwsQ0FBVWEsV0FBVixLQUEyQixrQkFBL0IsRUFBbUQ7QUFDL0MsWUFBTSxLQUFLeUUsaUJBQUwsRUFBTjtBQUNIOztBQUVELFFBQUl0QyxRQUFRLEtBQUtDLGVBQVNELFFBQVQsQ0FBa0JRLFlBQW5DLEVBQWlELENBQzdDO0FBQ0E7QUFDSCxLQUhELE1BR087QUFDSCxZQUFNLEtBQUtsRCxNQUFMLENBQVlpRixVQUFaLENBQXVCO0FBQUUsb0JBQVksS0FBSzNGO0FBQW5CLE9BQXZCLENBQU47QUFDSDs7QUFFRCxVQUFNcUQsZUFBU3VDLHFCQUFULENBQStCLEtBQUtsRixNQUFwQyxDQUFOO0FBRUEsVUFBTUwsSUFBTixDQUFXLEtBQUtLLE1BQWhCO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFDaUIsUUFBUG1GLE9BQU8sQ0FBQ0MsTUFBRCxFQUFTO0FBQ2xCLFFBQUksQ0FBQ0EsTUFBTCxFQUFhO0FBQ1RBLE1BQUFBLE1BQU0sR0FBRyxRQUFUOztBQUVBLFVBQUksS0FBSzFHLEVBQUwsQ0FBUTJHLEtBQVIsSUFBaUJDLEtBQUssQ0FBQ0MsT0FBTixDQUFjLEtBQUs3RyxFQUFMLENBQVEyRyxLQUF0QixDQUFqQixJQUFpRCxLQUFLM0csRUFBTCxDQUFRMkcsS0FBUixDQUFjMUIsTUFBZCxHQUF1QixDQUE1RSxFQUErRTtBQUMzRSxjQUFNNkIsWUFBWSxHQUFHLEtBQUs5RyxFQUFMLENBQVEyRyxLQUFSLENBQWNJLElBQWQsQ0FBb0JDLElBQUQsSUFBVUEsSUFBSSxDQUFDTixNQUFMLEtBQWdCLFFBQTdDLENBQXJCOztBQUNBLFlBQUlJLFlBQUosRUFBa0I7QUFDZEosVUFBQUEsTUFBTSxHQUFHLFFBQVQ7QUFDSDtBQUNKO0FBQ0o7O0FBRUQsUUFBSSxLQUFLcEYsTUFBTCxJQUFlLEtBQUtILGFBQXhCLEVBQXVDO0FBQ25DdUYsTUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNPLFdBQVAsRUFBVDs7QUFFQSxVQUFJLEtBQUszRixNQUFMLENBQVkwQyxRQUFaLEtBQXlCQyxlQUFTRCxRQUFULENBQWtCRyxRQUEvQyxFQUF5RDtBQUNyRCxjQUFNLEtBQUs2QixlQUFMLENBQXFCa0IsUUFBckIsQ0FBOEI7QUFDaENSLFVBQUFBLE1BQU0sRUFBRUEsTUFBTSxLQUFLLFFBQVgsR0FDSWxCLDJCQUFrQjJCLFNBQWxCLENBQTRCQyxPQUE1QixDQUFvQ0MsTUFEeEMsR0FFSTdCLDJCQUFrQjJCLFNBQWxCLENBQTRCQyxPQUE1QixDQUFvQ0U7QUFIaEIsU0FBOUIsQ0FBTjtBQUtILE9BTkQsTUFNTyxJQUFJLEtBQUtoRyxNQUFMLENBQVkwQyxRQUFaLEtBQXlCQyxlQUFTRCxRQUFULENBQWtCUSxZQUEvQyxFQUE2RDtBQUNoRSxjQUFNLEtBQUsrQyw0QkFBTCxDQUFrQ2IsTUFBbEMsQ0FBTjtBQUNBLGNBQU0sS0FBS2MsYUFBTCxFQUFOO0FBQ0g7O0FBRUQsVUFBSTtBQUNBLFlBQUksQ0FBQyxDQUFDLFVBQUQsRUFBYSxRQUFiLEVBQXVCQyxRQUF2QixDQUFnQ2YsTUFBaEMsQ0FBTCxFQUE4QztBQUMxQyxjQUFJLEtBQUtnQixzQkFBVCxFQUFpQyxDQUM3QjtBQUNBO0FBQ0gsV0FIRCxNQUdPO0FBQ0gsa0JBQU0sS0FBS3BHLE1BQUwsQ0FBWWtHLGFBQVosRUFBTjtBQUNIO0FBQ0o7QUFDSixPQVRELENBU0UsT0FBT3JCLENBQVAsRUFBVTtBQUNSLGFBQUtsRyxNQUFMLENBQVkwSCxJQUFaLENBQWlCLDZCQUE2QnhCLENBQTlDLEVBRFEsQ0FDNkM7QUFDeEQ7O0FBQ0QsV0FBSzdFLE1BQUwsR0FBYyxJQUFkO0FBQ0EsV0FBS2pCLHVCQUFMLEdBQStCLElBQS9CO0FBQ0EsWUFBTW9HLE9BQU47QUFDSCxLQTdCRCxNQTZCTztBQUNIO0FBQ0g7QUFDSjtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSW1CLEVBQUFBLFdBQVcsQ0FBQy9HLElBQUQsRUFBTztBQUNkLFFBQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1A7QUFDSCxLQUhhLENBSWQ7OztBQUNBQSxJQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ2dILFFBQUwsRUFBUCxDQUxjLENBT2Q7O0FBQ0FoSCxJQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ2lILEtBQUwsQ0FBVyxDQUFYLEVBQWMsR0FBZCxDQUFQO0FBRUFDLElBQUFBLE1BQU0sQ0FBQ0Msb0JBQVAsR0FBOEJuSCxJQUE5QjtBQUNIO0FBRUQ7QUFDSjtBQUNBOzs7QUFFSW9ILEVBQUFBLFNBQVMsQ0FBQ3BILElBQUQsRUFBTztBQUNaLFdBQU9wQixlQUFlLENBQUNnSSxRQUFoQixDQUF5QjVHLElBQXpCLENBQVA7QUFDSDs7QUFFRHFILEVBQUFBLHFCQUFxQixDQUFDckgsSUFBRCxFQUFPO0FBQ3hCLFFBQUksQ0FBQ3JCLHNCQUFzQixDQUFDaUksUUFBdkIsQ0FBZ0M1RyxJQUFoQyxDQUFMLEVBQTRDO0FBQ3hDLFVBQUlzSCxLQUFKOztBQUNBLFVBQUk7QUFDQSxZQUNJLEtBQUs3RyxNQUFMLElBQ0EsS0FBS0EsTUFBTCxDQUFZOEcsY0FGaEIsRUFHRTtBQUNFLGNBQUlDLE1BQUo7QUFDQSxlQUFLL0csTUFBTCxDQUFZZ0gsSUFBWixDQUFpQixNQUFNO0FBQ25CLG1CQUFPLElBQUlDLE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDcEMsb0JBQU1DLGVBQWUsR0FBRyxLQUFLcEgsTUFBTCxDQUFZcUgsU0FBWixDQUFzQixZQUFXO0FBQ3JELG9CQUFJO0FBQ0Esc0JBQUlDLE1BQU0sR0FBRyxFQUFiOztBQUVBLHdCQUFNQyxpQkFBaUIsR0FBRyxPQUFNQyxVQUFVLEdBQUcsSUFBbkIsS0FBNEI7QUFDbEQsMEJBQU1DLEtBQUssR0FBRyxNQUFNLEtBQUt6SCxNQUFMLENBQVk4RyxjQUFaLEVBQXBCOztBQUNBLHdCQUFJVSxVQUFKLEVBQWdCO0FBQ1osNEJBQU1FLEtBQUssR0FBRyxNQUFNLEtBQUsxSCxNQUFMLENBQVkySCxRQUFaLEVBQXBCOztBQUNBLDBCQUFJRCxLQUFKLEVBQVc7QUFDUCw4QkFBTUUsV0FBVyxHQUFHQyxPQUFPLENBQUMsc0JBQUQsQ0FBM0I7O0FBQ0EsNEJBQUlDLFVBQVUsR0FBRyxNQUFNRixXQUFXLENBQUNHLFFBQVosQ0FBcUJMLEtBQXJCLENBQXZCOztBQUNBLDRCQUFJSSxVQUFVLElBQUksT0FBT0EsVUFBUCxLQUFzQixRQUF4QyxFQUFrRDtBQUM5Q0EsMEJBQUFBLFVBQVUsR0FBR0EsVUFBVSxDQUFDdEcsT0FBWCxDQUFtQix3QkFBbkIsRUFBNkMsRUFBN0MsQ0FBYjtBQUNBOEYsMEJBQUFBLE1BQU0sQ0FBQ1UsSUFBUCxDQUFZRixVQUFaO0FBQ0g7QUFDSjtBQUNKOztBQUVEUixvQkFBQUEsTUFBTSxDQUFDVSxJQUFQLENBQVlQLEtBQVo7QUFDSCxtQkFmRDs7QUFpQkEsd0JBQU1RLGdCQUFnQixHQUFHLE1BQU0sS0FBS0EsZ0JBQUwsRUFBL0I7O0FBQ0Esc0JBQUlBLGdCQUFKLEVBQXNCO0FBQ2xCO0FBQ0EsMEJBQU1DLE9BQU8sR0FBRyxNQUFNLEtBQUtsSSxNQUFMLENBQVltSSxnQkFBWixFQUF0Qjs7QUFDQSx3QkFDSUQsT0FBTyxJQUNQNUMsS0FBSyxDQUFDQyxPQUFOLENBQWMyQyxPQUFkLENBREEsSUFFQUEsT0FBTyxDQUFDdkUsTUFBUixHQUFpQixDQUhyQixFQUlFO0FBQ0UsMkJBQUssTUFBTXlFLE1BQVgsSUFBcUJGLE9BQXJCLEVBQThCO0FBQzFCLDhCQUFNLEtBQUtsSSxNQUFMLENBQVlxSSxjQUFaLENBQTJCRCxNQUEzQixDQUFOO0FBQ0EsOEJBQU1iLGlCQUFpQixFQUF2QjtBQUNIO0FBQ0o7QUFDSixtQkFiRCxNQWFPO0FBQ0gsMEJBQU1BLGlCQUFpQixDQUFDLEtBQUQsQ0FBdkI7QUFDSCxtQkFwQ0QsQ0FzQ0E7OztBQUNBLHdCQUFNZSxXQUFXLEdBQUcsTUFBTSx1QkFBWWhCLE1BQVosRUFBb0I7QUFBRWlCLG9CQUFBQSxTQUFTLEVBQUU7QUFBYixtQkFBcEIsQ0FBMUI7O0FBQ0Esc0JBQUlELFdBQVcsSUFBSSxPQUFPQSxXQUFQLEtBQXVCLFFBQTFDLEVBQW9EO0FBQ2hEdkIsb0JBQUFBLE1BQU0sR0FBR3VCLFdBQVcsQ0FBQzlHLE9BQVosQ0FBb0IseUJBQXBCLEVBQStDLEVBQS9DLENBQVQ7QUFDSDs7QUFFRCx5QkFBTyxJQUFQO0FBQ0gsaUJBN0NELENBNkNFLE9BQU9xRCxDQUFQLEVBQVU7QUFDUmdDLGtCQUFBQSxLQUFLLEdBQUdoQyxDQUFSO0FBQ0EseUJBQU8sS0FBUDtBQUNIO0FBQ0osZUFsRHVCLEVBbUR4QjtBQUFFMkQsZ0JBQUFBLE9BQU8sRUFBRSxLQUFHO0FBQWQsZUFuRHdCLENBQXhCOztBQXFEQSxrQkFBSXBCLGVBQWUsSUFBSUEsZUFBZSxDQUFDcUIsSUFBdkMsRUFBNkM7QUFDekNyQixnQkFBQUEsZUFBZSxDQUFDcUIsSUFBaEIsQ0FBcUIsTUFBTTtBQUN2QnZCLGtCQUFBQSxPQUFPO0FBQ1YsaUJBRkQsRUFFR3dCLEtBRkgsQ0FFVUMsR0FBRCxJQUFTO0FBQ2R4QixrQkFBQUEsTUFBTSxDQUFDd0IsR0FBRCxDQUFOO0FBQ0gsaUJBSkQ7QUFLSCxlQU5ELE1BTU87QUFDSHpCLGdCQUFBQSxPQUFPO0FBQ1Y7QUFDSixhQS9ETSxDQUFQO0FBZ0VILFdBakVEOztBQW1FQSxjQUFJTCxLQUFKLEVBQVc7QUFDUCxpQkFBS2xJLE1BQUwsQ0FBWWtJLEtBQVosQ0FBa0IsdUJBQWxCLEVBQTJDQSxLQUEzQztBQUNIOztBQUVELGlCQUFPRSxNQUFQO0FBQ0g7QUFDSixPQS9FRCxDQStFRSxPQUFPbEMsQ0FBUCxFQUFVO0FBQ1IsYUFBS2xHLE1BQUwsQ0FBWWtJLEtBQVosQ0FBa0IsdUJBQWxCLEVBQTJDaEMsQ0FBM0M7O0FBQ0EsWUFBSWdDLEtBQUosRUFBVztBQUNQLGVBQUtsSSxNQUFMLENBQVlrSSxLQUFaLENBQWtCLG1DQUFsQixFQUF1REEsS0FBdkQ7QUFDSCxTQUpPLENBS1I7O0FBQ0g7QUFDSjtBQUNKLEdBbmJxRCxDQXFidEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUErQixFQUFBQSxnQkFBZ0IsQ0FBQ0MsR0FBRCxFQUFNQyxHQUFOLEVBQVc7QUFDdkIsUUFBSSxDQUFDRCxHQUFELElBQVEsT0FBT0EsR0FBUCxLQUFlLFFBQTNCLEVBQXFDO0FBQ2pDLGFBQU8sSUFBUDtBQUNILEtBSHNCLENBSXZCOzs7QUFDQSxXQUFPO0FBQ0hFLE1BQUFBLElBQUksRUFBRUYsR0FBRyxDQUFDRyxTQURQO0FBRUhDLE1BQUFBLEdBQUcsRUFBRUosR0FBRyxDQUFDSyxPQUZOO0FBR0hDLE1BQUFBLEtBQUssRUFBRU4sR0FBRyxDQUFDTSxLQUhSO0FBSUhMLE1BQUFBLEdBQUcsRUFBRUE7QUFKRixLQUFQO0FBTUg7O0FBRURNLEVBQUFBLGVBQWUsR0FBRztBQUNkO0FBQ0EzQyxJQUFBQSxNQUFNLENBQUNDLG9CQUFQLEdBQThCLElBQTlCO0FBQ0g7O0FBRWtCLFFBQWIyQyxhQUFhLENBQUN4QyxLQUFELEVBQVE7QUFDdkIsUUFBSUEsS0FBSyxJQUFJQSxLQUFLLENBQUN5QyxJQUFOLEtBQWVDLGdCQUFZQyxTQUFaLENBQXNCQyxzQkFBbEQsRUFBMEU7QUFDdEUsV0FBS3JELHNCQUFMLEdBQThCLElBQTlCO0FBQ0E7QUFDSCxLQUhELE1BR087QUFDSCxXQUFLQSxzQkFBTCxHQUE4QixLQUE5QjtBQUNILEtBTnNCLENBT3ZCOzs7QUFDQSxRQUFJLENBQUMsS0FBS3ZHLGFBQVYsRUFBeUI7QUFDckI7QUFDSCxLQVZzQixDQVd2Qjs7O0FBQ0EsUUFBSSxLQUFLckIsT0FBTCxDQUFhcUMsaUJBQWpCLEVBQW9DO0FBQ2hDLFVBQUk7QUFDQSxjQUFNNkksSUFBSSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxFQUFuQjs7QUFDQSxZQUFJRCxJQUFJLElBQUlwRSxLQUFLLENBQUNDLE9BQU4sQ0FBY21FLElBQWQsQ0FBWixFQUFpQztBQUM3QixlQUFLLElBQUliLEdBQVQsSUFBZ0JhLElBQWhCLEVBQXNCO0FBQ2xCLGlCQUFLaEwsRUFBTCxDQUFRZ0wsSUFBUixDQUFhMUIsSUFBYixDQUFrQixLQUFLWSxnQkFBTCxDQUFzQkMsR0FBdEIsRUFBMkIsUUFBM0IsQ0FBbEI7QUFDSDtBQUNKO0FBQ0osT0FQRCxDQVFBLE9BQU9oRSxDQUFQLEVBQVU7QUFDTjtBQUNBLGFBQUtsRyxNQUFMLENBQVlrSSxLQUFaLENBQWtCLDhCQUFsQixFQUFrRGhDLENBQWxEO0FBQ0g7QUFDSixLQXpCc0IsQ0EyQnZCOzs7QUFDQSxRQUFJLEtBQUtyRyxPQUFMLENBQWFvTCxrQkFBakIsRUFBcUM7QUFDakMsVUFBSTtBQUNBLGNBQU1GLElBQUksR0FBRyxNQUFNLEtBQUtHLGNBQUwsRUFBbkI7O0FBQ0EsWUFBSUgsSUFBSSxJQUFJcEUsS0FBSyxDQUFDQyxPQUFOLENBQWNtRSxJQUFkLENBQVosRUFBaUM7QUFDN0IsZUFBSyxJQUFJYixHQUFULElBQWdCYSxJQUFoQixFQUFzQjtBQUNsQixpQkFBS2hMLEVBQUwsQ0FBUWdMLElBQVIsQ0FBYTFCLElBQWIsQ0FBa0IsS0FBS1ksZ0JBQUwsQ0FBc0JDLEdBQXRCLEVBQTJCLFNBQTNCLENBQWxCO0FBQ0g7QUFDSjtBQUNKLE9BUEQsQ0FRQSxPQUFPaEUsQ0FBUCxFQUFVO0FBQ047QUFDQSxhQUFLbEcsTUFBTCxDQUFZa0ksS0FBWixDQUFrQiwrQkFBbEIsRUFBbURoQyxDQUFuRDtBQUNIO0FBQ0osS0F6Q3NCLENBMkN2Qjs7O0FBQ0EsUUFBSSxLQUFLckcsT0FBTCxDQUFhc0wsaUJBQWpCLEVBQW9DO0FBQ2hDLFVBQUk7QUFDQSxjQUFNSixJQUFJLEdBQUcsS0FBS0ssYUFBTCxFQUFiOztBQUNBLFlBQUlMLElBQUksSUFBSXBFLEtBQUssQ0FBQ0MsT0FBTixDQUFjbUUsSUFBZCxDQUFaLEVBQWlDO0FBQzdCLGVBQUssSUFBSU0sUUFBVCxJQUFxQk4sSUFBckIsRUFBMkI7QUFDdkIsaUJBQUtoTCxFQUFMLENBQVFnTCxJQUFSLENBQWExQixJQUFiLENBQWtCLEtBQUtZLGdCQUFMLENBQXNCb0IsUUFBdEIsRUFBZ0MsUUFBaEMsQ0FBbEI7QUFDSDtBQUNKO0FBQ0osT0FQRCxDQVFBLE9BQU9uRixDQUFQLEVBQVU7QUFDTjtBQUNBLGFBQUtsRyxNQUFMLENBQVlrSSxLQUFaLENBQWtCLDhCQUFsQixFQUFrRGhDLENBQWxEO0FBQ0g7QUFDSjs7QUFFRCxRQUFJb0YsU0FBUyxHQUFHLE1BQU0sS0FBS0MseUJBQUwsRUFBdEI7O0FBQ0EsUUFBSUQsU0FBSixFQUFlO0FBQ1g7QUFDQSxXQUFLdkwsRUFBTCxDQUFReUwsVUFBUixDQUFtQixpQkFBbkIsSUFBd0NGLFNBQXhDO0FBQ0g7QUFDSjs7QUFFREcsRUFBQUEsZUFBZSxDQUFDQyxPQUFELEVBQVU7QUFDckIsUUFBSSxDQUFDQSxPQUFMLEVBQWM7QUFDVixZQUFNLElBQUlqTCxvQkFBSixDQUFZQyxnQkFBVW1LLFNBQVYsQ0FBb0JjLFlBQWhDLEVBQThDLDBDQUE5QyxDQUFOO0FBQ0g7O0FBQ0QsUUFBSSxPQUFPRCxPQUFQLEtBQW1CLFFBQXZCLEVBQWlDO0FBQzdCLGFBQU9BLE9BQVA7QUFDSDs7QUFDRCxRQUFJQSxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsR0FBaEIsTUFBeUIsQ0FBN0IsRUFBZ0M7QUFDNUIsYUFBT0YsT0FBUCxDQUQ0QixDQUNaO0FBQ25COztBQUNELFVBQU1HLFFBQVEsR0FBRyxLQUFLOUssSUFBTCxJQUFhLEtBQUtBLElBQUwsQ0FBVVUsWUFBdkIsR0FBc0MsS0FBS1YsSUFBTCxDQUFVVSxZQUFWLENBQXVCWSxXQUF2QixFQUF0QyxHQUE2RSxJQUE5Rjs7QUFFQSxRQUFJLEtBQUs5QixVQUFMLEtBQW9CLFlBQXBCLElBQW9Dc0wsUUFBUSxLQUFLLFNBQXJELEVBQWdFO0FBQzVELFVBQUlILE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixLQUFoQixNQUEyQixDQUEvQixFQUFrQztBQUM5QjtBQUNBO0FBQ0E7QUFDQUYsUUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUNJLE1BQVIsQ0FBZSxNQUFNOUcsTUFBckIsQ0FBVjs7QUFDQSxZQUFJMEcsT0FBTyxDQUFDRSxPQUFSLENBQWdCLE1BQWhCLE1BQTRCLENBQUMsQ0FBakMsRUFBb0M7QUFDaENGLFVBQUFBLE9BQU8sR0FBRyxLQUFLM0ssSUFBTCxDQUFVb0IsVUFBVixHQUF1QixNQUF2QixHQUFnQ3VKLE9BQTFDO0FBQ0g7O0FBQ0QsZUFBTywwQ0FBMENBLE9BQTFDLEdBQW9ELElBQTNEO0FBQ0gsT0FURCxNQVNPLElBQUlBLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixRQUFoQixNQUE4QixDQUFsQyxFQUNILE9BQU8seUNBQXlDRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxTQUFTOUcsTUFBeEIsQ0FBekMsR0FBMkUsSUFBbEYsQ0FERyxLQUVGLElBQUkwRyxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsT0FBaEIsTUFBNkIsQ0FBakMsRUFDRCxPQUFPLG9DQUFvQ0YsT0FBTyxDQUFDSSxNQUFSLENBQWUsUUFBUTlHLE1BQXZCLENBQXBDLEdBQXFFLElBQTVFLENBREMsS0FFQSxJQUFJMEcsT0FBTyxDQUFDRSxPQUFSLENBQWdCLGdCQUFoQixNQUFzQyxDQUExQyxFQUNELE9BQU8sNENBQTRDRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxpQkFBaUI5RyxNQUFoQyxDQUE1QyxHQUFzRixJQUE3RixDQURDLEtBRUEsSUFBSTBHLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixPQUFoQixNQUE2QixDQUFqQyxFQUNELE9BQU8sMkNBQTJDRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxRQUFROUcsTUFBdkIsQ0FBM0MsR0FBNEUsSUFBbkYsQ0FEQyxLQUVBLElBQUkwRyxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsZ0JBQWhCLE1BQXNDLENBQTFDLEVBQ0QsT0FBTyxtREFBbURGLE9BQU8sQ0FBQ0ksTUFBUixDQUFlLGlCQUFpQjlHLE1BQWhDLENBQW5ELEdBQTZGLElBQXBHLENBREMsS0FFQSxJQUFJMEcsT0FBTyxDQUFDRSxPQUFSLENBQWdCLFlBQWhCLE1BQWtDLENBQXRDLEVBQ0QsT0FBTywyQ0FBUCxDQURDLEtBRUEsSUFBSUYsT0FBTyxDQUFDRSxPQUFSLENBQWdCLEdBQWhCLE1BQXlCLENBQTdCLEVBQW1DO0FBQ3BDLGVBQU9GLE9BQVA7QUFDUCxLQXhCRCxNQXdCTyxJQUFJLEtBQUtuTCxVQUFMLEtBQW9CLFlBQXBCLElBQW9Dc0wsUUFBUSxLQUFLLEtBQXJELEVBQTREO0FBQy9ELFVBQUlILE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixHQUFoQixNQUF5QixDQUE3QixFQUFnQztBQUM1QixlQUFPRixPQUFQO0FBQ1AsS0FITSxNQUdBLElBQUksS0FBS25MLFVBQUwsS0FBb0IsWUFBeEIsRUFBc0M7QUFBYTtBQUN0RCxVQUFJbUwsT0FBTyxDQUFDRSxPQUFSLENBQWdCLEtBQWhCLE1BQTJCLENBQS9CLEVBQ0ksT0FBTyxNQUFNRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxNQUFNOUcsTUFBckIsQ0FBYixDQURKLENBQ29EO0FBRHBELFdBRUssSUFBSTBHLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixPQUFoQixNQUE2QixDQUFqQyxFQUNELE9BQU8sV0FBV0YsT0FBTyxDQUFDSSxNQUFSLENBQWUsUUFBUTlHLE1BQXZCLENBQVgsR0FBNEMsR0FBbkQsQ0FEQyxLQUVBLElBQUkwRyxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsT0FBaEIsTUFBNkIsQ0FBakMsRUFDRCxPQUFPLE1BQU1GLE9BQU8sQ0FBQ0ksTUFBUixDQUFlLFFBQVE5RyxNQUF2QixDQUFiLENBREMsS0FFQSxJQUFJMEcsT0FBTyxDQUFDRSxPQUFSLENBQWdCLGdCQUFoQixNQUFzQyxDQUExQyxFQUNELE9BQU8sT0FBT0YsT0FBTyxDQUFDSSxNQUFSLENBQWUsUUFBUTlHLE1BQXZCLENBQWQsQ0FEQyxLQUVBLElBQUkwRyxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsTUFBaEIsTUFBNEIsQ0FBaEMsRUFDRCxPQUFPRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxPQUFPOUcsTUFBdEIsQ0FBUCxDQVZxQyxDQVVXO0FBQ3ZEOztBQUVELFdBQU8wRyxPQUFQO0FBQ0g7O0FBRURsTCxFQUFBQSxvQkFBb0IsR0FBRztBQUNuQixTQUFLRixPQUFMLENBQWF5TCxjQUFiLEdBQThCLEtBQUtOLGVBQW5DO0FBQ0EsU0FBS25MLE9BQUwsQ0FBYTBMLFlBQWIsR0FBNEJoSSxlQUFTZ0ksWUFBckM7QUFDQSxTQUFLMUwsT0FBTCxDQUFhMkwsVUFBYixHQUEwQmpJLGVBQVNpSSxVQUFuQztBQUNBLFNBQUszTCxPQUFMLENBQWE0TCxXQUFiLEdBQTJCbEksZUFBU2tJLFdBQXBDO0FBQ0EsU0FBSzVMLE9BQUwsQ0FBYTZMLGVBQWIsR0FBK0JuSSxlQUFTbUksZUFBeEM7QUFDQSxTQUFLN0wsT0FBTCxDQUFhOEwsZ0JBQWIsR0FBZ0NwSSxlQUFTb0ksZ0JBQXpDO0FBQ0EsU0FBSzlMLE9BQUwsQ0FBYStMLGtCQUFiLEdBQWtDckksZUFBU3FJLGtCQUEzQztBQUNBLFNBQUsvTCxPQUFMLENBQWFnTSxzQkFBYixHQUFzQ3RJLGVBQVNzSSxzQkFBL0M7QUFDQSxTQUFLaE0sT0FBTCxDQUFhaU0sY0FBYixHQUE4QnZJLGVBQVN1SSxjQUF2QztBQUNBLFNBQUtqTSxPQUFMLENBQWFrTSw0QkFBYixHQUE0Q3hJLGVBQVN3SSw0QkFBckQ7QUFDQSxTQUFLbE0sT0FBTCxDQUFhbU0sb0JBQWIsR0FBb0N6SSxlQUFTeUksb0JBQTdDO0FBQ0EsU0FBS25NLE9BQUwsQ0FBYW9NLCtCQUFiLEdBQStDMUksZUFBUzBJLCtCQUF4RDtBQUNBLFNBQUtwTSxPQUFMLENBQWFxTSxrQkFBYixHQUFrQzNJLGVBQVMySSxrQkFBM0M7QUFDQSxTQUFLck0sT0FBTCxDQUFhc00sMEJBQWIsR0FBMEM1SSxlQUFTNEksMEJBQW5EO0FBQ0EsU0FBS3RNLE9BQUwsQ0FBYXVNLHFCQUFiLEdBQXFDN0ksZUFBUzZJLHFCQUE5QztBQUNBLFNBQUt2TSxPQUFMLENBQWF3TSxhQUFiLEdBQTZCOUksZUFBUzhJLGFBQXRDO0FBQ0EsU0FBS3hNLE9BQUwsQ0FBYXlNLFdBQWIsR0FBMkIvSSxlQUFTK0ksV0FBcEM7QUFDQSxTQUFLek0sT0FBTCxDQUFhME0sV0FBYixHQUEyQmhKLGVBQVNnSixXQUFwQztBQUNIOztBQUVrQixRQUFiekYsYUFBYSxHQUFHO0FBQ2xCLFFBQUk7QUFDQSxVQUFJLEtBQUtsRyxNQUFMLElBQWUsS0FBS0EsTUFBTCxDQUFZa0csYUFBL0IsRUFBOEM7QUFDMUMsY0FBTSxLQUFLbEcsTUFBTCxDQUFZa0csYUFBWixFQUFOO0FBQ0g7QUFDSixLQUpELENBSUUsT0FBT3JCLENBQVAsRUFBVTtBQUNSLFdBQUtsRyxNQUFMLENBQVlrSSxLQUFaLENBQWtCLHFCQUFsQixFQUF5Q2hDLENBQXpDO0FBQ0g7QUFDSjs7QUFFaUMsUUFBNUJvQiw0QkFBNEIsQ0FBQ2IsTUFBRCxFQUFTO0FBQ3ZDLFdBQU8sSUFBSTZCLE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsWUFBTXlFLFFBQVEsR0FBRyxLQUFLM0osUUFBTCxDQUFjRyxZQUFkLENBQTJCLFlBQTNCLElBQ2QsNERBQTJELEtBQUtwQyxNQUFMLENBQVk2TCxTQUFVLE9BRG5FLEdBRWQsa0RBQWlELEtBQUs3TCxNQUFMLENBQVk2TCxTQUFVLE9BRjFFOztBQUlBLFVBQUk7QUFDQTtBQUNBLDhCQUFRO0FBQ0p6SyxVQUFBQSxHQUFHLEVBQUV3SyxRQUREO0FBRUpFLFVBQUFBLE1BQU0sRUFBRSxLQUZKO0FBR0pDLFVBQUFBLElBQUksRUFBRSxJQUhGO0FBSUpDLFVBQUFBLGtCQUFrQixFQUFFLEtBSmhCO0FBS0pDLFVBQUFBLElBQUksRUFBRTtBQUNGN0csWUFBQUEsTUFBTSxFQUFFQSxNQUFNLEtBQUssUUFBWCxHQUFzQixRQUF0QixHQUFpQztBQUR2QyxXQUxGO0FBUUosa0JBQVE7QUFDSixvQkFBUSxLQUFLbkQsUUFBTCxDQUFjRyxZQUFkLENBQTJCLGdCQUEzQixFQUE2QzhKLFFBRGpEO0FBRUosb0JBQVEsS0FBS2pLLFFBQUwsQ0FBY0csWUFBZCxDQUEyQixnQkFBM0IsRUFBNkMrSixTQUZqRDtBQUdKLCtCQUFtQjtBQUhmO0FBUkosU0FBUixFQWFHLENBQUN4RCxHQUFELEVBQU15RCxHQUFOLEVBQVdILElBQVgsS0FBb0I7QUFDbkIsY0FBSXRELEdBQUosRUFBUztBQUNMLGlCQUFLaEssTUFBTCxDQUFZa0ksS0FBWixDQUFrQixvREFBb0Q4QixHQUFHLENBQUNwQyxRQUFKLEVBQXRFO0FBQ0g7O0FBQ0RXLFVBQUFBLE9BQU87QUFDVixTQWxCRDtBQW1CSCxPQXJCRCxDQXFCRSxPQUFPckMsQ0FBUCxFQUFVO0FBQ1IsYUFBS2xHLE1BQUwsQ0FBWWtJLEtBQVosQ0FBa0Isb0RBQW9EaEMsQ0FBQyxDQUFDMEIsUUFBRixFQUF0RTtBQUNBVyxRQUFBQSxPQUFPO0FBQ1Y7QUFDSixLQWpDTSxDQUFQO0FBa0NIOztBQUU4QixRQUF6QmdELHlCQUF5QixHQUFHO0FBQzlCLFdBQU8sSUFBSWpELE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsWUFBTXlFLFFBQVEsR0FBRyxLQUFLM0osUUFBTCxDQUFjRyxZQUFkLENBQTJCLFlBQTNCLElBQ2QsNERBQTJELEtBQUtwQyxNQUFMLENBQVk2TCxTQUFVLE9BRG5FLEdBRWQsa0RBQWlELEtBQUs3TCxNQUFMLENBQVk2TCxTQUFVLE9BRjFFOztBQUlBLFVBQUk7QUFDQTtBQUNBLDhCQUFRO0FBQ0p6SyxVQUFBQSxHQUFHLEVBQUV3SyxRQUREO0FBRUpFLFVBQUFBLE1BQU0sRUFBRSxLQUZKO0FBR0pDLFVBQUFBLElBQUksRUFBRSxJQUhGO0FBSUpDLFVBQUFBLGtCQUFrQixFQUFFLEtBSmhCO0FBS0osa0JBQVE7QUFDSixvQkFBUSxLQUFLL0osUUFBTCxDQUFjRyxZQUFkLENBQTJCLGdCQUEzQixFQUE2QzhKLFFBRGpEO0FBRUosb0JBQVEsS0FBS2pLLFFBQUwsQ0FBY0csWUFBZCxDQUEyQixnQkFBM0IsRUFBNkMrSixTQUZqRDtBQUdKLCtCQUFtQjtBQUhmO0FBTEosU0FBUixFQVVHLENBQUN4RCxHQUFELEVBQU15RCxHQUFOLEVBQVdILElBQVgsS0FBb0I7QUFBQTs7QUFDbkIsY0FBSXRELEdBQUosRUFBUztBQUNMLGlCQUFLaEssTUFBTCxDQUFZa0ksS0FBWixDQUFrQixpREFBaUQ4QixHQUFHLENBQUNwQyxRQUFKLEVBQW5FO0FBQ0g7O0FBRURXLFVBQUFBLE9BQU8sQ0FBQytFLElBQUQsYUFBQ0EsSUFBRCxnREFBQ0EsSUFBSSxDQUFFSSxrQkFBUCwwREFBQyxzQkFBMEJDLFdBQTNCLENBQVA7QUFDSCxTQWhCRDtBQWtCSCxPQXBCRCxDQW9CRSxPQUFPekgsQ0FBUCxFQUFVO0FBQ1IsYUFBS2xHLE1BQUwsQ0FBWWtJLEtBQVosQ0FBa0IsaURBQWlEaEMsQ0FBQyxDQUFDMEIsUUFBRixFQUFuRTtBQUNBVyxRQUFBQSxPQUFPO0FBQ1Y7QUFDSixLQWhDTSxDQUFQO0FBaUNIOztBQTVxQnFEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSBtb2JcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIG1vYmlsZSBhdXRvbWF0aW9uLlxyXG4gKiBAc2FtcGxlICoqTG9jYXRvcnM6KiogIFxyXG4gKiBcclxuICogTmF0aXZlIGFwcGxpY2F0aW9uIGxvY2F0b3JzIGZvciFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYW5kcm9pZC5wbmcpICBcclxuICogKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogKiBgfkFDQ0VTU0lCSUxJVFlfSURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBBY2Nlc3NpYmlsaXR5IElkLlxyXG4gKiAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGlkLlxyXG4gKiAqIGBjbGFzcz1DTEFTU2AgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGNsYXNzLlxyXG4gKiAqIGB0ZXh0PVRFWFRgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyB2aXNpYmxlIHRleHQuXHJcbiAqICogYHRleHQtY29udGFpbnM9VEVYVGAgLSBMb2NhdGVzIGVsZW1lbnQgd2hvc2UgdmlzaWJsZSB0ZXh0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3RyaW5nLlxyXG4gKiAqIGBkZXNjPURFU0NSSVBUSU9OYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgZGVzY3JpcHRpb24uXHJcbiAqICogYGRlc2MtY29udGFpbnM9REVTQ1JJUFRJT05gIC0gTG9jYXRlcyBlbGVtZW50IHdob3NlIGRlc2NyaXB0aW9uIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3RyaW5nLlxyXG4gKiAqIGBzY3JvbGxhYmxlYCAtIExvY2F0ZXMgZWxlbWVudHMgdGhhdCBhcmUgc2Nyb2xsYWJsZS4gIFxyXG4gKiAgXHJcbiAqIE5hdGl2ZSBhcHBsaWNhdGlvbiBsb2NhdG9ycyBmb3IhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FwcGxlLnBuZykgIFxyXG4gKiAgXHJcbiAqICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICogYGlkPUlEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgSUQuXHJcbiAqICogYH5BQ0NFU1NJQklMSVRZX0lEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJZC4gIFxyXG4gKiAqIGAtaW9zIHByZWRpY2F0ZSBzdHJpbmc6UFJFRElDQVRFX1NUUklOR2AgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYSBbcHJlZGljYXRlIHF1ZXJ5XShodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2thcmNoaXZlL1dlYkRyaXZlckFnZW50L3dpa2kvUHJlZGljYXRlLVF1ZXJpZXMtQ29uc3RydWN0aW9uLVJ1bGVzKS4gIFxyXG4gKiAqIGAtaW9zIGNsYXNzIGNoYWluOkNMQVNTX0NIQUlOYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIFtjbGFzcyBjaGFpbiBleHByZXNzaW9uXShodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2thcmNoaXZlL1dlYkRyaXZlckFnZW50L3dpa2kvQ2xhc3MtQ2hhaW4tUXVlcmllcy1Db25zdHJ1Y3Rpb24tUnVsZXMpLiAgXHJcbiAqICBcclxuICogSHlicmlkIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9oeWJyaWQucG5nKSAgYW5kIFdlYiFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvd2ViLnBuZykgIGFwcGxpY2F0aW9uIGxvY2F0b3JzIGZvciFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYW5kcm9pZC5wbmcpICAhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FwcGxlLnBuZykgIFxyXG4gKiAgXHJcbiAqICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICogYGlkPUlEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgaWQuXHJcbiAqICogYG5hbWU9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIG5hbWUgYXR0cmlidXRlLlxyXG4gKiAqIGB0YWc9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxyXG4gKiAqIGBsaW5rPVRFWFRgIC0gTG9jYXRlcyBhbmNob3IgZWxlbWVudCB3aG9zZSB0ZXh0IG1hdGNoZXMgdGhlIGdpdmVuIHN0cmluZy5cclxuICogKiBgbGluay1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgYW5jaG9yIGVsZW1lbnQgd2hvc2UgdGV4dCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAqIGBjc3M9Q1NTX1NFTEVDVE9SYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIENTUyBzZWxlY3Rvci5cclxuICogXHJcbiAqICoqUGF0dGVybiBhcmd1bWVudHM6KipcclxuICogXHJcbiAqIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAqIGByZWdleDpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogKiBgUEFUVEVSTmAgLSBWZXJiYXRpbSBtYXRjaGluZy5cclxuICogXHJcbiAqL1xyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgcGVyZmVjdG9SZXBvcnRpbmcgZnJvbSAncGVyZmVjdG8tcmVwb3J0aW5nJztcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XHJcbmltcG9ydCBtZXJnZUltYWdlcyBmcm9tICcuLi9saWIvaW1nLW1lcmdlJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnbW9iJztcclxuY29uc3QgREVGQVVMVF9BUFBJVU1fVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWInO1xyXG5jb25zdCBERUZBVUxUX0JST1dTRVJfTkFNRSA9ICdkZWZhdWx0JztcclxuY29uc3QgTk9fU0NSRUVOU0hPVF9DT01NQU5EUyA9IFsnaW5pdCcsICdhc3NlcnRBbGVydCddO1xyXG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCd0YXAnLCdjbGljaycsJ3N3aXBlJywnc3VibWl0Jywnc2V0VmFsdWUnXTtcclxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVPVVQgPSA2MCAqIDEwMDA7ICAgICAgICAgICAgLy8gZGVmYXVsdCA2MHMgd2FpdCB0aW1lb3V0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2JpbGVNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5ldHdvcmtSZXF1ZXN0cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gJ05BVElWRV9BUFAnO1xyXG4gICAgICAgIHRoaXMuX2xvYWRIZWxwZXJGdW5jdGlvbnMoKTtcclxuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXHJcbiAgICAgICAgdGhpcy5PeEVycm9yID0gT3hFcnJvcjtcclxuICAgICAgICB0aGlzLmVyckhlbHBlciA9IGVyckhlbHBlcjtcclxuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yVGltZW91dCA9IERFRkFVTFRfV0FJVF9USU1FT1VUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgQXBwaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGFwcGl1bVVybCAtIFJlbW90ZSBBcHBpdW0gc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2FwcywgYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgLy8gaWYgcmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVpbml0aWxpemUgdGhlIG1vZHVsZVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZW9wZW5TZXNzaW9uICE9PSBmYWxzZSkgeyAvLyB0cnVlIG9yIGZhbHNlIGlmIGV4cGxpc2l0bHkgc2V0LiB0cnVlIG9uIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3Jlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlbG9hZGluZyB0aGUgc2Vzc2lvbi4uLicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIucmVsb2FkU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnbW9iLmluaXQgd2FzIGNhbGxlZCBmb3IgYWxyZWFkeSBpbml0aWFsaXplZCBtb2R1bGUuIHJlb3BlblNlc3Npb24gaXMgZmFsc2Ugc28gdGhlIGNhbGwgaXMgaWdub3JlZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZFxyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzICYmIHRoaXMuY3R4LmNhcHNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMucGxhdGZvcm1OYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMucGxhdGZvcm1WZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuZGV2aWNlTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuYXV0b21hdGlvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy51ZGlkO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXBzLmFwcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHMuZW5hYmxlQXBwaXVtQmVoYXZpb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXBzLnVzZUFwcGl1bUZvcldlYiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2Fwcy5lbmFibGVBcHBpdW1CZWhhdmlvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5jYXBzLnVzZUFwcGl1bUZvcldlYiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5jYXBzLmVuYWJsZUFwcGl1bUJlaGF2aW9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhcHBpdW1VcmwpIHtcclxuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBjbGVhciB0aGUgZXhpc3RpbmcgZGV2aWNlIGxvZ3MsIGlmIGNvbGxlY3REZXZpY2VMb2dzIG9wdGlvbiBpcyB0cnVlICh3ZSB3YW50IHRvIGluY2x1ZGUgbG9ncyBvbmx5IHJlbGV2YW50IGZvciB0aGlzIHNlc3Npb24pXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0RGV2aWNlTG9ncykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHNbJ2NsZWFyRGV2aWNlTG9nc09uU3RhcnQnXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiBib3RoIGJyb3dzZXJOYW1lIGFuZCBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCB3ZXJlIHNwZWNpZmllZCAtIGFzc3VtZSB3ZSB3YW50IHRvIHJ1biB0aGUgYXBwbGljYXRpb24gYW5kIHJlbW92ZSBicm93c2VyTmFtZVxyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgKHRoaXMuY2Fwcy5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHAgfHwgdGhpcy5jYXBzLmJ1bmRsZUlkKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYXBzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBubyBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCBjYXBhYmlsaXR5IG5vciBicm93c2VyTmFtZSBhcmUgZGVmaW5lZCwgYXNzdW1lIHdlIHdhbnQgdG8gcnVuIHRoZSB0ZXN0IGFnYWluc3QgZGVmYXVsdCBicm93c2VyXHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiAhdGhpcy5jYXBzLmFwcFBhY2thZ2UgJiYgIXRoaXMuY2Fwcy5hcHAgJiYgIXRoaXMuY2Fwcy5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2ViZHJpdmVyIGV4cGVjdHMgbG93ZXIgY2FzZSBuYW1lc1xyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgdHlwZW9mIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShhcHBpdW1VcmwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBwcm92aWRlciA9IG1vZFV0aWxzLmRldGVybWluZVByb3ZpZGVyKHdkaW9PcHRzKTtcclxuICAgICAgICBsZXQgbmFtZSA9ICduYW1lJztcclxuXHJcbiAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMubWF4SW5zdGFuY2VzID0gMTtcclxuICAgICAgICAgICAgd2Rpb09wdHMucGF0aCA9ICcvbmV4cGVyaWVuY2UvcGVyZmVjdG9tb2JpbGUvd2QvaHViJztcclxuICAgICAgICAgICAgd2Rpb09wdHMucG9ydCA9IDgwO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wcm90b2NvbCA9ICdodHRwJztcclxuICAgICAgICAgICAgd2Rpb09wdHMub3BlbkRldmljZVRpbWVvdXQgPSAxNTtcclxuXHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMubWFudWZhY3R1cmVyO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLm1vZGVsO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmhvc3Q7XHJcblxyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICBjb25zdCBic09wdGlvbnMgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ107XHJcbiAgICAgICAgICAgIGlmIChic09wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRldmljZU5hbWUgPSBic09wdGlvbnMuZGV2aWNlTmFtZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9zTmFtZSA9IGJzT3B0aW9ucy5vcztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGV2aWNlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJzT3B0aW9ucy5yZWFsTW9iaWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2FwcGl1bTpkZXZpY2VOYW1lJ10gPSBkZXZpY2VOYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHNldCBhdXRvbWF0aW9uTmFtZSBBcHBpdW0gY2FwYWJpbGl0eVxyXG4gICAgICAgICAgICAgICAgaWYgKG9zTmFtZSAmJiBvc05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2FuZHJvaWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLnBsYXRmb3JtTmFtZSA9ICdBbmRyb2lkJztcclxuICAgICAgICAgICAgICAgICAgICB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2FwcGl1bTphdXRvbWF0aW9uTmFtZSddID0gJ1VJQXV0b21hdG9yMic7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9zTmFtZSAmJiBvc05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lvcycpIHtcclxuICAgICAgICAgICAgICAgICAgICB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMucGxhdGZvcm1OYW1lID0gJ2lPUyc7XHJcbiAgICAgICAgICAgICAgICAgICAgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydhcHBpdW06YXV0b21hdGlvbk5hbWUnXSA9ICdYQ1VJVGVzdCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgdXNlci1wcm92aWRlZCBCUyBvcHRpb25zIGludG8gdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhcE5hbWUgaW4gd2Rpb09wdHMuY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhcE5hbWUuc3RhcnRzV2l0aCgnYnN0YWNrOicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJzQ2FwTmFtZSA9IGNhcE5hbWUuc3Vic3RyaW5nKCdic3RhY2s6Jy5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJzQ2FwTmFtZSA9PT0gJ29wdGlvbnMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuLi4gbmVlZHMgdG8gYmUgcmVtb3ZlZCBldmVudHVhbGx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChic0NhcE5hbWUgPT09ICdyZWNvcmRWaWRlbycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJzT3B0aW9ucy52aWRlbyA9IHdkaW9PcHRzLmNhcGFiaWxpdGllc1tjYXBOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbY2FwTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnNPcHRpb25zW2JzQ2FwTmFtZV0gPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbY2FwTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbY2FwTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddICYmIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2Rpb09wdHMgPSB3ZGlvT3B0cztcclxuXHJcbiAgICAgICAgLy8gaW5pdCB3ZWJkcml2ZXJcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLnByb3ZpZGVyID0gcHJvdmlkZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCA9IGF3YWl0IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdlYmRyaXZlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlU2NyaXB0OiBhc3luYyAoY29tbWFuZCwgcGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kcml2ZXIuZXhlY3V0ZShjb21tYW5kLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGluZ0NsaWVudCA9IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b1JlcG9ydGluZ0NsaWVudChwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0YXJ0KG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0Q29udGV4dCgpO1xyXG5cclxuICAgICAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBvbiBBbmRyb2lkIDcrIGVtdWxhdG9yLCBhbmQgdGh1cy9vciB1c2luZyBhIFdlYlZpZXcgQnJvd3NlciBUZXN0ZXIgLVxyXG4gICAgICAgIC8vIHBlcmZvcm0gYW4gYWN0dWFsIGFwcENvbnRleHQgc3dpdGNoIHRvIFdFQlxyXG4gICAgICAgIC8vIHNvIEFwcGl1bSB3aWxsIGRlbGVnYXRlIGNvbW1hbmRzIHRvIENocm9tZSBEcml2ZXIgaW5zdGVhZCBvZiBBcHBpdW0gRHJpdmVyXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gICdjaHJvbWl1bS13ZWJ2aWV3Jykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldFdlYlZpZXdDb250ZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgLy8gZmFpbHMgb24gYnJvd3NlcnN0YWNrXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBtb2RVdGlscy5vdmVyd3JpdGVXZGlvQ29tbWFuZHModGhpcy5kcml2ZXIpO1xyXG5cclxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAc3VtbWFyeSBFbmRzIHRoZSBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHN0YXR1cyAtIFRlc3Qgc3RhdHVzLCBlaXRoZXIgYHBhc3NlZGAgb3IgYGZhaWxlZGAuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcclxuICAgICAgICAgICAgc3RhdHVzID0gJ3Bhc3NlZCc7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ycy5zdGVwcyAmJiBBcnJheS5pc0FycmF5KHRoaXMucnMuc3RlcHMpICYmIHRoaXMucnMuc3RlcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkRmluZGVkID0gdGhpcy5ycy5zdGVwcy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhaWxlZEZpbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9IHN0YXR1cy50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0b3Aoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdG9SZXBvcnRpbmcuQ29uc3RhbnRzLnJlc3VsdHMucGFzc2VkIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5mYWlsZWRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5CUk9XU0VSU1RBQ0spIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldEJyb3dzZXJTdGFja1Jlc3VsdFN0YXR1cyhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVsnQ0FOQ0VMRUQnLCAnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnICsgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBPcGVucyBuZXcgdHJhbnNhY3Rpb24uXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmUgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICogQGZvciBhbmRyb2lkLCBpb3MsIGh5YnJpZCwgd2ViXHJcbiAgICAgKi9cclxuICAgIHRyYW5zYWN0aW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBqdXN0IGluIGNhc2UgdXNlciBwYXNzZWQgYSBjb21wbGV4IG9iamVjdCBieSBtaXN0YWtlXHJcbiAgICAgICAgbmFtZSA9IG5hbWUudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgLy8gbGltaXQgdGhlIG5hbWUgbGVuZ3RoIChzaW5jZSB3ZSBjYW4ndCBzdG9yZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gNTEyQiBpbiB0aGUgZGF0YWJhc2UpXHJcbiAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgNTEyKTtcclxuXHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZVxyXG4gICAgICovXHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFVudGlsUmV0VmFsID0gdGhpcy5kcml2ZXIud2FpdFVudGlsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB1c2hJbWFnZVRvSW1hZ2VzID0gYXN5bmMoZmV0Y2hUaXRsZSA9IHRydWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZXRjaFRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaXRsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0VG9JbWFnZSA9IHJlcXVpcmUoJy4uL2xpYi90ZXh0LXRvLWltYWdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZUltYWdlID0gYXdhaXQgdGV4dFRvSW1hZ2UuZ2VuZXJhdGUodGl0bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGVJbWFnZSAmJiB0eXBlb2YgdGl0bGVJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlSW1hZ2UgPSB0aXRsZUltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCh0aXRsZUltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaChpbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1dlYlZpZXdDb250ZXh0ID0gYXdhaXQgdGhpcy5pc1dlYlZpZXdDb250ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1dlYlZpZXdDb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGFsbCAoc2NyZWVuc2hvdCBhbmQgdGl0bGUpIGltYWdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFdpbmRvd0hhbmRsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShoYW5kbGVzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoYW5kbGUgb2YgaGFuZGxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zd2l0Y2hUb1dpbmRvdyhoYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwdXNoSW1hZ2VUb0ltYWdlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHB1c2hJbWFnZVRvSW1hZ2VzKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWxsIGltYWdlcyBpbnRvIG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRJbWFnZSA9IGF3YWl0IG1lcmdlSW1hZ2VzKGltYWdlcywgeyBkaXJlY3Rpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZWRJbWFnZSAmJiB0eXBlb2YgbWVyZ2VkSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBtZXJnZWRJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0aW1lb3V0OiAzMCoxMDAwIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCcsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgaW5uZXIgZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBfZ2V0TG9ncyhuYW1lKSB7XHJcbiAgICAvLyAgICAgaWYgKCFOT19MT0dTX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB0aGlzLmdldExvZ3MoKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgX2FkanVzdEFwcGl1bUxvZyhsb2csIHNyYykge1xyXG4gICAgICAgIGlmICghbG9nIHx8IHR5cGVvZiBsb2cgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IGxvZy50aW1lc3RhbXAgZnJvbSB0aGUgZGV2aWNlIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpICAgICAgICBcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0aW1lOiBsb2cudGltZXN0YW1wLFxyXG4gICAgICAgICAgICBtc2c6IGxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICBsZXZlbDogbG9nLmxldmVsLFxyXG4gICAgICAgICAgICBzcmM6IHNyY1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgX2l0ZXJhdGlvblN0YXJ0KCkge1xyXG4gICAgICAgIC8vIGNsZWFyIHRyYW5zYWN0aW9uIG5hbWUgc2F2ZWQgaW4gcHJldmlvdXMgaXRlcmF0aW9uIGlmIGFueVxyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2l0ZXJhdGlvbkVuZChlcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVBQSVVNX1NFU1NJT05fVElNRU9VVCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlnbm9yZSB0aGUgcmVzdCBpZiBtb2IgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZFxyXG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29sbGVjdCBhbGwgdGhlIGRldmljZSBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3REZXZpY2VMb2dzKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5nZXREZXZpY2VMb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbG9nIG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZywgJ2RldmljZScpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgZGV2aWNlIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIHRoZSBicm93c2VyIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEJyb3dzZXJMb2dzKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2csICdicm93c2VyJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBicm93c2VyIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIEFwcGl1bSBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RBcHBpdW1Mb2dzKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gdGhpcy5nZXRBcHBpdW1Mb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbG9nRW50cnkgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nRW50cnksICdhcHBpdW0nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIEFwcGl1bSBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0VXJsID0gYXdhaXQgdGhpcy5fZ2V0QnJvd3NlclN0YWNrUmVzdWx0VXJsKCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdFVybCkge1xyXG4gICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgd3JpdHRlbiB0byBjb250ZXh0LnJlc3VsdERhdGEgaW5zdGVhZFxyXG4gICAgICAgICAgICB0aGlzLnJzLmF0dHJpYnV0ZXNbJ0Jyb3dzZXJTdGFja1VybCddID0gcmVzdWx0VXJsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikge1xyXG4gICAgICAgIGlmICghbG9jYXRvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBsb2NhdG9yIG5vdCBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhdG9yICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignLycpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yOyAvLyBsZWF2ZSB4cGF0aCBsb2NhdG9yIGFzIGlzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gdGhpcy5jYXBzICYmIHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUgPyB0aGlzLmNhcHMucGxhdGZvcm1OYW1lLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hcHBDb250ZXh0ID09PSAnTkFUSVZFX0FQUCcgJiYgcGxhdGZvcm0gPT09ICdhbmRyb2lkJykge1xyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gcHJlcGVuZCBwYWNrYWdlIG5hbWUgaWYgaXQncyBub3Qgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBnZXRDdXJyZW50UGFja2FnZSgpIHNlZW1zIHRvIGNyYXNoIHBvc3NpYmx5IGR1ZSB0byBhIHdkaW8gYnVnLiBcclxuICAgICAgICAgICAgICAgIC8vICAgICAgIHNvIHdlIGdldCBwYWNrYWdlIG5hbWUgZnJvbSBjYXBzIGluc3RlYWQuXHJcbiAgICAgICAgICAgICAgICBsb2NhdG9yID0gbG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJzppZC8nKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdG9yID0gdGhpcy5jYXBzLmFwcFBhY2thZ2UgKyAnOmlkLycgKyBsb2NhdG9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkucmVzb3VyY2VJZChcIicgKyBsb2NhdG9yICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjbGFzcz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmNsYXNzTmFtZShcIicgKyBsb2NhdG9yLnN1YnN0cignY2xhc3M9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGV4dD0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnRleHQoXCInICsgbG9jYXRvci5zdWJzdHIoJ3RleHQ9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGV4dC1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnRleHRDb250YWlucyhcIicgKyBsb2NhdG9yLnN1YnN0cigndGV4dC1jb250YWlucz0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdkZXNjPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuZGVzY3JpcHRpb24oXCInICsgbG9jYXRvci5zdWJzdHIoJ2Rlc2M9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignZGVzYy1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uQ29udGFpbnMoXCInICsgbG9jYXRvci5zdWJzdHIoJ2Rlc2MtY29udGFpbnM9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignc2Nyb2xsYWJsZScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuc2Nyb2xsYWJsZSh0cnVlKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignficpID09PSAwKSAgICAvLyBhY2Nlc3NpYmlsaXR5IGlkXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwQ29udGV4dCA9PT0gJ05BVElWRV9BUFAnICYmIHBsYXRmb3JtID09PSAnaW9zJykge1xyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCd+JykgPT09IDApIC8vIGFjY2Vzc2liaWxpdHkgaWRcclxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBDb250ZXh0ICE9PSAnTkFUSVZFX0FQUCcpIHsgICAgICAgICAgICAvLyBIeWJyaWQgb3IgV2ViIGFwcGxpY2F0aW9uXHJcbiAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcjJyArIGxvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCk7ICAgICAgLy8gY29udmVydCAnaWQ9JyB0byAnIydcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbmFtZT0nICsgbG9jYXRvci5zdWJzdHIoJ25hbWU9Jy5sZW5ndGgpICsgJ10nO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbms9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJz0nICsgbG9jYXRvci5zdWJzdHIoJ2xpbms9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbmstY29udGFpbnM9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyo9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjc3M9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvci5zdWJzdHIoJ2Nzcz0nLmxlbmd0aCk7ICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGNzcywganVzdCByZW1vdmUgY3NzPSBwcmVmaXhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IHRoaXMuX2dldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRDb250ZXh0ID0gbW9kVXRpbHMuYXNzZXJ0Q29udGV4dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuY29udGV4dExpc3QgPSBtb2RVdGlscy5jb250ZXh0TGlzdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0TG9nVHlwZXMgPSBtb2RVdGlscy5nZXRMb2dUeXBlcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVTZXNzaW9uKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdkZWxldGVTZXNzaW9uIGVycm9yJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZXRCcm93c2VyU3RhY2tSZXN1bHRTdGF0dXMoc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgLy8gZGlmZmVyZW50IEFQSXMgYXJlIHVzZWQgZGVwZW5kaW5nIG9uIHRlc3QgdHlwZS5cclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cuYnJvd3NlcnN0YWNrLmNvbS9kb2NzL2F1dG9tYXRlL2FwaS1yZWZlcmVuY2Uvc2VsZW5pdW0vc2Vzc2lvbiNzZXQtdGVzdC1zdGF0dXNcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cuYnJvd3NlcnN0YWNrLmNvbS9kb2NzL2FwcC1hdXRvbWF0ZS9hcGktcmVmZXJlbmNlL2FwcGl1bS9zZXNzaW9ucyN1cGRhdGUtc2Vzc2lvbi1zdGF0dXNcclxuICAgICAgICAgICAgY29uc3QgYnNBcGlVcmwgPSB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snYXBwaXVtOmFwcCddID9cclxuICAgICAgICAgICAgICBgaHR0cHM6Ly9hcGktY2xvdWQuYnJvd3NlcnN0YWNrLmNvbS9hcHAtYXV0b21hdGUvc2Vzc2lvbnMvJHt0aGlzLmRyaXZlci5zZXNzaW9uSWR9Lmpzb25gIDpcclxuICAgICAgICAgICAgICBgaHR0cHM6Ly9hcGkuYnJvd3NlcnN0YWNrLmNvbS9hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmA7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRlc3Qgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IGJzQXBpVXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10udXNlck5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10uYWNjZXNzS2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2VuZEltbWVkaWF0ZWx5JzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBzZXR0aW5nIEJyb3dzZXJTdGFjayB0ZXN0IHJlc3VsdCBzdGF0dXM6ICcgKyBlcnIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3Igc2V0dGluZyBCcm93c2VyU3RhY2sgdGVzdCByZXN1bHQgc3RhdHVzOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9nZXRCcm93c2VyU3RhY2tSZXN1bHRVcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgLy8gZGlmZmVyZW50IEFQSXMgYXJlIHVzZWQgZGVwZW5kaW5nIG9uIHRlc3QgdHlwZS5cclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cuYnJvd3NlcnN0YWNrLmNvbS9kb2NzL2F1dG9tYXRlL2FwaS1yZWZlcmVuY2Uvc2VsZW5pdW0vc2Vzc2lvbiNzZXQtdGVzdC1zdGF0dXNcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cuYnJvd3NlcnN0YWNrLmNvbS9kb2NzL2FwcC1hdXRvbWF0ZS9hcGktcmVmZXJlbmNlL2FwcGl1bS9zZXNzaW9ucyN1cGRhdGUtc2Vzc2lvbi1zdGF0dXNcclxuICAgICAgICAgICAgY29uc3QgYnNBcGlVcmwgPSB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snYXBwaXVtOmFwcCddID9cclxuICAgICAgICAgICAgICBgaHR0cHM6Ly9hcGktY2xvdWQuYnJvd3NlcnN0YWNrLmNvbS9hcHAtYXV0b21hdGUvc2Vzc2lvbnMvJHt0aGlzLmRyaXZlci5zZXNzaW9uSWR9Lmpzb25gIDpcclxuICAgICAgICAgICAgICBgaHR0cHM6Ly9hcGkuYnJvd3NlcnN0YWNrLmNvbS9hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmA7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gcmV0cmVpdmUgQlMgdGVzdCByZXN1bHQgdXJsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IGJzQXBpVXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICdhdXRoJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAndXNlcic6IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddLnVzZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAncGFzcyc6IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddLmFjY2Vzc0tleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbmRJbW1lZGlhdGVseSc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgKGVyciwgcmVzLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgZ2V0dGluZyBCcm93c2VyU3RhY2sgdGVzdCByZXN1bHQgdXJsOiAnICsgZXJyLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShib2R5Py5hdXRvbWF0aW9uX3Nlc3Npb24/LmJyb3dzZXJfdXJsKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGdldHRpbmcgQnJvd3NlclN0YWNrIHRlc3QgcmVzdWx0IHVybDogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|