@milkio/stargate 1.0.0-beta.201 → 1.0.0-beta.203
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/LICENSE +20 -20
- package/index.js +1 -1
- package/package.json +12 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2023 akirarika
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 akirarika
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
package/index.js
CHANGED
|
@@ -490,4 +490,4 @@ export {
|
|
|
490
490
|
};
|
|
491
491
|
|
|
492
492
|
//# debugId=76442499E6C2C08A64756E2164756E21
|
|
493
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCB0eXBlIE1pbGtpb1N0YXJnYXRlT3B0aW9ucyA9IHtcclxuICAgIGJhc2VVcmw6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XHJcbiAgICBhYm9ydD86IHR5cGVvZiBBYm9ydENvbnRyb2xsZXI7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNaXhpbjxULCBVPiA9IFUgJiBPbWl0PFQsIGtleW9mIFU+O1xyXG5cclxuZXhwb3J0IHR5cGUgRXhlY3V0ZU9wdGlvbnMgPSB7XHJcbiAgICBwYXJhbXM/OiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgYmFzZVVybD86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBFeGVjdXRlUmVzdWx0c09wdGlvbiA9IHsgZXhlY3V0ZUlkOiBzdHJpbmcgfTtcclxuXHJcbmV4cG9ydCB0eXBlIFBpbmcgPVxyXG4gICAgfCBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25uZWN0OiBmYWxzZTtcclxuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcclxuICAgICAgICAgICAgZXJyb3I6IGFueTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG51bGwsXHJcbiAgICBdXHJcbiAgICB8IFtcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29ubmVjdDogdHJ1ZTtcclxuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcclxuICAgICAgICAgICAgc2VydmVyVGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICAgICAgfSxcclxuICAgIF07XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTdGFyZ2F0ZTxHZW5lcmF0ZWQgZXh0ZW5kcyB7IHJvdXRlU2NoZW1hOiBhbnk7IHJlamVjdENvZGU6IGFueSB9PihzdGFyZ2F0ZU9wdGlvbnM6IE1pbGtpb1N0YXJnYXRlT3B0aW9ucykge1xyXG4gICAgY29uc3QgJGZldGNoID0gc3RhcmdhdGVPcHRpb25zLmZldGNoID8/IGZldGNoO1xyXG4gICAgY29uc3QgJGFib3J0ID0gc3RhcmdhdGVPcHRpb25zLmFib3J0ID8/IEFib3J0Q29udHJvbGxlcjtcclxuXHJcbiAgICB0eXBlIFN0YXJnYXRlRXZlbnRzID0ge1xyXG4gICAgICAgIFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIjogeyBwYXRoOiBzdHJpbmc7IG9wdGlvbnM6IE1peGluPEV4ZWN1dGVPcHRpb25zLCB7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IGJhc2VVcmw6IHN0cmluZyB9PiB9O1xyXG4gICAgICAgIFwibWlsa2lvOmZldGNoQmVmb3JlXCI6IHsgcGF0aDogc3RyaW5nOyBvcHRpb25zOiBNaXhpbjxFeGVjdXRlT3B0aW9ucywgeyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyBiYXNlVXJsOiBzdHJpbmcgfT47IGJvZHk6IHN0cmluZyB9O1xyXG4gICAgICAgIFwibWlsa2lvOmV4ZWN1dGVFcnJvclwiOiB7XHJcbiAgICAgICAgICAgIHBhdGg6IHN0cmluZztcclxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48RXhlY3V0ZU9wdGlvbnMsIHsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgYmFzZVVybDogc3RyaW5nIH0+O1xyXG4gICAgICAgICAgICBlcnJvcjogUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPjtcclxuICAgICAgICAgICAgaGFuZGxlRXJyb3I6IDxLIGV4dGVuZHMga2V5b2YgUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPj4oZXJyb3I6IGFueSwga2V5OiBLLCBoYW5kbGVyOiAoZXJyb3I6IFBhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXVtLXT4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+KSA9PiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUVycm9yOiBhbnkgPSBhc3luYyAoZXJyb3I6IGFueSwga2V5OiBzdHJpbmcsIGhhbmRsZXI6IChlcnJvcjogYW55KSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPikgPT4ge1xyXG4gICAgICAgIGlmIChrZXkgaW4gZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlZCA9IGF3YWl0IGhhbmRsZXIoZXJyb3Jba2V5XSk7XHJcbiAgICAgICAgICAgIGlmIChoYW5kbGVkKSBkZWxldGUgZXJyb3Jba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IF9faW5pdEV2ZW50TWFuYWdlciA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBoYW5kbGVycyA9IG5ldyBNYXA8KGV2ZW50OiBhbnkpID0+IHZvaWQsIHN0cmluZz4oKTtcclxuICAgICAgICBjb25zdCBpbmRleGVkID0gbmV3IE1hcDxzdHJpbmcsIFNldDwoZXZlbnQ6IGFueSkgPT4gdm9pZD4+KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGV2ZW50TWFuYWdlciA9IHtcclxuICAgICAgICAgICAgb246IDxLZXkgZXh0ZW5kcyBrZXlvZiBTdGFyZ2F0ZUV2ZW50cywgSGFuZGxlciBleHRlbmRzIChldmVudDogU3RhcmdhdGVFdmVudHNbS2V5XSkgPT4gdm9pZD4oa2V5OiBLZXksIGhhbmRsZXI6IEhhbmRsZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleGVkLmhhcyhrZXkgYXMgc3RyaW5nKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleGVkLnNldChrZXkgYXMgc3RyaW5nLCBuZXcgU2V0KCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZykhO1xyXG4gICAgICAgICAgICAgICAgc2V0LmFkZChoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGV0ZShoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb2ZmOiA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6IFN0YXJnYXRlRXZlbnRzW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXQgPSBpbmRleGVkLmdldChrZXkgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmICghc2V0KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbWl0OiBhc3luYyA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIFZhbHVlIGV4dGVuZHMgU3RhcmdhdGVFdmVudHNbS2V5XT4oa2V5OiBLZXksIHZhbHVlOiBWYWx1ZSk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IGluZGV4ZWQuZ2V0KGtleSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50TWFuYWdlcjtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZXZlbnRNYW5hZ2VyID0gX19pbml0RXZlbnRNYW5hZ2VyKCk7XHJcblxyXG4gICAgY29uc3QgYm9vdHN0cmFwID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGxldCBiYXNlVXJsID0gc3RhcmdhdGVPcHRpb25zLmJhc2VVcmw7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBiYXNlVXJsID09PSBcImZ1bmN0aW9uXCIpIGJhc2VVcmwgPSBhd2FpdCBiYXNlVXJsKCk7XHJcbiAgICAgICAgaWYgKGJhc2VVcmwuZW5kc1dpdGgoXCIvXCIpKSBiYXNlVXJsID0gYmFzZVVybC5zbGljZSgwLCAtMSk7XHJcblxyXG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBiYXNlVXJsOiBQcm9taXNlPHN0cmluZz4gPSBib290c3RyYXAoKTtcclxuXHJcbiAgICBjb25zdCBzdGFyZ2F0ZSA9IHtcclxuICAgICAgICAuLi5ldmVudE1hbmFnZXIsXHJcbiAgICAgICAgb3B0aW9uczogc3RhcmdhdGVPcHRpb25zLFxyXG4gICAgICAgIGFzeW5jIGV4ZWN1dGU8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihcclxuICAgICAgICAgICAgcGF0aDogUGF0aCxcclxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48XHJcbiAgICAgICAgICAgICAgICBFeGVjdXRlT3B0aW9ucyxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM/OiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA+LFxyXG4gICAgICAgICk6IFByb21pc2U8XHJcbiAgICAgICAgICAgIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxyXG4gICAgICAgICAgICA/IC8vIGFjdGlvblxyXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0sIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXVxyXG4gICAgICAgICAgICA6IC8vIHN0cmVhbVxyXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEFzeW5jR2VuZXJhdG9yPFtQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+LCBudWxsXSB8IFtudWxsLCBHZW5lcmF0b3JHZW5lcmljPEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0+XSwgdW5kZWZpbmVkPiwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dXHJcbiAgICAgICAgPiB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMgPT09IHVuZGVmaW5lZCkgb3B0aW9ucy5oZWFkZXJzID0ge307XHJcblxyXG4gICAgICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcclxuICAgICAgICAgICAgICAgIGxldCBiYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlVXJsID09PSBcImZ1bmN0aW9uXCIpIGJhc2VVcmwgPSBhd2FpdCBiYXNlVXJsKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmFzZVVybC5lbmRzV2l0aChcIi9cIikpIGJhc2VVcmwgPSBiYXNlVXJsLnNsaWNlKDAsIC0xKTtcclxuICAgICAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyAocGF0aCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gKGF3YWl0IGJhc2VVcmwpICsgKHBhdGggYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCEocGF0aCBhcyBzdHJpbmcpLmVuZHNXaXRoKFwiflwiKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYWN0aW9uXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzLkFjY2VwdCA9PT0gdW5kZWZpbmVkKSBvcHRpb25zLmhlYWRlcnMuQWNjZXB0ID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogeyB2YWx1ZTogUmVjb3JkPGFueSwgYW55PiB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUJlZm9yZVwiLCB7IHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmZldGNoQmVmb3JlXCIsIHsgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBib2R5IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zPy50aW1lb3V0ID8/IG9wdGlvbnM/LnRpbWVvdXQgPz8gNjAwMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChbeyBSRVFVRVNUX1RJTUVPVVQ6IHsgdGltZW91dCwgbWVzc2FnZTogYEV4ZWN1dGUgdGltZW91dCBhZnRlciAke3RpbWVvdXR9bXMuYCB9IH0sIG51bGxdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCAoYXdhaXQgJGZldGNoKHVybCwgeyBtZXRob2Q6IFwiUE9TVFwiLCBib2R5LCBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMgfSkpLnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB7IHZhbHVlOiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZXNwb25zZSkpIH07XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yPy5bMF0/LlJFUVVFU1RfVElNRU9VVCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpleGVjdXRlRXJyb3JcIiwgeyBoYW5kbGVFcnJvciwgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBlcnJvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclBpbmVkID0geyBSRVFVRVNUX0ZBSUw6IGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUVycm9yXCIsIHsgaGFuZGxlRXJyb3IsIHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgZXJyb3I6IGVycm9yUGluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtlcnJvclBpbmVkLCBudWxsLCB7IGV4ZWN1dGVJZDogXCJ1bmtub3duXCIgfV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlLnN1Y2Nlc3MgIT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvcjogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JbcmVzdWx0LnZhbHVlLmNvZGVdID0gcmVzdWx0LnZhbHVlLnJlamVjdCA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmV4ZWN1dGVFcnJvclwiLCB7IGhhbmRsZUVycm9yLCBwYXRoOiBwYXRoIGFzIHN0cmluZywgb3B0aW9uczogb3B0aW9ucyBhcyBhbnksIGVycm9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZXJyb3IsIG51bGwsIHsgZXhlY3V0ZUlkOiByZXN1bHQudmFsdWUuZXhlY3V0ZUlkIH1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBbbnVsbCwgcmVzdWx0LnZhbHVlLmRhdGEsIHsgZXhlY3V0ZUlkOiByZXN1bHQudmFsdWUuZXhlY3V0ZUlkIH1dIGFzIGFueTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHN0cmVhbVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycy5BY2NlcHQgPT09IHVuZGVmaW5lZCkgb3B0aW9ucy5oZWFkZXJzLkFjY2VwdCA9IFwidGV4dC9ldmVudC1zdHJlYW1cIjtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPT09IHVuZGVmaW5lZCkgb3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhY2tzOiBNYXA8XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogYm9vbGVhbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxhbnk+PjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTogKHZhbHVlOiBJdGVyYXRvclJlc3VsdDxhbnk+KSA9PiB2b2lkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Q6IChyZWFzb246IGFueSkgPT4gdm9pZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA+ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0YWNrc0luZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVyYXRvckluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIGxldCBzdHJlYW1SZXN1bHQ6IGFueTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbVJlc3VsdEZldGNoZWQgPSB3aXRoUmVzb2x2ZXJzPHVuZGVmaW5lZD4oKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gc3RhcmdhdGVPcHRpb25zPy50aW1lb3V0ID8/IG9wdGlvbnM/LnRpbWVvdXQgPz8gNjAwMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtUmVzdWx0RmV0Y2hlZC5yZWplY3QoW3sgUkVRVUVTVF9USU1FT1VUOiB7IHRpbWVvdXQsIG1lc3NhZ2U6IGBFeGVjdXRlIHRpbWVvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zLmAgfSB9LCBudWxsLCB7IGV4ZWN1dGVJZDogXCJ1bmtub3duXCIgfV0pO1xyXG4gICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25tZXNzYWdlID0gKGV2ZW50OiBFdmVudFNvdXJjZU1lc3NhZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5zdGFydHNXaXRoKFwiQFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtUmVzdWx0ID0gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoZXZlbnQuZGF0YS5zbGljZSgxKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtUmVzdWx0RmV0Y2hlZC5yZXNvbHZlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtUmVzdWx0RmV0Y2hlZC5yZWplY3QoW3sgUkVRVUVTVF9GQUlMOiBlcnJvciB9LCBudWxsLCB7IGV4ZWN1dGVJZDogXCJ1bmtub3duXCIgfV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytzdGFja3NJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcy5oYXMoaW5kZXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHN0YWNrcy5nZXQoaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2shLmRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2shLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gd2l0aFJlc29sdmVyczxJdGVyYXRvclJlc3VsdDxhbnk+PigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tzLnNldChpbmRleCwgeyAuLi5zdGFjaywgZG9uZTogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjdXJSZXF1ZXN0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJSZXF1ZXN0Q29udHJvbGxlciA9IG5ldyAkYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IucmV0dXJuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUJlZm9yZVwiLCB7IHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zIS5wYXJhbXMpID8/IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmZldGNoQmVmb3JlXCIsIHsgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBib2R5IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAkZmV0Y2godXJsLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogb3B0aW9ucyEuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKFwidGV4dC9ldmVudC1zdHJlYW1cIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgY29udGVudC10eXBlIHRvIGJlICR7XCJ0ZXh0L2V2ZW50LXN0cmVhbVwifSwgQWN0dWFsOiAke2NvbnRlbnRUeXBlfWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBnZXRCeXRlcyhyZXNwb25zZS5ib2R5ISwgZ2V0TGluZXMoZ2V0TWVzc2FnZXMob25tZXNzYWdlKSkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0geyBSRVFVRVNUX0ZBSUw6IGVyciB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpleGVjdXRlRXJyb3JcIiwgeyBoYW5kbGVFcnJvciwgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBlcnJvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaXRlcmF0b3IudGhyb3coZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtUmVzdWx0RmV0Y2hlZC5yZWplY3QoW2Vycm9yLCBudWxsLCB7IGV4ZWN1dGVJZDogXCJ1bmtub3duXCIgfV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2b2lkIGNyZWF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZXJhdG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx1bmtub3duPj4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSArK2l0ZXJhdG9ySW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tzLmhhcyhpbmRleCAtIDIpKSBzdGFja3MuZGVsZXRlKGluZGV4IC0gMik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrcy5oYXMoaW5kZXgpICYmICFjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gd2l0aFJlc29sdmVyczxJdGVyYXRvclJlc3VsdDxhbnk+PigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrcy5zZXQoaW5kZXgsIHsgLi4uc3RhY2ssIGRvbmU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFjay5wcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja3MuaGFzKGluZGV4KSAmJiBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gd2l0aFJlc29sdmVyczxJdGVyYXRvclJlc3VsdDxhbnk+PigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlc29sdmUoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFjay5wcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrcy5nZXQoaW5kZXgpIS5wcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3luYyByZXR1cm4oKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx2b2lkPj4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkgY3VyUmVxdWVzdENvbnRyb2xsZXIuYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW18sIGl0ZXJhdG9yXSBvZiBzdGFja3MpIGl0ZXJhdG9yLnJlc29sdmUoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3luYyB0aHJvdyhlcnI6IGFueSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWQ6IHN0cmVhbVJlc3VsdD8uZXhlY3V0ZUlkID8/IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5FVFdPUktfRVJST1JcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJOZXR3b3JrIEVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21DbGllbnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGVycixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW19pbmRleCwgc3RhY2tdIG9mIHN0YWNrcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5kb25lKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5kb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBpdGVyYXRvcl0gb2Ygc3RhY2tzKSBpdGVyYXRvci5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9IHNhdGlzZmllcyBBc3luY0l0ZXJhdG9yPHVua25vd24+KSxcclxuICAgICAgICAgICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHN0cmVhbVJlc3VsdEZldGNoZWQucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW251bGwsIGl0ZXJhdG9yLCB7IGV4ZWN1dGVJZDogc3RyZWFtUmVzdWx0LmV4ZWN1dGVJZCB9XSBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIF9fY29va2Jvb2s6IHtcclxuICAgICAgICAgICAgc3Vic2NyaWJlOiBhc3luYyAoYmFzZVVybDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIEFjY2VwdDogXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpID8/IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFja3M6IE1hcDxcclxuICAgICAgICAgICAgICAgICAgICBudW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBib29sZWFuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PGFueT4+O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiAodmFsdWU6IEl0ZXJhdG9yUmVzdWx0PGFueT4pID0+IHZvaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdDogKHJlYXNvbjogYW55KSA9PiB2b2lkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgID4gPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RhY2tzSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZXJhdG9ySW5kZXggPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubWVzc2FnZSA9IChldmVudDogRXZlbnRTb3VyY2VNZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSArK3N0YWNrc0luZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFja3MuaGFzKGluZGV4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHN0YWNrcy5nZXQoaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFjayEucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gd2l0aFJlc29sdmVyczxJdGVyYXRvclJlc3VsdDxhbnk+PigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShldmVudC5kYXRhKSkgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrcy5zZXQoaW5kZXgsIHsgLi4uc3RhY2ssIGRvbmU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGN1clJlcXVlc3RDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1clJlcXVlc3RDb250cm9sbGVyID0gbmV3ICRhYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5yZXR1cm4oKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0ICRmZXRjaChgJHtiYXNlVXJsfS8kc3Vic2NyaWJlYCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50VHlwZT8uc3RhcnRzV2l0aChcInRleHQvZXZlbnQtc3RyZWFtXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGNvbnRlbnQtdHlwZSB0byBiZSAke1widGV4dC9ldmVudC1zdHJlYW1cIn0sIEFjdHVhbDogJHtjb250ZW50VHlwZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2V0Qnl0ZXMocmVzcG9uc2UuYm9keSEsIGdldExpbmVzKGdldE1lc3NhZ2VzKG9ubWVzc2FnZSkpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBpdGVyYXRvci50aHJvdyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2b2lkIGNyZWF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZXJhdG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx1bmtub3duPj4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSArK2l0ZXJhdG9ySW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tzLmhhcyhpbmRleCAtIDIpKSBzdGFja3MuZGVsZXRlKGluZGV4IC0gMik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrcy5oYXMoaW5kZXgpICYmICFjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gd2l0aFJlc29sdmVyczxJdGVyYXRvclJlc3VsdDxhbnk+PigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrcy5zZXQoaW5kZXgsIHsgLi4uc3RhY2ssIGRvbmU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFjay5wcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja3MuaGFzKGluZGV4KSAmJiBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gd2l0aFJlc29sdmVyczxJdGVyYXRvclJlc3VsdDxhbnk+PigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlc29sdmUoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFjay5wcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrcy5nZXQoaW5kZXgpIS5wcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3luYyByZXR1cm4oKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx2b2lkPj4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkgY3VyUmVxdWVzdENvbnRyb2xsZXIuYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW18sIGl0ZXJhdG9yXSBvZiBzdGFja3MpIGl0ZXJhdG9yLnJlc29sdmUoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3luYyB0aHJvdyhlcnI6IGFueSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBpdGVyYXRvcl0gb2Ygc3RhY2tzKSBpdGVyYXRvci5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9IHNhdGlzZmllcyBBc3luY0l0ZXJhdG9yPHVua25vd24+KSxcclxuICAgICAgICAgICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcjtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yIGFzIGFueTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFzeW5jIHBpbmcob3B0aW9ucz86IHsgdGltZW91dD86IG51bWJlciB9KTogUHJvbWlzZTxQaW5nPiB7XHJcbiAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yXHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxQaW5nPihhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gYCR7YXdhaXQgYmFzZVVybH0vZ2VuZXJhdGVfMjA0YDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzdGFyZ2F0ZU9wdGlvbnM/LnRpbWVvdXQgPz8gb3B0aW9ucz8udGltZW91dCA/PyA2MDAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRzVGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZHNUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFt7IGNvbm5lY3Q6IGZhbHNlLCBkZWxheTogZW5kc1RpbWUgLSBzdGFydHNUaW1lLCBlcnJvcjogeyBSRVFVRVNUX1RJTUVPVVQ6IHsgdGltZW91dCwgbWVzc2FnZTogYEV4ZWN1dGUgdGltZW91dCBhZnRlciAke3RpbWVvdXR9bXMuYCB9IH0gfSwgbnVsbF0pO1xyXG4gICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0ICRmZXRjaCh1cmwsIHsgbWV0aG9kOiBcIkhFQURcIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRzVGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbeyBjb25uZWN0OiBmYWxzZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgZXJyb3I6IHsgUkVRVUVTVF9GQUlMOiB7IHJlc3BvbnNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgbWVzc2FnZTogXCJTdGF0dXMgY29kZSBub3QgMjA0XCIgfSB9IH0sIG51bGxdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW251bGwsIHsgY29ubmVjdDogdHJ1ZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgc2VydmVyVGltZXN0YW1wOiBOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikhLnN1YnN0cmluZygxNykpIH1dKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRzVGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt7IGNvbm5lY3Q6IGZhbHNlLCBkZWxheTogZW5kc1RpbWUgLSBzdGFydHNUaW1lLCBlcnJvciB9LCBudWxsXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAkdHlwZXM6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIHtcclxuICAgICAgICAgICAgZ2VuZXJhdGVkOiBHZW5lcmF0ZWQsXHJcbiAgICAgICAgICAgIGVycm9yOiBHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdO1xyXG4gICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgIFtQYXRoIGluIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdXTogR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInBhcmFtc1wiXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZXN1bHRzOiB7XHJcbiAgICAgICAgICAgICAgICBbUGF0aCBpbiBrZXlvZiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXV06IEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgPyAvLyBhY3Rpb25cclxuICAgICAgICAgICAgICAgIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl1cclxuICAgICAgICAgICAgICAgIDogLy8gc3RyZWFtXHJcbiAgICAgICAgICAgICAgICBBc3luY0dlbmVyYXRvcjxbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbF0gfCBbbnVsbCwgR2VuZXJhdG9yR2VuZXJpYzxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPl0sIHVuZGVmaW5lZD5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gc3RhcmdhdGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJldml2ZUpTT05QYXJzZTxUPihqc29uOiBUKTogVCB7XHJcbiAgICBjb25zdCBpc29EYXRlUGF0dGVybiA9IC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsM30pPykoWnxbKy1dXFxkezJ9Oj9cXGR7Mn0pPyQvO1xyXG5cclxuICAgIGlmIChqc29uIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGpzb247XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShqc29uKSkge1xyXG4gICAgICAgIHJldHVybiBqc29uLm1hcCgoaXRlbSkgPT4gcmV2aXZlSlNPTlBhcnNlKGl0ZW0pKSBhcyBhbnk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGpzb24gPT09IFwib2JqZWN0XCIgJiYganNvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhqc29uKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgIGFjY1trZXkgYXMga2V5b2YgVF0gPSByZXZpdmVKU09OUGFyc2UodmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgIH0sIHt9IGFzIFQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBqc29uID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBqc29uLm1hdGNoKGlzb0RhdGVQYXR0ZXJuKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGVTdHJpbmcgPSBtYXRjaFsyXSA/IGAke21hdGNoWzFdfSR7bWF0Y2hbMl0ucmVwbGFjZShcIjpcIiwgXCJcIil9YCA6IGAke21hdGNoWzFdfVpgO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUobm9ybWFsaXplZERhdGVTdHJpbmcpIGFzIGFueTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ganNvbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlU3RyZWFtT3B0aW9ucyB7XHJcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICAgIHRpbWVvdXQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBpU2NoZW1hRXh0ZW5kIHtcclxuICAgIGFwaVZhbGlkYXRvcjoge1xyXG4gICAgICAgIGdlbmVyYXRlZEF0OiBudW1iZXI7XHJcbiAgICAgICAgdmFsaWRhdGU6IFJlY29yZDxhbnksIGFueT47XHJcbiAgICB9O1xyXG4gICAgYXBpTWV0aG9kc1NjaGVtYTogUmVjb3JkPGFueSwgYW55PjtcclxuICAgIGFwaU1ldGhvZHNUeXBlU2NoZW1hOiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgYXBpVGVzdHNTY2hlbWE6IFJlY29yZDxhbnksIGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEZhaWxDb2RlRXh0ZW5kID0gUmVjb3JkPGFueSwgKC4uLmFyZ3M6IEFycmF5PGFueT4pID0+IGFueT47XHJcblxyXG5leHBvcnQgdHlwZSBCb290c3RyYXBNaWRkbGV3YXJlID0gKGRhdGE6IHsgc3RvcmFnZTogQ2xpZW50U3RvcmFnZSB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcclxuZXhwb3J0IHR5cGUgQmVmb3JlRXhlY3V0ZU1pZGRsZXdhcmUgPSAoZGF0YTogeyBwYXRoOiBzdHJpbmc7IHBhcmFtczogYW55OyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyBzdG9yYWdlOiBDbGllbnRTdG9yYWdlIH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG5leHBvcnQgdHlwZSBBZnRlckV4ZWN1dGVNaWRkbGV3YXJlID0gKGRhdGE6IHsgcGF0aDogc3RyaW5nOyByZXN1bHQ6IHsgdmFsdWU6IGFueSB9OyBzdG9yYWdlOiBDbGllbnRTdG9yYWdlIH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNaWRkbGV3YXJlT3B0aW9ucyB7XHJcbiAgICBib290c3RyYXA/OiBCb290c3RyYXBNaWRkbGV3YXJlO1xyXG4gICAgYmVmb3JlRXhlY3V0ZT86IEJlZm9yZUV4ZWN1dGVNaWRkbGV3YXJlO1xyXG4gICAgYWZ0ZXJFeGVjdXRlPzogQWZ0ZXJFeGVjdXRlTWlkZGxld2FyZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGllbnRTdG9yYWdlIHtcclxuICAgIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcclxuICAgIHNldEl0ZW06IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcclxuICAgIHJlbW92ZUl0ZW06IChrZXk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlUmVzdWx0U3VjY2VzczxSZXN1bHQ+IHtcclxuICAgIGV4ZWN1dGVJZDogc3RyaW5nO1xyXG4gICAgc3VjY2VzczogdHJ1ZTtcclxuICAgIGRhdGE6IFJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgR2VuZXJhdG9yR2VuZXJpYzxUPiA9IFQgZXh0ZW5kcyBBc3luY0dlbmVyYXRvcjxpbmZlciBJPiA/IEkgOiBuZXZlcjtcclxuXHJcbmV4cG9ydCB0eXBlIEZsYXR0ZW5LZXlzPFQsIFByZWZpeCBleHRlbmRzIHN0cmluZyA9IFwiXCI+ID0ge1xyXG4gICAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBvYmplY3QgPyBGbGF0dGVuS2V5czxUW0tdLCBgJHtQcmVmaXh9JHtFeGNsdWRlPEssIHN5bWJvbD59LmA+IDogYCRpbnB1dC4ke1ByZWZpeH0ke0V4Y2x1ZGU8Sywgc3ltYm9sPn1gO1xyXG59W2tleW9mIFRdO1xyXG5cclxuLy8gKioqIFRoaXMgcGFydCBvZiB0aGUgY29kZSBpcyBiYXNlZCBvbiBgQG1pY3Jvc29mdC9mZXRjaC1ldmVudC1zb3VyY2VgIHJld3JpdGUsIHRoYW5rcyB0byB0aGUgd29yayBvZiBNaWNyb3NvZnQgKioqIC8vXHJcbi8vICoqKiBodHRwczovL2dpdGh1Yi5jb20vQXp1cmUvZmV0Y2gtZXZlbnQtc291cmNlL2Jsb2IvbWFpbi9zcmMvcGFyc2UudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiAvL1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBtZXNzYWdlIHNlbnQgaW4gYW4gZXZlbnQgc3RyZWFtXHJcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2ZXItc2VudF9ldmVudHMvVXNpbmdfc2VydmVyLXNlbnRfZXZlbnRzI0V2ZW50X3N0cmVhbV9mb3JtYXRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRTb3VyY2VNZXNzYWdlIHtcclxuICAgIGRhdGE6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgUmVhZGFibGVTdHJlYW0gaW50byBhIGNhbGxiYWNrIHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBzdHJlYW0gVGhlIGlucHV0IFJlYWRhYmxlU3RyZWFtLlxyXG4gKiBAcGFyYW0gb25DaHVuayBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBuZXcgYnl0ZSBjaHVuayBpbiB0aGUgc3RyZWFtLlxyXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBzdHJlYW0gY2xvc2VzLlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ5dGVzKHN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4sIG9uQ2h1bms6IChhcnI6IFVpbnQ4QXJyYXkpID0+IHZvaWQpIHtcclxuICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcclxuICAgIGxldCByZXN1bHQ6IFJlYWRhYmxlU3RyZWFtUmVhZFJlc3VsdDxVaW50OEFycmF5PjtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHdoaWxlICghKHJlc3VsdCA9IGF3YWl0IHJlYWRlci5yZWFkKCkpLmRvbmUpIHtcclxuICAgICAgICBvbkNodW5rKHJlc3VsdC52YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZXMgYXJiaXRhcnkgYnl0ZSBjaHVua3MgaW50byBFdmVudFNvdXJjZSBsaW5lIGJ1ZmZlcnMuXHJcbiAqIEVhY2ggbGluZSBzaG91bGQgYmUgb2YgdGhlIGZvcm1hdCBcImZpZWxkOiB2YWx1ZVwiIGFuZCBlbmRzIHdpdGggXFxyLCBcXG4sIG9yIFxcclxcbi5cclxuICogQHBhcmFtIG9uTGluZSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBuZXcgRXZlbnRTb3VyY2UgbGluZS5cclxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgZm9yIGVhY2ggaW5jb21pbmcgYnl0ZSBjaHVuay5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5lcyhvbkxpbmU6IChsaW5lOiBVaW50OEFycmF5LCBmaWVsZExlbmd0aDogbnVtYmVyKSA9PiB2b2lkKSB7XHJcbiAgICBsZXQgYnVmZmVyOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkO1xyXG4gICAgbGV0IHBvc2l0aW9uOiBudW1iZXI7IC8vIGN1cnJlbnQgcmVhZCBwb3NpdGlvblxyXG4gICAgbGV0IGZpZWxkTGVuZ3RoOiBudW1iZXI7IC8vIGxlbmd0aCBvZiB0aGUgYGZpZWxkYCBwb3J0aW9uIG9mIHRoZSBsaW5lXHJcbiAgICBsZXQgZGlzY2FyZFRyYWlsaW5nTmV3bGluZSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgY2FuIHByb2Nlc3MgZWFjaCBpbmNvbWluZyBieXRlIGNodW5rOlxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9uQ2h1bmsoYXJyOiBVaW50OEFycmF5KSB7XHJcbiAgICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGFycjtcclxuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xyXG4gICAgICAgICAgICBmaWVsZExlbmd0aCA9IC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHdlJ3JlIHN0aWxsIHBhcnNpbmcgdGhlIG9sZCBsaW5lLiBBcHBlbmQgdGhlIG5ldyBieXRlcyBpbnRvIGJ1ZmZlcjpcclxuICAgICAgICAgICAgYnVmZmVyID0gY29uY2F0KGJ1ZmZlciwgYXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJ1Zkxlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGxpbmVTdGFydCA9IDA7IC8vIGluZGV4IHdoZXJlIHRoZSBjdXJyZW50IGxpbmUgc3RhcnRzXHJcbiAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYnVmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChkaXNjYXJkVHJhaWxpbmdOZXdsaW5lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyW3Bvc2l0aW9uXSA9PT0gMTApIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSArK3Bvc2l0aW9uOyAvLyBza2lwIHRvIG5leHQgY2hhclxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGRpc2NhcmRUcmFpbGluZ05ld2xpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc3RhcnQgbG9va2luZyBmb3J3YXJkIHRpbGwgdGhlIGVuZCBvZiBsaW5lOlxyXG4gICAgICAgICAgICBsZXQgbGluZUVuZCA9IC0xOyAvLyBpbmRleCBvZiB0aGUgXFxyIG9yIFxcbiBjaGFyXHJcbiAgICAgICAgICAgIGZvciAoOyBwb3NpdGlvbiA8IGJ1Zkxlbmd0aCAmJiBsaW5lRW5kID09PSAtMTsgKytwb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChidWZmZXJbcG9zaXRpb25dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1ODpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkTGVuZ3RoID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgY29sb24gaW4gbGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRMZW5ndGggPSBwb3NpdGlvbiAtIGxpbmVTdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6IDxleHBsYW5hdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNjYXJkVHJhaWxpbmdOZXdsaW5lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lRW5kID0gcG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZUVuZCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGJ1dCB0aGUgbGluZSBoYXNuJ3QgZW5kZWQuXHJcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCBhcnIgYW5kIHRoZW4gY29udGludWUgcGFyc2luZzpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB3ZSd2ZSByZWFjaGVkIHRoZSBsaW5lIGVuZCwgc2VuZCBpdCBvdXQ6XHJcbiAgICAgICAgICAgIG9uTGluZShidWZmZXIuc3ViYXJyYXkobGluZVN0YXJ0LCBsaW5lRW5kKSwgZmllbGRMZW5ndGgpO1xyXG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBwb3NpdGlvbjsgLy8gd2UncmUgbm93IG9uIHRoZSBuZXh0IGxpbmVcclxuICAgICAgICAgICAgZmllbGRMZW5ndGggPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsaW5lU3RhcnQgPT09IGJ1Zkxlbmd0aCkge1xyXG4gICAgICAgICAgICBidWZmZXIgPSB1bmRlZmluZWQ7IC8vIHdlJ3ZlIGZpbmlzaGVkIHJlYWRpbmcgaXRcclxuICAgICAgICB9IGVsc2UgaWYgKGxpbmVTdGFydCAhPT0gMCkge1xyXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgdmlldyBpbnRvIGJ1ZmZlciBiZWdpbm5pbmcgYXQgbGluZVN0YXJ0IHNvIHdlIGRvbid0XHJcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY29weSBvdmVyIHRoZSBwcmV2aW91cyBsaW5lcyB3aGVuIHdlIGdldCB0aGUgbmV3IGFycjpcclxuICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KGxpbmVTdGFydCk7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uIC09IGxpbmVTdGFydDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2VzIGxpbmUgYnVmZmVycyBpbnRvIEV2ZW50U291cmNlTWVzc2FnZXMuXHJcbiAqIEBwYXJhbSBvbklkIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGBpZGAgZmllbGQuXHJcbiAqIEBwYXJhbSBvblJldHJ5IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGByZXRyeWAgZmllbGQuXHJcbiAqIEBwYXJhbSBvbk1lc3NhZ2UgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggbWVzc2FnZS5cclxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgZm9yIGVhY2ggaW5jb21pbmcgbGluZSBidWZmZXIuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVzc2FnZXMob25NZXNzYWdlPzogKG1zZzogRXZlbnRTb3VyY2VNZXNzYWdlKSA9PiB2b2lkKSB7XHJcbiAgICBsZXQgbWVzc2FnZSA9IG5ld01lc3NhZ2UoKTtcclxuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuXHJcbiAgICAvLyByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGNhbiBwcm9jZXNzIGVhY2ggaW5jb21pbmcgbGluZSBidWZmZXI6XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb25MaW5lKGxpbmU6IFVpbnQ4QXJyYXksIGZpZWxkTGVuZ3RoOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgLy8gZW1wdHkgbGluZSBkZW5vdGVzIGVuZCBvZiBtZXNzYWdlLiBUcmlnZ2VyIHRoZSBjYWxsYmFjayBhbmQgc3RhcnQgYSBuZXcgbWVzc2FnZTpcclxuICAgICAgICAgICAgb25NZXNzYWdlPy4obWVzc2FnZSk7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBuZXdNZXNzYWdlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gZXhjbHVkZSBjb21tZW50cyBhbmQgbGluZXMgd2l0aCBubyB2YWx1ZXNcclxuICAgICAgICAgICAgLy8gbGluZSBpcyBvZiBmb3JtYXQgXCI8ZmllbGQ+Ojx2YWx1ZT5cIiBvciBcIjxmaWVsZD46IDx2YWx1ZT5cIlxyXG4gICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCNldmVudC1zdHJlYW0taW50ZXJwcmV0YXRpb25cclxuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBkZWNvZGVyLmRlY29kZShsaW5lLnN1YmFycmF5KDAsIGZpZWxkTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlT2Zmc2V0ID0gZmllbGRMZW5ndGggKyAobGluZVtmaWVsZExlbmd0aCArIDFdID09PSAzMiA/IDIgOiAxKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkZWNvZGVyLmRlY29kZShsaW5lLnN1YmFycmF5KHZhbHVlT2Zmc2V0KSk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGF0YVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgbWVzc2FnZSBhbHJlYWR5IGhhcyBkYXRhLCBhcHBlbmQgdGhlIG5ldyB2YWx1ZSB0byB0aGUgb2xkLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwganVzdCBzZXQgdG8gdGhlIG5ldyB2YWx1ZTpcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEgPSBtZXNzYWdlLmRhdGEgPyBgJHttZXNzYWdlLmRhdGF9XFxuJHt2YWx1ZX1gIDogdmFsdWU7IC8vIG90aGVyd2lzZSxcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbmNhdChhOiBVaW50OEFycmF5LCBiOiBVaW50OEFycmF5KSB7XHJcbiAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShhLmxlbmd0aCArIGIubGVuZ3RoKTtcclxuICAgIHJlcy5zZXQoYSk7XHJcbiAgICByZXMuc2V0KGIsIGEubGVuZ3RoKTtcclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5ld01lc3NhZ2UoKTogRXZlbnRTb3VyY2VNZXNzYWdlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGF0YTogXCJcIixcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVzb2x2ZXJzPFQgPSBhbnk+KCk6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+IHtcclxuICAgIGxldCByZXNvbHZlOiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltcInJlc29sdmVcIl07XHJcbiAgICBsZXQgcmVqZWN0OiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltcInJlamVjdFwiXTtcclxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxUPigocmVzLCByZWopID0+IHtcclxuICAgICAgICByZXNvbHZlID0gcmVzO1xyXG4gICAgICAgIHJlamVjdCA9IHJlajtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzb2x2ZSEsIHJlamVjdDogcmVqZWN0ISB9O1xyXG59XHJcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFtQ0EsZUFBc0IsY0FBdUUsQ0FBQyxpQkFBd0M7QUFBQSxFQUNsSSxNQUFNLFNBQVMsZ0JBQWdCLFNBQVM7QUFBQSxFQUN4QyxNQUFNLFNBQVMsZ0JBQWdCLFNBQVM7QUFBQSxFQWF4QyxNQUFNLGNBQW1CLE9BQU8sT0FBWSxLQUFhLFlBQXdEO0FBQUEsSUFDN0csSUFBSSxPQUFPLE9BQU87QUFBQSxNQUNkLE1BQU0sVUFBVSxNQUFNLFFBQVEsTUFBTSxJQUFJO0FBQUEs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
|
|
493
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiZXhwb3J0IHR5cGUgTWlsa2lvU3RhcmdhdGVPcHRpb25zID0ge1xuICAgIGJhc2VVcmw6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XG4gICAgdGltZW91dD86IG51bWJlcjtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBhYm9ydD86IHR5cGVvZiBBYm9ydENvbnRyb2xsZXI7XG59O1xuXG5leHBvcnQgdHlwZSBNaXhpbjxULCBVPiA9IFUgJiBPbWl0PFQsIGtleW9mIFU+O1xuXG5leHBvcnQgdHlwZSBFeGVjdXRlT3B0aW9ucyA9IHtcbiAgICBwYXJhbXM/OiBSZWNvcmQ8YW55LCBhbnk+O1xuICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgYmFzZVVybD86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XG59O1xuXG5leHBvcnQgdHlwZSBFeGVjdXRlUmVzdWx0c09wdGlvbiA9IHsgZXhlY3V0ZUlkOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgUGluZyA9XG4gICAgfCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbm5lY3Q6IGZhbHNlO1xuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcbiAgICAgICAgICAgIGVycm9yOiBhbnk7XG4gICAgICAgIH0sXG4gICAgICAgIG51bGwsXG4gICAgXVxuICAgIHwgW1xuICAgICAgICBudWxsLFxuICAgICAgICB7XG4gICAgICAgICAgICBjb25uZWN0OiB0cnVlO1xuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcbiAgICAgICAgICAgIHNlcnZlclRpbWVzdGFtcDogbnVtYmVyO1xuICAgICAgICB9LFxuICAgIF07XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3RhcmdhdGU8R2VuZXJhdGVkIGV4dGVuZHMgeyByb3V0ZVNjaGVtYTogYW55OyByZWplY3RDb2RlOiBhbnkgfT4oc3RhcmdhdGVPcHRpb25zOiBNaWxraW9TdGFyZ2F0ZU9wdGlvbnMpIHtcbiAgICBjb25zdCAkZmV0Y2ggPSBzdGFyZ2F0ZU9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG4gICAgY29uc3QgJGFib3J0ID0gc3RhcmdhdGVPcHRpb25zLmFib3J0ID8/IEFib3J0Q29udHJvbGxlcjtcblxuICAgIHR5cGUgU3RhcmdhdGVFdmVudHMgPSB7XG4gICAgICAgIFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIjogeyBwYXRoOiBzdHJpbmc7IG9wdGlvbnM6IE1peGluPEV4ZWN1dGVPcHRpb25zLCB7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IGJhc2VVcmw6IHN0cmluZyB9PiB9O1xuICAgICAgICBcIm1pbGtpbzpmZXRjaEJlZm9yZVwiOiB7IHBhdGg6IHN0cmluZzsgb3B0aW9uczogTWl4aW48RXhlY3V0ZU9wdGlvbnMsIHsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgYmFzZVVybDogc3RyaW5nIH0+OyBib2R5OiBzdHJpbmcgfTtcbiAgICAgICAgXCJtaWxraW86ZXhlY3V0ZUVycm9yXCI6IHtcbiAgICAgICAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgICAgICAgIG9wdGlvbnM6IE1peGluPEV4ZWN1dGVPcHRpb25zLCB7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IGJhc2VVcmw6IHN0cmluZyB9PjtcbiAgICAgICAgICAgIGVycm9yOiBQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+O1xuICAgICAgICAgICAgaGFuZGxlRXJyb3I6IDxLIGV4dGVuZHMga2V5b2YgUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPj4oZXJyb3I6IGFueSwga2V5OiBLLCBoYW5kbGVyOiAoZXJyb3I6IFBhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXVtLXT4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+KSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVFcnJvcjogYW55ID0gYXN5bmMgKGVycm9yOiBhbnksIGtleTogc3RyaW5nLCBoYW5kbGVyOiAoZXJyb3I6IGFueSkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4pID0+IHtcbiAgICAgICAgaWYgKGtleSBpbiBlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlZCA9IGF3YWl0IGhhbmRsZXIoZXJyb3Jba2V5XSk7XG4gICAgICAgICAgICBpZiAoaGFuZGxlZCkgZGVsZXRlIGVycm9yW2tleV07XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgX19pbml0RXZlbnRNYW5hZ2VyID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IG5ldyBNYXA8KGV2ZW50OiBhbnkpID0+IHZvaWQsIHN0cmluZz4oKTtcbiAgICAgICAgY29uc3QgaW5kZXhlZCA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8KGV2ZW50OiBhbnkpID0+IHZvaWQ+PigpO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50TWFuYWdlciA9IHtcbiAgICAgICAgICAgIG9uOiA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6IFN0YXJnYXRlRXZlbnRzW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuc2V0KGhhbmRsZXIsIGtleSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleGVkLmhhcyhrZXkgYXMgc3RyaW5nKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhlZC5zZXQoa2V5IGFzIHN0cmluZywgbmV3IFNldCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZykhO1xuICAgICAgICAgICAgICAgIHNldC5hZGQoaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuc2V0KGhhbmRsZXIsIGtleSBhcyBzdHJpbmcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2ZmOiA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6IFN0YXJnYXRlRXZlbnRzW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgaWYgKCFzZXQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgc2V0LmRlbGV0ZShoYW5kbGVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbWl0OiBhc3luYyA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIFZhbHVlIGV4dGVuZHMgU3RhcmdhdGVFdmVudHNbS2V5XT4oa2V5OiBLZXksIHZhbHVlOiBWYWx1ZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGggPSBpbmRleGVkLmdldChrZXkgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoaCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBldmVudE1hbmFnZXI7XG4gICAgfTtcblxuICAgIGNvbnN0IGV2ZW50TWFuYWdlciA9IF9faW5pdEV2ZW50TWFuYWdlcigpO1xuXG4gICAgY29uc3QgYm9vdHN0cmFwID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgYmFzZVVybCA9IHN0YXJnYXRlT3B0aW9ucy5iYXNlVXJsO1xuICAgICAgICBpZiAodHlwZW9mIGJhc2VVcmwgPT09IFwiZnVuY3Rpb25cIikgYmFzZVVybCA9IGF3YWl0IGJhc2VVcmwoKTtcbiAgICAgICAgaWYgKGJhc2VVcmwuZW5kc1dpdGgoXCIvXCIpKSBiYXNlVXJsID0gYmFzZVVybC5zbGljZSgwLCAtMSk7XG5cbiAgICAgICAgcmV0dXJuIGJhc2VVcmw7XG4gICAgfTtcblxuICAgIGNvbnN0IGJhc2VVcmw6IFByb21pc2U8c3RyaW5nPiA9IGJvb3RzdHJhcCgpO1xuXG4gICAgY29uc3Qgc3RhcmdhdGUgPSB7XG4gICAgICAgIC4uLmV2ZW50TWFuYWdlcixcbiAgICAgICAgb3B0aW9uczogc3RhcmdhdGVPcHRpb25zLFxuICAgICAgICBhc3luYyBleGVjdXRlPFBhdGggZXh0ZW5kcyBrZXlvZiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXT4oXG4gICAgICAgICAgICBwYXRoOiBQYXRoLFxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48XG4gICAgICAgICAgICAgICAgRXhlY3V0ZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXM/OiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID4sXG4gICAgICAgICk6IFByb21pc2U8XG4gICAgICAgICAgICBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wi8J+lm1wiXSBleHRlbmRzIGJvb2xlYW5cbiAgICAgICAgICAgID8gLy8gYWN0aW9uXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0sIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXVxuICAgICAgICAgICAgOiAvLyBzdHJlYW1cbiAgICAgICAgICAgIFtQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+LCBudWxsLCBFeGVjdXRlUmVzdWx0c09wdGlvbl0gfCBbbnVsbCwgQXN5bmNHZW5lcmF0b3I8W1BhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXT4sIG51bGxdIHwgW251bGwsIEdlbmVyYXRvckdlbmVyaWM8R2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInJlc3VsdFwiXT5dLCB1bmRlZmluZWQ+LCBFeGVjdXRlUmVzdWx0c09wdGlvbl1cbiAgICAgICAgPiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVycyA9IHt9O1xuXG4gICAgICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICAgICAgICAgICAgbGV0IGJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlVXJsID09PSBcImZ1bmN0aW9uXCIpIGJhc2VVcmwgPSBhd2FpdCBiYXNlVXJsKCk7XG4gICAgICAgICAgICAgICAgaWYgKGJhc2VVcmwuZW5kc1dpdGgoXCIvXCIpKSBiYXNlVXJsID0gYmFzZVVybC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICAgICAgdXJsID0gYmFzZVVybCArIChwYXRoIGFzIHN0cmluZyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVybCA9IChhd2FpdCBiYXNlVXJsKSArIChwYXRoIGFzIHN0cmluZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKHBhdGggYXMgc3RyaW5nKS5lbmRzV2l0aChcIn5cIikpIHtcbiAgICAgICAgICAgICAgICAvLyBhY3Rpb25cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzLkFjY2VwdCA9PT0gdW5kZWZpbmVkKSBvcHRpb25zLmhlYWRlcnMuQWNjZXB0ID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9PT0gdW5kZWZpbmVkKSBvcHRpb25zLmhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0OiB7IHZhbHVlOiBSZWNvcmQ8YW55LCBhbnk+IH07XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpleGVjdXRlQmVmb3JlXCIsIHsgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55IH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBhcmFtcykgPz8gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZmV0Y2hCZWZvcmVcIiwgeyBwYXRoOiBwYXRoIGFzIHN0cmluZywgb3B0aW9uczogb3B0aW9ucyBhcyBhbnksIGJvZHkgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXcgUHJvbWlzZTxzdHJpbmc+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zPy50aW1lb3V0ID8/IG9wdGlvbnM/LnRpbWVvdXQgPz8gNjAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFt7IFJFUVVFU1RfVElNRU9VVDogeyB0aW1lb3V0LCBtZXNzYWdlOiBgRXhlY3V0ZSB0aW1lb3V0IGFmdGVyICR7dGltZW91dH1tcy5gIH0gfSwgbnVsbF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCAoYXdhaXQgJGZldGNoKHVybCwgeyBtZXRob2Q6IFwiUE9TVFwiLCBib2R5LCBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMgfSkpLnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geyB2YWx1ZTogcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzcG9uc2UpKSB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yPy5bMF0/LlJFUVVFU1RfVElNRU9VVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUVycm9yXCIsIHsgaGFuZGxlRXJyb3IsIHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JQaW5lZCA9IHsgUkVRVUVTVF9GQUlMOiBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpleGVjdXRlRXJyb3JcIiwgeyBoYW5kbGVFcnJvciwgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBlcnJvcjogZXJyb3JQaW5lZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtlcnJvclBpbmVkLCBudWxsLCB7IGV4ZWN1dGVJZDogXCJ1bmtub3duXCIgfV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUuc3VjY2VzcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvcjogYW55ID0ge307XG4gICAgICAgICAgICAgICAgICAgIGVycm9yW3Jlc3VsdC52YWx1ZS5jb2RlXSA9IHJlc3VsdC52YWx1ZS5yZWplY3QgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUVycm9yXCIsIHsgaGFuZGxlRXJyb3IsIHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZXJyb3IsIG51bGwsIHsgZXhlY3V0ZUlkOiByZXN1bHQudmFsdWUuZXhlY3V0ZUlkIH1dO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbbnVsbCwgcmVzdWx0LnZhbHVlLmRhdGEsIHsgZXhlY3V0ZUlkOiByZXN1bHQudmFsdWUuZXhlY3V0ZUlkIH1dIGFzIGFueTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3RyZWFtXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycy5BY2NlcHQgPT09IHVuZGVmaW5lZCkgb3B0aW9ucy5oZWFkZXJzLkFjY2VwdCA9IFwidGV4dC9ldmVudC1zdHJlYW1cIjtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhY2tzOiBNYXA8XG4gICAgICAgICAgICAgICAgICAgIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8YW55Pj47XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiAodmFsdWU6IEl0ZXJhdG9yUmVzdWx0PGFueT4pID0+IHZvaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Q6IChyZWFzb246IGFueSkgPT4gdm9pZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID4gPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgbGV0IHN0YWNrc0luZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgaXRlcmF0b3JJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHN0cmVhbVJlc3VsdDogYW55O1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbVJlc3VsdEZldGNoZWQgPSB3aXRoUmVzb2x2ZXJzPHVuZGVmaW5lZD4oKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzdGFyZ2F0ZU9wdGlvbnM/LnRpbWVvdXQgPz8gb3B0aW9ucz8udGltZW91dCA/PyA2MDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFt7IFJFUVVFU1RfVElNRU9VVDogeyB0aW1lb3V0LCBtZXNzYWdlOiBgRXhlY3V0ZSB0aW1lb3V0IGFmdGVyICR7dGltZW91dH1tcy5gIH0gfSwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcbiAgICAgICAgICAgICAgICB9LCB0aW1lb3V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubWVzc2FnZSA9IChldmVudDogRXZlbnRTb3VyY2VNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdCA9IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEuc2xpY2UoMSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1SZXN1bHRGZXRjaGVkLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1SZXN1bHRGZXRjaGVkLnJlamVjdChbeyBSRVFVRVNUX0ZBSUw6IGVycm9yIH0sIG51bGwsIHsgZXhlY3V0ZUlkOiBcInVua25vd25cIiB9XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytzdGFja3NJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja3MuaGFzKGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gc3RhY2tzLmdldChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2shLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrIS5yZXNvbHZlKHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShldmVudC5kYXRhKSkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gd2l0aFJlc29sdmVyczxJdGVyYXRvclJlc3VsdDxhbnk+PigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBsZXQgY3VyUmVxdWVzdENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcblxuICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyUmVxdWVzdENvbnRyb2xsZXIgPSBuZXcgJGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIGN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUJlZm9yZVwiLCB7IHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMhLnBhcmFtcykgPz8gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmZldGNoQmVmb3JlXCIsIHsgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBib2R5IH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0ICRmZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnMhLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50VHlwZT8uc3RhcnRzV2l0aChcInRleHQvZXZlbnQtc3RyZWFtXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBjb250ZW50LXR5cGUgdG8gYmUgJHtcInRleHQvZXZlbnQtc3RyZWFtXCJ9LCBBY3R1YWw6ICR7Y29udGVudFR5cGV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdldEJ5dGVzKHJlc3BvbnNlLmJvZHkhLCBnZXRMaW5lcyhnZXRNZXNzYWdlcyhvbm1lc3NhZ2UpKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHsgUkVRVUVTVF9GQUlMOiBlcnIgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmV4ZWN1dGVFcnJvclwiLCB7IGhhbmRsZUVycm9yLCBwYXRoOiBwYXRoIGFzIHN0cmluZywgb3B0aW9uczogb3B0aW9ucyBhcyBhbnksIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaXRlcmF0b3IudGhyb3coZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFtlcnJvciwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZvaWQgY3JlYXRlKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx1bmtub3duPj4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytpdGVyYXRvckluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja3MuaGFzKGluZGV4IC0gMikpIHN0YWNrcy5kZWxldGUoaW5kZXggLSAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrcy5oYXMoaW5kZXgpICYmICFjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tzLnNldChpbmRleCwgeyAuLi5zdGFjaywgZG9uZTogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFjay5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrcy5oYXMoaW5kZXgpICYmIGN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gd2l0aFJlc29sdmVyczxJdGVyYXRvclJlc3VsdDxhbnk+PigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja3MuZ2V0KGluZGV4KSEucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3luYyByZXR1cm4oKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx2b2lkPj4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIHRocm93KGVycjogYW55KTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx2b2lkPj4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZDogc3RyZWFtUmVzdWx0Py5leGVjdXRlSWQgPz8gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJORVRXT1JLX0VSUk9SXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIk5ldHdvcmsgRXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21DbGllbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBlcnIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfaW5kZXgsIHN0YWNrXSBvZiBzdGFja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmRvbmUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXG4gICAgICAgICAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc3RyZWFtUmVzdWx0RmV0Y2hlZC5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW251bGwsIGl0ZXJhdG9yLCB7IGV4ZWN1dGVJZDogc3RyZWFtUmVzdWx0LmV4ZWN1dGVJZCB9XSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yIGFzIGFueTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIF9fY29va2Jvb2s6IHtcbiAgICAgICAgICAgIHN1YnNjcmliZTogYXN5bmMgKGJhc2VVcmw6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcykgPz8gXCJcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFja3M6IE1hcDxcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxhbnk+PjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6ICh2YWx1ZTogSXRlcmF0b3JSZXN1bHQ8YW55PikgPT4gdm9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdDogKHJlYXNvbjogYW55KSA9PiB2b2lkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPiA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICBsZXQgc3RhY2tzSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGxldCBpdGVyYXRvckluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubWVzc2FnZSA9IChldmVudDogRXZlbnRTb3VyY2VNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytzdGFja3NJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcy5oYXMoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHN0YWNrcy5nZXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2shLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gd2l0aFJlc29sdmVyczxJdGVyYXRvclJlc3VsdDxhbnk+PigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tzLnNldChpbmRleCwgeyAuLi5zdGFjaywgZG9uZTogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbGV0IGN1clJlcXVlc3RDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXI7XG5cbiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1clJlcXVlc3RDb250cm9sbGVyID0gbmV3ICRhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgJGZldGNoKGAke2Jhc2VVcmx9LyRzdWJzY3JpYmVgLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGVudFR5cGU/LnN0YXJ0c1dpdGgoXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgY29udGVudC10eXBlIHRvIGJlICR7XCJ0ZXh0L2V2ZW50LXN0cmVhbVwifSwgQWN0dWFsOiAke2NvbnRlbnRUeXBlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBnZXRCeXRlcyhyZXNwb25zZS5ib2R5ISwgZ2V0TGluZXMoZ2V0TWVzc2FnZXMob25tZXNzYWdlKSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaXRlcmF0b3IudGhyb3coZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZvaWQgY3JlYXRlKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx1bmtub3duPj4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytpdGVyYXRvckluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja3MuaGFzKGluZGV4IC0gMikpIHN0YWNrcy5kZWxldGUoaW5kZXggLSAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrcy5oYXMoaW5kZXgpICYmICFjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tzLnNldChpbmRleCwgeyAuLi5zdGFjaywgZG9uZTogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFjay5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrcy5oYXMoaW5kZXgpICYmIGN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gd2l0aFJlc29sdmVyczxJdGVyYXRvclJlc3VsdDxhbnk+PigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja3MuZ2V0KGluZGV4KSEucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3luYyByZXR1cm4oKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx2b2lkPj4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIHRocm93KGVycjogYW55KTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx2b2lkPj4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXG4gICAgICAgICAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciBhcyBhbnk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgcGluZyhvcHRpb25zPzogeyB0aW1lb3V0PzogbnVtYmVyIH0pOiBQcm9taXNlPFBpbmc+IHtcbiAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8UGluZz4oYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBgJHthd2FpdCBiYXNlVXJsfS9nZW5lcmF0ZV8yMDRgO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzdGFyZ2F0ZU9wdGlvbnM/LnRpbWVvdXQgPz8gb3B0aW9ucz8udGltZW91dCA/PyA2MDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0c1RpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZHNUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbeyBjb25uZWN0OiBmYWxzZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgZXJyb3I6IHsgUkVRVUVTVF9USU1FT1VUOiB7IHRpbWVvdXQsIG1lc3NhZ2U6IGBFeGVjdXRlIHRpbWVvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zLmAgfSB9IH0sIG51bGxdKTtcbiAgICAgICAgICAgICAgICB9LCB0aW1lb3V0KTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgJGZldGNoKHVybCwgeyBtZXRob2Q6IFwiSEVBRFwiIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRzVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbeyBjb25uZWN0OiBmYWxzZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgZXJyb3I6IHsgUkVRVUVTVF9GQUlMOiB7IHJlc3BvbnNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgbWVzc2FnZTogXCJTdGF0dXMgY29kZSBub3QgMjA0XCIgfSB9IH0sIG51bGxdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW251bGwsIHsgY29ubmVjdDogdHJ1ZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgc2VydmVyVGltZXN0YW1wOiBOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikhLnN1YnN0cmluZygxNykpIH1dKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZHNUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt7IGNvbm5lY3Q6IGZhbHNlLCBkZWxheTogZW5kc1RpbWUgLSBzdGFydHNUaW1lLCBlcnJvciB9LCBudWxsXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgJHR5cGVzOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IEdlbmVyYXRlZCxcbiAgICAgICAgICAgIGVycm9yOiBHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdO1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgW1BhdGggaW4ga2V5b2YgR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1dOiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0czoge1xuICAgICAgICAgICAgICAgIFtQYXRoIGluIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdXTogR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcIvCfpZtcIl0gZXh0ZW5kcyBib29sZWFuXG4gICAgICAgICAgICAgICAgPyAvLyBhY3Rpb25cbiAgICAgICAgICAgICAgICBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdXG4gICAgICAgICAgICAgICAgOiAvLyBzdHJlYW1cbiAgICAgICAgICAgICAgICBBc3luY0dlbmVyYXRvcjxbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbF0gfCBbbnVsbCwgR2VuZXJhdG9yR2VuZXJpYzxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPl0sIHVuZGVmaW5lZD5cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBzdGFyZ2F0ZTtcbn1cblxuZnVuY3Rpb24gcmV2aXZlSlNPTlBhcnNlPFQ+KGpzb246IFQpOiBUIHtcbiAgICBjb25zdCBpc29EYXRlUGF0dGVybiA9IC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsM30pPykoWnxbKy1dXFxkezJ9Oj9cXGR7Mn0pPyQvO1xuXG4gICAgaWYgKGpzb24gaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4ganNvbjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICByZXR1cm4ganNvbi5tYXAoKGl0ZW0pID0+IHJldml2ZUpTT05QYXJzZShpdGVtKSkgYXMgYW55O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGpzb24gPT09IFwib2JqZWN0XCIgJiYganNvbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoanNvbikucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgYWNjW2tleSBhcyBrZXlvZiBUXSA9IHJldml2ZUpTT05QYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSBhcyBUKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBqc29uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0ganNvbi5tYXRjaChpc29EYXRlUGF0dGVybik7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGVTdHJpbmcgPSBtYXRjaFsyXSA/IGAke21hdGNoWzFdfSR7bWF0Y2hbMl0ucmVwbGFjZShcIjpcIiwgXCJcIil9YCA6IGAke21hdGNoWzFdfVpgO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5vcm1hbGl6ZWREYXRlU3RyaW5nKSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZVN0cmVhbU9wdGlvbnMge1xuICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpU2NoZW1hRXh0ZW5kIHtcbiAgICBhcGlWYWxpZGF0b3I6IHtcbiAgICAgICAgZ2VuZXJhdGVkQXQ6IG51bWJlcjtcbiAgICAgICAgdmFsaWRhdGU6IFJlY29yZDxhbnksIGFueT47XG4gICAgfTtcbiAgICBhcGlNZXRob2RzU2NoZW1hOiBSZWNvcmQ8YW55LCBhbnk+O1xuICAgIGFwaU1ldGhvZHNUeXBlU2NoZW1hOiBSZWNvcmQ8YW55LCBhbnk+O1xuICAgIGFwaVRlc3RzU2NoZW1hOiBSZWNvcmQ8YW55LCBhbnk+O1xufVxuXG5leHBvcnQgdHlwZSBGYWlsQ29kZUV4dGVuZCA9IFJlY29yZDxhbnksICguLi5hcmdzOiBBcnJheTxhbnk+KSA9PiBhbnk+O1xuXG5leHBvcnQgdHlwZSBCb290c3RyYXBNaWRkbGV3YXJlID0gKGRhdGE6IHsgc3RvcmFnZTogQ2xpZW50U3RvcmFnZSB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbmV4cG9ydCB0eXBlIEJlZm9yZUV4ZWN1dGVNaWRkbGV3YXJlID0gKGRhdGE6IHsgcGF0aDogc3RyaW5nOyBwYXJhbXM6IGFueTsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgc3RvcmFnZTogQ2xpZW50U3RvcmFnZSB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbmV4cG9ydCB0eXBlIEFmdGVyRXhlY3V0ZU1pZGRsZXdhcmUgPSAoZGF0YTogeyBwYXRoOiBzdHJpbmc7IHJlc3VsdDogeyB2YWx1ZTogYW55IH07IHN0b3JhZ2U6IENsaWVudFN0b3JhZ2UgfSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlkZGxld2FyZU9wdGlvbnMge1xuICAgIGJvb3RzdHJhcD86IEJvb3RzdHJhcE1pZGRsZXdhcmU7XG4gICAgYmVmb3JlRXhlY3V0ZT86IEJlZm9yZUV4ZWN1dGVNaWRkbGV3YXJlO1xuICAgIGFmdGVyRXhlY3V0ZT86IEFmdGVyRXhlY3V0ZU1pZGRsZXdhcmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50U3RvcmFnZSB7XG4gICAgZ2V0SXRlbTogKGtleTogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xuICAgIHNldEl0ZW06IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICByZW1vdmVJdGVtOiAoa2V5OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZVJlc3VsdFN1Y2Nlc3M8UmVzdWx0PiB7XG4gICAgZXhlY3V0ZUlkOiBzdHJpbmc7XG4gICAgc3VjY2VzczogdHJ1ZTtcbiAgICBkYXRhOiBSZXN1bHQ7XG59XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRvckdlbmVyaWM8VD4gPSBUIGV4dGVuZHMgQXN5bmNHZW5lcmF0b3I8aW5mZXIgST4gPyBJIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIEZsYXR0ZW5LZXlzPFQsIFByZWZpeCBleHRlbmRzIHN0cmluZyA9IFwiXCI+ID0ge1xuICAgIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgb2JqZWN0ID8gRmxhdHRlbktleXM8VFtLXSwgYCR7UHJlZml4fSR7RXhjbHVkZTxLLCBzeW1ib2w+fS5gPiA6IGAkaW5wdXQuJHtQcmVmaXh9JHtFeGNsdWRlPEssIHN5bWJvbD59YDtcbn1ba2V5b2YgVF07XG5cbi8vICoqKiBUaGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgYmFzZWQgb24gYEBtaWNyb3NvZnQvZmV0Y2gtZXZlbnQtc291cmNlYCByZXdyaXRlLCB0aGFua3MgdG8gdGhlIHdvcmsgb2YgTWljcm9zb2Z0ICoqKiAvL1xuLy8gKioqIGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZS9mZXRjaC1ldmVudC1zb3VyY2UvYmxvYi9tYWluL3NyYy9wYXJzZS50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqIC8vXG5cbi8qKlxuICogUmVwcmVzZW50cyBhIG1lc3NhZ2Ugc2VudCBpbiBhbiBldmVudCBzdHJlYW1cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2ZXItc2VudF9ldmVudHMvVXNpbmdfc2VydmVyLXNlbnRfZXZlbnRzI0V2ZW50X3N0cmVhbV9mb3JtYXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFNvdXJjZU1lc3NhZ2Uge1xuICAgIGRhdGE6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFJlYWRhYmxlU3RyZWFtIGludG8gYSBjYWxsYmFjayBwYXR0ZXJuLlxuICogQHBhcmFtIHN0cmVhbSBUaGUgaW5wdXQgUmVhZGFibGVTdHJlYW0uXG4gKiBAcGFyYW0gb25DaHVuayBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBuZXcgYnl0ZSBjaHVuayBpbiB0aGUgc3RyZWFtLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgd2hlbiB0aGUgc3RyZWFtIGNsb3Nlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ5dGVzKHN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4sIG9uQ2h1bms6IChhcnI6IFVpbnQ4QXJyYXkpID0+IHZvaWQpIHtcbiAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgbGV0IHJlc3VsdDogUmVhZGFibGVTdHJlYW1SZWFkUmVzdWx0PFVpbnQ4QXJyYXk+O1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB3aGlsZSAoIShyZXN1bHQgPSBhd2FpdCByZWFkZXIucmVhZCgpKS5kb25lKSB7XG4gICAgICAgIG9uQ2h1bmsocmVzdWx0LnZhbHVlKTtcbiAgICB9XG59XG5cbi8qKlxuICogUGFyc2VzIGFyYml0YXJ5IGJ5dGUgY2h1bmtzIGludG8gRXZlbnRTb3VyY2UgbGluZSBidWZmZXJzLlxuICogRWFjaCBsaW5lIHNob3VsZCBiZSBvZiB0aGUgZm9ybWF0IFwiZmllbGQ6IHZhbHVlXCIgYW5kIGVuZHMgd2l0aCBcXHIsIFxcbiwgb3IgXFxyXFxuLlxuICogQHBhcmFtIG9uTGluZSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBuZXcgRXZlbnRTb3VyY2UgbGluZS5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIGZvciBlYWNoIGluY29taW5nIGJ5dGUgY2h1bmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5lcyhvbkxpbmU6IChsaW5lOiBVaW50OEFycmF5LCBmaWVsZExlbmd0aDogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgbGV0IGJ1ZmZlcjogVWludDhBcnJheSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcG9zaXRpb246IG51bWJlcjsgLy8gY3VycmVudCByZWFkIHBvc2l0aW9uXG4gICAgbGV0IGZpZWxkTGVuZ3RoOiBudW1iZXI7IC8vIGxlbmd0aCBvZiB0aGUgYGZpZWxkYCBwb3J0aW9uIG9mIHRoZSBsaW5lXG4gICAgbGV0IGRpc2NhcmRUcmFpbGluZ05ld2xpbmUgPSBmYWxzZTtcblxuICAgIC8vIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgY2FuIHByb2Nlc3MgZWFjaCBpbmNvbWluZyBieXRlIGNodW5rOlxuICAgIHJldHVybiBmdW5jdGlvbiBvbkNodW5rKGFycjogVWludDhBcnJheSkge1xuICAgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9IGFycjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgIGZpZWxkTGVuZ3RoID0gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB3ZSdyZSBzdGlsbCBwYXJzaW5nIHRoZSBvbGQgbGluZS4gQXBwZW5kIHRoZSBuZXcgYnl0ZXMgaW50byBidWZmZXI6XG4gICAgICAgICAgICBidWZmZXIgPSBjb25jYXQoYnVmZmVyLCBhcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmTGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgbGV0IGxpbmVTdGFydCA9IDA7IC8vIGluZGV4IHdoZXJlIHRoZSBjdXJyZW50IGxpbmUgc3RhcnRzXG4gICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGJ1Zkxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGRpc2NhcmRUcmFpbGluZ05ld2xpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyW3Bvc2l0aW9uXSA9PT0gMTApIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gKytwb3NpdGlvbjsgLy8gc2tpcCB0byBuZXh0IGNoYXJcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkaXNjYXJkVHJhaWxpbmdOZXdsaW5lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHN0YXJ0IGxvb2tpbmcgZm9yd2FyZCB0aWxsIHRoZSBlbmQgb2YgbGluZTpcbiAgICAgICAgICAgIGxldCBsaW5lRW5kID0gLTE7IC8vIGluZGV4IG9mIHRoZSBcXHIgb3IgXFxuIGNoYXJcbiAgICAgICAgICAgIGZvciAoOyBwb3NpdGlvbiA8IGJ1Zkxlbmd0aCAmJiBsaW5lRW5kID09PSAtMTsgKytwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyW3Bvc2l0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkTGVuZ3RoID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNvbG9uIGluIGxpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZExlbmd0aCA9IHBvc2l0aW9uIC0gbGluZVN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTogPGV4cGxhbmF0aW9uPlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY2FyZFRyYWlsaW5nTmV3bGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lRW5kID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaW5lRW5kID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGJ1dCB0aGUgbGluZSBoYXNuJ3QgZW5kZWQuXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIG5leHQgYXJyIGFuZCB0aGVuIGNvbnRpbnVlIHBhcnNpbmc6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHdlJ3ZlIHJlYWNoZWQgdGhlIGxpbmUgZW5kLCBzZW5kIGl0IG91dDpcbiAgICAgICAgICAgIG9uTGluZShidWZmZXIuc3ViYXJyYXkobGluZVN0YXJ0LCBsaW5lRW5kKSwgZmllbGRMZW5ndGgpO1xuICAgICAgICAgICAgbGluZVN0YXJ0ID0gcG9zaXRpb247IC8vIHdlJ3JlIG5vdyBvbiB0aGUgbmV4dCBsaW5lXG4gICAgICAgICAgICBmaWVsZExlbmd0aCA9IC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpbmVTdGFydCA9PT0gYnVmTGVuZ3RoKSB7XG4gICAgICAgICAgICBidWZmZXIgPSB1bmRlZmluZWQ7IC8vIHdlJ3ZlIGZpbmlzaGVkIHJlYWRpbmcgaXRcbiAgICAgICAgfSBlbHNlIGlmIChsaW5lU3RhcnQgIT09IDApIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyB2aWV3IGludG8gYnVmZmVyIGJlZ2lubmluZyBhdCBsaW5lU3RhcnQgc28gd2UgZG9uJ3RcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY29weSBvdmVyIHRoZSBwcmV2aW91cyBsaW5lcyB3aGVuIHdlIGdldCB0aGUgbmV3IGFycjpcbiAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheShsaW5lU3RhcnQpO1xuICAgICAgICAgICAgcG9zaXRpb24gLT0gbGluZVN0YXJ0O1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgbGluZSBidWZmZXJzIGludG8gRXZlbnRTb3VyY2VNZXNzYWdlcy5cbiAqIEBwYXJhbSBvbklkIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGBpZGAgZmllbGQuXG4gKiBAcGFyYW0gb25SZXRyeSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBgcmV0cnlgIGZpZWxkLlxuICogQHBhcmFtIG9uTWVzc2FnZSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBtZXNzYWdlLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgZm9yIGVhY2ggaW5jb21pbmcgbGluZSBidWZmZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlcyhvbk1lc3NhZ2U/OiAobXNnOiBFdmVudFNvdXJjZU1lc3NhZ2UpID0+IHZvaWQpIHtcbiAgICBsZXQgbWVzc2FnZSA9IG5ld01lc3NhZ2UoKTtcbiAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5cbiAgICAvLyByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGNhbiBwcm9jZXNzIGVhY2ggaW5jb21pbmcgbGluZSBidWZmZXI6XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9uTGluZShsaW5lOiBVaW50OEFycmF5LCBmaWVsZExlbmd0aDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gZW1wdHkgbGluZSBkZW5vdGVzIGVuZCBvZiBtZXNzYWdlLiBUcmlnZ2VyIHRoZSBjYWxsYmFjayBhbmQgc3RhcnQgYSBuZXcgbWVzc2FnZTpcbiAgICAgICAgICAgIG9uTWVzc2FnZT8uKG1lc3NhZ2UpO1xuICAgICAgICAgICAgbWVzc2FnZSA9IG5ld01lc3NhZ2UoKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZExlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIGV4Y2x1ZGUgY29tbWVudHMgYW5kIGxpbmVzIHdpdGggbm8gdmFsdWVzXG4gICAgICAgICAgICAvLyBsaW5lIGlzIG9mIGZvcm1hdCBcIjxmaWVsZD46PHZhbHVlPlwiIG9yIFwiPGZpZWxkPjogPHZhbHVlPlwiXG4gICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCNldmVudC1zdHJlYW0taW50ZXJwcmV0YXRpb25cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZGVjb2Rlci5kZWNvZGUobGluZS5zdWJhcnJheSgwLCBmaWVsZExlbmd0aCkpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVPZmZzZXQgPSBmaWVsZExlbmd0aCArIChsaW5lW2ZpZWxkTGVuZ3RoICsgMV0gPT09IDMyID8gMiA6IDEpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkZWNvZGVyLmRlY29kZShsaW5lLnN1YmFycmF5KHZhbHVlT2Zmc2V0KSk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGF0YVwiOlxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIG1lc3NhZ2UgYWxyZWFkeSBoYXMgZGF0YSwgYXBwZW5kIHRoZSBuZXcgdmFsdWUgdG8gdGhlIG9sZC5cbiAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBqdXN0IHNldCB0byB0aGUgbmV3IHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEgPSBtZXNzYWdlLmRhdGEgPyBgJHttZXNzYWdlLmRhdGF9XFxuJHt2YWx1ZX1gIDogdmFsdWU7IC8vIG90aGVyd2lzZSxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjb25jYXQoYTogVWludDhBcnJheSwgYjogVWludDhBcnJheSkge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGEubGVuZ3RoICsgYi5sZW5ndGgpO1xuICAgIHJlcy5zZXQoYSk7XG4gICAgcmVzLnNldChiLCBhLmxlbmd0aCk7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gbmV3TWVzc2FnZSgpOiBFdmVudFNvdXJjZU1lc3NhZ2Uge1xuICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IFwiXCIsXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnM8VCA9IGFueT4oKTogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD4ge1xuICAgIGxldCByZXNvbHZlOiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltcInJlc29sdmVcIl07XG4gICAgbGV0IHJlamVjdDogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD5bXCJyZWplY3RcIl07XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFQ+KChyZXMsIHJlaikgPT4ge1xuICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgICByZWplY3QgPSByZWo7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzb2x2ZSEsIHJlamVjdDogcmVqZWN0ISB9O1xufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQW1DQSxlQUFzQixjQUF1RSxDQUFDLGlCQUF3QztBQUFBLEVBQ2xJLE1BQU0sU0FBUyxnQkFBZ0IsU0FBUztBQUFBLEVBQ3hDLE1BQU0sU0FBUyxnQkFBZ0IsU0FBUztBQUFBLEVBYXhDLE1BQU0sY0FBbUIsT0FBTyxPQUFZLEtBQWEsWUFBd0Q7QUFBQSxJQUM3RyxJQUFJLE9BQU8sT0FBTztBQUFBLE1BQ2QsTUFBTSxVQUFVLE1BQU0sUUFBUSxNQUFNLElBQUk7QUFBQSxNQUN4QyxJQUFJO0FBQUEsUUFBUyxPQUFPLE1BQU07QUFBQSxJQUM5QjtBQUFBO0FBQUEsRUFHSixNQUFNLHFCQUFxQixNQUFNO0FBQUEsSUFDN0IsTUFBTSxXQUFXLElBQUk7QUFBQSxJQUNyQixNQUFNLFVBQVUsSUFBSTtBQUFBLElBRXBCLE1BQU0sZ0JBQWU7QUFBQSxNQUNqQixJQUFJLENBQXlGLEtBQVUsWUFBcUI7QUFBQSxRQUN4SCxTQUFTLElBQUksU0FBUyxHQUFhO0FBQUEsUUFDbkMsSUFBSSxRQUFRLElBQUksR0FBYSxNQUFNLE9BQU87QUFBQSxVQUN0QyxRQUFRLElBQUksS0FBZSxJQUFJLEdBQUs7QUFBQSxRQUN4QztBQUFBLFFBQ0EsTUFBTSxNQUFNLFFBQVEsSUFBSSxHQUFhO0FBQUEsUUFDckMsSUFBSSxJQUFJLE9BQU87QUFBQSxRQUNmLFNBQVMsSUFBSSxTQUFTLEdBQWE7QUFBQSxRQUVuQyxPQUFPLE1BQU07QUFBQSxVQUNULFNBQVMsT0FBTyxPQUFPO0FBQUEsVUFDdkIsSUFBSSxPQUFPLE9BQU87QUFBQTtBQUFBO0FBQUEsTUFHMUIsS0FBSyxDQUF5RixLQUFVLFlBQXFC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QUEsTUFDSjtBQUFBLE1BR0EsT0FBTyxPQUFPLFNBQVMsV0FBVyxPQUFPLEdBQUcsV0FBVztBQUFBLE1BQ3ZELFlBQVk7QUFBQSxNQUNaLGNBQWM7QUFBQSxJQUNsQjtBQUFBLElBRUEsSUFBSSxjQUFjLFdBQVc7QUFBQSxNQUN6QixTQUFTO0FBQUEsSUFDYixFQUFPLFNBQUksY0FBYyxHQUFHO0FBQUEsTUFHeEIsU0FBUyxPQUFPLFNBQVMsU0FBUztBQUFBLE1BQ2xDLFlBQVk7QUFBQSxJQUNoQjtBQUFBO0FBQUE7QUFXRCxTQUFTLFdBQVcsQ0FBQyxXQUErQztBQUFBLEVBQ3ZFLElBQUksVUFBVSxXQUFXO0FBQUEsRUFDekIsTUFBTSxVQUFVLElBQUk7QUFBQSxFQUdwQixPQUFPLFNBQVMsTUFBTSxDQUFDLE1BQWtCLGFBQXFCO0FBQUEsSUFDMUQsSUFBSSxLQUFLLFdBQVcsR0FBRztBQUFBLE1BRW5CLFlBQVksT0FBTztBQUFBLE1BQ25CLFVBQVUsV0FBVztBQUFBLElBQ3pCLEVBQU8sU0FBSSxjQUFjLEdBQUc7QUFBQSxNQUl4QixNQUFNLFFBQVEsUUFBUSxPQUFPLEtBQUssU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUFBLE1BQzFELE1BQU0sY0FBYyxlQUFlLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSTtBQUFBLE1BQ3RFLE1BQU0sUUFBUSxRQUFRLE9BQU8sS0FBSyxTQUFTLFdBQVcsQ0FBQztBQUFBLE1BRXZELFFBQVE7QUFBQSxhQUNDO0FBQUEsVUFHRCxRQUFRLE9BQU8sUUFBUSxPQUFPLEdBQUcsUUFBUTtBQUFBLEVBQVMsVUFBVTtBQUFBLFVBQzVEO0FBQUE7QUFBQSxJQUVaO0FBQUE7QUFBQTtBQUlSLFNBQVMsTUFBTSxDQUFDLEdBQWUsR0FBZTtBQUFBLEVBQzFDLE1BQU0sTUFBTSxJQUFJLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTTtBQUFBLEVBQzlDLElBQUksSUFBSSxDQUFDO0FBQUEsRUFDVCxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU07QUFBQSxFQUNuQixPQUFPO0FBQUE7QUFHWCxTQUFTLFVBQVUsR0FBdUI7QUFBQSxFQUN0QyxPQUFPO0FBQUEsSUFDSCxNQUFNO0FBQUEsRUFDVjtBQUFBO0FBR0csU0FBUyxhQUFzQixHQUE0QjtBQUFBLEVBQzlELElBQUk7QUFBQSxFQUNKLElBQUk7QUFBQSxFQUNKLE1BQU0sVUFBVSxJQUFJLFFBQVcsQ0FBQyxLQUFLLFFBQVE7QUFBQSxJQUN6QyxVQUFVO0FBQUEsSUFDVixTQUFTO0FBQUEsR0FDWjtBQUFBLEVBQ0QsT0FBTyxFQUFFLFNBQVMsU0FBbUIsT0FBZ0I7QUFBQTsiLAogICJkZWJ1Z0lkIjogIjc2NDQyNDk5RTZDMkMwOEE2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
package/package.json
CHANGED
|
@@ -1 +1,12 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"name": "@milkio/stargate",
|
|
3
|
+
"version": "1.0.0-beta.203",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": "./index.js",
|
|
6
|
+
"types": "./index.d.ts",
|
|
7
|
+
"dependencies": {},
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/akirarika/milkio"
|
|
11
|
+
}
|
|
12
|
+
}
|