{"remainingRequest":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/vue-loader/lib/index.js??vue-loader-options!/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/src/views/rail/index.vue?vue&type=script&lang=js","dependencies":[{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/src/views/rail/index.vue","mtime":1711675482394},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/babel-loader/lib/index.js","mtime":456789000000},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/vue-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CmltcG9ydCB7IHV0aWxzLCBWTWFwLCBWVGlsZSwgVlZlY3RvciwgVk92ZXJsYXksIFZEcmF3IH0gZnJvbSAidi1vbC1tYXAiOwppbXBvcnQgInYtb2wtbWFwL2xpYi92LW9sLW1hcC5jc3MiOwppbXBvcnQgbWFwVG9vbGJhciBmcm9tICJAL2NvbXBvbmVudHMvbWFwVG9vbGJhci9pbmRleC52dWUiOwppbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAiZWxlbWVudC11aSI7CmltcG9ydCB7IGRlbGV0ZVJhaWxBY2Nlc3MsIGdldFJhaWxEZXRhaWxBY2Nlc3MsIHNlYXJjaFJhaWxBY2Nlc3MgfSBmcm9tICJAL2FwaS9zZWN1cml0eS1zdGF0aW9uLXJhaWxzLWNvbnRyb2xsZXIiOwppbXBvcnQgeyB0ZXh0U2xpY2UgfSBmcm9tICJAL2FwaS9jb21tb24iOwppbXBvcnQgT3ZlcmxheVN0YXRpb24gZnJvbSAiQC9jb21wb25lbnRzL21hcE92ZXJsYXkvc3RhdGlvbiI7CmltcG9ydCBPdmVybGF5Q29tcGFueSBmcm9tICJAL2NvbXBvbmVudHMvbWFwT3ZlcmxheS9jb21wYW55IjsKaW1wb3J0IHsgZ2V0U3RhdGlvbkRldGFpbCB9IGZyb20gIkAvYXBpL3NlY3VyaXR5LXN0YXRpb24tY29udHJvbGxlciI7CmltcG9ydCB7IGdldENvbXBhbnlEZXRhaWwgfSBmcm9tICJAL2FwaS9jb21wYW55LWNvbnRyb2xsZXIiOwppbXBvcnQgeyBnZXRFbXBsb3llZXMgfSBmcm9tICJAL2FwaS9lbXBsb3llZS1jb250cm9sbGVyIjsKaW1wb3J0IE92ZXJsYXlTdGF0aW9uRW1wbG95ZWVzIGZyb20gIkAvY29tcG9uZW50cy9tYXBPdmVybGF5L3N0YXRpb25FbXBsb3llZXMiOwppbXBvcnQgZWxlY3Ryb25pY0ZlbmNlRGlhbG9nIGZyb20gIkAvdmlld3MvcmFpbC9jb21wb25lbnRzL2VsZWN0cm9uaWNGZW5jZS52dWUiOwppbXBvcnQgZWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZyBmcm9tICJAL2NvbXBvbmVudHMvZWxlY3Ryb25pY0ZlbmNlRWRpdC52dWUiOwppbXBvcnQgZWxlY3Ryb25pY0ZlbmNlUGVvcGxlIGZyb20gIkAvY29tcG9uZW50cy9lbGVjdHJvbmljRmVuY2VQZW9wbGUudnVlIjsKaW1wb3J0IGVsZWN0cm9uaWNGZW5jZVN0YXRpb25EaWFsb2cgZnJvbSAiQC9jb21wb25lbnRzL2VsZWN0cm9uaWNGZW5jZVN0YXRpb24udnVlIjsKCmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAicmFpbCIsCiAgY29tcG9uZW50czogewogICAgVk1hcCwKICAgIFZUaWxlLAogICAgVlZlY3RvciwKICAgIFZPdmVybGF5LAogICAgVkRyYXcsCiAgICBtYXBUb29sYmFyLAogICAgT3ZlcmxheVN0YXRpb24sCiAgICBPdmVybGF5Q29tcGFueSwKICAgIE92ZXJsYXlTdGF0aW9uRW1wbG95ZWVzLAogICAgZWxlY3Ryb25pY0ZlbmNlRGlhbG9nLAogICAgZWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZywKICAgIGVsZWN0cm9uaWNGZW5jZVN0YXRpb25EaWFsb2csCiAgICBlbGVjdHJvbmljRmVuY2VQZW9wbGUsCiAgfSwKICBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgdmlldzogewogICAgICAgIGNpdHk6ICLljqbpl6giLAogICAgICAgIHpvb206IDEyLAogICAgICB9LAogICAgICB0aWxlVHlwZTogIkdEIiwKICAgICAgaW50ZXJhY3Rpb25zOiB7CiAgICAgICAgRHJhZ1JvdGF0ZUFuZFpvb206IHRydWUsCiAgICAgICAgZG91YmxlQ2xpY2tab29tOiBmYWxzZSwKICAgICAgfSwKICAgICAgY29udHJvbHM6IHsKICAgICAgICB6b29tOiB0cnVlLAogICAgICAgIHpvb21PcHRpb25zOiB7CiAgICAgICAgICBjbGFzc05hbWU6ICJvbC16b29tLWN1c3RvbSIsCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgc3RhdGlvbklkOiAiIiwKICAgICAgbWFwVG9vbExpc3Q6IFsiZmVuY2UiLCAidGlsZSJdLAogICAgICB0YWJsZURhdGE6IFtdLAogICAgICBvcmlnaW5EYXRhOiBbXSwKICAgICAgc3RhdGlvbjoge30sCiAgICAgIGluZm86IHt9LAogICAgICByZXR1cm5XaW46IHt9LAogICAgICBsYXllcnM6IHsKICAgICAgICAvLyDpqbvli6TngrkKICAgICAgICBzdGF0aW9uTGF5ZXI6IHsKICAgICAgICAgIGZlYXR1cmVzOiBbXSwKICAgICAgICAgIG92ZXJsYXk6IHsKICAgICAgICAgICAgcG9zaXRpb246IHVuZGVmaW5lZCwKICAgICAgICAgICAgb2Zmc2V0OiBbMCwgLTM2XSwKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICAvLyDkvIHkuJoKICAgICAgICBjb21wYW55TGF5ZXI6IHsKICAgICAgICAgIGZlYXR1cmVzOiBbXSwKICAgICAgICAgIG92ZXJsYXk6IHsKICAgICAgICAgICAgcG9zaXRpb246IHVuZGVmaW5lZCwKICAgICAgICAgICAgb2Zmc2V0OiBbMCwgLTM2XSwKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICAvLyDpqbvli6TngrnkurrlkZgKICAgICAgICBzdGF0aW9uRW1wbG95ZWVzTGF5ZXI6IHsKICAgICAgICAgIGZlYXR1cmVzOiBbXSwKICAgICAgICAgIG92ZXJsYXk6IHsKICAgICAgICAgICAgcG9zaXRpb246IHVuZGVmaW5lZCwKICAgICAgICAgICAgb2Zmc2V0OiBbMCwgLTM2XSwKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICAvLyDnlLXlrZDlm7TmoI8KICAgICAgICByYWlsTGF5ZXI6IHsKICAgICAgICAgIGZlYXR1cmVzOiBbXSwKICAgICAgICAgIGNsdXN0ZXI6IHsKICAgICAgICAgICAgZGlzdGFuY2U6IDExMCwKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBjaXJjbGU6IHsKICAgICAgICAgICAgICAgIHJhZGl1czogNTAsCiAgICAgICAgICAgICAgICBmaWxsOiB7CiAgICAgICAgICAgICAgICAgIGNvbG9yOiAiIzBFNzFGRiIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgdGV4dDogewogICAgICAgICAgICAgICAgZm9udDogIjIycHggU291cmNlIEhhbiBTYW5zIENOLU1lZGl1bSwgU291cmNlIEhhbiBTYW5zIENOIiwKICAgICAgICAgICAgICAgIGZpbGw6IHsKICAgICAgICAgICAgICAgICAgY29sb3I6ICIjRkZGRkZGIiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICBmaWxsOiB7CiAgICAgICAgICAgICAgY29sb3I6ICJyZ2JhKDIzMCwxNjIsNjAsMC4yKSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN0cm9rZTogewogICAgICAgICAgICAgIGNvbG9yOiAiI0U2QTIzQyIsCiAgICAgICAgICAgICAgd2lkdGg6IDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgb3ZlcmxheTogewogICAgICAgICAgICBwb3NpdGlvbjogdW5kZWZpbmVkLAogICAgICAgICAgICBvZmZzZXQ6IFswLCAtMzZdLAogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBpc0VsZWN0cm9uaWNGZW5jZUVkaXREaWFsb2c6IGZhbHNlLAogICAgICBpc0VsZWN0cm9uaWNGZW5jZVN0YXRpb25EaWFsb2c6IGZhbHNlLAogICAgICBpc0VsZWN0cm9uaWNGZW5jZURpYWxvZzogZmFsc2UsCiAgICAgIGlzRWxlY3Ryb25pY0ZlbmNlUGVvcGxlOiBmYWxzZSwKICAgICAgZWxlY3Ryb25pY0ZlbmNlRGF0YTogW10sCiAgICAgIGVsZWN0cm9uaWNGZW5jZUluZm86IHt9LAogICAgICBkcmF3VHlwZTogIiIsCiAgICAgIGVsZWN0cm9uaWNGZW5jZVBlb3BsZUxpc3Q6IFtdLAogICAgICBwZW9wbGVTdGF0aW9uTmFtZTogIiIsCiAgICB9OwogIH0sCiAgbWV0aG9kczogewogICAgLyoqCiAgICAgKiBA6am75Yuk54K55Zu+5bGC54K55Ye75LqL5Lu2CiAgICAgKiAx44CB5YWI5Yik5pat54K55Ye75L2N572u5piv5ZCm5pyJ6am75Yuk54K5CiAgICAgKiAy44CB6I635Y+W54K55bGe5oCnaWQKICAgICAqIDPjgIHpgJrov4dpZOafpeaJvumpu+WLpOeCueivpuaDhQogICAgICogNOOAgeaKiuivpuaDheaUvuWIsGluZm/lj5jph4/nlKjmnaXlsZXnjrDor6bmg4XvvIhzaG93U3RhdGlvbkluZm/vvIkKICAgICAqIDXjgIHmiornu4/nuqzluqbotYvlgLznu5lwb3NpdGlvbuWxnuaAp+WxleekuuW8ueahhgogICAgICogQHBhcmFtIGV2dAogICAgICogQHBhcmFtIGZlYXR1cmUKICAgICAqLwogICAgY2xpY2tTdGF0aW9uKGV2dCwgZmVhdHVyZSkgewogICAgICBpZiAoZmVhdHVyZSkgewogICAgICAgIHRoaXMuc2hvd1N0YXRpb25JbmZvKCk7CiAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIEDkvIHkuJrlm77lsYLngrnlh7vkuovku7YKICAgICAqIEBwYXJhbSBldnQKICAgICAqIEBwYXJhbSBmZWF0dXJlCiAgICAgKi8KICAgIGNsaWNrQ29tcGFueShldnQsIGZlYXR1cmUpIHsKICAgICAgaWYgKGZlYXR1cmUpIHsKICAgICAgICBjb25zb2xlLmxvZyhmZWF0dXJlKTsKICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGZlYXR1cmUuZ2V0KCJmZWF0dXJlcyIpOwogICAgICAgIGlmIChmZWF0dXJlcyAmJiBmZWF0dXJlcy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgIGNvbnN0IGNvbXBhbnkgPSBmZWF0dXJlc1swXTsKICAgICAgICAgIGNvbnN0IGluZm8gPSBjb21wYW55LmdldCgicHJvcHMiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKGluZm8pOwogICAgICAgICAgdGhpcy5zaG93Q29tcGFueUluZm8oeyBpbmZvIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyDlpoLmnpzmmK/ogZrlkIjngrnlsLHkuIvpkrvkuIDnuqcKICAgICAgICAgIGNvbnN0IHpvb20gPSB0aGlzLiRyZWZzLm1hcC5tYXAuZ2V0VmlldygpLmdldFpvb20oKSArIDE7CiAgICAgICAgICBjb25zdCBjZW50ZXIgPSBldnQuY29vcmRpbmF0ZTsKICAgICAgICAgIHRoaXMuJHJlZnMubWFwLnBhblRvKHsgem9vbSwgY2VudGVyIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogQOmpu+WLpOeCueivpuaDhQogICAgICovCiAgICBzaG93U3RhdGlvbkluZm8oKSB7CiAgICAgIHRoaXMuY2xlYXJNYXAoKTsKICAgICAgY29uc3QgeyBzdXBlcnZpc2VEZXBhcnROYW1lLCBhZGRyZXNzLCBsb25naXR1ZGUsIGxhdGl0dWRlLCBzdGF0aW9uVHlwZXMgfSA9IHRoaXMuc3RhdGlvbjsKICAgICAgY29uc3QgW3sgbWFwSWNvbiB9XSA9IHN0YXRpb25UeXBlczsKICAgICAgaWYgKHRoaXMubGF5ZXJzLnN0YXRpb25MYXllci5mZWF0dXJlcy5sZW5ndGggPD0gMCkgewogICAgICAgIHRoaXMubGF5ZXJzLnN0YXRpb25MYXllci5mZWF0dXJlcyA9IFsKICAgICAgICAgIHsKICAgICAgICAgICAgY29vcmRpbmF0ZXM6IFtOdW1iZXIobG9uZ2l0dWRlKSwgTnVtYmVyKGxhdGl0dWRlKV0sCiAgICAgICAgICAgIGNvbnZlcnQ6ICJnZC04NCIsCiAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgaWNvbjogewogICAgICAgICAgICAgICAgc3JjOiBtYXBJY29uLAogICAgICAgICAgICAgICAgc2NhbGU6IDAuNSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBwcm9wczogdGhpcy5zdGF0aW9uLAogICAgICAgICAgfSwKICAgICAgICBdOwogICAgICB9CiAgICAgIHRoaXMuaW5mbyA9IHsKICAgICAgICAuLi50aGlzLnN0YXRpb24sCiAgICAgICAgc3VwZXJ2aXNlRGVwYXJ0TmFtZVNsaWNlOiB0ZXh0U2xpY2Uoc3VwZXJ2aXNlRGVwYXJ0TmFtZSksCiAgICAgICAgYWRkcmVzc1NsaWNlOiB0ZXh0U2xpY2UoYWRkcmVzcyksCiAgICAgIH07CiAgICAgIC8qKgogICAgICAgKiBA5by55qGG5L2N572u6L2s6auY5b636L2sODQKICAgICAgICovCiAgICAgIHRoaXMubGF5ZXJzLnN0YXRpb25MYXllci5vdmVybGF5LnBvc2l0aW9uID0gdXRpbHMuY29udmVydENvb3JkaW5hdGUoW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwgImdkLTg0Iik7CiAgICAgIHRoaXMuJHJlZnMubWFwLnBhblRvKHsKICAgICAgICBjZW50ZXI6IHRoaXMubGF5ZXJzLnN0YXRpb25MYXllci5vdmVybGF5LnBvc2l0aW9uLAogICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIEDpqbvli6TngrnlvLnmoYbngrnlh7vlhbPpl60KICAgICAqLwogICAgY2xvc2VTdGF0aW9uSW5mbygpIHsKICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1bmRlZmluZWQ7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5LyB5Lia6K+m5oOFCiAgICAgKiBAcGFyYW0gaW5mbwogICAgICogQHBhcmFtIGluZm9UeXBlCiAgICAgKi8KICAgIHNob3dDb21wYW55SW5mbyh7IGluZm8sIGluZm9UeXBlIH0pIHsKICAgICAgY29uc29sZS5sb2coImNvbXBhbnkiLCBpbmZvKTsKICAgICAgbGV0IHsgb3JnYW5pemF0aW9uSWQgfSA9IGluZm87CiAgICAgIGdldENvbXBhbnlEZXRhaWwob3JnYW5pemF0aW9uSWQpCiAgICAgICAgLnRoZW4oKGNvbXBhbnkpID0+IHsKICAgICAgICAgIGNvbnN0IHsgcmVnaXN0ZXJBZGRyZXNzLCBsb25naXR1ZGUsIGxhdGl0dWRlIH0gPSBjb21wYW55OwogICAgICAgICAgY29uc29sZS5sb2coImNvbXBhbnkiLCBjb21wYW55KTsKICAgICAgICAgIHRoaXMuaW5mbyA9IHsKICAgICAgICAgICAgLi4uY29tcGFueSwKICAgICAgICAgICAgcmVnaXN0ZXJBZGRyZXNzU2xpY2U6IHRleHRTbGljZShyZWdpc3RlckFkZHJlc3MpLAogICAgICAgICAgfTsKICAgICAgICAgIGlmIChpbmZvVHlwZSkgewogICAgICAgICAgICB0aGlzLmNsZWFyTWFwKCk7CiAgICAgICAgICAgIHRoaXMuaGlkZUZlbmNlVGFibGUoKTsKICAgICAgICAgICAgdGhpcy5yZXR1cm5XaW4gPSB7IGluZm8sIGluZm9UeXBlIH07CiAgICAgICAgICAgIHRoaXMubGF5ZXJzLmNvbXBhbnlMYXllci5mZWF0dXJlcyA9IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb29yZGluYXRlczogW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwKICAgICAgICAgICAgICAgIGNvbnZlcnQ6ICJnZC04NCIsCiAgICAgICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgICAgICBpY29uOiB7CiAgICAgICAgICAgICAgICAgICAgc3JjOiByZXF1aXJlKCJAL2Fzc2V0cy9pbWFnZXMvbWFwU2VhcmNoL+WFrOWPuC5wbmciKSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBwcm9wczogY29tcGFueSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdOwogICAgICAgICAgfQogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBA5by55qGG5L2N572u6L2s6auY5b636L2sODQKICAgICAgICAgICAqLwogICAgICAgICAgdGhpcy5sYXllcnMuY29tcGFueUxheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZShbTnVtYmVyKGxvbmdpdHVkZSksIE51bWJlcihsYXRpdHVkZSldLCAiZ2QtODQiKTsKICAgICAgICAgIHRoaXMuJHJlZnMubWFwLnBhblRvKHsKICAgICAgICAgICAgY2VudGVyOiB0aGlzLmxheWVycy5jb21wYW55TGF5ZXIub3ZlcmxheS5wb3NpdGlvbiwKICAgICAgICAgIH0pOwogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKChlcnIpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7CiAgICAgICAgfSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5LyB5Lia5by55qGG54K55Ye75YWz6ZetCiAgICAgKi8KICAgIGNsb3NlQ29tcGFueUluZm8oKSB7CiAgICAgIHRoaXMucmV0dXJuV2luID0ge307CiAgICAgIHRoaXMubGF5ZXJzLmNvbXBhbnlMYXllci5vdmVybGF5LnBvc2l0aW9uID0gdW5kZWZpbmVkOwogICAgfSwKICAgIC8qKgogICAgICogQOmpu+WLpOeCueS6uuWRmOivpuaDhQogICAgICogQHBhcmFtIGluZm8KICAgICAqIEBwYXJhbSBpbmZvVHlwZQogICAgICovCiAgICBzaG93U3RhdGlvbkVtcGxveWVlc0luZm8oeyBpbmZvLCBpbmZvVHlwZSB9KSB7CiAgICAgIGNvbnNvbGUubG9nKCJzaG93U3RhdGlvbkVtcGxveWVlc0luZm8tIiArIGluZm9UeXBlLCBpbmZvKTsKICAgICAgbGV0IHsgaWQgfSA9IGluZm87CiAgICAgIGdldEVtcGxveWVlcyh7CiAgICAgICAgcGFnZUluZGV4OiAxLAogICAgICAgIHBhZ2VTaXplOiAxMDAwLAogICAgICAgIHNlY3VyaXR5U3RhdGlvbklkOiBpZCwKICAgICAgICBzZWFyY2hNb2RlbDogInNlY3VyaXR5U3RhdGlvbiIsCiAgICAgIH0pCiAgICAgICAgLnRoZW4oKHJlcykgPT4gewogICAgICAgICAgY29uc29sZS5sb2coInN0YXRpb25FbXBsb3llZXMiLCByZXMpOwogICAgICAgICAgY29uc29sZS5sb2coInN0YXRpb24iLCBpbmZvKTsKICAgICAgICAgIGluZm9bInN0YXRpb25FbXBsb3llZXMiXSA9IFsuLi5yZXNdLm1hcCgoeCkgPT4gewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIC4uLngsCiAgICAgICAgICAgICAgaXNQaG9uZTogZmFsc2UsCiAgICAgICAgICAgIH07CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuaW5mbyA9IHsgLi4ue30sIC4uLmluZm8gfTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJpbmZvIiwgdGhpcy5pbmZvKTsKICAgICAgICAgIGlmIChpbmZvVHlwZSkgewogICAgICAgICAgICB0aGlzLmNsZWFyTWFwKCk7CiAgICAgICAgICAgIHRoaXMuaGlkZUZlbmNlVGFibGUoKTsKCiAgICAgICAgICAgIHRoaXMucmV0dXJuV2luID0geyBpbmZvLCBpbmZvVHlwZSB9OwogICAgICAgICAgICB0aGlzLmxheWVycy5zdGF0aW9uRW1wbG95ZWVzTGF5ZXIuZmVhdHVyZXMgPSBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IFtOdW1iZXIoaW5mby5sb25naXR1ZGUpLCBOdW1iZXIoaW5mby5sYXRpdHVkZSldLAogICAgICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgICAgIGljb246IHsKICAgICAgICAgICAgICAgICAgICBzcmM6IHJlcXVpcmUoIkAvYXNzZXRzL2ltYWdlcy9tYXBTZWFyY2gv5Zyo5bKXX+S/neWuieWRmC5wbmciKSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBwcm9wczogaW5mbywKICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdOwogICAgICAgICAgICBpZiAoaW5mb1R5cGUgPT09ICJyYWlsIikgewogICAgICAgICAgICAgIGluZm9bIm5hbWUiXSA9IGluZm8uc3RhdGlvbk5hbWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIC8qKgogICAgICAgICAgICogQOW8ueahhuS9jee9rui9rOmrmOW+t+i9rDg0CiAgICAgICAgICAgKi8KICAgICAgICAgIHRoaXMubGF5ZXJzLnN0YXRpb25FbXBsb3llZXNMYXllci5vdmVybGF5LnBvc2l0aW9uID0gdXRpbHMuY29udmVydENvb3JkaW5hdGUoCiAgICAgICAgICAgIFtOdW1iZXIoaW5mby5sb25naXR1ZGUpLCBOdW1iZXIoaW5mby5sYXRpdHVkZSldLAogICAgICAgICAgICAiZ2QtODQiCiAgICAgICAgICApOwogICAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgICAgICAvLyB6b29tOiAxMywKICAgICAgICAgICAgLy8gZmx5Wm9vbTogOCwKICAgICAgICAgICAgY2VudGVyOiB0aGlzLmxheWVycy5zdGF0aW9uRW1wbG95ZWVzTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiwKICAgICAgICAgIH0pOwogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKChlcnIpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7CiAgICAgICAgfSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBA6am75Yuk54K55Lq65ZGY5Zu+5bGC54K55Ye75LqL5Lu2CiAgICAgKiBAcGFyYW0gZXZ0CiAgICAgKiBAcGFyYW0gZmVhdHVyZQogICAgICovCiAgICBjbGlja1N0YXRpb25FbXBsb3llZXMoZXZ0LCBmZWF0dXJlKSB7CiAgICAgIGlmIChmZWF0dXJlKSB7CiAgICAgICAgY29uc29sZS5sb2coImNsaWNrU3RhdGlvbkVtcGxveWVlcy1mZWF0dXJlIiwgZmVhdHVyZSk7CiAgICAgICAgY29uc3Qgc3RhdGlvbnMgPSBmZWF0dXJlLmdldCgiZmVhdHVyZXMiKTsKICAgICAgICBpZiAoc3RhdGlvbnMgJiYgc3RhdGlvbnMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICBjb25zdCBzdGF0aW9uID0gc3RhdGlvbnNbMF07CiAgICAgICAgICBjb25zdCBpbmZvID0gc3RhdGlvbi5nZXQoInByb3BzIik7CiAgICAgICAgICB0aGlzLnNob3dTdGF0aW9uRW1wbG95ZWVzSW5mbyh7IGluZm8gfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChmZWF0dXJlLmdldCgicHJvcHMiKSkgewogICAgICAgICAgICBjb25zdCBpbmZvID0gZmVhdHVyZS5nZXQoInByb3BzIik7CiAgICAgICAgICAgIHRoaXMuc2hvd1N0YXRpb25FbXBsb3llZXNJbmZvKHsgaW5mbyB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIOWmguaenOaYr+iBmuWQiOeCueWwseS4i+mSu+S4gOe6pwogICAgICAgICAgICBjb25zdCB6b29tID0gdGhpcy4kcmVmcy5tYXAubWFwLmdldFZpZXcoKS5nZXRab29tKCkgKyAxOwogICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBldnQuY29vcmRpbmF0ZTsKICAgICAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oeyB6b29tLCBjZW50ZXIgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBA6am75Yuk54K55Lq65pWw5by55qGG54K55Ye75YWz6ZetCiAgICAgKi8KICAgIGNsb3NlU3RhdGlvbkVtcGxveWVlc0luZm8oKSB7CiAgICAgIHRoaXMucmV0dXJuV2luID0ge307CiAgICAgIHRoaXMubGF5ZXJzLnN0YXRpb25FbXBsb3llZXNMYXllci5vdmVybGF5LnBvc2l0aW9uID0gdW5kZWZpbmVkOwogICAgfSwKICAgIC8qKgogICAgICogQOeUteWtkOWbtOagj+WbvuWxgueCueWHu+S6i+S7tgogICAgICogQHBhcmFtIGV2dAogICAgICogQHBhcmFtIGZlYXR1cmUKICAgICAqLwogICAgY2xpY2tSYWlsKGV2dCwgZmVhdHVyZSkgewogICAgICBpZiAoZmVhdHVyZSkgewogICAgICAgIGNvbnNvbGUubG9nKGZlYXR1cmUpOwogICAgICAgIGNvbnN0IHJhaWxzID0gZmVhdHVyZS5nZXQoImZlYXR1cmVzIik7CiAgICAgICAgaWYgKHJhaWxzICYmIHJhaWxzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgdGhpcy5zaG93UmFpbEluZm9Gcm9tTGlzdCA9IGZhbHNlOwogICAgICAgICAgY29uc3QgcmFpbCA9IHJhaWxzWzBdOwogICAgICAgICAgY29uc3QgaW5mbyA9IHJhaWwuZ2V0KCJwcm9wcyIpOwogICAgICAgICAgY29uc29sZS5sb2coImNsaWNrUmFpbEluZm8iLCBpbmZvKTsKICAgICAgICAgIHRoaXMuc2hvd1JhaWxJbmZvKHsgaW5mbyB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGZlYXR1cmUuZ2V0KCJwcm9wcyIpKSB7CiAgICAgICAgICAgIHRoaXMuc2hvd1JhaWxJbmZvRnJvbUxpc3QgPSBmYWxzZTsKICAgICAgICAgICAgY29uc3QgaW5mbyA9IGZlYXR1cmUuZ2V0KCJwcm9wcyIpOwogICAgICAgICAgICBjb25zb2xlLmxvZygiY2xpY2tSYWlsSW5mbyIsIGluZm8pOwogICAgICAgICAgICB0aGlzLnNob3dSYWlsSW5mbyh7IGluZm8gfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyDlpoLmnpzmmK/ogZrlkIjngrnlsLHkuIvpkrvkuIDnuqcKICAgICAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRWaWV3KCkuZ2V0Wm9vbSgpICsgMTsKICAgICAgICAgICAgY29uc3QgY2VudGVyID0gZXZ0LmNvb3JkaW5hdGU7CiAgICAgICAgICAgIHRoaXMuJHJlZnMubWFwLnBhblRvKHsgem9vbSwgY2VudGVyIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogQOeUteWtkOWbtOagj+ivpuaDhQogICAgICogQHBhcmFtIGluZm8KICAgICAqIEBwYXJhbSBpbmZvVHlwZQogICAgICovCiAgICBzaG93UmFpbEluZm8oeyBpbmZvLCBpbmZvVHlwZSB9KSB7CiAgICAgIC8vIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFtdOwogICAgICBnZXRSYWlsRGV0YWlsQWNjZXNzKGluZm8uaWQpCiAgICAgICAgLnRoZW4oKHJlcykgPT4gewogICAgICAgICAgY29uc29sZS5sb2coInJhaWxyZXMiLCByZXMpOwogICAgICAgICAgY29uc29sZS5sb2coInJhaWxpbmZvIiwgaW5mbyk7CiAgICAgICAgICBjb25zdCB7IGlkLCBzaGFwZWRMb2NhdGlvbiB9ID0gaW5mbzsKICAgICAgICAgIGNvbnN0IHsgY29tcGFueU5hbWUsIHJhaWxTaGFwZVR5cGUgfSA9IHJlczsKICAgICAgICAgIHRoaXMuaW5mbyA9IHsKICAgICAgICAgICAgLi4ucmVzLAogICAgICAgICAgICBjb21wYW55TmFtZVNsaWNlOiB0ZXh0U2xpY2UoY29tcGFueU5hbWUpLAogICAgICAgICAgICBzaGFwZWRMb2NhdGlvbiwgLy/lkI7nq6/kvKDlgLzmnInpl67popgKICAgICAgICAgICAgaWQsIC8v5ZCO56uv5Lyg5YC85pyJ6Zeu6aKYCiAgICAgICAgICB9OwogICAgICAgICAgaWYgKGluZm9UeXBlKSB7CiAgICAgICAgICAgIHRoaXMuY2xlYXJNYXAoKTsKICAgICAgICAgICAgdGhpcy5oaWRlRmVuY2VUYWJsZSgpOwogICAgICAgICAgICB0aGlzLnJldHVybldpbiA9IHsgaW5mbywgaW5mb1R5cGUgfTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChyYWlsU2hhcGVUeXBlICYmIHJhaWxTaGFwZVR5cGUgPT09ICJDaXJjbGUiKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJDaXJjbGUiLCByZXMuc2hhcGVkTG9jYXRpb24pOwogICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gewogICAgICAgICAgICAgIHR5cGU6ICJjaXJjbGUiLAogICAgICAgICAgICAgIC8vIGNlbnRlcjogWzExOC4wNTE4NzYsIDI0LjYwNzQ1M10sCiAgICAgICAgICAgICAgLy8gcmFkaXVzOiAyNzIsCiAgICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgICBjZW50ZXI6IFtyZXMuc2hhcGVkTG9jYXRpb24uZ2Vvc1swXS5sb24sIHJlcy5zaGFwZWRMb2NhdGlvbi5nZW9zWzBdLmxhdF0sCiAgICAgICAgICAgICAgcmFkaXVzOiByZXMuc2hhcGVkTG9jYXRpb24ucmFkaXVzLAogICAgICAgICAgICAgIHByb3BzOiBpbmZvLAogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zb2xlLmxvZyhmZWF0dXJlKTsKICAgICAgICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmNsdXN0ZXIgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW2ZlYXR1cmVdOwogICAgICAgICAgfSBlbHNlIGlmIChyYWlsU2hhcGVUeXBlID09PSAiQ3JpYiIgfHwgcmFpbFNoYXBlVHlwZSA9PT0gIlBvbHlnb24iKSB7CiAgICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gcmVzLnNoYXBlZExvY2F0aW9uLmdlb3MubWFwKCh4KSA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIFt4LmxvbiwgeC5sYXRdOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmNsdXN0ZXIgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJwb2x5Z29uIiwKICAgICAgICAgICAgICAgIGNvbnZlcnQ6ICJnZC04NCIsCiAgICAgICAgICAgICAgICBjb29yZGluYXRlcywKICAgICAgICAgICAgICAgIHByb3BzOiBpbmZvLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF07CiAgICAgICAgICB9CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goKGVycikgPT4gewogICAgICAgICAgY29uc29sZS5sb2coZXJyKTsKICAgICAgICB9KTsKICAgIH0sCiAgICBvblJhaWxMYXllckNoYW5nZShmZWF0dXJlcykgewogICAgICBjb25zb2xlLmxvZyhmZWF0dXJlcyk7CiAgICAgIGlmIChmZWF0dXJlcyAmJiBmZWF0dXJlcy5sZW5ndGggPT09IDEpIHsKICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXNbMF07CiAgICAgICAgY29uc3QgdHlwZSA9IGZlYXR1cmUuZ2V0KCJ0eXBlIik7CiAgICAgICAgaWYgKHR5cGUgJiYgIXRoaXMuc2hvd1JhaWxJbmZvRnJvbUxpc3QpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKHR5cGUpOwogICAgICAgICAgaWYgKHR5cGUgPT09ICJwb2x5Z29uIiB8fCB0eXBlID09PSAiUG9seWdvbiIpIHsKICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBmZWF0dXJlLmdldCgiZ2VvbWV0cnkiKTsKICAgICAgICAgICAgLy8gY29uc3QgdmlldyA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRWaWV3KCk7CiAgICAgICAgICAgIC8vIHZpZXcuZml0KGdlb21ldHJ5LCB7CiAgICAgICAgICAgIC8vICAgZHVyYXRpb246IDEwMDAsCiAgICAgICAgICAgIC8vIH0pOwogICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLiRyZWZzLm1hcC5jYWxjdWxhdGVDZW50ZXIoZ2VvbWV0cnkpOwogICAgICAgICAgICBjb25zdCB7IGNlbnRlciB9ID0gcmVzdWx0OwogICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjb29yZGluYXRlcykKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEDlvLnmoYbkvY3nva7ovazpq5jlvrfovaw4NAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLm92ZXJsYXkucG9zaXRpb24gPSBjZW50ZXI7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJjaXJjbGUiIHx8IHR5cGUgPT09ICJDaXJjbGUiKSB7CiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZmVhdHVyZS5nZXQoImdlb21ldHJ5Iik7CiAgICAgICAgICAgIC8vIGNvbnN0IHZpZXcgPSB0aGlzLiRyZWZzLm1hcC5tYXAuZ2V0VmlldygpOwogICAgICAgICAgICAvLyB2aWV3LmZpdChnZW9tZXRyeSwgewogICAgICAgICAgICAvLyAgIGR1cmF0aW9uOiAxMDAwLAogICAgICAgICAgICAvLyB9KTsKICAgICAgICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLm92ZXJsYXkucG9zaXRpb24gPSBnZW9tZXRyeS5nZXRDZW50ZXIoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIEDnlLXlrZDlm7TmoI/liJfooagKICAgICAqLwogICAgc2V0RmVuY2UoKSB7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VEaWFsb2cgPSB0cnVlOwogICAgfSwKICAgIC8qKgogICAgICogQOazqOWGjOaYvuekuuW8ueahhuexu+S6i+S7tgogICAgICovCiAgICBldmVudEJ1c0JpbmRpbmcoKSB7CiAgICAgIHRoaXMuJGJ1cy4kb24oImNsaWNrLXN0YXRpb24iLCB0aGlzLnNob3dTdGF0aW9uSW5mbyk7IC8vIOaYvuekuumpu+WLpOeCueW8ueahhgogICAgICB0aGlzLiRidXMuJG9uKCJjbGljay1jb21wYW55IiwgdGhpcy5zaG93Q29tcGFueUluZm8pOyAvLyDmmL7npLrlhazlj7jlvLnmoYYKICAgICAgdGhpcy4kYnVzLiRvbigiY2xpY2stc3RhdGlvbkVtcGxveWVlcyIsIHRoaXMuc2hvd1N0YXRpb25FbXBsb3llZXNJbmZvKTsgLy8g5pi+56S66am75Yuk54K55Lq65ZGYCiAgICB9LAogICAgLyoqCiAgICAgKiBA5riF56m65Zyw5Zu+CiAgICAgKi8KICAgIGNsZWFyTWFwKGV4Y2x1ZGUgPSBbInN0YXRpb25MYXllciJdKSB7CiAgICAgIGZvciAobGV0IGxheWVyc0tleSBpbiB0aGlzLmxheWVycykgewogICAgICAgIGlmICghZXhjbHVkZS5pbmNsdWRlcyhsYXllcnNLZXkpKSB7CiAgICAgICAgICB0aGlzLmxheWVyc1tsYXllcnNLZXldLmZlYXR1cmVzID0gW107CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuJHJlZnMubWFwLmNsb3NlT3ZlcmxheXMoKTsKICAgIH0sCiAgICBvbkNoYW5nZUxheWVyKHR5cGUpIHsKICAgICAgLy8gY29uc29sZS5sb2coIm9uQ2hhbmdlTGF5ZXIiLCB0eXBlKTsKICAgICAgaWYgKHR5cGUuaW5kZXhPZigiZGVmYXVsdCIpID4gLTEpIHsKICAgICAgICB0aGlzLnRpbGVUeXBlID0gIkdEIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnRpbGVUeXBlID0gIkdEX0lNRyI7CiAgICAgIH0KICAgIH0sCiAgICBoaWRlRmVuY2VUYWJsZSgpIHsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZUVkaXREaWFsb2cgPSBmYWxzZTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZVN0YXRpb25EaWFsb2cgPSBmYWxzZTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IGZhbHNlOwogICAgfSwKICAgIGVsZWN0cm9uaWNGZW5jZUNhbmNlbCgpIHsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IGZhbHNlOwogICAgfSwKICAgIC8qKgogICAgICogQOaWsOWinueUteWtkOWbtOagjwogICAgICovCiAgICBhZGRFbGVjdHJvbmljKCkgewogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZyA9IHRydWU7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VEaWFsb2cgPSBmYWxzZTsKICAgICAgdGhpcy5lbGVjdHJvbmljRmVuY2VJbmZvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmluZm8pKTsKICAgICAgdGhpcy5lbGVjdHJvbmljRmVuY2VJbmZvID0ge307CiAgICAgIGNvbnNvbGUubG9nKHRoaXMuc3RhdGlvbik7CiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsKICAgICAgICB0aGlzLiRyZWZzLmVsZWN0cm9uaWNGZW5jZUVkaXQudXBkYXRlU3RhdGlvbih7CiAgICAgICAgICBzdGF0aW9uTmFtZTogdGhpcy5zdGF0aW9uLm5hbWUsCiAgICAgICAgICBwZW9wbGVOdW06IHRoaXMuc3RhdGlvbi5jb3VudE9mU2VjdXJpdHlNYW4sCiAgICAgICAgICBjb3VudE9mU2VjdXJpdHlNYW46IHRoaXMuc3RhdGlvbi5jb3VudE9mU2VjdXJpdHlNYW4sCiAgICAgICAgICBzdGF0aW9uSWQ6IHRoaXMuc3RhdGlvbi5pZCwKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBA57yW6L6R5p+Q5p2h55S15a2Q5Zu05qCPCiAgICAgKiBAcGFyYW0gZGF0YQogICAgICovCiAgICBhc3luYyBlbGVjdHJvbmljRmVuY2VFZGl0Rm4oeyBkYXRhIH0pIHsKICAgICAgY29uc29sZS5sb2coIue8lui+keafkOadoeeUteWtkOWbtOagjyIsIGRhdGEpOwogICAgICB0aGlzLnNob3dSYWlsSW5mb0Zyb21MaXN0ID0gdHJ1ZTsKICAgICAgLy8gdGhpcy5tYXAuY2xlYXJNYXAoKTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTsKICAgICAgdGhpcy5lbGVjdHJvbmljRmVuY2VJbmZvLnRpbWUgPSBbdGhpcy5lbGVjdHJvbmljRmVuY2VJbmZvLmJlZ2luVGltZSwgdGhpcy5lbGVjdHJvbmljRmVuY2VJbmZvLmVuZFRpbWVdOwogICAgICBjb25zdCByYWlsID0gYXdhaXQgZ2V0UmFpbERldGFpbEFjY2VzcyhkYXRhLmlkKTsKICAgICAgdGhpcy5pbmZvID0geyAuLi5yYWlsLCAuLi50aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8gfTsgLy8g5by55qGG5L+h5oGvCiAgICAgIGNvbnNvbGUubG9nKHRoaXMuaW5mbyk7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nID0gdHJ1ZTsKICAgICAgLy8g5pi+56S65Y+v57yW6L6R5Zu05qCP5Yy65Z+fCiAgICAgIHRoaXMuc2hvd01hcEVkaXRvcihkYXRhKTsKICAgIH0sCiAgICBkZWxFbGVjdHJvbmljKGRhdGEpIHsKICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgIGxldCBwYXJhbXMgPSB7CiAgICAgICAgaWQ6IGRhdGEuZGF0YS5pZCwKICAgICAgfTsKICAgICAgZGVsZXRlUmFpbEFjY2VzcyhwYXJhbXMpCiAgICAgICAgLnRoZW4oKHJlcykgPT4gewogICAgICAgICAgY29uc29sZS5sb2coImRlbGV0ZVJhaWxBY2Nlc3MiLCByZXMpOwogICAgICAgICAgdGhpcy4kcmVmc1siZWxlY3Ryb25pY0ZlbmNlIl0uZ2V0UmFpbHMoKTsKICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICBtZXNzYWdlOiAi5Yig6Zmk5oiQ5YqfIiwKICAgICAgICAgICAgdHlwZTogInN1Y2Nlc3MiLAogICAgICAgICAgfSk7CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goKGVycikgPT4gewogICAgICAgICAgY29uc29sZS5sb2coZXJyKTsKICAgICAgICB9KTsKICAgIH0sCiAgICBvcGVuUGVvcGxlTnVtRm4oaWQsIHN0YXRpb25OYW1lKSB7CiAgICAgIHRoaXMuZWxlY3Ryb25pY0ZlbmNlUGVvcGxlTGlzdCA9IFtdOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlUGVvcGxlID0gdHJ1ZTsKICAgICAgdGhpcy5wZW9wbGVTdGF0aW9uTmFtZSA9IHN0YXRpb25OYW1lOwogICAgICBnZXRFbXBsb3llZXMoewogICAgICAgIHBhZ2VJbmRleDogMSwKICAgICAgICBwYWdlU2l6ZTogMTAwMCwKICAgICAgICBzZWN1cml0eVN0YXRpb25JZDogaWQsCiAgICAgICAgc2VhcmNoTW9kZWw6ICJzZWN1cml0eVN0YXRpb24iLAogICAgICB9KS50aGVuKChyZXMpID0+IHsKICAgICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZVBlb3BsZUxpc3QgPSByZXM7CiAgICAgIH0pOwogICAgfSwKICAgIC8qKgogICAgICogQOWFs+iBlOmpu+WLpOeCuQogICAgICovCiAgICByZWxhdGlvblN0YXRpb25GbihpbmZvKSB7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VTdGF0aW9uRGlhbG9nID0gdHJ1ZTsKICAgICAgdGhpcy5pbmZvID0geyAuLi50aGlzLmluZm8sIC4uLmluZm8gfTsKICAgIH0sCiAgICBlbGVjdHJvbmljRmVuY2VFZGl0Q2FuY2VsKCkgewogICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbXTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZUVkaXREaWFsb2cgPSBmYWxzZTsKICAgICAgdGhpcy5jbGVhbkRyYXdGaWd1cmUoKTsKICAgICAgc2VhcmNoUmFpbEFjY2Vzcyh7CiAgICAgICAgcGFnZUluZGV4OiAxLAogICAgICAgIHBhZ2VTaXplOiAxMCwKICAgICAgICBzZWFyY2hNb2RlbDogIlN0YXRpb24iLAogICAgICAgIHN0YXRpb25JZDogdGhpcy5zdGF0aW9uSWQsCiAgICAgIH0pCiAgICAgICAgLnRoZW4oKHJlcykgPT4gewogICAgICAgICAgY29uc29sZS5sb2coInNlYXJjaFJhaWwiLCByZXMpOwogICAgICAgICAgaWYgKHJlcykgewogICAgICAgICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZURhdGEgPSByZXM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBNZXNzYWdlKHsKICAgICAgICAgICAgICB0eXBlOiAiZXJyb3IiLAogICAgICAgICAgICAgIG1lc3NhZ2U6ICLmn6Xor6LnlLXlrZDlm7TmoI/kv6Hmga/lpLHotKUiLAogICAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHsKICAgICAgICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbiA9ICJodHRwczovL3d3dy5iYWlkdS5jb20iOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKCgpID0+IHsKICAgICAgICAgIE1lc3NhZ2UoewogICAgICAgICAgICB0eXBlOiAiZXJyb3IiLAogICAgICAgICAgICBtZXNzYWdlOiAi5p+l6K+i55S15a2Q5Zu05qCP5L+h5oGv5aSx6LSlIiwKICAgICAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbiA9ICJodHRwczovL3d3dy5iYWlkdS5jb20iOwogICAgICAgICAgICB9LAogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9LAogICAgY2xlYW5EcmF3RmlndXJlKCkgewogICAgICB0aGlzLmRyYXdUeXBlID0gIiI7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5YWz6Zet6am75Yuk54K55Lq65ZGYCiAgICAgKi8KICAgIGVsZWN0cm9uaWNGZW5jZVBlb3BsZUNhbmNlbCgpIHsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZVBlb3BsZSA9IGZhbHNlOwogICAgfSwKICAgIGVsZWN0cm9uaWNGZW5jZVN0YXRpb25DYW5jZWwoKSB7CiAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFtdOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmNsZWFuRHJhd0ZpZ3VyZSgpOwogICAgfSwKICAgIHNob3dNYXBFZGl0b3IoeyBzaGFwZVR5cGUsIHNoYXBlZExvY2F0aW9uIH0pIHsKICAgICAgc3dpdGNoIChzaGFwZVR5cGUpIHsKICAgICAgICBjYXNlICJDaXJjbGUiOiAvLyDlnIYKICAgICAgICAgIHRoaXMuc2hvd0NpcmNsZUVkaXRvcihzaGFwZWRMb2NhdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJQb2x5Z29uIjoKICAgICAgICAgIHRoaXMuc2hvd1BvbHlnb25FZGl0b3Ioc2hhcGVkTG9jYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQ3JpYiI6CiAgICAgICAgICB0aGlzLnNob3dDcmliRWRpdG9yKHNoYXBlZExvY2F0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9LAogICAgc2hvd1BvbHlnb25FZGl0b3IoeyBnZW9zIH0pIHsKICAgICAgbGV0IGxpc3QgPSBnZW9zLm1hcCgoaXRlbSkgPT4gW2l0ZW0ubG9uLCBpdGVtLmxhdF0pOwogICAgICBjb25zb2xlLmxvZyhsaXN0KTsKICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJwb2x5Z29uIiwKICAgICAgICAgIGNvb3JkaW5hdGVzOiBsaXN0LAogICAgICAgICAgc3R5bGU6IHRoaXMubGF5ZXJzLnJhaWxMYXllci5zdHlsZSwKICAgICAgICAgIGNvbnZlcnQ6ICJnZC04NCIsCiAgICAgICAgfSwKICAgICAgXTsKICAgICAgdGhpcy4kcmVmcy5tYXAuZmx5VG8oewogICAgICAgIHpvb206IDEzLAogICAgICAgIGZseVpvb206IDgsCiAgICAgICAgY2VudGVyOiBsaXN0WzBdLAogICAgICB9KTsKICAgICAgY29uc29sZS5sb2codGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzKTsKICAgIH0sCiAgICBzaG93Q3JpYkVkaXRvcih7IGdlb3MgfSkgewogICAgICBsZXQgbGlzdCA9IGdlb3MubWFwKChpdGVtKSA9PiBbaXRlbS5sb24sIGl0ZW0ubGF0XSk7CiAgICAgIGNvbnNvbGUubG9nKGxpc3QpOwogICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbCiAgICAgICAgewogICAgICAgICAgdHlwZTogInBvbHlnb24iLAogICAgICAgICAgY29vcmRpbmF0ZXM6IGxpc3QsCiAgICAgICAgICBzdHlsZTogdGhpcy5sYXllcnMucmFpbExheWVyLnN0eWxlLAogICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICB9LAogICAgICBdOwogICAgICB0aGlzLiRyZWZzLm1hcC5mbHlUbyh7CiAgICAgICAgem9vbTogMTMsCiAgICAgICAgZmx5Wm9vbTogOCwKICAgICAgICBjZW50ZXI6IGxpc3RbMF0sCiAgICAgIH0pOwogICAgICBjb25zb2xlLmxvZyh0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMpOwogICAgfSwKICAgIHNob3dDaXJjbGVFZGl0b3IoeyBnZW9zLCByYWRpdXMgfSkgewogICAgICBjb25zdCBbY2VudGVyXSA9IGdlb3MubWFwKChpdGVtKSA9PiBbaXRlbS5sb24sIGl0ZW0ubGF0XSk7CiAgICAgIGNvbnNvbGUubG9nKGNlbnRlcik7CiAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiQ2lyY2xlIiwKICAgICAgICAgIGNlbnRlciwKICAgICAgICAgIHJhZGl1cywKICAgICAgICAgIHN0eWxlOiB0aGlzLmxheWVycy5yYWlsTGF5ZXIuc3R5bGUsCiAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgIH0sCiAgICAgIF07CiAgICAgIHRoaXMuJHJlZnMubWFwLmZseVRvKHsKICAgICAgICB6b29tOiAxMywKICAgICAgICAvLyBmbHlab29tOiA4LAogICAgICAgIGNlbnRlciwKICAgICAgfSk7CiAgICB9LAogICAgZHJhd1JhaWwodHlwZSkgewogICAgICBjb25zb2xlLmxvZygiZHJhd1JhaWwiLCB0eXBlKTsKICAgICAgLy8gdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW10KICAgICAgdGhpcy5kcmF3VHlwZSA9IHR5cGU7CiAgICB9LAogICAgZHJhd2VuZChldnQsIG1hcCkgewogICAgICBjb25zdCB7IGZlYXR1cmUgfSA9IGV2dDsKICAgICAgY29uc29sZS5sb2codGhpcy5kcmF3VHlwZSk7CiAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFtdOyAvLyDmuIXnqbrkuIrkuIDkuKrnlLXlrZDlm7TmoI8KICAgICAgY29uc3QgZ2VvbWV0cnkgPSBmZWF0dXJlLmdldEdlb21ldHJ5KCk7CiAgICAgIGlmICh0aGlzLmRyYXdUeXBlID09PSAiUmVjdGFuZ2xlIiB8fCB0aGlzLmRyYXdUeXBlID09PSAiUG9seWdvbiIpIHsKICAgICAgICBjb25zdCBbY29vcmRpbmF0ZXNdID0gZ2VvbWV0cnkuZ2V0Q29vcmRpbmF0ZXMoKTsKICAgICAgICBjb25zdCBjb252ZXJ0Q29vcmRpbmF0ZXMgPSBjb29yZGluYXRlcy5tYXAoKGNvb3JkaW5hdGUpID0+IHsKICAgICAgICAgIHJldHVybiB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZShjb29yZGluYXRlLCAiODQtZ2QiKTsKICAgICAgICB9KTsKICAgICAgICBjb25zb2xlLmxvZyhjb29yZGluYXRlcyk7CiAgICAgICAgY29uc29sZS5sb2coY29udmVydENvb3JkaW5hdGVzKTsKICAgICAgICBjb25zdCBwYXJhbXMgPSB7CiAgICAgICAgICBnZW9zOiBjb252ZXJ0Q29vcmRpbmF0ZXMubWFwKChpdGVtKSA9PiB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgbG9uOiBpdGVtWzBdLAogICAgICAgICAgICAgIGxhdDogaXRlbVsxXSwKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pLAogICAgICAgIH07CiAgICAgICAgY29uc29sZS5sb2cocGFyYW1zKTsKICAgICAgICB0aGlzLiRyZWZzLmVsZWN0cm9uaWNGZW5jZUVkaXQudXBkYXRlR2VvbWV0cnkocGFyYW1zKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmRyYXdUeXBlID09PSAiQ2lyY2xlIikgewogICAgICAgIGNvbnN0IGNlbnRlciA9IGdlb21ldHJ5LmdldENlbnRlcigpOwogICAgICAgIGNvbnNvbGUubG9nKGNlbnRlcik7CiAgICAgICAgY29uc3QgZ2VvUmFkaXVzID0gZ2VvbWV0cnkuZ2V0UmFkaXVzKCk7IC8vIOWNiuW+hAogICAgICAgIGNvbnN0IG1ldGVyc1BlclVuaXQgPSBtYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRNZXRlcnNQZXJVbml0KCk7IC8vIOWNiuW+hOS7peexs+S4uuWNleS9jQogICAgICAgIGNvbnN0IHJhZGl1cyA9IChnZW9SYWRpdXMgKiBtZXRlcnNQZXJVbml0KS50b0ZpeGVkKDIpOwogICAgICAgIGNvbnNvbGUubG9nKHJhZGl1cyk7CiAgICAgICAgY29uc3QgY29udmVydENvb3JkaW5hdGVzID0gdXRpbHMuY29udmVydENvb3JkaW5hdGUoY2VudGVyLCAiODQtZ2QiKTsKICAgICAgICBjb25zdCBwYXJhbXMgPSB7CiAgICAgICAgICBnZW9zOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBsb246IGNvbnZlcnRDb29yZGluYXRlc1swXSwKICAgICAgICAgICAgICBsYXQ6IGNvbnZlcnRDb29yZGluYXRlc1sxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgIF0sCiAgICAgICAgICByYWRpdXMsCiAgICAgICAgfTsKICAgICAgICBjb25zb2xlLmxvZyhwYXJhbXMpOwogICAgICAgIHRoaXMuJHJlZnMuZWxlY3Ryb25pY0ZlbmNlRWRpdC51cGRhdGVHZW9tZXRyeShwYXJhbXMpOwogICAgICB9CiAgICB9LAogIH0sCiAgYmVmb3JlUm91dGVFbnRlcih0bywgZnJvbSwgbmV4dCkgewogICAgLy8gaHR0cDovL2xvY2FsaG9zdDo4MDgwLyMvcmFpbAogICAgLy8gP3N0YXRpb25JZD1WR1VrVFd6SnFFN1llT2NqVlVwLS1fX1cwNTJiMVhOb0xtUGNrRjZjaDEKICAgIC8vICZhY2Nlc3NUb2tlbj1leUpoYkdjaU9pSklVekkxTmlKOS5leUpwYzNNaU9pSmhkWFJvTUNJc0ltVjRjQ0k2TVRjd01qVXpOek13T0N3aWRYTmxjbTVoYldVaU9pSnZkVUZ2Y2paU2NraEpSbloyUzJsdFdUUkNJbjAuMGR3Qkgtb0dJNm95RHQ0YlFIRVczNWtaX3Z5NXkwWEUtekVtRzR2bTcwYwogICAgY29uc3Qgc3RhdGlvbklkID0gdG8ucXVlcnkuc3RhdGlvbklkOwogICAgaWYgKHN0YXRpb25JZCkgewogICAgICAvLyDojrflj5bnlLXlrZDlm7TmoI/kv6Hmga8KICAgICAgc2VhcmNoUmFpbEFjY2Vzcyh7CiAgICAgICAgcGFnZUluZGV4OiAxLAogICAgICAgIHBhZ2VTaXplOiAxMCwKICAgICAgICBzZWFyY2hNb2RlbDogIlN0YXRpb24iLAogICAgICAgIHN0YXRpb25JZCwKICAgICAgfSkKICAgICAgICAudGhlbigocmVzKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygic2VhcmNoUmFpbCIsIHJlcyk7CiAgICAgICAgICBpZiAocmVzKSB7CiAgICAgICAgICAgIG5leHQoKHZtKSA9PiB7CiAgICAgICAgICAgICAgdm0uc3RhdGlvbklkID0gc3RhdGlvbklkOwogICAgICAgICAgICAgIHZtLmVsZWN0cm9uaWNGZW5jZURhdGEgPSByZXM7CiAgICAgICAgICAgICAgdm0uaXNFbGVjdHJvbmljRmVuY2VEaWFsb2cgPSB0cnVlOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIE1lc3NhZ2UoewogICAgICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICAgICAgbWVzc2FnZTogIuafpeivoueUteWtkOWbtOagj+S/oeaBr+Wksei0pSIsCiAgICAgICAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uID0gImh0dHBzOi8vd3d3LmJhaWR1LmNvbSI7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goKHsgcmVzcG9uc2UgfSkgPT4gewogICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTsKICAgICAgICAgIE1lc3NhZ2UoewogICAgICAgICAgICB0eXBlOiAiZXJyb3IiLAogICAgICAgICAgICBtZXNzYWdlOiBkYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHsKICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24gPSAiaHR0cHM6Ly93d3cuYmFpZHUuY29tIjsKICAgICAgICAgICAgfSwKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgTWVzc2FnZSh7CiAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICBtZXNzYWdlOiAi5pyq6K+G5Yir6am75Yuk54K5SUQiLAogICAgICAgIG9uQ2xvc2U6ICgpID0+IHsKICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbiA9ICJodHRwczovL3d3dy5iYWlkdS5jb20iOwogICAgICAgIH0sCiAgICAgIH0pOwogICAgfQogIH0sCiAgbW91bnRlZCgpIHsKICAgIHRoaXMuZXZlbnRCdXNCaW5kaW5nKCk7CiAgICBnZXRTdGF0aW9uRGV0YWlsKHRoaXMuc3RhdGlvbklkKQogICAgICAudGhlbigoc3RhdGlvbkRldGFpbCkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJzdGF0aW9uRGV0YWlsIiwgc3RhdGlvbkRldGFpbCk7CiAgICAgICAgY29uc3QgeyBzdXBlcnZpc2VEZXBhcnROYW1lLCBhZGRyZXNzLCBsb25naXR1ZGUsIGxhdGl0dWRlLCBzdGF0aW9uVHlwZXMgfSA9IHN0YXRpb25EZXRhaWw7CiAgICAgICAgY29uc3QgW3sgbWFwSWNvbiB9XSA9IHN0YXRpb25UeXBlczsKICAgICAgICBpZiAodGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLmZlYXR1cmVzLmxlbmd0aCA8PSAwKSB7CiAgICAgICAgICB0aGlzLmxheWVycy5zdGF0aW9uTGF5ZXIuZmVhdHVyZXMgPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb29yZGluYXRlczogW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwKICAgICAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgICBpY29uOiB7CiAgICAgICAgICAgICAgICAgIHNyYzogbWFwSWNvbiwKICAgICAgICAgICAgICAgICAgc2NhbGU6IDAuNSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBwcm9wczogc3RhdGlvbkRldGFpbCwKICAgICAgICAgICAgfSwKICAgICAgICAgIF07CiAgICAgICAgfQogICAgICAgIHRoaXMuaW5mbyA9IHsKICAgICAgICAgIC4uLnN0YXRpb25EZXRhaWwsCiAgICAgICAgICBzdXBlcnZpc2VEZXBhcnROYW1lU2xpY2U6IHRleHRTbGljZShzdXBlcnZpc2VEZXBhcnROYW1lKSwKICAgICAgICAgIGFkZHJlc3NTbGljZTogdGV4dFNsaWNlKGFkZHJlc3MpLAogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogQOW8ueahhuS9jee9rui9rOmrmOW+t+i9rDg0CiAgICAgICAgICovCiAgICAgICAgY29uc3QgY2VudGVyID0gdXRpbHMuY29udmVydENvb3JkaW5hdGUoW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwgImdkLTg0Iik7CiAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgICAgY2VudGVyOiBjZW50ZXIsCiAgICAgICAgfSk7CiAgICAgIH0pCiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coZXJyKTsKICAgICAgfSk7CiAgfSwKfTsK"},null]}