{"remainingRequest":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\bzzgj-fvue\\src\\components\\flow\\OnlineForm.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\src\\components\\flow\\OnlineForm.vue","mtime":1705895419267},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgRWlwSW5wdXQgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwSW5wdXQudnVlJw0KaW1wb3J0IEVpcENoZWNrYm94IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcENoZWNrYm94LnZ1ZScNCmltcG9ydCBFaXBTZWxlY3QgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwU2VsZWN0LnZ1ZScNCmltcG9ydCBFaXBSYWRpbyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBSYWRpby52dWUnDQppbXBvcnQgRWlwVXNlclNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFVzZXJTZWxlY3Rvci52dWUnDQppbXBvcnQgRWlwRGVtZW5zaW9uU2VsZWN0b3IgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvc2VsZWN0b3IvRWlwRGVtZW5zaW9uU2VsZWN0b3IudnVlJw0KaW1wb3J0IEVpcEpvYlNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcEpvYlNlbGVjdG9yLnZ1ZScNCmltcG9ydCBFaXBPcmdTZWxlY3RvciBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9zZWxlY3Rvci9FaXBPcmdTZWxlY3Rvci52dWUnDQppbXBvcnQgRWlwUG9zdFNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFBvc3RTZWxlY3Rvci52dWUnDQppbXBvcnQgRWlwUm9sZVNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFJvbGVTZWxlY3Rvci52dWUnDQppbXBvcnQgRWlwVGV4dGFyZWEgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVGV4dGFyZWEudnVlJw0KaW1wb3J0IEVpcEZvbnQgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwRm9udC52dWUnDQppbXBvcnQgRWlwRGlhbG9nIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcERpYWxvZy52dWUnDQppbXBvcnQgRWlwQXV0b2NvbXBsZXRlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcEF1dG9jb21wbGV0ZS52dWUnDQppbXBvcnQgRWlwQ2FzY2FkZXIgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwQ2FzY2FkZXIudnVlJw0KaW1wb3J0IEVpcFRyZWVzZWxlY3QgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVHJlZXNlbGVjdC52dWUnDQppbXBvcnQgRWlwQnV0dG9uIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcEJ1dHRvbi52dWUnDQppbXBvcnQgRWlwRGF0ZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBEYXRlLnZ1ZScNCmltcG9ydCBFaXBJbWcgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwSW1nLnZ1ZScNCmltcG9ydCBFaXBWaWV3ZXIgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVmlld2VyLnZ1ZScNCmltcG9ydCBFaXBTd2l0Y2ggZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwU3dpdGNoLnZ1ZScNCg0KY29uc3QgRWlwTWFwID0gKCkgPT4gaW1wb3J0KCdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBNYXAudnVlJykNCmNvbnN0IEVpcEZvbnRVZWRpdG9yID0gKCkgPT4gaW1wb3J0KCdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBGb250VWVkaXRvci52dWUnKQ0KaW1wb3J0IEh0RmlsZSBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdEZpbGUudnVlJw0KaW1wb3J0IFZSdW50aW1lVGVtcGxhdGUgZnJvbSAndi1ydW50aW1lLXRlbXBsYXRlJw0KaW1wb3J0IEh0R2FuZ2VkU2VsZWN0IGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0R2FuZ2VkU2VsZWN0LnZ1ZScNCmltcG9ydCBFaXBSZWxGbG93IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFJlbEZsb3cudnVlJw0KaW1wb3J0IEVpcFN1YkRpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdWJEaWFsb2cudnVlJw0KaW1wb3J0IEVpcFN1bkRpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdW5EaWFsb2cudnVlJw0KaW1wb3J0IEh0TGFiZWwgZnJvbSAnQC9jb21wb25lbnRzL2NvbnRyb2wvSHRMYWJlbC52dWUnDQppbXBvcnQgSHREaWdpdGFsIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0RGlnaXRhbC52dWUnDQppbXBvcnQgSHRDdXJyZW5jeSBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdEN1cnJlbmN5LnZ1ZScNCmltcG9ydCBFaXBSZWFsdGltZUlucHV0IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFJlYWx0aW1lSW5wdXQudnVlJw0KaW1wb3J0IEVpcFJlYWx0aW1lVGV4dGFyZWEgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwUmVhbHRpbWVUZXh0YXJlYS52dWUnDQppbXBvcnQgRWlwU3RlcCBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdGVwLnZ1ZScNCmltcG9ydCBIdElucHV0QXV0b2NvbXBsZXRlIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0SW5wdXRBdXRvY29tcGxldGUudnVlJw0KaW1wb3J0IEh0VHJlZXNlbGVjdCBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdFRyZWVzZWxlY3QudnVlJw0KaW1wb3J0IEh0Q2FzY2FkZXIgZnJvbSAnQC9jb21wb25lbnRzL2NvbnRyb2wvSHRDYXNjYWRlci52dWUnDQppbXBvcnQgSHRUcmVlIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0VHJlZS52dWUnDQoNCmltcG9ydCBFaXBUYWJzIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFRhYnMudnVlJw0KaW1wb3J0IEVpcFN1YlBhZ2luYXRpb24gZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwU3ViUGFnaW5hdGlvbi52dWUnDQppbXBvcnQgRWlwU3ViSW1wb3J0RGlhbG9nIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFN1YkltcG9ydERpYWxvZy52dWUnDQppbXBvcnQgRWlwU3ViRXhwb3J0RGlhbG9nIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFN1YkV4cG9ydERpYWxvZy52dWUnDQppbXBvcnQgRWlwQXR0YWNobWVudCBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBBdHRhY2htZW50LnZ1ZScNCmltcG9ydCBFaXBEaWMgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwRGljLnZ1ZScNCmltcG9ydCBFaXBQYWdpbmF0aW9uTGF5b3V0IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFBhZ2luYXRpb25MYXlvdXQudnVlJw0KaW1wb3J0IEVpcFBhZ2luYXRpb24gZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwUGFnaW5hdGlvbi52dWUnDQppbXBvcnQgRWlwQ29sbGFwc2UgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwQ29sbGFwc2UudnVlJw0KaW1wb3J0IEVpcFBhZ2luYXRpb25TdGVwcyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBQYWdpbmF0aW9uU3RlcHMudnVlJw0KaW1wb3J0IEVpcERhdGFWaWV3IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcERhdGFWaWV3LnZ1ZScNCmltcG9ydCBFaXBIb3RUYWJsZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBIb3RUYWJsZS52dWUnDQppbXBvcnQgRWlwSG90U3ViRGlhbG9nIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcEhvdFN1YkRpYWxvZy52dWUnDQppbXBvcnQgQ29udHJhY3RQcmV2aWV3IGZyb20gJ0AvY29tcG9uZW50cy9jb21tb24vQ29udHJhY3RQcmV2aWV3LnZ1ZScNCmltcG9ydCBFaXBUYWcgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVGFnLnZ1ZScNCmltcG9ydCBFaXBTdWJ0YWJsZUJhY2tmaWxsIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFN1YnRhYmxlQmFja2ZpbGwudnVlJw0KaW1wb3J0IEVpcERpdmlkZXIgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwRGl2aWRlci52dWUnDQppbXBvcnQgRWlwT2ZmaWNlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcE9mZmljZS52dWUnDQppbXBvcnQgRWlwUXJjb2RlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFFyY29kZS52dWUnDQppbXBvcnQgRWlwU2lnbmF0dXJlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFNpZ25hdHVyZS52dWUnDQppbXBvcnQgU3ViUGFnaW5hdGlvbiBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9idXMvU3ViUGFnaW5hdGlvbi5qcycNCg0KaW1wb3J0IFZ1ZSBmcm9tICd2dWUnDQoNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogJ29ubGluZS1mb3JtJywNCiAgcHJvcHM6IFsnaHRtbCcsICdkYXRhJywgJ3Blcm1pc3Npb24nLCAnaXNWaWV3JywgJ2lzUHJpbnQnLCAnaW5pdEZpbGxEYXRhJywgJ2Zsb3dLZXknLCAnZm9ybUlkJywgJ2lzTG9vaycsICdmbG93S2V5J10sDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIGxvYWRlZEZhaWw6IGZhbHNlLCAvL+ihqOWNleWKoOi9vWh0bWzmmK/lkKblpLHotKUNCiAgICAgIHN1YkJhY2tmaWxsOiBuZXcgTWFwKCksDQogICAgICBob3RUYWJsZUZpbGxiYWNrOiBTdHJpbmcNCiAgICB9DQogIH0sDQogIGNyZWF0ZWQoKSB7DQogICAgdGhpcy5pbml0KCkNCiAgfSwNCiAgd2F0Y2g6IHsNCiAgICBkYXRhOiB7DQogICAgICBoYW5kbGVyOiBmdW5jdGlvbihuZXdWYWwsIG9sZFZhbHVlKSB7DQogICAgICAgIHRoaXMuJHJvb3QuJGVtaXQoJ3VwZGF0ZURhdGEnLCBuZXdWYWwpDQogICAgICB9LA0KICAgICAgZGVlcDogdHJ1ZSwNCiAgICAgIGltbWVkaWF0ZTogdHJ1ZQ0KICAgIH0sDQogICAgaHRtbDogZnVuY3Rpb24obmV3VmFsKSB7DQogICAgICBpZiAobmV3VmFsKSB7DQogICAgICAgIHRoaXMuaW5pdCgpDQogICAgICB9DQogICAgfSwNCiAgICBob3RUYWJsZUZpbGxiYWNrOiBmdW5jdGlvbihuZXdWYWwpIHsNCiAgICAgIGlmIChuZXdWYWwpIHsNCiAgICAgICAgbGV0IG5ld1ZhbEFycmF5ID0gbmV3VmFsLnNwbGl0KCdfdGltZXN0YW1wXycpDQogICAgICAgIGxldCBib1BhdGhBcnJheSA9IG5ld1ZhbEFycmF5WzBdLnNwbGl0KCcuJykNCiAgICAgICAgbGV0IGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBib1BhdGhBcnJheVswXSArICcuJyArIGJvUGF0aEFycmF5WzFdDQogICAgICAgIGxldCBzdWJCbyA9IHRoaXMuZGF0YVtib1BhdGhBcnJheVswXV1bYm9QYXRoQXJyYXlbMV1dDQogICAgICAgIHRoaXMuJHJlZnMub25saW5lRm9ybS4kcmVmc1tob3RUYWJsZVJlZl0uZmlsbGJhY2tIb3RUYWJsZURhdGEoc3ViQm8pDQogICAgICB9DQogICAgfQ0KICB9LA0KICBtZXRob2RzOiB7DQogICAgbG9hZFN1Y2Nlc3MocmVzKSB7DQogICAgICB0aGlzLiRlbWl0KCdsb2FkU3VjY2VzcycsIHJlcykNCiAgICB9LA0KICAgIGluaXQoKSB7DQogICAgICBsZXQgaW5pdEZpbGxEYXRhID0gdGhpcy5pbml0RmlsbERhdGENCiAgICAgIGxldCBwZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9uDQogICAgICBWdWUuY29tcG9uZW50KCdodC1ydW50aW1lLXRlbXBsYXRlJywgew0KICAgICAgICBwcm9wczogWydodG1sJywgJ2RhdGEnLCAncGVybWlzc2lvbicsICdpc1ZpZXcnLCAnaXNQcmludCddLA0KICAgICAgICB0ZW1wbGF0ZTogdGhpcy5odG1sLA0KICAgICAgICBkYXRhKCkgew0KICAgICAgICAgIHJldHVybiB7DQogICAgICAgICAgICBsZWZ0X2ltYWdlOiAnJywNCiAgICAgICAgICAgIHJpZ2h0X2ltYWdlOiAnJywNCiAgICAgICAgICAgIHRyYW5zaXRpb25JbmRleDogLTEsDQogICAgICAgICAgICBjdXJUYWJJbmRleDogJ3RhYmVfY2hlY2tfMCcsDQogICAgICAgICAgICBlcnJNZXNnOiAnJywNCiAgICAgICAgICAgIGZpbGxPcmc6IHt9LA0KICAgICAgICAgICAgZmlsbE9yZ0NvbmZNYXA6IHt9DQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICBjb21wdXRlZDogew0KICAgICAgICAgIC8vIOWtkOihqOWJjeerr+WIhumhtei/h+a7pOWZqA0KICAgICAgICAgIHBhZ2luZ1N1YkRhdGEoKSB7DQogICAgICAgICAgICBjb25zdCBtZSA9IHRoaXMNCiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihkYXRhcGF0aCkgew0KICAgICAgICAgICAgICAvLyDpgJrov4flrZDooajmlbDmja7ot6/lvoTojrflj5bliIbpobXmlbDmja4NCiAgICAgICAgICAgICAgcmV0dXJuIFN1YlBhZ2luYXRpb24ucGFnaW5nQnlQYXRoKGRhdGFwYXRoLCBtZSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgIG1vdW50ZWQoKSB7DQogICAgICAgICAgLy8g5aaC5p6c5b2T5YmN6KGo5Y2V55qEZWxlbWVudOS4ukNvbW1lbnTor7TmmI7ooajljZXliqDovb3lpLHotKXkuobjgIINCiAgICAgICAgICBpZiAodGhpcy4kZWwgJiYgdGhpcy4kZWwuY29uc3RydWN0b3IgPT0gQ29tbWVudCkgew0KICAgICAgICAgICAgdGhpcy4kcGFyZW50LmxvYWRlZEZhaWwgPSB0cnVlDQogICAgICAgICAgfQ0KICAgICAgICAgIHRoaXMuJHZhbGlkYXRvciA9IHRoaXMuJHJvb3QuJHZhbGlkYXRvcg0KICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb24udGFibGUpIHsNCiAgICAgICAgICAgIGZvciAobGV0IHN1YlRhYmxlTmFtZSBpbiB0aGlzLnBlcm1pc3Npb24udGFibGUpIHsNCiAgICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbi50YWJsZVtzdWJUYWJsZU5hbWVdLnJlcXVpcmVkKSB7DQogICAgICAgICAgICAgICAgdGhpcy5hZGRTdWJUYWJsZUJ5TmFtZShzdWJUYWJsZU5hbWUpDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgdGhpcy4kZW1pdCgnbG9hZFN1Y2Nlc3MnLCB0cnVlKQ0KICAgICAgICAgIC8v5Yid5aeL5YyWaGFuZHNvbnRhYmxl5pWw5o2uDQogICAgICAgICAgaWYgKHRoaXMuZGF0YSkgew0KICAgICAgICAgICAgY29uc3QgZm9ybUlkID0gdGhpcy5mb3JtSWQNCiAgICAgICAgICAgIGxldCBfdGhpcyA9IHRoaXMNCiAgICAgICAgICAgIGlmICghZm9ybUlkKSB7DQogICAgICAgICAgICAgIHRoaXMudG9Jbml0VGVtb2xhdGVEYXRhKGluaXRGaWxsRGF0YSkNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGNvbnN0IGxvYWRpbmcgPSB0aGlzLiRsb2FkaW5nKHsNCiAgICAgICAgICAgICAgICBsb2NrOiB0cnVlLA0KICAgICAgICAgICAgICAgIHRleHQ6ICfmraPlnKjojrflj5bliJ3lp4vljJbkv6Hmga8uLi4nLA0KICAgICAgICAgICAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLA0KICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuNyknDQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgIHRoaXMuJGh0dHAuZ2V0KCcke2Zvcm19L2Zvcm0vZm9ybS92MS9wcmV2aWV3RGVzaWduVnVlP2Zvcm1JZD0nICsgZm9ybUlkKS50aGVuKA0KICAgICAgICAgICAgICAgIHJlc3AgPT4gew0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3AuZGF0YSkgew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IHJlc3AuZGF0YS5kYXRhDQogICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGZvcm1EYXRhKSB7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1EYXRhLmhhc093blByb3BlcnR5KGtleSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXMuZGF0YVtrZXldKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmRhdGFba2V5XSA9IGZvcm1EYXRhW2tleV0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgbG9hZGluZy5jbG9zZSgpDQogICAgICAgICAgICAgICAgICAgIF90aGlzLnRvSW5pdFRlbW9sYXRlRGF0YShpbml0RmlsbERhdGEpDQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCkNCiAgICAgICAgICAgICAgICAgICAgX3RoaXMudG9Jbml0VGVtb2xhdGVEYXRhKGluaXRGaWxsRGF0YSkNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICgpID0+IHsNCiAgICAgICAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKQ0KICAgICAgICAgICAgICAgICAgX3RoaXMudG9Jbml0VGVtb2xhdGVEYXRhKGluaXRGaWxsRGF0YSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKHRoaXMuaXNQcmludCkgew0KICAgICAgICAgICAgdGhpcy5wcmludERldGFpbCgpDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAvL+aUuXYtcnVudGltZS10ZW1wbGF0ZS5lcy5qc+eahOa6kOegge+8jOaIluiAheaUuXYtcnVudGltZS10ZW1wbGF0ZeeahOeJiOacrOaUueaIkDEuNS4yDQogICAgICAgIG1ldGhvZHM6IHsNCiAgICAgICAgICB0b0luaXRUZW1vbGF0ZURhdGEoaW5pdEZpbGxEYXRhKSB7DQogICAgICAgICAgICBpZiAoIXRoaXMuZGF0YSkgew0KICAgICAgICAgICAgICByZXR1cm4NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5kYXRhDQogICAgICAgICAgICBsZXQgcmVmcyA9IHRoaXMuJHJlZnMNCiAgICAgICAgICAgIGZvciAoY29uc3QgZGVmIGluIGZvcm1EYXRhKSB7DQogICAgICAgICAgICAgIGlmIChmb3JtRGF0YS5oYXNPd25Qcm9wZXJ0eShkZWYpKSB7DQogICAgICAgICAgICAgICAgY29uc3QgYm9EZWYgPSBmb3JtRGF0YVtkZWZdDQogICAgICAgICAgICAgICAgZm9yIChjb25zdCBibyBpbiBib0RlZikgew0KICAgICAgICAgICAgICAgICAgaWYgKGJvRGVmLmhhc093blByb3BlcnR5KGJvKSAmJiBiby5pbmRleE9mKCdzdWJfJykgPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICBjb25zdCByZWYgPSAnaG90dGFibGUuJyArIGRlZiArICcuJyArIGJvDQogICAgICAgICAgICAgICAgICAgIGlmIChyZWZzW3JlZl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmVmc1tyZWZdLmZpbGxiYWNrSG90VGFibGVEYXRhKGZvcm1EYXRhW2RlZl1bYm9dLCBwZXJtaXNzaW9uKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRGaWxsRGF0YSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICByZWZzW3JlZl0uaW5pdFRlbXBsYXRlRGF0YSgpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKQ0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgcHJpbnREZXRhaWwoKSB7DQogICAgICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdvbmxpbmUtZm9ybScpWzBdLmlubmVySFRNTA0KICAgICAgICAgICAgd2luZG93LnByaW50KCkNCiAgICAgICAgICAgIGlmICh0aGlzLmlzUHJpbnQpIHsNCiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLmdvKC0xKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCkNCiAgICAgICAgICAgIH0sIDIwMCkNCiAgICAgICAgICB9LA0KICAgICAgICAgIGFzeW5jIGxlYXZlVGFiVmVyaWZ5KGFjdGl2ZU5hbWUsIG9sZEFjdGl2ZU5hbWUpIHsNCiAgICAgICAgICAgIGxldCBlcnJpdGVtcyA9IFtdDQogICAgICAgICAgICBsZXQgZm9ybUVsZW1lbnRBcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnb25saW5lLWZvcm0nKQ0KICAgICAgICAgICAgbGV0IGZybUluc3QgPSBmb3JtRWxlbWVudEFyeVswXS5fX3Z1ZV9fDQogICAgICAgICAgICBsZXQgY2hpbGRyZW5zID0gZnJtSW5zdC4kcmVmcy5vbmxpbmVGb3JtLiRyZWZzDQogICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZnJtSW5zdC4kcm9vdC4kdmFsaWRhdG9yLnZhbGlkYXRlQWxsKCdjdXN0b20tZm9ybScpDQogICAgICAgICAgICBpZiAoIXJlc3VsdCkgew0KICAgICAgICAgICAgICBsZXQgY3VyRWwgPSBjaGlsZHJlbnNbb2xkQWN0aXZlTmFtZV0uJGVsDQogICAgICAgICAgICAgIHRoaXMuJHZhbGlkYXRvci5lcnJvcnMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHsNCiAgICAgICAgICAgICAgICBpZiAoY3VyRWwuY29udGFpbnMoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoaXRlbS5maWVsZClbMF0pKSB7DQogICAgICAgICAgICAgICAgICBlcnJpdGVtcy5wdXNoKGl0ZW0pDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy/mi7zmjqXmj5DnpLrmtojmga8NCiAgICAgICAgICAgIGxldCBtc2cgPSAnJw0KICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBlcnJpdGVtcykgew0KICAgICAgICAgICAgICBsZXQgZmllbGRMYWJlbCA9ICcnDQogICAgICAgICAgICAgIGlmIChpdGVtLmZpZWxkKSB7DQogICAgICAgICAgICAgICAgZmllbGRMYWJlbCA9IGl0ZW0uZmllbGQNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoaXRlbS5maWVsZCAmJiBpdGVtLmZpZWxkLmluZGV4T2YoJy0nKSAhPSAtMSkgew0KICAgICAgICAgICAgICAgIGZpZWxkTGFiZWwgPSBpdGVtLmZpZWxkLnN1YnN0cihpdGVtLmZpZWxkLmluZGV4T2YoJy0nKSArIDEpDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgbXNnICs9IGZpZWxkTGFiZWwgKyAnICcgKyBpdGVtLm1zZyArICc8YnIvPicNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChtc2cpIHsNCiAgICAgICAgICAgICAgdGhpcy4kbm90aWZ5LmVycm9yKHsNCiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy4kdCgnY29tbW9uLmVyclRpcCcpLA0KICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzogdHJ1ZSwNCiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtc2cNCiAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgcmVqZWN0KCkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v5a2Q6KGo5LiK56e7DQogICAgICAgICAgdXAoaW5kZXgsIGRhdGEpIHsNCiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgew0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5bey57uP5piv5YiX6KGo5Lit56ys5LiA5L2NJywNCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycNCiAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGxldCB0ZW1wID0gZGF0YVtpbmRleCAtIDFdDQogICAgICAgICAgICAgIHRoaXMuJHBhcmVudC5sb2FkZWRGYWlsID0gdHJ1ZQ0KICAgICAgICAgICAgICB0aGlzLiRzZXQoZGF0YSwgaW5kZXggLSAxLCBkYXRhW2luZGV4XSkNCiAgICAgICAgICAgICAgdGhpcy4kc2V0KGRhdGEsIGluZGV4LCB0ZW1wKQ0KICAgICAgICAgICAgICB0aGlzLiRwYXJlbnQubG9hZGVkRmFpbCA9IGZhbHNlDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAvL+WtkOihqOS4i+enuw0KICAgICAgICAgIGRvd24oaW5kZXgsIGRhdGEpIHsNCiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gZGF0YS5sZW5ndGggLSAxKSB7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflt7Lnu4/mmK/liJfooajkuK3mnIDlkI7kuIDkvY0nLA0KICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJw0KICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgdGhpcy5pc1RyYW5zaXRpb24gPSB0cnVlDQogICAgICAgICAgICAgIGxldCBpID0gZGF0YVtpbmRleCArIDFdDQogICAgICAgICAgICAgIHRoaXMuJHBhcmVudC5sb2FkZWRGYWlsID0gdHJ1ZQ0KICAgICAgICAgICAgICB0aGlzLiRzZXQoZGF0YSwgaW5kZXggKyAxLCBkYXRhW2luZGV4XSkNCiAgICAgICAgICAgICAgdGhpcy4kc2V0KGRhdGEsIGluZGV4LCBpKQ0KICAgICAgICAgICAgICB0aGlzLiRwYXJlbnQubG9hZGVkRmFpbCA9IGZhbHNlDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAvL+WtkOihqOWkjeWItuaVsOaNrg0KICAgICAgICAgIGNvcHkob2JqLCBpdGVtKSB7DQogICAgICAgICAgICBsZXQgbmV3T25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSkNCiAgICAgICAgICAgIC8v5oqKaWTnva7nqbrku6XlhY3otbDnmoTkv67mlLnmlrnms5UNCiAgICAgICAgICAgIGlmIChuZXdPbmUuaWRfKSB7DQogICAgICAgICAgICAgIGRlbGV0ZSBuZXdPbmUuaWRfDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAobmV3T25lLnN1Yl9yb3dfcmVhZG9ubHkpIHsNCiAgICAgICAgICAgICAgZGVsZXRlIG5ld09uZS5zdWJfcm93X3JlYWRvbmx5DQogICAgICAgICAgICB9DQogICAgICAgICAgICBuZXdPbmUuc3ViX2d1aWQgPSB0aGlzLmd1aWQoKQ0KICAgICAgICAgICAgb2JqLnB1c2gobmV3T25lKQ0KICAgICAgICAgIH0sDQogICAgICAgICAgLy/lrZDooajpu5jorqTlgLzlm57loasNCiAgICAgICAgICBhZGRTdWJUYWIoc3ViVGFiUGF0aCkgew0KICAgICAgICAgICAgbGV0IHBhdGhBcnIgPSBzdWJUYWJQYXRoLnNwbGl0KCcuJykNCiAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDMpIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtkOihqOi3r+W+hOacieivrycsDQogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBsZXQgc3ViVGFiTmFtZSA9IHBhdGhBcnJbMl0ucmVwbGFjZSgnc3ViXycsICcnKQ0KICAgICAgICAgICAgICBsZXQgc3ViSW5pdERhdGEgPSB0aGlzLmRhdGFbcGF0aEFyclsxXV0uaW5pdERhdGFbc3ViVGFiTmFtZV0gfHwge30NCiAgICAgICAgICAgICAgLy/liKTmlq3lvZPliY3lrZDooajmmK/lkKblrZjmnInlm57mmL7lgLwNCiAgICAgICAgICAgICAgaWYgKHRoaXMuJHBhcmVudC5zdWJCYWNrZmlsbCAmJiB0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwuaGFzKHN1YlRhYlBhdGgpKSB7DQogICAgICAgICAgICAgICAgLy90aGlzLmRhdGFbcGF0aEFyclsxXV1bcGF0aEFyclsyXV0ucHVzaCh0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwuZ2V0KHN1YlRhYlBhdGgpKTsNCiAgICAgICAgICAgICAgICBzdWJJbml0RGF0YSA9IHRoaXMuJHBhcmVudC5zdWJCYWNrZmlsbC5nZXQoc3ViVGFiUGF0aCkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAvL+aKiuaVsOe7hOmHjOmdoueahOWAvOS4uiBudWxsIOi9rOaNouS4uuepuuWtl+espuS4sg0KICAgICAgICAgICAgICBsZXQgc3RyID0gSlNPTi5zdHJpbmdpZnkoc3ViSW5pdERhdGEpLnJlcGxhY2UoL251bGwvZywgJyIiJykNCiAgICAgICAgICAgICAgbGV0IHN1YkRhdGEgPSBKU09OLnBhcnNlKHN0cikNCiAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHN1YkRhdGEpIHsNCiAgICAgICAgICAgICAgICAvL+eCuea3u+WKoOaXtuWIpOaWreimgeaWsOWinuWtkOihqOiusOW9leS4reeahOWtmeihqOaYr+WQpuacieWAvA0KICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignc3ViXycpID09IDAgJiYgc3ViRGF0YVtrZXldLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICAgIHN1YkRhdGFba2V5XSA9IFtdIC8v5pyJ5YiZ5riF56m6DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIC8v54K55re75Yqg5pe25Yik5pat6KaB5paw5aKe5a2Q6KGo6K6w5b2V5Lit55qE5a2X5q615piv5ZCm5pyJ5YC8DQogICAgICAgICAgICAgICAgLy8gaWYoc3ViRGF0YVtrZXldKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgc3ViRGF0YVtrZXldID0gIiI7Ly/mnInliJnmuIXnqboNCiAgICAgICAgICAgICAgICAvLyB9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgbGV0IGZpbGxPYmogPSB0aGlzLnRvRmlsbE9yZyhwYXRoQXJyWzFdICsgJy4nICsgcGF0aEFyclsyXSwgc3ViRGF0YSkNCiAgICAgICAgICAgICAgZmlsbE9iai5zdWJfZ3VpZCA9IHRoaXMuZ3VpZCgpDQogICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoQXJyWzFdXVtwYXRoQXJyWzJdXS5wdXNoKGZpbGxPYmopDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBndWlkKCkgew0KICAgICAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24oYykgew0KICAgICAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsDQogICAgICAgICAgICAgICAgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KQ0KICAgICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNikNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgfSwNCiAgICAgICAgICAvL+WtmeihqOm7mOiupOWAvOWbnuWhqw0KICAgICAgICAgIGFkZFN1blRhYihzdWJUYWJQYXRoLCBzdWJJbmRleCkgew0KICAgICAgICAgICAgbGV0IHBhdGhBcnIgPSBzdWJUYWJQYXRoLnNwbGl0KCcuJykNCiAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDQpIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtmeihqOi3r+W+hOacieivrycsDQogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBsZXQgc3ViVGFiTmFtZSA9IHBhdGhBcnJbMl0ucmVwbGFjZSgnc3ViXycsICcnKQ0KICAgICAgICAgICAgICBsZXQgc3VuVGFiTmFtZSA9IHBhdGhBcnJbM10ucmVwbGFjZSgnc3ViXycsICcnKQ0KICAgICAgICAgICAgICBsZXQgc3ViSW5pdERhdGEgPSB0aGlzLmRhdGFbcGF0aEFyclsxXV0uaW5pdERhdGFbc3ViVGFiTmFtZV0uaW5pdERhdGFbc3VuVGFiTmFtZV0gfHwge30NCiAgICAgICAgICAgICAgLy/liKTmlq3lvZPliY3lrZnooajmmK/lkKblrZjmnInlm57mmL7lgLwNCiAgICAgICAgICAgICAgaWYgKHRoaXMuJHBhcmVudC5zdWJCYWNrZmlsbCAmJiB0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwuaGFzKHN1YlRhYlBhdGgpKSB7DQogICAgICAgICAgICAgICAgLy90aGlzLmRhdGFbcGF0aEFyclsxXV1bcGF0aEFyclsyXV0ucHVzaCh0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwuZ2V0KHN1YlRhYlBhdGgpKTsNCiAgICAgICAgICAgICAgICBzdWJJbml0RGF0YSA9IHRoaXMuJHBhcmVudC5zdWJCYWNrZmlsbC5nZXQoc3ViVGFiUGF0aCkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAvL+aKiuaVsOe7hOmHjOmdoueahOWAvOS4uiBudWxsIOi9rOaNouS4uuepuuWtl+espuS4sg0KICAgICAgICAgICAgICBsZXQgc3RyID0gSlNPTi5zdHJpbmdpZnkoc3ViSW5pdERhdGEpLnJlcGxhY2UoL251bGwvZywgJyIiJykNCiAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFbcGF0aEFyclsxXV1bcGF0aEFyclsyXV1bc3ViSW5kZXhdW3BhdGhBcnJbM11dKSB7DQogICAgICAgICAgICAgICAgbGV0IGtleSA9IFtwYXRoQXJyWzNdXQ0KICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG5ldyBBcnJheSgpDQogICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhBcnJbMV1dW3BhdGhBcnJbMl1dW3N1YkluZGV4XVtrZXldID0gdmFsdWUNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBsZXQgc3VuQm9kYXRhID0gSlNPTi5wYXJzZShzdHIpDQogICAgICAgICAgICAgIHN1bkJvZGF0YS5zdWJfZ3VpZCA9IHRoaXMuZ3VpZCgpDQogICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoQXJyWzFdXVtwYXRoQXJyWzJdXVtzdWJJbmRleF1bcGF0aEFyclszXV0ucHVzaChzdW5Cb2RhdGEpDQogICAgICAgICAgICAgIHRoaXMuJGZvcmNlVXBkYXRlKCkgLy/ov6vkvb8gVnVlIOWunuS+i+mHjeaWsOa4suafkw0KDQogICAgICAgICAgICAgIC8vIHRoaXMucGVybWlzc2lvbi50YWJsZVtzdW5UYWJOYW1lXS5yZXF1aXJlZCA9ICJmYWxzZSI7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBhZGRTdWJUYWJsZUJ5TmFtZShzdWJUYWJsZU5hbWUpIHsNCiAgICAgICAgICAgIGZvciAobGV0IGJvQWxpYXMgaW4gdGhpcy5kYXRhKSB7DQogICAgICAgICAgICAgIGxldCBzdWJJbml0RGF0YSA9IHRoaXMuZGF0YVtib0FsaWFzXS5pbml0RGF0YVtzdWJUYWJsZU5hbWVdIHx8IHt9DQogICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXSAmJiB0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXS5sZW5ndGggPCAxKSB7DQogICAgICAgICAgICAgICAgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV0ucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHN1YkluaXREYXRhKSkpDQogICAgICAgICAgICAgICAgLy8g5a2Z6KGo5b+F5aGrIOm7mOiupOa3u+WKoOS4gOadoQ0KICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb24udGFibGUpIHsNCiAgICAgICAgICAgICAgICAgIGZvciAobGV0IHRhYmxlTmFtZSBpbiB0aGlzLnBlcm1pc3Npb24udGFibGUpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbi50YWJsZVt0YWJsZU5hbWVdLnJlcXVpcmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF0uaGFzT3duUHJvcGVydHkoJ3N1Yl8nICsgdGFibGVOYW1lKSAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF1bJ3N1Yl8nICsgdGFibGVOYW1lXSAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF1bJ3N1Yl8nICsgdGFibGVOYW1lXS5sZW5ndGggPCAxDQogICAgICAgICAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXVswXVsnc3ViXycgKyB0YWJsZU5hbWVdLnB1c2goDQogICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3ViSW5pdERhdGEuaW5pdERhdGFbdGFibGVOYW1lXSkpDQogICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdWzBdLmhhc093blByb3BlcnR5KCdzdWJfJyArIHRhYmxlTmFtZSkgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXVswXVsnc3ViXycgKyB0YWJsZU5hbWVdDQogICAgICAgICAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXVswXVsnc3ViXycgKyB0YWJsZU5hbWVdID0gW10NCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdWzBdWydzdWJfJyArIHRhYmxlTmFtZV0ucHVzaChzdWJJbml0RGF0YS5pbml0RGF0YVt0YWJsZU5hbWVdKQ0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgZGVsZXRlUm93KHN1YlRhYmxlUGF0aCwgaXRlbSkgew0KICAgICAgICAgICAgbGV0IHBhdGhBcnIgPSBzdWJUYWJsZVBhdGguc3BsaXQoJy4nKQ0KICAgICAgICAgICAgaWYgKHBhdGhBcnIubGVuZ3RoIDwgMikgew0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Q6KGo6Lev5b6E5pyJ6K+vJywNCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycNCiAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGxldCBzdWJUYWJOYW1lID0gcGF0aEFyclsxXS5yZXBsYWNlKCdzdWJfJywgJycpDQogICAgICAgICAgICAgIGlmICgNCiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV0ubGVuZ3RoID09IDEgJiYNCiAgICAgICAgICAgICAgICAodGhpcy5wZXJtaXNzaW9uLnRhYmxlW3N1YlRhYk5hbWVdLnJlcXVpcmVkID09IHRydWUgfHwgdGhpcy5wZXJtaXNzaW9uLnRhYmxlW3N1YlRhYk5hbWVdLnJlcXVpcmVkID09ICd0cnVlJykNCiAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Q6KGo5b+F5aGr5LiA5p2h6K6w5b2VJywNCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJw0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgcmV0dXJuDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhBcnJbMF1dW3BhdGhBcnJbMV1dLnJlbW92ZShpdGVtKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgZGVsZXRlU3VuUm93KHN1YlRhYmxlUGF0aCwgaXRlbSwgc3ViSW5kZXgpIHsNCiAgICAgICAgICAgIGxldCBwYXRoQXJyID0gc3ViVGFibGVQYXRoLnNwbGl0KCcuJykNCiAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDMpIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtmeihqOi3r+W+hOacieivrycsDQogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBsZXQgc3ViVGFiTmFtZSA9IHBhdGhBcnJbMV0ucmVwbGFjZSgnc3ViXycsICcnKQ0KICAgICAgICAgICAgICBsZXQgc3VuVGFiTmFtZSA9IHBhdGhBcnJbMl0ucmVwbGFjZSgnc3ViXycsICcnKQ0KICAgICAgICAgICAgICBpZiAoDQogICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhBcnJbMF1dW3BhdGhBcnJbMV1dW3N1YkluZGV4XVtwYXRoQXJyWzJdXS5sZW5ndGggPT0gMSAmJg0KICAgICAgICAgICAgICAgICh0aGlzLnBlcm1pc3Npb24udGFibGVbc3VuVGFiTmFtZV0ucmVxdWlyZWQgPT0gdHJ1ZSB8fCB0aGlzLnBlcm1pc3Npb24udGFibGVbc3ViVGFiTmFtZV0ucmVxdWlyZWQgPT0gJ3RydWUnKQ0KICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZnooajlv4XloavkuIDmnaHorrDlvZUnLA0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICByZXR1cm4NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV1bc3ViSW5kZXhdW3BhdGhBcnJbMl1dLnJlbW92ZShpdGVtKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgY2xlYXJBbGwoc3ViVGFibGVQYXRoLCBpc0hvdCwgaW5kZXgpIHsNCiAgICAgICAgICAgIGxldCBwYXRoQXJyID0gc3ViVGFibGVQYXRoLnNwbGl0KCcuJykNCiAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDIpIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtkOihqOi3r+W+hOacieivrycsDQogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgIC8v5a2Z6KGoDQogICAgICAgICAgICB9IGVsc2UgaWYgKChpbmRleCB8fCBpbmRleCA9PT0gMCkgJiYgcGF0aEFyci5sZW5ndGggPT0gMykgew0KICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV1baW5kZXhdW3BhdGhBcnJbMl1dLmVtcHR5KCkNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGNvbnN0IHN1YlRhYk5hbWUgPSBwYXRoQXJyWzFdLnJlcGxhY2UoJ3N1Yl8nLCAnJykNCiAgICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoQXJyWzBdXVtwYXRoQXJyWzFdXS5sZW5ndGggPT0gMSAmJg0KICAgICAgICAgICAgICAgICh0aGlzLnBlcm1pc3Npb24udGFibGVbc3ViVGFiTmFtZV0ucmVxdWlyZWQgPT0gdHJ1ZSB8fCB0aGlzLnBlcm1pc3Npb24udGFibGVbc3ViVGFiTmFtZV0ucmVxdWlyZWQgPT0gJ3RydWUnKQ0KICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZDooajlv4XloavkuIDmnaHorrDlvZUnLA0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICByZXR1cm4NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV0uZW1wdHkoKQ0KICAgICAgICAgICAgICBpZiAoaXNIb3QpIHsNCiAgICAgICAgICAgICAgICBjb25zdCBob3RUYWJsZVJlZiA9ICdob3R0YWJsZS4nICsgc3ViVGFibGVQYXRoDQogICAgICAgICAgICAgICAgdGhpcy4kcmVmc1tob3RUYWJsZVJlZl0uZmlsbGJhY2tIb3RUYWJsZURhdGEobnVsbCkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgYWRkSW5pdFRlbXBsYXRlRGF0YShzdWJUYWJsZVBhdGgpIHsNCiAgICAgICAgICAgIGNvbnN0IGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBzdWJUYWJsZVBhdGgNCiAgICAgICAgICAgIHRoaXMuJHJlZnNbaG90VGFibGVSZWZdLnRvQWRkSW5pdFRlbXBsYXRlRGF0YSgpDQogICAgICAgICAgfSwNCiAgICAgICAgICBtZXJnZUNlbGxSZWZyZXNoKHN1YlRhYmxlUGF0aCkgew0KICAgICAgICAgICAgY29uc3QgaG90VGFibGVSZWYgPSAnaG90dGFibGUuJyArIHN1YlRhYmxlUGF0aA0KICAgICAgICAgICAgdGhpcy4kcmVmc1tob3RUYWJsZVJlZl0ubWVyZ2VDZWxsUmVmcmVzaCgpDQogICAgICAgICAgfSwNCiAgICAgICAgICBleGVjQ2VsbE1hdGhFeHAoc3ViVGFibGVQYXRoKSB7DQogICAgICAgICAgICBjb25zdCBob3RUYWJsZVJlZiA9ICdob3R0YWJsZS4nICsgc3ViVGFibGVQYXRoDQogICAgICAgICAgICB0aGlzLiRyZWZzW2hvdFRhYmxlUmVmXS5leGVjQ2VsbE1hdGhFeHAoKQ0KICAgICAgICAgIH0sDQogICAgICAgICAgZXhlY0Nyb3NzTWFwcGluZyhzdWJUYWJsZVBhdGgpIHsNCiAgICAgICAgICAgIGNvbnN0IGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBzdWJUYWJsZVBhdGgNCiAgICAgICAgICAgIHRoaXMuJHJlZnNbaG90VGFibGVSZWZdLmV4ZWNDcm9zc01hcHBpbmcoKQ0KICAgICAgICAgIH0sDQogICAgICAgICAgZ2V0SG90VGFibGVEYXRhKHN1YlRhYmxlUGF0aCkgew0KICAgICAgICAgICAgY29uc3QgaG90VGFibGVSZWYgPSAnaG90dGFibGUuJyArIHN1YlRhYmxlUGF0aA0KICAgICAgICAgICAgdGhpcy4kcmVmc1tob3RUYWJsZVJlZl0uZ2V0SG90VGFibGVEYXRhKCkNCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v54K55Ye75YiG6aG15qCh6aqM5oyJ6ZKu6Kem5Y+R5LqL5Lu2DQogICAgICAgICAgbmV4dFN0ZXBDbGljayhpc0NoZWNrLCBpbmRleCwgd2F5KSB7DQogICAgICAgICAgICBsZXQgY2hpbGRyZW5zID0gdGhpcy4kcmVmcy5vbmxpbmVGb3JtLiRjaGlsZHJlblswXS4kcmVmcw0KICAgICAgICAgICAgbGV0IG5leHRJbmRleCA9IHdheSA9PSAnYmFjaycgPyBpbmRleCAtIDEgOiBpbmRleCArIDENCiAgICAgICAgICAgIC8v6L+b5YWl5LiL5LiA5Liq6aG1562+5bm25LiU6ZyA6KaB5qCh6aqM5b2T5YmN6aG1562+44CC5YiZ6L+b6KGM5qCh6aqMDQogICAgICAgICAgICBpZiAod2F5ID09ICduZXh0JyAmJiBpc0NoZWNrID09ICd5Jykgew0KICAgICAgICAgICAgICB0aGlzLiR2YWxpZGF0b3IudmFsaWRhdGVBbGwoJ2N1c3RvbS1mb3JtJykudGhlbihyZXN1bHQgPT4gew0KICAgICAgICAgICAgICAgIGxldCBjdXJUYWJIYXNFcnJvciA9IGZhbHNlDQogICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsNCiAgICAgICAgICAgICAgICAgIGxldCBjdXJFbCA9IGNoaWxkcmVuc1snbmV4dF9zdGVwX2NoZWNrXycgKyBpbmRleF0uJGVsDQogICAgICAgICAgICAgICAgICB0aGlzLiR2YWxpZGF0b3IuZXJyb3JzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmIChjdXJFbC5jb250YWlucyhkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShpdGVtLmZpZWxkKVswXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICBjdXJUYWJIYXNFcnJvciA9IHRydWUNCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHJlc3VsdCB8fCAhY3VyVGFiSGFzRXJyb3IpIHsNCiAgICAgICAgICAgICAgICAgIGNoaWxkcmVucy5lbF90YWJsZV9jaGVjay5jdXJyZW50TmFtZSA9IG5leHRJbmRleCArICcnDQogICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW5zQXJyYXkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjaGlsZHJlbnMpDQogICAgICAgICAgICAgICAgICBjaGlsZHJlbnNBcnJheS5yZW1vdmUoJ2NvbGxhcHNlJykNCiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZHJlbnNBcnJheS5sZW5ndGggLSAzICYmIHdheSA9PSAnbmV4dCcpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnc3RhcnRGbG93QnRuQ2hhbmdlJywgdHJ1ZSkNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBjaGlsZHJlbnMuZWxfdGFibGVfY2hlY2suY3VycmVudE5hbWUgPSBuZXh0SW5kZXggKyAnJw0KICAgICAgICAgICAgICB2YXIgY2hpbGRyZW5zQXJyYXkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjaGlsZHJlbnMpDQogICAgICAgICAgICAgIGNoaWxkcmVuc0FycmF5LnJlbW92ZSgnY29sbGFwc2UnKQ0KICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGRyZW5zQXJyYXkubGVuZ3RoIC0gMyAmJiB3YXkgPT0gJ25leHQnKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnc3RhcnRGbG93QnRuQ2hhbmdlJywgdHJ1ZSkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgdG9GaWxsT3JnKHBhdGgsIHJvdykgew0KICAgICAgICAgICAgY29uc3QgZmlsbE9yZ0NvbmYgPSB0aGlzLmZpbGxPcmdDb25mTWFwW3BhdGhdDQogICAgICAgICAgICBsZXQgZmlsbE9iaiA9IHt9DQogICAgICAgICAgICBpZiAoZmlsbE9yZ0NvbmYgJiYgdGhpcy5maWxsT3JnKSB7DQogICAgICAgICAgICAgIGlmIChmaWxsT3JnQ29uZi5uYW1lKSB7DQogICAgICAgICAgICAgICAgY29uc3QgbmFtZVBhdGggPSBmaWxsT3JnQ29uZi5uYW1lLnNwbGl0KCcuJykNCiAgICAgICAgICAgICAgICBmaWxsT2JqW25hbWVQYXRoW25hbWVQYXRoLmxlbmd0aCAtIDFdXSA9IHRoaXMuZmlsbE9yZy5uYW1lDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKGZpbGxPcmdDb25mLmlkKSB7DQogICAgICAgICAgICAgICAgY29uc3QgaWRQYXRoID0gZmlsbE9yZ0NvbmYuaWQuc3BsaXQoJy4nKQ0KICAgICAgICAgICAgICAgIGZpbGxPYmpbaWRQYXRoW2lkUGF0aC5sZW5ndGggLSAxXV0gPSB0aGlzLmZpbGxPcmcuaWQNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoZmlsbE9yZ0NvbmYuY29kZSkgew0KICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVQYXRoID0gZmlsbE9yZ0NvbmYuY29kZS5zcGxpdCgnLicpDQogICAgICAgICAgICAgICAgZmlsbE9ialtjb2RlUGF0aFtjb2RlUGF0aC5sZW5ndGggLSAxXV0gPSB0aGlzLmZpbGxPcmcuY29kZQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChmaWxsT3JnQ29uZi5pbnN0SWQpIHsNCiAgICAgICAgICAgICAgICBjb25zdCBpbnN0SWRQYXRoID0gZmlsbE9yZ0NvbmYuaW5zdElkLnNwbGl0KCcuJykNCiAgICAgICAgICAgICAgICBmaWxsT2JqW2luc3RJZFBhdGhbaW5zdElkUGF0aC5sZW5ndGggLSAxXV0gPSB0aGlzLiRwYXJlbnQuJHBhcmVudC5pbnN0SWQgPyB0aGlzLiRwYXJlbnQuJHBhcmVudC5pbnN0SWQgOiAnJw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIHJldHVybiB7Li4ucm93LCAuLi5maWxsT2JqfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHJvdw0KICAgICAgICAgIH0sDQogICAgICAgICAgaW5pdEZpbGwocGF0aCwgY29uZikgew0KICAgICAgICAgICAgLy/mlLbpm4boh6rliqjlm57loavkv6Hmga8NCiAgICAgICAgICAgIGlmIChwYXRoICYmIGNvbmYpIHsNCiAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICBjb25zdCBjb25mSnNvbiA9IHRoaXMuZmlsbE9yZ0NvbmZNYXBbcGF0aF0gPyB0aGlzLmZpbGxPcmdDb25mTWFwW3BhdGhdIDogSlNPTi5wYXJzZShjb25mKQ0KICAgICAgICAgICAgICAgIGlmIChjb25mSnNvbi5pZCB8fCBjb25mSnNvbi5jb2RlIHx8IGNvbmZKc29uLm5hbWUgfHwgY29uZkpzb24uaW5zdElkKSB7DQogICAgICAgICAgICAgICAgICB0aGlzLmZpbGxPcmdDb25mTWFwW3BhdGhdID0gY29uZkpzb24NCiAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdEZpcnN0RmlsbChwYXRoLCBjb25mSnNvbikNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgIGluaXRGaXJzdEZpbGwocGF0aCwgY29uZikgew0KICAgICAgICAgICAgLy/lpITnkIbnrKzkuIDooYznmoTlm57loasNCiAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gcGF0aC5zcGxpdCgnLicpDQogICAgICAgICAgICBpZiAodGhpcy5kYXRhW3BhdGhzWzBdXVtwYXRoc1sxXV0gJiYgdGhpcy5kYXRhW3BhdGhzWzBdXVtwYXRoc1sxXV0ubGVuZ3RoID09IDEgJiYgdGhpcy5maWxsT3JnLmlkKSB7DQogICAgICAgICAgICAgIGlmIChjb25mLmlkKSB7DQogICAgICAgICAgICAgICAgY29uc3QgaWRQYXRoID0gY29uZi5pZC5zcGxpdCgnLicpDQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtpZFBhdGhbMl1dKSB7DQogICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtpZFBhdGhbMl1dID0gdGhpcy5maWxsT3JnLmlkDQogICAgICAgICAgICAgICAgICBpZiAoY29uZi5jb2RlKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVQYXRoID0gY29uZi5jb2RlLnNwbGl0KCcuJykNCiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtjb2RlUGF0aFsyXV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtjb2RlUGF0aFsyXV0gPSB0aGlzLmZpbGxPcmcuY29kZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBpZiAoY29uZi5uYW1lKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVQYXRoID0gY29uZi5uYW1lLnNwbGl0KCcuJykNCiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtuYW1lUGF0aFsyXV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtuYW1lUGF0aFsyXV0gPSB0aGlzLmZpbGxPcmcubmFtZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChjb25mLmluc3RJZCkgew0KICAgICAgICAgICAgICAgIGNvbnN0IGluc3RJZFBhdGggPSBjb25mLmluc3RJZC5zcGxpdCgnLicpDQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtpbnN0SWRQYXRoWzJdXSkgew0KICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhzWzBdXVtwYXRoc1sxXV1bMF1baW5zdElkUGF0aFsyXV0gPSB0aGlzLiRwYXJlbnQuJHBhcmVudC5pbnN0SWQgPyB0aGlzLiRwYXJlbnQuJHBhcmVudC5pbnN0SWQgOiAnJw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgaXNTaG93QWRkQnV0dG9uKHBhdGgsIG1heFJvdywgc3ViSW5kZXgpIHsNCiAgICAgICAgICAgIGlmIChtYXhSb3cgPT09IDApIHJldHVybiBmYWxzZQ0KICAgICAgICAgICAgbGV0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJykNCiAgICAgICAgICAgIGlmIChzdWJJbmRleCA+PSAwKSB7DQogICAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDQpIHsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZDooajot6/lvoTmnInor68nLA0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YVtwYXRoQXJyWzFdXVtwYXRoQXJyWzJdXVtzdWJJbmRleF1bcGF0aEFyclszXV0NCiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggPj0gbWF4Um93DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDMpIHsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZDooajot6/lvoTmnInor68nLA0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YVtwYXRoQXJyWzFdXVtwYXRoQXJyWzJdXQ0KICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCA+PSBtYXhSb3cNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICBjb21wb25lbnRzOiB7DQogICAgICAgICAgRWlwUGFnaW5hdGlvbiwNCiAgICAgICAgICBFaXBTdWJQYWdpbmF0aW9uLA0KICAgICAgICAgIEVpcFN1YkltcG9ydERpYWxvZywNCiAgICAgICAgICBFaXBTdWJFeHBvcnREaWFsb2csDQogICAgICAgICAgRWlwUGFnaW5hdGlvbkxheW91dCwNCiAgICAgICAgICBFaXBJbnB1dCwNCiAgICAgICAgICBFaXBDaGVja2JveCwNCiAgICAgICAgICBFaXBTZWxlY3QsDQogICAgICAgICAgRWlwVXNlclNlbGVjdG9yLA0KICAgICAgICAgIEVpcERlbWVuc2lvblNlbGVjdG9yLA0KICAgICAgICAgIEVpcEpvYlNlbGVjdG9yLA0KICAgICAgICAgIEVpcE9yZ1NlbGVjdG9yLA0KICAgICAgICAgIEVpcFBvc3RTZWxlY3RvciwNCiAgICAgICAgICBFaXBSb2xlU2VsZWN0b3IsDQogICAgICAgICAgRWlwUmFkaW8sDQogICAgICAgICAgRWlwVGV4dGFyZWEsDQogICAgICAgICAgRWlwRm9udCwNCiAgICAgICAgICBFaXBEaWFsb2csDQogICAgICAgICAgRWlwQnV0dG9uLA0KICAgICAgICAgIEVpcERhdGUsDQogICAgICAgICAgRWlwSW1nLA0KICAgICAgICAgIEVpcFZpZXdlciwNCiAgICAgICAgICBFaXBTd2l0Y2gsDQogICAgICAgICAgSHRGaWxlLA0KICAgICAgICAgIFZSdW50aW1lVGVtcGxhdGUsDQogICAgICAgICAgSHRHYW5nZWRTZWxlY3QsDQogICAgICAgICAgRWlwUmVsRmxvdywNCiAgICAgICAgICBFaXBTdWJEaWFsb2csDQogICAgICAgICAgSHRMYWJlbCwNCiAgICAgICAgICBIdERpZ2l0YWwsDQogICAgICAgICAgSHRDdXJyZW5jeSwNCiAgICAgICAgICBFaXBSZWFsdGltZUlucHV0LA0KICAgICAgICAgIEVpcFJlYWx0aW1lVGV4dGFyZWEsDQogICAgICAgICAgRWlwU3RlcCwNCiAgICAgICAgICBIdElucHV0QXV0b2NvbXBsZXRlLA0KICAgICAgICAgIEh0VHJlZXNlbGVjdCwNCiAgICAgICAgICBIdENhc2NhZGVyLA0KICAgICAgICAgIEh0VHJlZSwNCiAgICAgICAgICBFaXBBdHRhY2htZW50LA0KICAgICAgICAgIEVpcERpYywNCiAgICAgICAgICBFaXBBdXRvY29tcGxldGUsDQogICAgICAgICAgRWlwQ2FzY2FkZXIsDQogICAgICAgICAgRWlwVHJlZXNlbGVjdCwNCiAgICAgICAgICBFaXBDb2xsYXBzZSwNCiAgICAgICAgICBFaXBQYWdpbmF0aW9uU3RlcHMsDQogICAgICAgICAgRWlwTWFwLA0KICAgICAgICAgIEVpcERhdGFWaWV3LA0KICAgICAgICAgIEVpcFN1bkRpYWxvZywNCiAgICAgICAgICBFaXBUYWcsDQogICAgICAgICAgRWlwSG90VGFibGUsDQogICAgICAgICAgRWlwSG90U3ViRGlhbG9nLA0KICAgICAgICAgIENvbnRyYWN0UHJldmlldywNCiAgICAgICAgICBFaXBTdWJ0YWJsZUJhY2tmaWxsLA0KICAgICAgICAgIEVpcERpdmlkZXIsDQogICAgICAgICAgRWlwT2ZmaWNlLA0KICAgICAgICAgIEVpcFFyY29kZSwNCiAgICAgICAgICBFaXBTaWduYXR1cmUsDQogICAgICAgICAgRWlwVGFicywNCiAgICAgICAgICBFaXBGb250VWVkaXRvcg0KICAgICAgICB9DQogICAgICB9KQ0KICAgIH0NCiAgfQ0KfQ0K"},null]}