@po-ui/ng-templates 16.6.1 → 16.7.0

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.
@@ -79,30 +79,39 @@ export const poPageDynamicDetailLiteralsDefault = {
79
79
  *
80
80
  * ### Utilização via rota
81
81
  *
82
- * Ao utilizar as rotas para carregar o template, o `page-dynamic-detail` disponibiliza propriedades para
83
- * poder especificar o endpoint dos dados e dos metadados. Exemplo de utilização:
82
+ * Ao utilizar as rotas para inicializar o template, o `page-dynamic-detail` disponibiliza propriedades que devem ser fornecidas no arquivo de configuração de rotas da aplicação, para
83
+ * poder especificar o endpoint dos dados e dos metadados que serão carregados na inicialização.
84
84
  *
85
- * O componente primeiro irá carregar o metadado da rota definida na propriedade serviceMetadataApi
86
- * e depois irá buscar da rota definida na propriedade serviceLoadApi.
87
- *
88
- * > Caso o servidor retornar um erro ao recuperar o metadados, será repassado o metadados salvo em cache,
89
- * se o cache não existe será disparado uma notificação.
85
+ * Exemplo de utilização:
90
86
  *
87
+ * Arquivo de configuração de rotas da aplicação: `app-routing.module.ts`
91
88
  * ```
89
+ * const routes: Routes = [
92
90
  * {
93
91
  * path: 'people/:id',
94
92
  * component: PoPageDynamicDetailComponent,
95
93
  * data: {
96
94
  * serviceApi: 'http://localhost:3000/v1/people', // endpoint dos dados
97
- * serviceMetadataApi: 'http://localhost:3000/v1/metadata', // endpoint dos metadados
98
- * serviceLoadApi: 'http://localhost:3000/load-metadata' // endpoint de customizações dos metadados
95
+ * serviceMetadataApi: 'http://localhost:3000/v1/metadata', // endpoint dos metadados utilizando o método HTTP Get
96
+ * serviceLoadApi: 'http://localhost:3000/load-metadata' // endpoint de customizações dos metadados utilizando o método HTTP Post
99
97
  * }
100
- * }
98
+ * },
99
+ * {
100
+ * path: 'home',
101
+ * component: HomeExampleComponent
102
+ * }
103
+ * ];
104
+ *
101
105
  * ```
106
+ * O componente primeiro irá carregar o metadado da rota definida na propriedade serviceMetadataApi
107
+ * e depois irá buscar da rota definida na propriedade serviceLoadApi.
102
108
  *
103
109
  * A requisição dos metadados é feita na inicialização do template para buscar os metadados da página passando o
104
110
  * tipo do metadado esperado e a versão cacheada pelo browser.
105
111
  *
112
+ * > Caso o servidor retornar um erro ao recuperar os metadados, serão repassados os metadados salvos em cache,
113
+ * se o cache não existir será disparada uma notificação.
114
+ *
106
115
  * O formato esperado na resposta da requisição está especificado na interface
107
116
  * [PoPageDynamicDetailMetadata](/documentation/po-page-dynamic-detail#po-page-dynamic-detail-metadata). Por exemplo:
108
117
  *
@@ -533,4 +542,4 @@ export class PoPageDynamicDetailComponent {
533
542
  type: Input,
534
543
  args: ['p-fields']
535
544
  }] }); })();
536
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHcEUsT0FBTyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFjLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFPTCxlQUFlLEVBQ2hCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJN0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7OztJQ3BCM0Ysd0JBQW9HOzs7SUFJcEcsaUNBQVc7SUFDVCwwQkFBMEM7SUFDMUMsK0JBQWlDO0lBQy9CLFlBQ0Y7SUFBQSxpQkFBTyxFQUFBOzs7SUFETCxlQUNGO0lBREUsaUVBQ0Y7OztJQUtGLHFDQUEwRTs7O0lBQXpELHdDQUFtQix5QkFBQTs7QURrQnRDLE1B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QUV2QixDQUFDLG9CQUFvQixFQUFFLGlDQUFpQyxDQUFDO29UQUk3QyxVQUFVO2tCQUFoQyxLQUFLO21CQUFDLGNBQWM7WUErQkosTUFBTTtrQkFBdEIsS0FBSzttQkFBQyxRQUFRO1lBR0csS0FBSztrQkFBdEIsS0FBSzttQkFBQyxTQUFTO1lBb0NRLFVBQVU7a0JBQWpDLEtBQUs7bUJBQUMsZUFBZTtZQXFCRSxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUF3QlUsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBU0MsTUFBTTtrQkFBNUIsS0FBSzttQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlLCBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBjb25jYXQsIEVNUFRZLCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgUG9CcmVhZGNydW1iLFxuICBQb0RpYWxvZ0NvbmZpcm1PcHRpb25zLFxuICBQb0RpYWxvZ1NlcnZpY2UsXG4gIFBvTGFuZ3VhZ2VTZXJ2aWNlLFxuICBQb05vdGlmaWNhdGlvblNlcnZpY2UsXG4gIFBvUGFnZUFjdGlvbixcbiAgcG9Mb2NhbGVEZWZhdWx0XG59IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcblxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiwgbWFwT2JqZWN0QnlQcm9wZXJ0aWVzLCB2YWx1ZXNGcm9tT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwtYWN0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbEZpZWxkIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwtZmllbGQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tcGFnZS1keW5hbWljL3BvLXBhZ2UtZHluYW1pYy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zU2VydmljZSB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLWRldGFpbC1hY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbE9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWRldGFpbC1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8tcGFnZS1jdXN0b21pemF0aW9uL3BvLXBhZ2UtY3VzdG9taXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWN1c3RvbWl6YXRpb24vcG8tcGFnZS1keW5hbWljLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNEZXRhaWxNZXRhRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLW1ldGFkYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsQmVmb3JlQmFjayB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLWJlZm9yZS1iYWNrLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsQmVmb3JlUmVtb3ZlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwtYmVmb3JlLXJlbW92ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbEJlZm9yZUVkaXQgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWRldGFpbC1iZWZvcmUtZWRpdC5pbnRlcmZhY2UnO1xuXG50eXBlIFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24gPSBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY0RldGFpbE9wdGlvbnMpO1xuXG5leHBvcnQgY29uc3QgcG9QYWdlRHluYW1pY0RldGFpbExpdGVyYWxzRGVmYXVsdCA9IHtcbiAgZW46IHtcbiAgICBwYWdlQWN0aW9uRWRpdDogJ0VkaXQnLFxuICAgIHBhZ2VBY3Rpb25SZW1vdmU6ICdEZWxldGUnLFxuICAgIHBhZ2VBY3Rpb25CYWNrOiAnQmFjaycsXG4gICAgY29uZmlybVJlbW92ZVRpdGxlOiAnQ29uZmlybSBkZWxldGUnLFxuICAgIGNvbmZpcm1SZW1vdmVNZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8gWW91IGNhbiBub3QgdW5kbyB0aGlzIGFjdGlvbi4nLFxuICAgIHJlbW92ZU5vdGlmaWNhdGlvblN1Y2Nlc3M6ICdJdGVtIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LicsXG4gICAgcmVnaXN0ZXJOb3RGb3VuZDogJ1JlZ2lzdGVyIG5vdCBmb3VuZC4nXG4gIH0sXG4gIGVzOiB7XG4gICAgcGFnZUFjdGlvbkVkaXQ6ICdFZGl0YXInLFxuICAgIHBhZ2VBY3Rpb25SZW1vdmU6ICdCb3JyYXInLFxuICAgIHBhZ2VBY3Rpb25CYWNrOiAnUmVncmVzbycsXG4gICAgY29uZmlybVJlbW92ZVRpdGxlOiAnQ29uZmlybWFyIGxhIGV4Y2x1c2nDs24nLFxuICAgIGNvbmZpcm1SZW1vdmVNZXNzYWdlOiAnwr9Fc3TDoSBzZWd1cm8gZGUgcXVlIGRlc2VhIGVsaW1pbmFyIGVzdGUgcmVnaXN0cm8/IE5vIHB1ZWRlIGRlc2hhY2VyIGVzdGEgYWNjacOzbi4nLFxuICAgIHJlbW92ZU5vdGlmaWNhdGlvblN1Y2Nlc3M6ICdFbGVtZW50byBlbGltaW5hZG8gY29uIMOpeGl0by4nLFxuICAgIHJlZ2lzdGVyTm90Rm91bmQ6ICdSZWdpc3RybyBubyBlbmNvbnRyYWRvLidcbiAgfSxcbiAgcHQ6IHtcbiAgICBwYWdlQWN0aW9uRWRpdDogJ0VkaXRhcicsXG4gICAgcGFnZUFjdGlvblJlbW92ZTogJ0V4Y2x1aXInLFxuICAgIHBhZ2VBY3Rpb25CYWNrOiAnVm9sdGFyJyxcbiAgICBjb25maXJtUmVtb3ZlVGl0bGU6ICdDb25maXJtYXIgZXhjbHVzw6NvJyxcbiAgICBjb25maXJtUmVtb3ZlTWVzc2FnZTogJ1RlbSBjZXJ0ZXphIGRlIHF1ZSBkZXNlamEgZXhjbHVpciBlc3NlIHJlZ2lzdHJvPyBWb2PDqiBuw6NvIHBvZGVyw6EgZGVzZmF6ZXIgZXNzYSBhw6fDo28uJyxcbiAgICByZW1vdmVOb3RpZmljYXRpb25TdWNjZXNzOiAnSXRlbSBleGNsdcOtZG8gY29tIHN1Y2Vzc28uJyxcbiAgICByZWdpc3Rlck5vdEZvdW5kOiAnUmVnaXN0cm8gbsOjbyBlbmNvbnRyYWRvLidcbiAgfSxcbiAgcnU6IHtcbiAgICBwYWdlQWN0aW9uRWRpdDogJ9Cg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMJyxcbiAgICBwYWdlQWN0aW9uUmVtb3ZlOiAn0KPQtNCw0LvQuNGC0YwnLFxuICAgIHBhZ2VBY3Rpb25CYWNrOiAn0J3QsNC30LDQtCcsXG4gICAgY29uZmlybVJlbW92ZVRpdGxlOiAn0J/QvtC00YLQstC10YDQttC00LXQvdC40LUg0YPQtNCw0LvQtdC90LjRjycsXG4gICAgY29uZmlybVJlbW92ZU1lc3NhZ2U6ICfQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINGN0YLRgyDQt9Cw0L/QuNGB0Yw/ICDQktGLINC90LUg0LzQvtC20LXRgtC1INC+0YLQvNC10L3QuNGC0Ywg0Y3RgtC+INC00LXQudGB0YLQstC40LUuJyxcbiAgICByZW1vdmVOb3RpZmljYXRpb25TdWNjZXNzOiAn0K3Qu9C10LzQtdC90YIg0YPRgdC/0LXRiNC90L4g0YPQtNCw0LvQtdC9LicsXG4gICAgcmVnaXN0ZXJOb3RGb3VuZDogJ9CX0LDQv9C40YHRjCDQvdC1INC90LDQudC00LXQvdCwLidcbiAgfVxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBPIGBwby1wYWdlLWR5bmFtaWMtZGV0YWlsYCDDqSB1bWEgcMOhZ2luYSBxdWUgc2VydmUgcGFyYSBleGliaXIgcmVnaXN0cm9zIGVtIGRldGFsaGVzLFxuICogbyBtZXNtbyB0YW1iw6ltIHN1cG9ydGEgbWV0YWRhZG9zIGNvbmZvcm1lIGVzcGVjaWZpY2FkbyBuYSBkb2N1bWVudGHDp8Ojby5cbiAqXG4gKlxuICogIyMjIFV0aWxpemHDp8OjbyB2aWEgcm90YVxuICpcbiAqIEFvIHV0aWxpemFyIGFzIHJvdGFzIHBhcmEgY2FycmVnYXIgbyB0ZW1wbGF0ZSwgbyBgcGFnZS1keW5hbWljLWRldGFpbGAgZGlzcG9uaWJpbGl6YSBwcm9wcmllZGFkZXMgcGFyYVxuICogcG9kZXIgZXNwZWNpZmljYXIgbyBlbmRwb2ludCBkb3MgZGFkb3MgZSBkb3MgbWV0YWRhZG9zLiBFeGVtcGxvIGRlIHV0aWxpemHDp8OjbzpcbiAqXG4gKiBPIGNvbXBvbmVudGUgcHJpbWVpcm8gaXLDoSBjYXJyZWdhciBvIG1ldGFkYWRvIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZU1ldGFkYXRhQXBpXG4gKiBlIGRlcG9pcyBpcsOhIGJ1c2NhciBkYSByb3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHNlcnZpY2VMb2FkQXBpLlxuICpcbiAqID4gQ2FzbyBvIHNlcnZpZG9yIHJldG9ybmFyIHVtIGVycm8gYW8gcmVjdXBlcmFyIG8gbWV0YWRhZG9zLCBzZXLDoSByZXBhc3NhZG8gbyBtZXRhZGFkb3Mgc2Fsdm8gZW0gY2FjaGUsXG4gKiBzZSBvIGNhY2hlIG7Do28gZXhpc3RlIHNlcsOhIGRpc3BhcmFkbyB1bWEgbm90aWZpY2HDp8Ojby5cbiAqXG4gKiBgYGBcbiAqIHtcbiAqICAgcGF0aDogJ3Blb3BsZS86aWQnLFxuICogICBjb21wb25lbnQ6IFBvUGFnZUR5bmFtaWNEZXRhaWxDb21wb25lbnQsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzZXJ2aWNlQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL3YxL3Blb3BsZScsIC8vIGVuZHBvaW50IGRvcyBkYWRvc1xuICogICAgIHNlcnZpY2VNZXRhZGF0YUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9tZXRhZGF0YScsIC8vIGVuZHBvaW50IGRvcyBtZXRhZGFkb3NcbiAqICAgICBzZXJ2aWNlTG9hZEFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9sb2FkLW1ldGFkYXRhJyAvLyBlbmRwb2ludCBkZSBjdXN0b21pemHDp8O1ZXMgZG9zIG1ldGFkYWRvc1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBIHJlcXVpc2nDp8OjbyBkb3MgbWV0YWRhZG9zIMOpIGZlaXRhIG5hIGluaWNpYWxpemHDp8OjbyBkbyB0ZW1wbGF0ZSBwYXJhIGJ1c2NhciBvcyBtZXRhZGFkb3MgZGEgcMOhZ2luYSBwYXNzYW5kbyBvXG4gKiB0aXBvIGRvIG1ldGFkYWRvIGVzcGVyYWRvIGUgYSB2ZXJzw6NvIGNhY2hlYWRhIHBlbG8gYnJvd3Nlci5cbiAqXG4gKiBPIGZvcm1hdG8gZXNwZXJhZG8gbmEgcmVzcG9zdGEgZGEgcmVxdWlzacOnw6NvIGVzdMOhIGVzcGVjaWZpY2FkbyBuYSBpbnRlcmZhY2VcbiAqIFtQb1BhZ2VEeW5hbWljRGV0YWlsTWV0YWRhdGFdKC9kb2N1bWVudGF0aW9uL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwjcG8tcGFnZS1keW5hbWljLWRldGFpbC1tZXRhZGF0YSkuIFBvciBleGVtcGxvOlxuICpcbiAqIGBgYFxuICogIHtcbiAqICAgdmVyc2lvbjogMSxcbiAqICAgdGl0bGU6ICdQZXJzb24gRGV0YWlsJyxcbiAqICAgZmllbGRzOiBbXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2lkJywga2V5OiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICogICAgIHsgcHJvcGVydHk6ICdzdGF0dXMnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ25hbWUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ25pY2tuYW1lJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdiaXJ0aGRhdGUnLCBsYWJlbDogJ0JpcnRoIGRhdGUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2dlbnJlJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdjaXR5JyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdjb3VudHJ5JyB9XG4gKiAgIF1cbiAqIH1cbiAqIGBgYFxuICpcbiAqID4gQ2FzbyBvIGVuZHBvaW50IGRvcyBtZXRhZGFkb3MgbsOjbyBzZWphIGVzcGVjaWZpY2Fkbywgc2Vyw6EgZmVpdG8gdW1hIHJlcXVpc2nDp8OjbyB1dGlsaXphbmRvIG8gYHNlcnZpY2VBcGlgIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICogYGBgXG4gKiBHRVQge2VuZC1wb2ludH0vbWV0YWRhdGE/dHlwZT1kZXRhaWwmdmVyc2lvbj17dmVyc2lvbn1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy1kZXRhaWwtdXNlclwiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIERldGFpbCBVc2VyXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtZGV0YWlsLXVzZXIvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1kZXRhaWwtdXNlci5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtZGV0YWlsLXVzZXIvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1kZXRhaWwtdXNlci5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1wYWdlLWR5bmFtaWMtZGV0YWlsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtQb1BhZ2VEeW5hbWljU2VydmljZSwgUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBQb1BhZ2VEeW5hbWljRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogT2JqZXRvIGNvbSBwcm9wcmllZGFkZXMgZG8gYnJlYWRjcnVtYi4gKi9cbiAgQElucHV0KCdwLWJyZWFkY3J1bWInKSBicmVhZGNydW1iPzogUG9CcmVhZGNydW1iID0geyBpdGVtczogW10gfTtcblxuICAvKipcbiAgICogRnVuw6fDo28gb3Ugc2VydmnDp28gcXVlIHNlcsOhIGV4ZWN1dGFkbyBuYSBpbmljaWFsaXphw6fDo28gZG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogQSBwcm9wcmllZGFkZSBhY2VpdGEgb3Mgc2VndWludGVzIHRpcG9zOlxuICAgKiAtIGBzdHJpbmdgOiAqRW5kcG9pbnQqIHVzYWRvIHBlbG8gY29tcG9uZW50ZSBwYXJhIHJlcXVpc2nDp8OjbyB2aWEgYFBPU1RgLlxuICAgKiAtIGBmdW5jdGlvbmA6IE3DqXRvZG8gcXVlIHNlcsOhIGV4ZWN1dGFkby5cbiAgICpcbiAgICogTyByZXRvcm5vIGRlc3RhIGZ1bsOnw6NvIGRldmUgc2VyIGRvIHRpcG8gYFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zYCxcbiAgICogb25kZSBvIHVzdcOhcmlvIHBvZGVyw6EgY3VzdG9taXphciBub3ZvcyBjYW1wb3MsIGJyZWFkY3J1bWIsIHRpdGxlIGUgYWN0aW9uc1xuICAgKlxuICAgKiBQb3IgZXhlbXBsbzpcbiAgICpcbiAgICogYGBgXG4gICAqIGdldFBhZ2VPcHRpb25zKCk6IFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zIHtcbiAgICogcmV0dXJuIHtcbiAgICogICBhY3Rpb25zOlxuICAgKiAgICAgeyBuZXc6ICduZXcnLCBlZGl0OiAnZWRpdC86aWQnLCByZW1vdmU6IHRydWUgfSxcbiAgICogICBmaWVsZHM6IFtcbiAgICogICAgIHsgcHJvcGVydHk6ICdpZENhcmQnLCBncmlkQ29sdW1uczogNiB9XG4gICAqICAgXVxuICAgKiB9O1xuICAgKiB9XG4gICAqXG4gICAqIGBgYFxuICAgKiBQYXJhIHJlZmVyZW5jaWFyIGEgc3VhIGZ1bsOnw6NvIHV0aWxpemUgYSBwcm9wcmllZGFkZSBgYmluZGAsIHBvciBleGVtcGxvOlxuICAgKiBgYGBcbiAgICogIFtwLWxvYWRdPVwib25Mb2FkT3B0aW9ucy5iaW5kKHRoaXMpXCJcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtbG9hZCcpIG9uTG9hZDogc3RyaW5nIHwgKCgpID0+IFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zKTtcblxuICAvKiogVMOtdHVsbyBkYSBww6FnaW5hLiAqL1xuICBASW5wdXQoJ3AtdGl0bGUnKSB0aXRsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRW5kcG9pbnQgdXNhZG8gcGVsbyB0ZW1wbGF0ZSBwYXJhIHJlcXVpc2nDp8OjbyBkbyByZWN1cnNvIHF1ZSBzZXLDo28gZXhpYmlkby5cbiAgICpcbiAgICogQ2FzbyBhIGHDp8OjbyBgcmVtb3ZlYCBlc3RpdmVyIGNvbmZpZ3VyYWRhLCBzZXLDoSBmZWl0byB1bWEgcmVxdWlzacOnw6NvIGRlIGV4Y2x1c8OjbyBuZXNzZSBtZXNtbyBlbmRwb2ludCBwYXNzYW5kbyBvcyBjYW1wb3NcbiAgICogc2V0YWRvcyBjb21vIGBrZXk6IHRydWVgLlxuICAgKlxuICAgKiA+IGBERUxFVEUge2VuZC1wb2ludH0ve2tleXN9YFxuICAgKlxuICAgKiBgYGBcbiAgICogIDxwby1wYWdlLWR5bmFtaWMtZGV0YWlsXG4gICAqICAgIFtwLWFjdGlvbnNdPVwieyByZW1vdmU6ICcvJyB9XCJcbiAgICogICAgW3AtZmllbGRzXT1cIlsgeyBwcm9wZXJ0eTogJ2lkJywga2V5OiB0cnVlIH0gXVwiXG4gICAqICAgIHAtc2VydmljZT1cIi9hcGkvcG8tc2FtcGxlcy92MS9wZW9wbGVcIlxuICAgKiAgICAuLi4+XG4gICAqICA8L3BvLXBhZ2UtZHluYW1pYy1kZXRhaWw+XG4gICAqIGBgYFxuICAgKlxuICAgKiBSZXNxdWlzacOnw6NvIGRpc3BhcmFkYSwgb25kZSBhIHByb3ByaWVkYWRlIGBpZGAgw6kgaWd1YWwgYSAyOlxuICAgKlxuICAgKiBgYGBcbiAgICogIERFTEVURSAvYXBpL3BvLXNhbXBsZXMvdjEvcGVvcGxlLzIgSFRUUC8xLjFcbiAgICogIEhvc3Q6IGxvY2FsaG9zdDo0MDAwXG4gICAqICBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gICAqICBBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW5cbiAgICogIC4uLlxuICAgKiBgYGBcbiAgICpcbiAgICogPiBDYXNvIGVzdGVqYSB1c2FuZG8gbWV0YWRhZG9zIGNvbSBvIHRlbXBsYXRlLCBzZXLDoSBkaXNwYXJhZG8gdW1hIHJlcXVpc2nDp8OjbyBuYSBpbmljaWFsaXphw6fDo28gZG8gdGVtcGxhdGUgcGFyYSBidXNjYXJcbiAgICogPiBvcyBtZXRhZGFkb3MgZGEgcMOhZ2luYSBwYXNzYW5kbyBvIHRpcG8gZG8gbWV0YWRhZG8gZXNwZXJhZG8gZSBhIHZlcnPDo28gY2FjaGVhZGEgcGVsbyBicm93c2VyLlxuICAgKiA+XG4gICAqID4gYEdFVCB7ZW5kLXBvaW50fS9tZXRhZGF0YT90eXBlPWRldGFpbCZ2ZXJzaW9uPXt2ZXJzaW9ufWBcbiAgICovXG4gIEBJbnB1dCgncC1zZXJ2aWNlLWFwaScpIHNlcnZpY2VBcGk6IHN0cmluZztcblxuICBsaXRlcmFscztcbiAgbW9kZWw6IGFueSA9IHt9O1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gIHByaXZhdGUgX2FjdGlvbnM6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zID0ge307XG4gIHByaXZhdGUgX2F1dG9Sb3V0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZHVwbGljYXRlczogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9maWVsZHM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBfa2V5czogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9wYWdlQWN0aW9uczogQXJyYXk8UG9QYWdlQWN0aW9uPiA9IFtdO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBhcyBhw6fDtWVzIGRhIHDDoWdpbmEgZGUgYWNvcmRvIGNvbSBhIGludGVyZmFjZSBgUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNgLlxuICAgKi9cbiAgQElucHV0KCdwLWFjdGlvbnMnKSBzZXQgYWN0aW9ucyh2YWx1ZTogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnMpIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gdGhpcy5pc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IHt9O1xuXG4gICAgdGhpcy5fcGFnZUFjdGlvbnMgPSB0aGlzLmdldFBhZ2VBY3Rpb25zKHRoaXMuX2FjdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fYWN0aW9ucyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEB0b2RvIFZhbGlkYXIgcm90YXMgbmEgbcOjbyBwb2lzIHNlIGV4aXN0aXIgdW1hIHJvdGEgJyoqJyBvIGNhdGNoIGRvIG5hdmlnYXRpb24gbsOjbyBmdW5jaW9uYS5cbiAgICpcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBDcmlhIGF1dG9tYXRpY2FtZW50ZSBhcyByb3RhcyBkZSBlZGnDp8OjbyAobm92by9kdXBsaWNhdGUpIGUgZGV0YWxoZXMgY2FzbyBhcyBhw6fDtWVzXG4gICAqIGVzdGVqYW0gZGVmaW5pZGFzIG5hcyBhw6fDtWVzLlxuICAgKlxuICAgKiA+IFBhcmEgbyBjb3JyZXRvIGZ1bmNpb25hbWVudG8gbsOjbyBwb2RlIGhhdmVyIG5lbmh1bSByb3RhIGNvcmluZ2EgKGAqKmApIGVzcGVjaWZpY2FkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgncC1hdXRvLXJvdXRlcicpIHNldCBhdXRvUm91dGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b1JvdXRlciA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IGF1dG9Sb3V0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9Sb3V0ZXI7XG4gIH1cblxuICAvKiogTGlzdGEgZG9zIGNhbXBvcyBleGliaWRvcyBuYSBww6FnaW5hLiAqL1xuICBASW5wdXQoJ3AtZmllbGRzJykgc2V0IGZpZWxkcyh2YWx1ZTogQXJyYXk8UG9QYWdlRHluYW1pY0RldGFpbEZpZWxkPikge1xuICAgIHRoaXMuX2ZpZWxkcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IFtdO1xuXG4gICAgdGhpcy5fa2V5cyA9IHRoaXMuZ2V0S2V5c0J5RmllbGRzKHRoaXMuZmllbGRzKTtcbiAgICB0aGlzLl9kdXBsaWNhdGVzID0gdGhpcy5nZXREdXBsaWNhdGVzQnlGaWVsZHModGhpcy5maWVsZHMpO1xuICB9XG5cbiAgZ2V0IGZpZWxkcygpOiBBcnJheTxQb1BhZ2VEeW5hbWljRGV0YWlsRmllbGQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRzO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHBvTm90aWZpY2F0aW9uOiBQb05vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb0RpYWxvZ1NlcnZpY2U6IFBvRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNTZXJ2aWNlOiBQb1BhZ2VEeW5hbWljU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zU2VydmljZTogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2U6IFBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuXG4gICAgdGhpcy5saXRlcmFscyA9IHtcbiAgICAgIC4uLnBvUGFnZUR5bmFtaWNEZXRhaWxMaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgIC4uLnBvUGFnZUR5bmFtaWNEZXRhaWxMaXRlcmFsc0RlZmF1bHRbbGFuZ3VhZ2VdXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZERhdGFGcm9tQVBJKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4ge1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkdXBsaWNhdGVzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5fZHVwbGljYXRlc107XG4gIH1cblxuICBnZXQga2V5cygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2tleXNdO1xuICB9XG5cbiAgZ2V0IHBhZ2VBY3Rpb25zKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFnZUFjdGlvbnNdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmUoXG4gICAgYWN0aW9uUmVtb3ZlOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlPzogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNbJ2JlZm9yZVJlbW92ZSddXG4gICkge1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KHRoaXMubW9kZWwpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlUmVtb3ZlKGFjdGlvbkJlZm9yZVJlbW92ZSwgdW5pcXVlS2V5LCB7IC4uLnRoaXMubW9kZWwgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChiZWZvcmVSZW1vdmVSZXN1bHQ6IFBvUGFnZUR5bmFtaWNEZXRhaWxCZWZvcmVSZW1vdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JlbW92ZUFjdGlvbiA9IGJlZm9yZVJlbW92ZVJlc3VsdD8ubmV3VXJsID8/IGFjdGlvblJlbW92ZTtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93QWN0aW9uID0gYmVmb3JlUmVtb3ZlUmVzdWx0Py5hbGxvd0FjdGlvbiA/PyB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoIWFsbG93QWN0aW9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV3UmVtb3ZlQWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRlUmVtb3ZlKG5ld1JlbW92ZUFjdGlvbiwgdW5pcXVlS2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld1JlbW92ZUFjdGlvbih1bmlxdWVLZXksIHsgLi4udGhpcy5tb2RlbCB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlybVJlbW92ZShcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydyZW1vdmUnXSxcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmU6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydiZWZvcmVSZW1vdmUnXVxuICApIHtcbiAgICBjb25zdCBjb25maXJtT3B0aW9uczogUG9EaWFsb2dDb25maXJtT3B0aW9ucyA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVUaXRsZSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZU1lc3NhZ2UsXG4gICAgICBjb25maXJtOiB0aGlzLnJlbW92ZS5iaW5kKHRoaXMsIGFjdGlvblJlbW92ZSwgYWN0aW9uQmVmb3JlUmVtb3ZlKVxuICAgIH07XG5cbiAgICB0aGlzLnBvRGlhbG9nU2VydmljZS5jb25maXJtKGNvbmZpcm1PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVJlbW92ZShwYXRoLCB1bmlxdWVLZXk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmRlbGV0ZVJlc291cmNlKHVuaXF1ZUtleSkucGlwZShcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uc3VjY2Vzcyh0aGlzLmxpdGVyYWxzLnJlbW92ZU5vdGlmaWNhdGlvblN1Y2Nlc3MpO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBwYXRoIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRVbmlxdWVLZXkoaXRlbSkge1xuICAgIGNvbnN0IGtleXMgPSBtYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5rZXlzKTtcblxuICAgIHJldHVybiB2YWx1ZXNGcm9tT2JqZWN0KGtleXMpLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ29CYWNrKGFjdGlvbkJhY2s6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydiYWNrJ10pIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVCYWNrKHRoaXMuYWN0aW9ucy5iZWZvcmVCYWNrKVxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVCYWNrUmVzdWx0OiBQb1BhZ2VEeW5hbWljRGV0YWlsQmVmb3JlQmFjaykgPT5cbiAgICAgICAgICB0aGlzLmV4ZWN1dGVCYWNrQWN0aW9uKGFjdGlvbkJhY2ssIGJlZm9yZUJhY2tSZXN1bHQ/LmFsbG93QWN0aW9uLCBiZWZvcmVCYWNrUmVzdWx0Py5uZXdVcmwpXG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlQmFja0FjdGlvbihhY3Rpb25CYWNrOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1snYmFjayddLCBhbGxvd0FjdGlvbj8sIG5ld1VybD86IHN0cmluZykge1xuICAgIGNvbnN0IGlzQWxsb3dlZEFjdGlvbiA9IHR5cGVvZiBhbGxvd0FjdGlvbiA9PT0gJ2Jvb2xlYW4nID8gYWxsb3dBY3Rpb24gOiB0cnVlO1xuXG4gICAgaWYgKGlzQWxsb3dlZEFjdGlvbikge1xuICAgICAgaWYgKGFjdGlvbkJhY2sgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgYWN0aW9uQmFjayA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uQmFjayA9PT0gJ3N0cmluZycgfHwgbmV3VXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbmV3VXJsIHx8IGFjdGlvbkJhY2tdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjdGlvbkJhY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0UmVzb3VyY2UoaWQpLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5zZXRVbmRlZmluZWRUb01vZGVsQW5kQWN0aW9ucygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubW9kZWwgPSByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5zZXRVbmRlZmluZWRUb01vZGVsQW5kQWN0aW9ucygpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldFVuZGVmaW5lZFRvTW9kZWxBbmRBY3Rpb25zKCkge1xuICAgIHRoaXMubW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3Rpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRhZGF0YShcbiAgICBzZXJ2aWNlQXBpRnJvbVJvdXRlOiBzdHJpbmcsXG4gICAgb25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uXG4gICk6IE9ic2VydmFibGU8UG9QYWdlRHluYW1pY0RldGFpbE1ldGFEYXRhPiB7XG4gICAgaWYgKHNlcnZpY2VBcGlGcm9tUm91dGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmdldE1ldGFkYXRhPFBvUGFnZUR5bmFtaWNEZXRhaWxNZXRhRGF0YT4oJ2RldGFpbCcpLnBpcGUoXG4gICAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5hdXRvUm91dGVyID0gcmVzcG9uc2UuYXV0b1JvdXRlciB8fCB0aGlzLmF1dG9Sb3V0ZXI7XG4gICAgICAgICAgdGhpcy5hY3Rpb25zID0gcmVzcG9uc2UuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnM7XG4gICAgICAgICAgdGhpcy5icmVhZGNydW1iID0gcmVzcG9uc2UuYnJlYWRjcnVtYiB8fCB0aGlzLmJyZWFkY3J1bWI7XG4gICAgICAgICAgdGhpcy5maWVsZHMgPSByZXNwb25zZS5maWVsZHMgfHwgdGhpcy5maWVsZHM7XG4gICAgICAgICAgdGhpcy50aXRsZSA9IHJlc3BvbnNlLnRpdGxlIHx8IHRoaXMudGl0bGU7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpO1xuICB9XG5cbiAgLy8gQHRvZG8gVmFsaWRhciByb3RhcyBuYSBtw6NvIHBvaXMgc2UgZXhpc3RpciB1bWEgcm90YSAnKionIG8gY2F0Y2ggZG8gbmF2aWdhdGlvbiBuw6NvIGZ1bmNpb25hLlxuICBwcml2YXRlIG5hdmlnYXRlVG8oXG4gICAgcm91dGU6IHsgcGF0aDogc3RyaW5nOyBjb21wb25lbnQ/OyB1cmw/OiBzdHJpbmc7IHBhcmFtcz86IGFueSB9LFxuICAgIGZvcmNlU3RvcEF1dG9Sb3V0ZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGUudXJsIHx8IHJvdXRlLnBhdGhdLCB7IHF1ZXJ5UGFyYW1zOiByb3V0ZS5wYXJhbXMgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgaWYgKGZvcmNlU3RvcEF1dG9Sb3V0ZXIgfHwgIXRoaXMuYXV0b1JvdXRlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm91dGVyLmNvbmZpZy51bnNoaWZ0KDxSb3V0ZT57XG4gICAgICAgIHBhdGg6IHJvdXRlLnBhdGgsXG4gICAgICAgIGNvbXBvbmVudDogcm91dGUuY29tcG9uZW50LFxuICAgICAgICBkYXRhOiB7IHNlcnZpY2VBcGk6IHRoaXMuc2VydmljZUFwaSwgYXV0b1JvdXRlcjogdHJ1ZSB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHJvdXRlLCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkVkaXQoYWN0aW9uOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1snZWRpdCddKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleSh0aGlzLm1vZGVsKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZUVkaXQodGhpcy5hY3Rpb25zLmJlZm9yZUVkaXQsIGlkLCB0aGlzLm1vZGVsKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGJlZm9yZUVkaXRSZXN1bHQ6IFBvUGFnZUR5bmFtaWNEZXRhaWxCZWZvcmVFZGl0KSA9PlxuICAgICAgICAgICAgdGhpcy5leGVjdXRlRWRpdEFjdGlvbihhY3Rpb24sIGJlZm9yZUVkaXRSZXN1bHQsIGlkKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlRWRpdEFjdGlvbihcbiAgICBhY3Rpb246IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydlZGl0J10sXG4gICAgYmVmb3JlRWRpdFJlc3VsdDogUG9QYWdlRHluYW1pY0RldGFpbEJlZm9yZUVkaXQsXG4gICAgaWQ6IGFueVxuICApIHtcbiAgICBjb25zdCBuZXdFZGl0QWN0aW9uID0gYmVmb3JlRWRpdFJlc3VsdD8ubmV3VXJsID8/IGFjdGlvbjtcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IGJlZm9yZUVkaXRSZXN1bHQ/LmFsbG93QWN0aW9uID8/IHRydWU7XG5cbiAgICBpZiAoIWFsbG93QWN0aW9uKSB7XG4gICAgICByZXR1cm4gb2Yoe30pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3RWRpdEFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMub3BlbkVkaXRVcmwobmV3RWRpdEFjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0VkaXRBY3Rpb24oaWQsIHsgLi4udGhpcy5tb2RlbCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5FZGl0VXJsKHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb2x2ZVVybCh0aGlzLm1vZGVsLCBwYXRoKTtcbiAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoLCB1cmwgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVVcmwoaXRlbTogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcblxuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoLzppZC9nLCB1bmlxdWVLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYWdlQWN0aW9ucyhhY3Rpb25zOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9ucyA9IHt9KTogQXJyYXk8UG9QYWdlQWN0aW9uPiB7XG4gICAgY29uc3QgcGFnZUFjdGlvbnMgPSBbXTtcblxuICAgIGlmIChhY3Rpb25zLmVkaXQpIHtcbiAgICAgIHBhZ2VBY3Rpb25zLnB1c2goeyBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uRWRpdCwgYWN0aW9uOiB0aGlzLm9wZW5FZGl0LmJpbmQodGhpcywgYWN0aW9ucy5lZGl0KSB9KTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aW9ucy5yZW1vdmUpIHtcbiAgICAgIHBhZ2VBY3Rpb25zLnB1c2goe1xuICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uUmVtb3ZlLFxuICAgICAgICBhY3Rpb246IHRoaXMuY29uZmlybVJlbW92ZS5iaW5kKHRoaXMsIGFjdGlvbnMucmVtb3ZlLCB0aGlzLmFjdGlvbnMuYmVmb3JlUmVtb3ZlKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbnMuYmFjayA9PT0gdW5kZWZpbmVkIHx8IGFjdGlvbnMuYmFjaykge1xuICAgICAgcGFnZUFjdGlvbnMucHVzaCh7IGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25CYWNrLCBhY3Rpb246IHRoaXMuZ29CYWNrLmJpbmQodGhpcywgYWN0aW9ucy5iYWNrKSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZUFjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGdldEtleXNCeUZpZWxkcyhmaWVsZHM6IEFycmF5PGFueT4gPSBbXSkge1xuICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmtleSA9PT0gdHJ1ZSkubWFwKGZpZWxkID0+IGZpZWxkLnByb3BlcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHVwbGljYXRlc0J5RmllbGRzKGZpZWxkczogQXJyYXk8YW55PiA9IFtdKSB7XG4gICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQuZHVwbGljYXRlID09PSB0cnVlKS5tYXAoZmllbGQgPT4gZmllbGQucHJvcGVydHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRnJvbUFQSSgpIHtcbiAgICBjb25zdCB7IHNlcnZpY2VBcGk6IHNlcnZpY2VBcGlGcm9tUm91dGUsIHNlcnZpY2VNZXRhZGF0YUFwaSwgc2VydmljZUxvYWRBcGkgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTtcbiAgICBjb25zdCB7IGlkIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtcztcblxuICAgIGNvbnN0IG9uTG9hZCA9IHNlcnZpY2VMb2FkQXBpIHx8IHRoaXMub25Mb2FkO1xuICAgIHRoaXMuc2VydmljZUFwaSA9IHNlcnZpY2VBcGlGcm9tUm91dGUgfHwgdGhpcy5zZXJ2aWNlQXBpO1xuXG4gICAgdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5jb25maWdTZXJ2aWNlQXBpKHsgZW5kcG9pbnQ6IHRoaXMuc2VydmljZUFwaSwgbWV0YWRhdGE6IHNlcnZpY2VNZXRhZGF0YUFwaSB9KTtcblxuICAgIGNvbnN0IG1ldGFkYXRhJCA9IHRoaXMuZ2V0TWV0YWRhdGEoc2VydmljZUFwaUZyb21Sb3V0ZSwgb25Mb2FkKTtcbiAgICBjb25zdCBkYXRhJCA9IHRoaXMubG9hZERhdGEoaWQpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY29uY2F0KG1ldGFkYXRhJCwgZGF0YSQpLnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKG9uTG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9EeW5hbWljUGFnZU9wdGlvbnMob25Mb2FkKS5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2VQb09wdGlvbiA9PlxuICAgICAgICAgIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuY2hhbmdlT3JpZ2luYWxPcHRpb25zVG9OZXdPcHRpb25zKHRoaXMsIHJlc3BvbnNlUG9PcHRpb24pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24pOiBPYnNlcnZhYmxlPFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zPiB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcHRpb246IFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zID0ge1xuICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyxcbiAgICAgIGFjdGlvbnM6IHRoaXMuYWN0aW9ucyxcbiAgICAgIGJyZWFkY3J1bWI6IHRoaXMuYnJlYWRjcnVtYixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2VPcHRpb25TY2hlbWE6IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hPFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zPiA9IHtcbiAgICAgIHNjaGVtYTogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdmaWVsZHMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgICAgIGtleUZvck1lcmdlOiAncHJvcGVydHknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2FjdGlvbnMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2JyZWFkY3J1bWInXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ3RpdGxlJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldEN1c3RvbU9wdGlvbnMob25Mb2FkLCBvcmlnaW5hbE9wdGlvbiwgcGFnZU9wdGlvblNjaGVtYSk7XG4gIH1cbn1cbiIsIjxwby1wYWdlLWRlZmF1bHQgW3AtYWN0aW9uc109XCJwYWdlQWN0aW9uc1wiIFtwLWJyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlwiIFtwLXRpdGxlXT1cInRpdGxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbDsgdGhlbiB2aWV3RmllbGRzVGVtcGxhdGU7IGVsc2UgcmVnaXN0ZXJOb3RGb3VuZFRlbXBsYXRlXCI+IDwvbmctY29udGFpbmVyPlxuPC9wby1wYWdlLWRlZmF1bHQ+XG5cbjxuZy10ZW1wbGF0ZSAjcmVnaXN0ZXJOb3RGb3VuZFRlbXBsYXRlPlxuICA8cG8td2lkZ2V0PlxuICAgIDxzcGFuIGNsYXNzPVwicG8taWNvbiBwby1pY29uLWluZm9cIj48L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJwby1mb250LXRleHQtbGFyZ2VcIj5cbiAgICAgIHt7IGxpdGVyYWxzLnJlZ2lzdGVyTm90Rm91bmQgfX1cbiAgICA8L3NwYW4+XG4gIDwvcG8td2lkZ2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN2aWV3RmllbGRzVGVtcGxhdGU+XG4gIDxwby1keW5hbWljLXZpZXcgW3AtZmllbGRzXT1cImZpZWxkc1wiIFtwLXZhbHVlXT1cIm1vZGVsXCI+IDwvcG8tZHluYW1pYy12aWV3PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
545
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHcEUsT0FBTyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFjLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFPTCxlQUFlLEVBQ2hCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJN0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7OztJQ3BCM0Ysd0JBQW9HOzs7SUFJcEcsaUNBQVc7SUFDVCwwQkFBMEM7SUFDMUMsK0JBQWlDO0lBQy9CLFlBQ0Y7SUFBQSxpQkFBTyxFQUFBOzs7SUFETCxlQUNGO0lBREUsaUVBQ0Y7OztJQUtGLHFDQUEwRTs7O0lBQXpELHdDQUFtQix5QkFBQTs7QURrQnRDLE1B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LHdCQUF3QixhQUV2QixDQUFDLG9CQUFvQixFQUFFLGlDQUFpQyxDQUFDO29UQUk3QyxVQUFVO2tCQUFoQyxLQUFLO21CQUFDLGNBQWM7WUErQkosTUFBTTtrQkFBdEIsS0FBSzttQkFBQyxRQUFRO1lBR0csS0FBSztrQkFBdEIsS0FBSzttQkFBQyxTQUFTO1lBb0NRLFVBQVU7a0JBQWpDLEtBQUs7bUJBQUMsZUFBZTtZQXFCRSxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUF3QlUsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBU0MsTUFBTTtrQkFBNUIsS0FBSzttQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlLCBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBjb25jYXQsIEVNUFRZLCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgUG9CcmVhZGNydW1iLFxuICBQb0RpYWxvZ0NvbmZpcm1PcHRpb25zLFxuICBQb0RpYWxvZ1NlcnZpY2UsXG4gIFBvTGFuZ3VhZ2VTZXJ2aWNlLFxuICBQb05vdGlmaWNhdGlvblNlcnZpY2UsXG4gIFBvUGFnZUFjdGlvbixcbiAgcG9Mb2NhbGVEZWZhdWx0XG59IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcblxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiwgbWFwT2JqZWN0QnlQcm9wZXJ0aWVzLCB2YWx1ZXNGcm9tT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwtYWN0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbEZpZWxkIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwtZmllbGQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tcGFnZS1keW5hbWljL3BvLXBhZ2UtZHluYW1pYy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zU2VydmljZSB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLWRldGFpbC1hY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbE9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWRldGFpbC1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8tcGFnZS1jdXN0b21pemF0aW9uL3BvLXBhZ2UtY3VzdG9taXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWN1c3RvbWl6YXRpb24vcG8tcGFnZS1keW5hbWljLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNEZXRhaWxNZXRhRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLW1ldGFkYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsQmVmb3JlQmFjayB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLWJlZm9yZS1iYWNrLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsQmVmb3JlUmVtb3ZlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwtYmVmb3JlLXJlbW92ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbEJlZm9yZUVkaXQgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWRldGFpbC1iZWZvcmUtZWRpdC5pbnRlcmZhY2UnO1xuXG50eXBlIFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24gPSBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY0RldGFpbE9wdGlvbnMpO1xuXG5leHBvcnQgY29uc3QgcG9QYWdlRHluYW1pY0RldGFpbExpdGVyYWxzRGVmYXVsdCA9IHtcbiAgZW46IHtcbiAgICBwYWdlQWN0aW9uRWRpdDogJ0VkaXQnLFxuICAgIHBhZ2VBY3Rpb25SZW1vdmU6ICdEZWxldGUnLFxuICAgIHBhZ2VBY3Rpb25CYWNrOiAnQmFjaycsXG4gICAgY29uZmlybVJlbW92ZVRpdGxlOiAnQ29uZmlybSBkZWxldGUnLFxuICAgIGNvbmZpcm1SZW1vdmVNZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8gWW91IGNhbiBub3QgdW5kbyB0aGlzIGFjdGlvbi4nLFxuICAgIHJlbW92ZU5vdGlmaWNhdGlvblN1Y2Nlc3M6ICdJdGVtIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LicsXG4gICAgcmVnaXN0ZXJOb3RGb3VuZDogJ1JlZ2lzdGVyIG5vdCBmb3VuZC4nXG4gIH0sXG4gIGVzOiB7XG4gICAgcGFnZUFjdGlvbkVkaXQ6ICdFZGl0YXInLFxuICAgIHBhZ2VBY3Rpb25SZW1vdmU6ICdCb3JyYXInLFxuICAgIHBhZ2VBY3Rpb25CYWNrOiAnUmVncmVzbycsXG4gICAgY29uZmlybVJlbW92ZVRpdGxlOiAnQ29uZmlybWFyIGxhIGV4Y2x1c2nDs24nLFxuICAgIGNvbmZpcm1SZW1vdmVNZXNzYWdlOiAnwr9Fc3TDoSBzZWd1cm8gZGUgcXVlIGRlc2VhIGVsaW1pbmFyIGVzdGUgcmVnaXN0cm8/IE5vIHB1ZWRlIGRlc2hhY2VyIGVzdGEgYWNjacOzbi4nLFxuICAgIHJlbW92ZU5vdGlmaWNhdGlvblN1Y2Nlc3M6ICdFbGVtZW50byBlbGltaW5hZG8gY29uIMOpeGl0by4nLFxuICAgIHJlZ2lzdGVyTm90Rm91bmQ6ICdSZWdpc3RybyBubyBlbmNvbnRyYWRvLidcbiAgfSxcbiAgcHQ6IHtcbiAgICBwYWdlQWN0aW9uRWRpdDogJ0VkaXRhcicsXG4gICAgcGFnZUFjdGlvblJlbW92ZTogJ0V4Y2x1aXInLFxuICAgIHBhZ2VBY3Rpb25CYWNrOiAnVm9sdGFyJyxcbiAgICBjb25maXJtUmVtb3ZlVGl0bGU6ICdDb25maXJtYXIgZXhjbHVzw6NvJyxcbiAgICBjb25maXJtUmVtb3ZlTWVzc2FnZTogJ1RlbSBjZXJ0ZXphIGRlIHF1ZSBkZXNlamEgZXhjbHVpciBlc3NlIHJlZ2lzdHJvPyBWb2PDqiBuw6NvIHBvZGVyw6EgZGVzZmF6ZXIgZXNzYSBhw6fDo28uJyxcbiAgICByZW1vdmVOb3RpZmljYXRpb25TdWNjZXNzOiAnSXRlbSBleGNsdcOtZG8gY29tIHN1Y2Vzc28uJyxcbiAgICByZWdpc3Rlck5vdEZvdW5kOiAnUmVnaXN0cm8gbsOjbyBlbmNvbnRyYWRvLidcbiAgfSxcbiAgcnU6IHtcbiAgICBwYWdlQWN0aW9uRWRpdDogJ9Cg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMJyxcbiAgICBwYWdlQWN0aW9uUmVtb3ZlOiAn0KPQtNCw0LvQuNGC0YwnLFxuICAgIHBhZ2VBY3Rpb25CYWNrOiAn0J3QsNC30LDQtCcsXG4gICAgY29uZmlybVJlbW92ZVRpdGxlOiAn0J/QvtC00YLQstC10YDQttC00LXQvdC40LUg0YPQtNCw0LvQtdC90LjRjycsXG4gICAgY29uZmlybVJlbW92ZU1lc3NhZ2U6ICfQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINGN0YLRgyDQt9Cw0L/QuNGB0Yw/ICDQktGLINC90LUg0LzQvtC20LXRgtC1INC+0YLQvNC10L3QuNGC0Ywg0Y3RgtC+INC00LXQudGB0YLQstC40LUuJyxcbiAgICByZW1vdmVOb3RpZmljYXRpb25TdWNjZXNzOiAn0K3Qu9C10LzQtdC90YIg0YPRgdC/0LXRiNC90L4g0YPQtNCw0LvQtdC9LicsXG4gICAgcmVnaXN0ZXJOb3RGb3VuZDogJ9CX0LDQv9C40YHRjCDQvdC1INC90LDQudC00LXQvdCwLidcbiAgfVxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBPIGBwby1wYWdlLWR5bmFtaWMtZGV0YWlsYCDDqSB1bWEgcMOhZ2luYSBxdWUgc2VydmUgcGFyYSBleGliaXIgcmVnaXN0cm9zIGVtIGRldGFsaGVzLFxuICogbyBtZXNtbyB0YW1iw6ltIHN1cG9ydGEgbWV0YWRhZG9zIGNvbmZvcm1lIGVzcGVjaWZpY2FkbyBuYSBkb2N1bWVudGHDp8Ojby5cbiAqXG4gKlxuICogIyMjIFV0aWxpemHDp8OjbyB2aWEgcm90YVxuICpcbiAqIEFvIHV0aWxpemFyIGFzIHJvdGFzIHBhcmEgaW5pY2lhbGl6YXIgbyB0ZW1wbGF0ZSwgbyBgcGFnZS1keW5hbWljLWRldGFpbGAgZGlzcG9uaWJpbGl6YSBwcm9wcmllZGFkZXMgcXVlIGRldmVtIHNlciBmb3JuZWNpZGFzIG5vIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28gZGUgcm90YXMgZGEgYXBsaWNhw6fDo28sIHBhcmFcbiAqIHBvZGVyIGVzcGVjaWZpY2FyIG8gZW5kcG9pbnQgZG9zIGRhZG9zIGUgZG9zIG1ldGFkYWRvcyBxdWUgc2Vyw6NvIGNhcnJlZ2Fkb3MgbmEgaW5pY2lhbGl6YcOnw6NvLlxuICpcbiAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxuICpcbiAqIEFycXVpdm8gZGUgY29uZmlndXJhw6fDo28gZGUgcm90YXMgZGEgYXBsaWNhw6fDo286IGBhcHAtcm91dGluZy5tb2R1bGUudHNgXG4gKiBgYGBcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICoge1xuICogICBwYXRoOiAncGVvcGxlLzppZCcsXG4gKiAgIGNvbXBvbmVudDogUG9QYWdlRHluYW1pY0RldGFpbENvbXBvbmVudCxcbiAqICAgZGF0YToge1xuICogICAgIHNlcnZpY2VBcGk6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvdjEvcGVvcGxlJywgLy8gZW5kcG9pbnQgZG9zIGRhZG9zXG4gKiAgICAgc2VydmljZU1ldGFkYXRhQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL3YxL21ldGFkYXRhJywgLy8gZW5kcG9pbnQgZG9zIG1ldGFkYWRvcyB1dGlsaXphbmRvIG8gbcOpdG9kbyBIVFRQIEdldFxuICogICAgIHNlcnZpY2VMb2FkQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2xvYWQtbWV0YWRhdGEnIC8vIGVuZHBvaW50IGRlIGN1c3RvbWl6YcOnw7VlcyBkb3MgbWV0YWRhZG9zIHV0aWxpemFuZG8gbyBtw6l0b2RvIEhUVFAgUG9zdFxuICogICB9XG4gKiAgfSxcbiAqICB7XG4gKiAgIHBhdGg6ICdob21lJyxcbiAqICAgY29tcG9uZW50OiBIb21lRXhhbXBsZUNvbXBvbmVudFxuICogIH1cbiAqIF07XG4gKlxuICogYGBgXG4gKiBPIGNvbXBvbmVudGUgcHJpbWVpcm8gaXLDoSBjYXJyZWdhciBvIG1ldGFkYWRvIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZU1ldGFkYXRhQXBpXG4gKiBlIGRlcG9pcyBpcsOhIGJ1c2NhciBkYSByb3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHNlcnZpY2VMb2FkQXBpLlxuICpcbiAqIEEgcmVxdWlzacOnw6NvIGRvcyBtZXRhZGFkb3Mgw6kgZmVpdGEgbmEgaW5pY2lhbGl6YcOnw6NvIGRvIHRlbXBsYXRlIHBhcmEgYnVzY2FyIG9zIG1ldGFkYWRvcyBkYSBww6FnaW5hIHBhc3NhbmRvIG9cbiAqIHRpcG8gZG8gbWV0YWRhZG8gZXNwZXJhZG8gZSBhIHZlcnPDo28gY2FjaGVhZGEgcGVsbyBicm93c2VyLlxuICpcbiAqID4gQ2FzbyBvIHNlcnZpZG9yIHJldG9ybmFyIHVtIGVycm8gYW8gcmVjdXBlcmFyIG9zIG1ldGFkYWRvcywgc2Vyw6NvIHJlcGFzc2Fkb3Mgb3MgbWV0YWRhZG9zIHNhbHZvcyBlbSBjYWNoZSxcbiAqIHNlIG8gY2FjaGUgbsOjbyBleGlzdGlyIHNlcsOhIGRpc3BhcmFkYSB1bWEgbm90aWZpY2HDp8Ojby5cbiAqXG4gKiBPIGZvcm1hdG8gZXNwZXJhZG8gbmEgcmVzcG9zdGEgZGEgcmVxdWlzacOnw6NvIGVzdMOhIGVzcGVjaWZpY2FkbyBuYSBpbnRlcmZhY2VcbiAqIFtQb1BhZ2VEeW5hbWljRGV0YWlsTWV0YWRhdGFdKC9kb2N1bWVudGF0aW9uL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwjcG8tcGFnZS1keW5hbWljLWRldGFpbC1tZXRhZGF0YSkuIFBvciBleGVtcGxvOlxuICpcbiAqIGBgYFxuICogIHtcbiAqICAgdmVyc2lvbjogMSxcbiAqICAgdGl0bGU6ICdQZXJzb24gRGV0YWlsJyxcbiAqICAgZmllbGRzOiBbXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2lkJywga2V5OiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICogICAgIHsgcHJvcGVydHk6ICdzdGF0dXMnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ25hbWUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ25pY2tuYW1lJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdiaXJ0aGRhdGUnLCBsYWJlbDogJ0JpcnRoIGRhdGUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2dlbnJlJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdjaXR5JyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdjb3VudHJ5JyB9XG4gKiAgIF1cbiAqIH1cbiAqIGBgYFxuICpcbiAqID4gQ2FzbyBvIGVuZHBvaW50IGRvcyBtZXRhZGFkb3MgbsOjbyBzZWphIGVzcGVjaWZpY2Fkbywgc2Vyw6EgZmVpdG8gdW1hIHJlcXVpc2nDp8OjbyB1dGlsaXphbmRvIG8gYHNlcnZpY2VBcGlgIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICogYGBgXG4gKiBHRVQge2VuZC1wb2ludH0vbWV0YWRhdGE/dHlwZT1kZXRhaWwmdmVyc2lvbj17dmVyc2lvbn1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy1kZXRhaWwtdXNlclwiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIERldGFpbCBVc2VyXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtZGV0YWlsLXVzZXIvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1kZXRhaWwtdXNlci5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtZGV0YWlsLXVzZXIvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1kZXRhaWwtdXNlci5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1wYWdlLWR5bmFtaWMtZGV0YWlsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtQb1BhZ2VEeW5hbWljU2VydmljZSwgUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBQb1BhZ2VEeW5hbWljRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogT2JqZXRvIGNvbSBwcm9wcmllZGFkZXMgZG8gYnJlYWRjcnVtYi4gKi9cbiAgQElucHV0KCdwLWJyZWFkY3J1bWInKSBicmVhZGNydW1iPzogUG9CcmVhZGNydW1iID0geyBpdGVtczogW10gfTtcblxuICAvKipcbiAgICogRnVuw6fDo28gb3Ugc2VydmnDp28gcXVlIHNlcsOhIGV4ZWN1dGFkbyBuYSBpbmljaWFsaXphw6fDo28gZG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogQSBwcm9wcmllZGFkZSBhY2VpdGEgb3Mgc2VndWludGVzIHRpcG9zOlxuICAgKiAtIGBzdHJpbmdgOiAqRW5kcG9pbnQqIHVzYWRvIHBlbG8gY29tcG9uZW50ZSBwYXJhIHJlcXVpc2nDp8OjbyB2aWEgYFBPU1RgLlxuICAgKiAtIGBmdW5jdGlvbmA6IE3DqXRvZG8gcXVlIHNlcsOhIGV4ZWN1dGFkby5cbiAgICpcbiAgICogTyByZXRvcm5vIGRlc3RhIGZ1bsOnw6NvIGRldmUgc2VyIGRvIHRpcG8gYFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zYCxcbiAgICogb25kZSBvIHVzdcOhcmlvIHBvZGVyw6EgY3VzdG9taXphciBub3ZvcyBjYW1wb3MsIGJyZWFkY3J1bWIsIHRpdGxlIGUgYWN0aW9uc1xuICAgKlxuICAgKiBQb3IgZXhlbXBsbzpcbiAgICpcbiAgICogYGBgXG4gICAqIGdldFBhZ2VPcHRpb25zKCk6IFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zIHtcbiAgICogcmV0dXJuIHtcbiAgICogICBhY3Rpb25zOlxuICAgKiAgICAgeyBuZXc6ICduZXcnLCBlZGl0OiAnZWRpdC86aWQnLCByZW1vdmU6IHRydWUgfSxcbiAgICogICBmaWVsZHM6IFtcbiAgICogICAgIHsgcHJvcGVydHk6ICdpZENhcmQnLCBncmlkQ29sdW1uczogNiB9XG4gICAqICAgXVxuICAgKiB9O1xuICAgKiB9XG4gICAqXG4gICAqIGBgYFxuICAgKiBQYXJhIHJlZmVyZW5jaWFyIGEgc3VhIGZ1bsOnw6NvIHV0aWxpemUgYSBwcm9wcmllZGFkZSBgYmluZGAsIHBvciBleGVtcGxvOlxuICAgKiBgYGBcbiAgICogIFtwLWxvYWRdPVwib25Mb2FkT3B0aW9ucy5iaW5kKHRoaXMpXCJcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtbG9hZCcpIG9uTG9hZDogc3RyaW5nIHwgKCgpID0+IFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zKTtcblxuICAvKiogVMOtdHVsbyBkYSBww6FnaW5hLiAqL1xuICBASW5wdXQoJ3AtdGl0bGUnKSB0aXRsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRW5kcG9pbnQgdXNhZG8gcGVsbyB0ZW1wbGF0ZSBwYXJhIHJlcXVpc2nDp8OjbyBkbyByZWN1cnNvIHF1ZSBzZXLDo28gZXhpYmlkby5cbiAgICpcbiAgICogQ2FzbyBhIGHDp8OjbyBgcmVtb3ZlYCBlc3RpdmVyIGNvbmZpZ3VyYWRhLCBzZXLDoSBmZWl0byB1bWEgcmVxdWlzacOnw6NvIGRlIGV4Y2x1c8OjbyBuZXNzZSBtZXNtbyBlbmRwb2ludCBwYXNzYW5kbyBvcyBjYW1wb3NcbiAgICogc2V0YWRvcyBjb21vIGBrZXk6IHRydWVgLlxuICAgKlxuICAgKiA+IGBERUxFVEUge2VuZC1wb2ludH0ve2tleXN9YFxuICAgKlxuICAgKiBgYGBcbiAgICogIDxwby1wYWdlLWR5bmFtaWMtZGV0YWlsXG4gICAqICAgIFtwLWFjdGlvbnNdPVwieyByZW1vdmU6ICcvJyB9XCJcbiAgICogICAgW3AtZmllbGRzXT1cIlsgeyBwcm9wZXJ0eTogJ2lkJywga2V5OiB0cnVlIH0gXVwiXG4gICAqICAgIHAtc2VydmljZT1cIi9hcGkvcG8tc2FtcGxlcy92MS9wZW9wbGVcIlxuICAgKiAgICAuLi4+XG4gICAqICA8L3BvLXBhZ2UtZHluYW1pYy1kZXRhaWw+XG4gICAqIGBgYFxuICAgKlxuICAgKiBSZXNxdWlzacOnw6NvIGRpc3BhcmFkYSwgb25kZSBhIHByb3ByaWVkYWRlIGBpZGAgw6kgaWd1YWwgYSAyOlxuICAgKlxuICAgKiBgYGBcbiAgICogIERFTEVURSAvYXBpL3BvLXNhbXBsZXMvdjEvcGVvcGxlLzIgSFRUUC8xLjFcbiAgICogIEhvc3Q6IGxvY2FsaG9zdDo0MDAwXG4gICAqICBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gICAqICBBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW5cbiAgICogIC4uLlxuICAgKiBgYGBcbiAgICpcbiAgICogPiBDYXNvIGVzdGVqYSB1c2FuZG8gbWV0YWRhZG9zIGNvbSBvIHRlbXBsYXRlLCBzZXLDoSBkaXNwYXJhZG8gdW1hIHJlcXVpc2nDp8OjbyBuYSBpbmljaWFsaXphw6fDo28gZG8gdGVtcGxhdGUgcGFyYSBidXNjYXJcbiAgICogPiBvcyBtZXRhZGFkb3MgZGEgcMOhZ2luYSBwYXNzYW5kbyBvIHRpcG8gZG8gbWV0YWRhZG8gZXNwZXJhZG8gZSBhIHZlcnPDo28gY2FjaGVhZGEgcGVsbyBicm93c2VyLlxuICAgKiA+XG4gICAqID4gYEdFVCB7ZW5kLXBvaW50fS9tZXRhZGF0YT90eXBlPWRldGFpbCZ2ZXJzaW9uPXt2ZXJzaW9ufWBcbiAgICovXG4gIEBJbnB1dCgncC1zZXJ2aWNlLWFwaScpIHNlcnZpY2VBcGk6IHN0cmluZztcblxuICBsaXRlcmFscztcbiAgbW9kZWw6IGFueSA9IHt9O1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gIHByaXZhdGUgX2FjdGlvbnM6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zID0ge307XG4gIHByaXZhdGUgX2F1dG9Sb3V0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZHVwbGljYXRlczogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9maWVsZHM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBfa2V5czogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9wYWdlQWN0aW9uczogQXJyYXk8UG9QYWdlQWN0aW9uPiA9IFtdO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBhcyBhw6fDtWVzIGRhIHDDoWdpbmEgZGUgYWNvcmRvIGNvbSBhIGludGVyZmFjZSBgUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNgLlxuICAgKi9cbiAgQElucHV0KCdwLWFjdGlvbnMnKSBzZXQgYWN0aW9ucyh2YWx1ZTogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnMpIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gdGhpcy5pc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IHt9O1xuXG4gICAgdGhpcy5fcGFnZUFjdGlvbnMgPSB0aGlzLmdldFBhZ2VBY3Rpb25zKHRoaXMuX2FjdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fYWN0aW9ucyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEB0b2RvIFZhbGlkYXIgcm90YXMgbmEgbcOjbyBwb2lzIHNlIGV4aXN0aXIgdW1hIHJvdGEgJyoqJyBvIGNhdGNoIGRvIG5hdmlnYXRpb24gbsOjbyBmdW5jaW9uYS5cbiAgICpcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBDcmlhIGF1dG9tYXRpY2FtZW50ZSBhcyByb3RhcyBkZSBlZGnDp8OjbyAobm92by9kdXBsaWNhdGUpIGUgZGV0YWxoZXMgY2FzbyBhcyBhw6fDtWVzXG4gICAqIGVzdGVqYW0gZGVmaW5pZGFzIG5hcyBhw6fDtWVzLlxuICAgKlxuICAgKiA+IFBhcmEgbyBjb3JyZXRvIGZ1bmNpb25hbWVudG8gbsOjbyBwb2RlIGhhdmVyIG5lbmh1bSByb3RhIGNvcmluZ2EgKGAqKmApIGVzcGVjaWZpY2FkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgncC1hdXRvLXJvdXRlcicpIHNldCBhdXRvUm91dGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b1JvdXRlciA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IGF1dG9Sb3V0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9Sb3V0ZXI7XG4gIH1cblxuICAvKiogTGlzdGEgZG9zIGNhbXBvcyBleGliaWRvcyBuYSBww6FnaW5hLiAqL1xuICBASW5wdXQoJ3AtZmllbGRzJykgc2V0IGZpZWxkcyh2YWx1ZTogQXJyYXk8UG9QYWdlRHluYW1pY0RldGFpbEZpZWxkPikge1xuICAgIHRoaXMuX2ZpZWxkcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IFtdO1xuXG4gICAgdGhpcy5fa2V5cyA9IHRoaXMuZ2V0S2V5c0J5RmllbGRzKHRoaXMuZmllbGRzKTtcbiAgICB0aGlzLl9kdXBsaWNhdGVzID0gdGhpcy5nZXREdXBsaWNhdGVzQnlGaWVsZHModGhpcy5maWVsZHMpO1xuICB9XG5cbiAgZ2V0IGZpZWxkcygpOiBBcnJheTxQb1BhZ2VEeW5hbWljRGV0YWlsRmllbGQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRzO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHBvTm90aWZpY2F0aW9uOiBQb05vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb0RpYWxvZ1NlcnZpY2U6IFBvRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNTZXJ2aWNlOiBQb1BhZ2VEeW5hbWljU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zU2VydmljZTogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2U6IFBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuXG4gICAgdGhpcy5saXRlcmFscyA9IHtcbiAgICAgIC4uLnBvUGFnZUR5bmFtaWNEZXRhaWxMaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgIC4uLnBvUGFnZUR5bmFtaWNEZXRhaWxMaXRlcmFsc0RlZmF1bHRbbGFuZ3VhZ2VdXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZERhdGFGcm9tQVBJKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4ge1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkdXBsaWNhdGVzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5fZHVwbGljYXRlc107XG4gIH1cblxuICBnZXQga2V5cygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2tleXNdO1xuICB9XG5cbiAgZ2V0IHBhZ2VBY3Rpb25zKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFnZUFjdGlvbnNdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmUoXG4gICAgYWN0aW9uUmVtb3ZlOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlPzogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNbJ2JlZm9yZVJlbW92ZSddXG4gICkge1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KHRoaXMubW9kZWwpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlUmVtb3ZlKGFjdGlvbkJlZm9yZVJlbW92ZSwgdW5pcXVlS2V5LCB7IC4uLnRoaXMubW9kZWwgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChiZWZvcmVSZW1vdmVSZXN1bHQ6IFBvUGFnZUR5bmFtaWNEZXRhaWxCZWZvcmVSZW1vdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JlbW92ZUFjdGlvbiA9IGJlZm9yZVJlbW92ZVJlc3VsdD8ubmV3VXJsID8/IGFjdGlvblJlbW92ZTtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93QWN0aW9uID0gYmVmb3JlUmVtb3ZlUmVzdWx0Py5hbGxvd0FjdGlvbiA/PyB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoIWFsbG93QWN0aW9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV3UmVtb3ZlQWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRlUmVtb3ZlKG5ld1JlbW92ZUFjdGlvbiwgdW5pcXVlS2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld1JlbW92ZUFjdGlvbih1bmlxdWVLZXksIHsgLi4udGhpcy5tb2RlbCB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlybVJlbW92ZShcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydyZW1vdmUnXSxcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmU6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydiZWZvcmVSZW1vdmUnXVxuICApIHtcbiAgICBjb25zdCBjb25maXJtT3B0aW9uczogUG9EaWFsb2dDb25maXJtT3B0aW9ucyA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVUaXRsZSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZU1lc3NhZ2UsXG4gICAgICBjb25maXJtOiB0aGlzLnJlbW92ZS5iaW5kKHRoaXMsIGFjdGlvblJlbW92ZSwgYWN0aW9uQmVmb3JlUmVtb3ZlKVxuICAgIH07XG5cbiAgICB0aGlzLnBvRGlhbG9nU2VydmljZS5jb25maXJtKGNvbmZpcm1PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVJlbW92ZShwYXRoLCB1bmlxdWVLZXk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmRlbGV0ZVJlc291cmNlKHVuaXF1ZUtleSkucGlwZShcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uc3VjY2Vzcyh0aGlzLmxpdGVyYWxzLnJlbW92ZU5vdGlmaWNhdGlvblN1Y2Nlc3MpO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBwYXRoIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRVbmlxdWVLZXkoaXRlbSkge1xuICAgIGNvbnN0IGtleXMgPSBtYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5rZXlzKTtcblxuICAgIHJldHVybiB2YWx1ZXNGcm9tT2JqZWN0KGtleXMpLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ29CYWNrKGFjdGlvbkJhY2s6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydiYWNrJ10pIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVCYWNrKHRoaXMuYWN0aW9ucy5iZWZvcmVCYWNrKVxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVCYWNrUmVzdWx0OiBQb1BhZ2VEeW5hbWljRGV0YWlsQmVmb3JlQmFjaykgPT5cbiAgICAgICAgICB0aGlzLmV4ZWN1dGVCYWNrQWN0aW9uKGFjdGlvbkJhY2ssIGJlZm9yZUJhY2tSZXN1bHQ/LmFsbG93QWN0aW9uLCBiZWZvcmVCYWNrUmVzdWx0Py5uZXdVcmwpXG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlQmFja0FjdGlvbihhY3Rpb25CYWNrOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1snYmFjayddLCBhbGxvd0FjdGlvbj8sIG5ld1VybD86IHN0cmluZykge1xuICAgIGNvbnN0IGlzQWxsb3dlZEFjdGlvbiA9IHR5cGVvZiBhbGxvd0FjdGlvbiA9PT0gJ2Jvb2xlYW4nID8gYWxsb3dBY3Rpb24gOiB0cnVlO1xuXG4gICAgaWYgKGlzQWxsb3dlZEFjdGlvbikge1xuICAgICAgaWYgKGFjdGlvbkJhY2sgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgYWN0aW9uQmFjayA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uQmFjayA9PT0gJ3N0cmluZycgfHwgbmV3VXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbmV3VXJsIHx8IGFjdGlvbkJhY2tdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjdGlvbkJhY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0UmVzb3VyY2UoaWQpLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5zZXRVbmRlZmluZWRUb01vZGVsQW5kQWN0aW9ucygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubW9kZWwgPSByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5zZXRVbmRlZmluZWRUb01vZGVsQW5kQWN0aW9ucygpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldFVuZGVmaW5lZFRvTW9kZWxBbmRBY3Rpb25zKCkge1xuICAgIHRoaXMubW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3Rpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRhZGF0YShcbiAgICBzZXJ2aWNlQXBpRnJvbVJvdXRlOiBzdHJpbmcsXG4gICAgb25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uXG4gICk6IE9ic2VydmFibGU8UG9QYWdlRHluYW1pY0RldGFpbE1ldGFEYXRhPiB7XG4gICAgaWYgKHNlcnZpY2VBcGlGcm9tUm91dGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmdldE1ldGFkYXRhPFBvUGFnZUR5bmFtaWNEZXRhaWxNZXRhRGF0YT4oJ2RldGFpbCcpLnBpcGUoXG4gICAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5hdXRvUm91dGVyID0gcmVzcG9uc2UuYXV0b1JvdXRlciB8fCB0aGlzLmF1dG9Sb3V0ZXI7XG4gICAgICAgICAgdGhpcy5hY3Rpb25zID0gcmVzcG9uc2UuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnM7XG4gICAgICAgICAgdGhpcy5icmVhZGNydW1iID0gcmVzcG9uc2UuYnJlYWRjcnVtYiB8fCB0aGlzLmJyZWFkY3J1bWI7XG4gICAgICAgICAgdGhpcy5maWVsZHMgPSByZXNwb25zZS5maWVsZHMgfHwgdGhpcy5maWVsZHM7XG4gICAgICAgICAgdGhpcy50aXRsZSA9IHJlc3BvbnNlLnRpdGxlIHx8IHRoaXMudGl0bGU7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpO1xuICB9XG5cbiAgLy8gQHRvZG8gVmFsaWRhciByb3RhcyBuYSBtw6NvIHBvaXMgc2UgZXhpc3RpciB1bWEgcm90YSAnKionIG8gY2F0Y2ggZG8gbmF2aWdhdGlvbiBuw6NvIGZ1bmNpb25hLlxuICBwcml2YXRlIG5hdmlnYXRlVG8oXG4gICAgcm91dGU6IHsgcGF0aDogc3RyaW5nOyBjb21wb25lbnQ/OyB1cmw/OiBzdHJpbmc7IHBhcmFtcz86IGFueSB9LFxuICAgIGZvcmNlU3RvcEF1dG9Sb3V0ZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGUudXJsIHx8IHJvdXRlLnBhdGhdLCB7IHF1ZXJ5UGFyYW1zOiByb3V0ZS5wYXJhbXMgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgaWYgKGZvcmNlU3RvcEF1dG9Sb3V0ZXIgfHwgIXRoaXMuYXV0b1JvdXRlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm91dGVyLmNvbmZpZy51bnNoaWZ0KDxSb3V0ZT57XG4gICAgICAgIHBhdGg6IHJvdXRlLnBhdGgsXG4gICAgICAgIGNvbXBvbmVudDogcm91dGUuY29tcG9uZW50LFxuICAgICAgICBkYXRhOiB7IHNlcnZpY2VBcGk6IHRoaXMuc2VydmljZUFwaSwgYXV0b1JvdXRlcjogdHJ1ZSB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHJvdXRlLCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkVkaXQoYWN0aW9uOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1snZWRpdCddKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleSh0aGlzLm1vZGVsKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZUVkaXQodGhpcy5hY3Rpb25zLmJlZm9yZUVkaXQsIGlkLCB0aGlzLm1vZGVsKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGJlZm9yZUVkaXRSZXN1bHQ6IFBvUGFnZUR5bmFtaWNEZXRhaWxCZWZvcmVFZGl0KSA9PlxuICAgICAgICAgICAgdGhpcy5leGVjdXRlRWRpdEFjdGlvbihhY3Rpb24sIGJlZm9yZUVkaXRSZXN1bHQsIGlkKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlRWRpdEFjdGlvbihcbiAgICBhY3Rpb246IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydlZGl0J10sXG4gICAgYmVmb3JlRWRpdFJlc3VsdDogUG9QYWdlRHluYW1pY0RldGFpbEJlZm9yZUVkaXQsXG4gICAgaWQ6IGFueVxuICApIHtcbiAgICBjb25zdCBuZXdFZGl0QWN0aW9uID0gYmVmb3JlRWRpdFJlc3VsdD8ubmV3VXJsID8/IGFjdGlvbjtcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IGJlZm9yZUVkaXRSZXN1bHQ/LmFsbG93QWN0aW9uID8/IHRydWU7XG5cbiAgICBpZiAoIWFsbG93QWN0aW9uKSB7XG4gICAgICByZXR1cm4gb2Yoe30pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3RWRpdEFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMub3BlbkVkaXRVcmwobmV3RWRpdEFjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0VkaXRBY3Rpb24oaWQsIHsgLi4udGhpcy5tb2RlbCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5FZGl0VXJsKHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb2x2ZVVybCh0aGlzLm1vZGVsLCBwYXRoKTtcbiAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoLCB1cmwgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVVcmwoaXRlbTogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcblxuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoLzppZC9nLCB1bmlxdWVLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYWdlQWN0aW9ucyhhY3Rpb25zOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9ucyA9IHt9KTogQXJyYXk8UG9QYWdlQWN0aW9uPiB7XG4gICAgY29uc3QgcGFnZUFjdGlvbnMgPSBbXTtcblxuICAgIGlmIChhY3Rpb25zLmVkaXQpIHtcbiAgICAgIHBhZ2VBY3Rpb25zLnB1c2goeyBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uRWRpdCwgYWN0aW9uOiB0aGlzLm9wZW5FZGl0LmJpbmQodGhpcywgYWN0aW9ucy5lZGl0KSB9KTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aW9ucy5yZW1vdmUpIHtcbiAgICAgIHBhZ2VBY3Rpb25zLnB1c2goe1xuICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uUmVtb3ZlLFxuICAgICAgICBhY3Rpb246IHRoaXMuY29uZmlybVJlbW92ZS5iaW5kKHRoaXMsIGFjdGlvbnMucmVtb3ZlLCB0aGlzLmFjdGlvbnMuYmVmb3JlUmVtb3ZlKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbnMuYmFjayA9PT0gdW5kZWZpbmVkIHx8IGFjdGlvbnMuYmFjaykge1xuICAgICAgcGFnZUFjdGlvbnMucHVzaCh7IGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25CYWNrLCBhY3Rpb246IHRoaXMuZ29CYWNrLmJpbmQodGhpcywgYWN0aW9ucy5iYWNrKSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZUFjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGdldEtleXNCeUZpZWxkcyhmaWVsZHM6IEFycmF5PGFueT4gPSBbXSkge1xuICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmtleSA9PT0gdHJ1ZSkubWFwKGZpZWxkID0+IGZpZWxkLnByb3BlcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHVwbGljYXRlc0J5RmllbGRzKGZpZWxkczogQXJyYXk8YW55PiA9IFtdKSB7XG4gICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQuZHVwbGljYXRlID09PSB0cnVlKS5tYXAoZmllbGQgPT4gZmllbGQucHJvcGVydHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRnJvbUFQSSgpIHtcbiAgICBjb25zdCB7IHNlcnZpY2VBcGk6IHNlcnZpY2VBcGlGcm9tUm91dGUsIHNlcnZpY2VNZXRhZGF0YUFwaSwgc2VydmljZUxvYWRBcGkgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTtcbiAgICBjb25zdCB7IGlkIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtcztcblxuICAgIGNvbnN0IG9uTG9hZCA9IHNlcnZpY2VMb2FkQXBpIHx8IHRoaXMub25Mb2FkO1xuICAgIHRoaXMuc2VydmljZUFwaSA9IHNlcnZpY2VBcGlGcm9tUm91dGUgfHwgdGhpcy5zZXJ2aWNlQXBpO1xuXG4gICAgdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5jb25maWdTZXJ2aWNlQXBpKHsgZW5kcG9pbnQ6IHRoaXMuc2VydmljZUFwaSwgbWV0YWRhdGE6IHNlcnZpY2VNZXRhZGF0YUFwaSB9KTtcblxuICAgIGNvbnN0IG1ldGFkYXRhJCA9IHRoaXMuZ2V0TWV0YWRhdGEoc2VydmljZUFwaUZyb21Sb3V0ZSwgb25Mb2FkKTtcbiAgICBjb25zdCBkYXRhJCA9IHRoaXMubG9hZERhdGEoaWQpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY29uY2F0KG1ldGFkYXRhJCwgZGF0YSQpLnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKG9uTG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9EeW5hbWljUGFnZU9wdGlvbnMob25Mb2FkKS5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2VQb09wdGlvbiA9PlxuICAgICAgICAgIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuY2hhbmdlT3JpZ2luYWxPcHRpb25zVG9OZXdPcHRpb25zKHRoaXMsIHJlc3BvbnNlUG9PcHRpb24pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24pOiBPYnNlcnZhYmxlPFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zPiB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcHRpb246IFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zID0ge1xuICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyxcbiAgICAgIGFjdGlvbnM6IHRoaXMuYWN0aW9ucyxcbiAgICAgIGJyZWFkY3J1bWI6IHRoaXMuYnJlYWRjcnVtYixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2VPcHRpb25TY2hlbWE6IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hPFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zPiA9IHtcbiAgICAgIHNjaGVtYTogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdmaWVsZHMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgICAgIGtleUZvck1lcmdlOiAncHJvcGVydHknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2FjdGlvbnMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2JyZWFkY3J1bWInXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ3RpdGxlJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldEN1c3RvbU9wdGlvbnMob25Mb2FkLCBvcmlnaW5hbE9wdGlvbiwgcGFnZU9wdGlvblNjaGVtYSk7XG4gIH1cbn1cbiIsIjxwby1wYWdlLWRlZmF1bHQgW3AtYWN0aW9uc109XCJwYWdlQWN0aW9uc1wiIFtwLWJyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlwiIFtwLXRpdGxlXT1cInRpdGxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbDsgdGhlbiB2aWV3RmllbGRzVGVtcGxhdGU7IGVsc2UgcmVnaXN0ZXJOb3RGb3VuZFRlbXBsYXRlXCI+IDwvbmctY29udGFpbmVyPlxuPC9wby1wYWdlLWRlZmF1bHQ+XG5cbjxuZy10ZW1wbGF0ZSAjcmVnaXN0ZXJOb3RGb3VuZFRlbXBsYXRlPlxuICA8cG8td2lkZ2V0PlxuICAgIDxzcGFuIGNsYXNzPVwicG8taWNvbiBwby1pY29uLWluZm9cIj48L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJwby1mb250LXRleHQtbGFyZ2VcIj5cbiAgICAgIHt7IGxpdGVyYWxzLnJlZ2lzdGVyTm90Rm91bmQgfX1cbiAgICA8L3NwYW4+XG4gIDwvcG8td2lkZ2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN2aWV3RmllbGRzVGVtcGxhdGU+XG4gIDxwby1keW5hbWljLXZpZXcgW3AtZmllbGRzXT1cImZpZWxkc1wiIFtwLXZhbHVlXT1cIm1vZGVsXCI+IDwvcG8tZHluYW1pYy12aWV3PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -108,16 +108,14 @@ export const poPageDynamicEditLiteralsDefault = {
108
108
  *
109
109
  * ### Utilização via rota
110
110
  *
111
- * Ao utilizar as rotas para carregar o template, o `page-dynamic-edit` disponibiliza propriedades para
112
- * poder especificar o endpoint dos dados e dos metadados. Exemplo de utilização:
111
+ * Ao utilizar as rotas para inicializar o template, o `page-dynamic-edit` disponibiliza propriedades que devem ser fornecidas no arquivo de configuração de rotas da aplicação, para
112
+ * poder especificar o endpoint dos dados e dos metadados que serão carregados na inicialização.
113
113
  *
114
- * O componente primeiro irá carregar o metadado da rota definida na propriedade serviceMetadataApi
115
- * e depois irá buscar da rota definida na propriedade serviceLoadApi
116
- *
117
- * > Caso o servidor retornar um erro ao recuperar o metadados, será repassado o metadados salvo em cache,
118
- * se o cache não existe será disparado uma notificação.
114
+ * Exemplo de utilização:
119
115
  *
116
+ * Arquivo de configuração de rotas da aplicação: `app-routing.module.ts`
120
117
  * ```
118
+ * const routes: Routes = [
121
119
  * {
122
120
  * path: 'people',
123
121
  * component: PoPageDynamicEditComponent,
@@ -126,9 +124,22 @@ export const poPageDynamicEditLiteralsDefault = {
126
124
  * serviceMetadataApi: 'http://localhost:3000/v1/metadata', // endpoint dos metadados utilizando o método HTTP Get
127
125
  * serviceLoadApi: 'http://localhost:3000/load-metadata' // endpoint de customizações dos metadados utilizando o método HTTP Post
128
126
  * }
129
- * }
127
+ * },
128
+ * {
129
+ * path: 'home',
130
+ * component: HomeExampleComponent
131
+ * }
132
+ * ];
130
133
  *
131
134
  * ```
135
+ * O componente primeiro irá carregar o metadado da rota definida na propriedade serviceMetadataApi
136
+ * e depois irá buscar da rota definida na propriedade serviceLoadApi.
137
+ *
138
+ * A requisição dos metadados é feita na inicialização do template para buscar os metadados da página passando o
139
+ * tipo do metadado esperado e a versão cacheada pelo browser.
140
+ *
141
+ * > Caso o servidor retornar um erro ao recuperar os metadados, serão repassados os metadados salvos em cache,
142
+ * se o cache não existir será disparada uma notificação.
132
143
  *
133
144
  * Para carregar com um recurso já existente, deve-se ser incluído um parâmetro na rota chamado `id`:
134
145
  *
@@ -826,4 +837,4 @@ export class PoPageDynamicEditComponent {
826
837
  type: Input,
827
838
  args: ['p-fields']
828
839
  }] }); })();
829
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVtcGxhdGVzL3NyYy9saWIvY29tcG9uZW50cy9wby1wYWdlLWR5bmFtaWMtZWRpdC9wby1wYWdlLWR5bmFtaWMtZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy1lZGl0L3BvLXBhZ2UtZHluYW1pYy1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQWdCLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFTTCxlQUFlLEVBQ2hCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJckgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7Ozs7Ozs7Ozs7O0lDckI1Rix3QkFBb0c7OztJQUlwRyxpQ0FBVztJQUNULDBCQUEwQztJQUMxQywrQkFBaUM7SUFDL0IsWUFDRjtJQUFBLGlCQUFPLEVBQUE7OztJQURMLGVBQ0Y7SUFERSxpRUFDRjs7OztJQU9GLDhCQUFzRDtJQUNwRCxpQ0FBNkQ7SUFFN0QsK0JBQTRCLG9CQUFBO0lBQ3NCLDZMQUFXLGVBQUEsd0JB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QS9CRywyQ0FBeUIsZ0NBQUEsc0JBQUE7WUFDekIsZUFBYTtZQUFiLGdDQUFhLGlCQUFBLGlCQUFBOzs7dUZEeUtqQiwwQkFBMEI7Y0FMdEMsU0FBUzsyQkFDRSxzQkFBc0IsYUFFckIsQ0FBQyxvQkFBb0IsQ0FBQztrVEFHUCxXQUFXO2tCQUFwQyxTQUFTO21CQUFDLGFBQWE7WUFDQyxVQUFVO2tCQUFsQyxTQUFTO21CQUFDLFlBQVk7WUFHQSxVQUFVO2tCQUFoQyxLQUFLO21CQUFDLGNBQWM7WUF1RUcsVUFBVTtrQkFBakMsS0FBSzttQkFBQyxlQUFlO1lBR0osS0FBSztrQkFBdEIsS0FBSzttQkFBQyxTQUFTO1lBK0JDLE1BQU07a0JBQXRCLEtBQUs7bUJBQUMsUUFBUTtZQTRCTyxVQUFVO2tCQUEvQixLQUFLO21CQUFDLGFBQWE7WUErQkksT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBMkNPLFFBQVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWTtZQWdDUyxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUFTQyxNQUFNO2tCQUE1QixLQUFLO21CQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY29uY2F0LCBvZiwgU3Vic2NyaXB0aW9uLCBFTVBUWSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgUG9CcmVhZGNydW1iLFxuICBQb0RpYWxvZ1NlcnZpY2UsXG4gIFBvRHluYW1pY0Zvcm1Db21wb25lbnQsXG4gIFBvR3JpZENvbXBvbmVudCxcbiAgUG9HcmlkUm93QWN0aW9ucyxcbiAgUG9MYW5ndWFnZVNlcnZpY2UsXG4gIFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgUG9QYWdlQWN0aW9uLFxuICBwb0xvY2FsZURlZmF1bHRcbn0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sZWFuLCBtYXBPYmplY3RCeVByb3BlcnRpZXMsIHZhbHVlc0Zyb21PYmplY3QsIHJlbW92ZUtleXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi8uLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0VkaXRBY3Rpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1lZGl0LWFjdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNFZGl0RmllbGQgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWVkaXQtZmllbGQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tcGFnZS1keW5hbWljL3BvLXBhZ2UtZHluYW1pYy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNFZGl0T3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtZWRpdC1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLXBhZ2UtY3VzdG9taXphdGlvbi9wby1wYWdlLWN1c3RvbWl6YXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRWRpdE1ldGFkYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1lZGl0LW1ldGFkYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljT3B0aW9uc1NjaGVtYSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLXBhZ2UtY3VzdG9taXphdGlvbi9wby1wYWdlLWR5bmFtaWMtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0VkaXRBY3Rpb25zU2VydmljZSB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLWVkaXQtYWN0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNFZGl0QmVmb3JlQ2FuY2VsIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1lZGl0LWJlZm9yZS1jYW5jZWwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNFZGl0TGl0ZXJhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWVkaXQtbGl0ZXJhbHMuaW50ZXJmYWNlJztcblxudHlwZSBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uID0gc3RyaW5nIHwgKCgpID0+IFBvUGFnZUR5bmFtaWNFZGl0T3B0aW9ucyk7XG50eXBlIFNhdmVBY3Rpb24gPSBQb1BhZ2VEeW5hbWljRWRpdEFjdGlvbnNbJ3NhdmUnXSB8IFBvUGFnZUR5bmFtaWNFZGl0QWN0aW9uc1snc2F2ZU5ldyddO1xuXG5leHBvcnQgY29uc3QgcG9QYWdlRHluYW1pY0VkaXRMaXRlcmFsc0RlZmF1bHQgPSB7XG4gIGVuOiA8UG9QYWdlRHluYW1pY0VkaXRMaXRlcmFscz57XG4gICAgY2FuY2VsQ29uZmlybU1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoaXMgb3BlcmF0aW9uPycsXG4gICAgZGV0YWlsQWN0aW9uTmV3OiAnTmV3JyxcbiAgICBwYWdlQWN0aW9uQ2FuY2VsOiAnQ2FuY2VsJyxcbiAgICBwYWdlQWN0aW9uU2F2ZTogJ1NhdmUnLFxuICAgIHBhZ2VBY3Rpb25TYXZlTmV3OiAnU2F2ZSBhbmQgbmV3JyxcbiAgICByZWdpc3Rlck5vdEZvdW5kOiAnUmVnaXN0ZXIgbm90IGZvdW5kLicsXG4gICAgc2F2ZU5vdGlmaWNhdGlvblN1Y2Nlc3NTYXZlOiAnUmVzb3VyY2Ugc3VjY2Vzc2Z1bGx5IHNhdmVkLicsXG4gICAgc2F2ZU5vdGlmaWNhdGlvblN1Y2Nlc3NVcGRhdGU6ICdSZXNvdXJjZSBzdWNjZXNzZnVsbHkgdXBkYXRlZC4nLFxuICAgIHNhdmVOb3RpZmljYXRpb25XYXJuaW5nOiAnRm9ybSBtdXN0IGJlIGZpbGxlZCBvdXQgY29ycmVjdGx5LidcbiAgfSxcbiAgZXM6IDxQb1BhZ2VEeW5hbWljRWRpdExpdGVyYWxzPntcbiAgICBjYW5jZWxDb25maXJtTWVzc2FnZTogJ0VzdMOhIHNlZ3VybyBkZSBxdWUgZGVzZWEgY2FuY2VsYXIgZXN0YSBvcGVyYWNpw7NuPycsXG4gICAgZGV0YWlsQWN0aW9uTmV3OiAnTnVldm8nLFxuICAgIHBhZ2VBY3Rpb25DYW5jZWw6ICdDYW5jZWxhcicsXG4gICAgcGFnZUFjdGlvblNhdmU6ICdHdWFyZGFyJyxcbiAgICBwYWdlQWN0aW9uU2F2ZU5ldzogJ0d1YXJkYXIgeSBudWV2bycsXG4gICAgcmVnaXN0ZXJOb3RGb3VuZDogJ1JlZ2lzdHJvIG5vIGVuY29udHJhZG8uJyxcbiAgICBzYXZlTm90aWZpY2F0aW9uU3VjY2Vzc1NhdmU6ICdSZWN1cnNvIHNhbHZvIGNvbiDDqXhpdG8uJyxcbiAgICBzYXZlTm90aWZpY2F0aW9uU3VjY2Vzc1VwZGF0ZTogJ1JlY3Vyc28gYWN0dWFsaXphZG8gY29uIMOpeGl0by4nLFxuICAgIHNhdmVOb3RpZmljYXRpb25XYXJuaW5nOiAnRWwgZm9ybXVsYXJpbyBkZWJlIGxsZW5hcnNlIGNvcnJlY3RhbWVudGUuJ1xuICB9LFxuICBwdDogPFBvUGFnZUR5bmFtaWNFZGl0TGl0ZXJhbHM+e1xuICAgIGNhbmNlbENvbmZpcm1NZXNzYWdlOiAnVGVtIGNlcnRlemEgcXVlIGRlc2VqYSBjYW5jZWxhciBlc3RhIG9wZXJhw6fDo28/JyxcbiAgICBkZXRhaWxBY3Rpb25OZXc6ICdOb3ZvJyxcbiAgICBwYWdlQWN0aW9uQ2FuY2VsOiAnQ2FuY2VsYXInLFxuICAgIHBhZ2VBY3Rpb25TYXZlOiAnU2FsdmFyJyxcbiAgICBwYWdlQWN0aW9uU2F2ZU5ldzogJ1NhbHZhciBlIG5vdm8nLFxuICAgIHJlZ2lzdGVyTm90Rm91bmQ6ICdSZWdpc3RybyBuw6NvIGVuY29udHJhZG8uJyxcbiAgICBzYXZlTm90aWZpY2F0aW9uU3VjY2Vzc1NhdmU6ICdSZWN1cnNvIHNhbHZvIGNvbSBzdWNlc3NvLicsXG4gICAgc2F2ZU5vdGlmaWNhdGlvblN1Y2Nlc3NVcGRhdGU6ICdSZWN1cnNvIGF0dWFsaXphZG8gY29tIHN1Y2Vzc28uJyxcbiAgICBzYXZlTm90aWZpY2F0aW9uV2FybmluZzogJ0Zvcm11bMOhcmlvIHByZWNpc2Egc2VyIHByZWVuY2hpZG8gY29ycmV0YW1lbnRlLidcbiAgfSxcbiAgcnU6IDxQb1BhZ2VEeW5hbWljRWRpdExpdGVyYWxzPntcbiAgICBjYW5jZWxDb25maXJtTWVzc2FnZTogJ9CS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0L7RgtC80LXQvdC40YLRjCDRjdGC0YMg0L7Qv9C10YDQsNGG0LjRjj8nLFxuICAgIGRldGFpbEFjdGlvbk5ldzogJ9Cd0L7QstGL0LknLFxuICAgIHBhZ2VBY3Rpb25DYW5jZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcbiAgICBwYWdlQWN0aW9uU2F2ZTogJ9Ch0L7RhdGA0LDQvdC40YLRjCcsXG4gICAgcGFnZUFjdGlvblNhdmVOZXc6ICfQodC+0YXRgNCw0L3QuNGC0Ywg0Lgg0YHQvtC30LTQsNGC0YwnLFxuICAgIHJlZ2lzdGVyTm90Rm91bmQ6ICfQl9Cw0L/QuNGB0Ywg0L3QtSDQvdCw0LnQtNC10L3QsC4nLFxuICAgIHNhdmVOb3RpZmljYXRpb25TdWNjZXNzU2F2ZTogJ9Cg0LXRgdGD0YDRgSDRg9GB0L/QtdGI0L3QviDRgdC+0YXRgNCw0L3QtdC9LicsXG4gICAgc2F2ZU5vdGlmaWNhdGlvblN1Y2Nlc3NVcGRhdGU6ICfQoNC10YHRg9GA0YEg0YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstC70LXQvS4nLFxuICAgIHNhdmVOb3RpZmljYXRpb25XYXJuaW5nOiAn0KTQvtGA0LzQsCDQtNC+0LvQttC90LAg0LHRi9GC0Ywg0LfQsNC/0L7Qu9C90LXQvdCwINC/0YDQsNCy0LjQu9GM0L3Qvi4nXG4gIH1cbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTyBgcG8tcGFnZS1keW5hbWljLWVkaXRgIMOpIHVtYSBww6FnaW5hIHF1ZSBwb2RlIHNlcnZpciBwYXJhIGVkaXRhciBvdSBjcmlhciBub3ZvcyByZWdpc3Ryb3MsXG4gKiBvIG1lc21vIHRhbWLDqW0gc3Vwb3J0YSBtZXRhZGFkb3MgY29uZm9ybWUgZXNwZWNpZmljYWRvIG5hIGRvY3VtZW50YcOnw6NvLlxuICpcbiAqICMjIyBVdGlsaXphw6fDo28gdmlhIHJvdGFcbiAqXG4gKiBBbyB1dGlsaXphciBhcyByb3RhcyBwYXJhIGNhcnJlZ2FyIG8gdGVtcGxhdGUsIG8gYHBhZ2UtZHluYW1pYy1lZGl0YCBkaXNwb25pYmlsaXphIHByb3ByaWVkYWRlcyBwYXJhXG4gKiBwb2RlciBlc3BlY2lmaWNhciBvIGVuZHBvaW50IGRvcyBkYWRvcyBlIGRvcyBtZXRhZGFkb3MuIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxuICpcbiAqIE8gY29tcG9uZW50ZSBwcmltZWlybyBpcsOhIGNhcnJlZ2FyIG8gbWV0YWRhZG8gZGEgcm90YSBkZWZpbmlkYSBuYSBwcm9wcmllZGFkZSBzZXJ2aWNlTWV0YWRhdGFBcGlcbiAqIGUgZGVwb2lzIGlyw6EgYnVzY2FyIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZUxvYWRBcGlcbiAqXG4gKiA+IENhc28gbyBzZXJ2aWRvciByZXRvcm5hciB1bSBlcnJvIGFvIHJlY3VwZXJhciBvIG1ldGFkYWRvcywgc2Vyw6EgcmVwYXNzYWRvIG8gbWV0YWRhZG9zIHNhbHZvIGVtIGNhY2hlLFxuICogc2UgbyBjYWNoZSBuw6NvIGV4aXN0ZSBzZXLDoSBkaXNwYXJhZG8gdW1hIG5vdGlmaWNhw6fDo28uXG4gKlxuICogYGBgXG4gKiB7XG4gKiAgIHBhdGg6ICdwZW9wbGUnLFxuICogICBjb21wb25lbnQ6IFBvUGFnZUR5bmFtaWNFZGl0Q29tcG9uZW50LFxuICogICBkYXRhOiB7XG4gKiAgICAgc2VydmljZUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9wZW9wbGUnLCAvLyBlbmRwb2ludCBkb3MgZGFkb3NcbiAqICAgICBzZXJ2aWNlTWV0YWRhdGFBcGk6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvdjEvbWV0YWRhdGEnLCAvLyBlbmRwb2ludCBkb3MgbWV0YWRhZG9zIHV0aWxpemFuZG8gbyBtw6l0b2RvIEhUVFAgR2V0XG4gKiAgICAgc2VydmljZUxvYWRBcGk6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvbG9hZC1tZXRhZGF0YScgLy8gZW5kcG9pbnQgZGUgY3VzdG9taXphw6fDtWVzIGRvcyBtZXRhZGFkb3MgdXRpbGl6YW5kbyBvIG3DqXRvZG8gSFRUUCBQb3N0XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBgYGBcbiAqXG4gKiBQYXJhIGNhcnJlZ2FyIGNvbSB1bSByZWN1cnNvIGrDoSBleGlzdGVudGUsIGRldmUtc2Ugc2VyIGluY2x1w61kbyB1bSBwYXLDom1ldHJvIG5hIHJvdGEgY2hhbWFkbyBgaWRgOlxuICpcbiAqIGBgYFxuICoge1xuICogICBwYXRoOiAncGVvcGxlLzppZCcsXG4gKiAgIGNvbXBvbmVudDogUG9QYWdlRHluYW1pY0VkaXRDb21wb25lbnQsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzZXJ2aWNlQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL3YxL3Blb3BsZScsIC8vIGVuZHBvaW50IGRvcyBkYWRvc1xuICogICAgIHNlcnZpY2VNZXRhZGF0YUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9tZXRhZGF0YScsIC8vIGVuZHBvaW50IGRvcyBtZXRhZGFkb3NcbiAqICAgICBzZXJ2aWNlTG9hZEFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9sb2FkLW1ldGFkYXRhJyAvLyBlbmRwb2ludCBkZSBjdXN0b21pemHDp8O1ZXMgZG9zIG1ldGFkYWRvc1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBIHJlcXVpc2nDp8OjbyBkb3MgbWV0YWRhZG9zIMOpIGZlaXRhIG5hIGluaWNpYWxpemHDp8OjbyBkbyB0ZW1wbGF0ZSBwYXJhIGJ1c2NhciBvcyBtZXRhZGFkb3MgZGEgcMOhZ2luYSBwYXNzYW5kbyBvXG4gKiB0aXBvIGRvIG1ldGFkYWRvIGVzcGVyYWRvIGUgYSB2ZXJzw6NvIGNhY2hlYWRhIHBlbG8gYnJvd3Nlci5cbiAqXG4gKiBPIGZvcm1hdG8gZXNwZXJhZG8gbmEgcmVzcG9zdGEgZGEgcmVxdWlzacOnw6NvIGVzdMOhIGVzcGVjaWZpY2FkbyBuYSBpbnRlcmZhY2VcbiAqIFtQb1BhZ2VEeW5hbWljRWRpdE1ldGFkYXRhXSgvZG9jdW1lbnRhdGlvbi9wby1wYWdlLWR5bmFtaWMtZWRpdCNwby1wYWdlLWR5bmFtaWMtZWRpdC1tZXRhZGF0YSkuIFBvciBleGVtcGxvOlxuICpcbiAqIGBgYFxuICogIHtcbiAqICAgdmVyc2lvbjogMSxcbiAqICAgdGl0bGU6ICdQZXJzb24gZWRpdCcsXG4gKiAgIGZpZWxkczogW1xuICogICAgIHsgcHJvcGVydHk6ICdpZCcsIGtleTogdHJ1ZSwgZGlzYWJsZWQ6IHRydWUgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnc3RhdHVzJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICduYW1lJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICduaWNrbmFtZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnYmlydGhkYXRlJywgbGFiZWw6ICdCaXJ0aCBkYXRlJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdnZW5yZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnY2l0eScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnY291bnRyeScgfVxuICogICBdXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiA+IENhc28gbyBlbmRwb2ludCBkb3MgbWV0YWRhZG9zIG7Do28gc2VqYSBlc3BlY2lmaWNhZG8sIHNlcsOhIGZlaXRvIHVtYSByZXF1aXNpw6fDo28gdXRpbGl6YW5kbyBvIGBzZXJ2aWNlQXBpYCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAqIGBgYFxuICogR0VUIHtlbmQtcG9pbnR9L21ldGFkYXRhP3R5cGU9ZWRpdCZ2ZXJzaW9uPXt2ZXJzaW9ufVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tcGFnZS1keW5hbWljLWVkaXQtYmFzaWNcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBFZGl0IEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtZWRpdC1iYXNpYy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLWVkaXQtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLWVkaXQtYmFzaWMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1lZGl0LWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy1lZGl0LXVzZXJcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBFZGl0IC0gVXNlclwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLWVkaXQtdXNlci9zYW1wbGUtcG8tcGFnZS1keW5hbWljLWVkaXQtdXNlci5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtZWRpdC11c2VyL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtZWRpdC11c2VyLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLXBhZ2UtZHluYW1pYy1lZGl0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLXBhZ2UtZHluYW1pYy1lZGl0LmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbUG9QYWdlRHluYW1pY1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFBvUGFnZUR5bmFtaWNFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdkeW5hbWljRm9ybScpIGR5bmFtaWNGb3JtOiBQb0R5bmFtaWNGb3JtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdncmlkRGV0YWlsJykgZ3JpZERldGFpbDogUG9HcmlkQ29tcG9uZW50O1xuXG4gIC8qKiBPYmpldG8gY29tIHByb3ByaWVkYWRlcyBkbyBicmVhZGNydW1iLiAqL1xuICBASW5wdXQoJ3AtYnJlYWRjcnVtYicpIGJyZWFkY3J1bWI/OiBQb0JyZWFkY3J1bWIgPSB7IGl0ZW1zOiBbXSB9O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRW5kcG9pbnQgdXNhZG8gcGVsbyB0ZW1wbGF0ZSBwYXJhIHJlcXVpc2nDp8OjbyBkbyByZWN1cnNvIHF1ZSBzZXLDoSBleGliaWRvIHBhcmEgZWRpw6fDo28uXG4gICAqXG4gICAqIFBhcmEgYXMgYcOnw7VlcyBkZSBgc2F2ZWAgZSBgc2F2ZU5ld2AsIHNlcsOhIGZlaXRvIHVtYSByZXF1aXNpw6fDo28gZGUgY3JpYcOnw6NvIG5lc3NlIG1lc21vIGVuZHBvaW50IHBhc3NhbmRvIG9zIHZhbG9yZXNcbiAgICogcHJlZW5jaGlkb3MgcGVsbyB1c3XDoXJpbyB2aWEgcGF5bG9hZC5cbiAgICpcbiAgICogPiBgUE9TVCB7ZW5kLXBvaW50fWBcbiAgICpcbiAgICogYGBgXG4gICAqICA8cG8tcGFnZS1keW5hbWljLWVkaXRcbiAgICogICAgW3AtYWN0aW9uc109XCJ7IHNhdmU6ICcvJywgc2F2ZU5ldzogJ25ldycgfVwiXG4gICAqICAgIFtwLWZpZWxkc109XCJbIHsgcHJvcGVydHk6ICduYW1lJyB9LCB7IHByb3BlcnR5OiAnY2l0eScgfSBdXCJcbiAgICogICAgcC1zZXJ2aWNlPVwiL2FwaS9wby1zYW1wbGVzL3YxL3Blb3BsZVwiXG4gICAqICAgIC4uLj5cbiAgICogIDwvcG8tcGFnZS1keW5hbWljLWVkaXQ+XG4gICAqIGBgYFxuICAgKlxuICAgKiBSZXNxdWlzacOnw6NvIGRpc3BhcmFkYSwgb25kZSBhIHByb3ByaWVkYWRlIGBuYW1lYCBlIGBjaXR5YCBmb3JhbSBwcmVlbmNoaWRhczpcbiAgICpcbiAgICogYGBgXG4gICAqICBQT1NUIC9hcGkvcG8tc2FtcGxlcy92MS9wZW9wbGUgSFRUUC8xLjFcbiAgICogIEhvc3Q6IGxvY2FsaG9zdDo0MDAwXG4gICAqICBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gICAqICBBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW5cbiAgICogIC4uLlxuICAgKiBgYGBcbiAgICpcbiAgICogUmVxdWVzdCBwYXlsb2FkOlxuICAgKlxuICAgKiBgYGBcbiAgICogeyBcIm5hbWVcIjogXCJGdWxhbm9cIiwgXCJjaXR5XCI6IFwiU21hbGx2aWxsZVwiIH1cbiAgICogYGBgXG4gICAqXG4gICAqIENhc28gcXVlaXJhIHF1ZSBvIHRlbXBsYXRlIGNhcnJlZ3VlIHVtIHJlY3Vyc28gasOhIGV4aXN0ZW50ZSwgZGV2ZS1zZSBzZXIgaW5jbHXDrWRvIHVtIHBhcmFtZXRybyBuYSByb3RhIGNoYW1hZG8gYGlkYC5cbiAgICpcbiAgICogRXhlbXBsbyBkZSBjb25maWd1cmHDp8OjbyBkZSByb3RhOlxuICAgKlxuICAgKiBgYGBcbiAgICogIFJvdXRlck1vZHVsZS5mb3JSb290KFtcbiAgICogICAgLi4uXG4gICAqICAgIHsgcGF0aDogJ2VkaXQvOmlkJywgY29tcG9uZW50OiBQZXJzb25FZGl0Q29tcG9uZW50IH0sXG4gICAqICAgIC4uLlxuICAgKiAgXSxcbiAgICogYGBgXG4gICAqXG4gICAqIEJhc2VhZG8gbmlzc28sIG5hIGluaWNpYWxpemHDp8OjbyBkbyB0ZW1wbGF0ZSwgc2Vyw6EgZGlzcGFyYWRvIHVtYSByZXF1aXNpw6fDo28gcGFyYSBidXNjYXIgbyByZWN1cnNvIHF1ZSBzZXLDoSBlZGl0YWRvLlxuICAgKlxuICAgKiA+IGBHRVQge2VuZC1wb2ludH0ve2lkfWBcbiAgICpcbiAgICogTm9zIG3DqXRvZG9zIGRlIGBzYXZlYCBlIGBzYXZlTmV3YCwgYW8gaW52w6lzIGRlIHVtIGBQT1NUYCwgc2Vyw6EgZGlzcGFyYWRvIHVtIGBQVVRgLlxuICAgKlxuICAgKiBSZXNxdWlzacOnw6NvIGRpc3BhcmFkYSwgb25kZSBhIHByb3ByaWVkYWRlIGBuYW1lYCBlIGBjaXR5YCBmb3JhbSBwcmVlbmNoaWRhcyAvIGF0dWFsaXphZGFzLCBlIG8gYGlkYCBkYSB1cmwgw6kgMjpcbiAgICpcbiAgICogYGBgXG4gICAqICBQVVQgL2FwaS9wby1zYW1wbGVzL3YxL3Blb3BsZS8yIEhUVFAvMS4xXG4gICAqICBIb3N0OiBsb2NhbGhvc3Q6NDAwMFxuICAgKiAgQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICAgKiAgQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluXG4gICAqICAuLi5cbiAgICogYGBgXG4gICAqXG4gICAqIFJlcXVlc3QgcGF5bG9hZDpcbiAgICpcbiAgICogYGBgXG4gICAqIHsgXCJuYW1lXCI6IFwiRnVsYW5vXCIsIFwiY2l0eVwiOiBcIk1ldHJvcG9saXNcIiB9XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLXNlcnZpY2UtYXBpJykgc2VydmljZUFwaTogc3RyaW5nO1xuXG4gIC8qKiBUw610dWxvIGRhIHDDoWdpbmEuICovXG4gIEBJbnB1dCgncC10aXRsZScpIHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIG91IHNlcnZpw6dvIHF1ZSBzZXLDoSBleGVjdXRhZG8gbmEgaW5pY2lhbGl6YcOnw6NvIGRvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIEEgcHJvcHJpZWRhZGUgYWNlaXRhIG9zIHNlZ3VpbnRlcyB0aXBvczpcbiAgICogLSBgc3RyaW5nYDogKkVuZHBvaW50KiB1c2FkbyBwZWxvIGNvbXBvbmVudGUgcGFyYSByZXF1aXNpw6fDo28gdmlhIGBQT1NUYC5cbiAgICogLSBgZnVuY3Rpb25gOiBNw6l0b2RvIHF1ZSBzZXLDoSBleGVjdXRhZG8uXG4gICAqXG4gICAqIE8gcmV0b3JubyBkZXN0YSBmdW7Dp8OjbyBkZXZlIHNlciBkbyB0aXBvIGBQb1BhZ2VEeW5hbWljRWRpdE9wdGlvbnNgLFxuICAgKiBvbmRlIG8gdXN1w6FyaW8gcG9kZXLDoSBjdXN0b21pemFyIG5vdm9zIGNhbXBvcywgYnJlYWRjcnVtYiwgdGl0bGUgZSBhY3Rpb25zXG4gICAqXG4gICAqIFBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGBcbiAgICogZ2V0UGFnZU9wdGlvbnMoKTogUG9QYWdlRHluYW1pY0VkaXRPcHRpb25zIHtcbiAgICogcmV0dXJuIHtcbiAgICogICBhY3Rpb25zOlxuICAgKiAgICAgeyBjYW5jZWw6IGZhbHNlLCBzYXZlOiAnc2F2ZS86aWQnLCBzYXZlTmV3OiAnc2F2ZU5ldycgfSxcbiAgICogICBmaWVsZHM6IFtcbiAgICogICAgIHsgcHJvcGVydHk6ICdpZENhcmQnLCBncmlkQ29sdW1uczogNiB9XG4gICAqICAgXVxuICAgKiB9O1xuICAgKiB9XG4gICAqXG4gICAqIGBgYFxuICAgKiBQYXJhIHJlZmVyZW5jaWFyIGEgc3VhIGZ1bsOnw6NvIHV0aWxpemUgYSBwcm9wcmllZGFkZSBgYmluZGAsIHBvciBleGVtcGxvOlxuICAgKiBgYGBcbiAgICogIFtwLWxvYWRdPVwib25Mb2FkT3B0aW9ucy5iaW5kKHRoaXMpXCJcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtbG9hZCcpIG9uTG9hZDogc3RyaW5nIHwgKCgpID0+IFBvUGFnZUR5bmFtaWNFZGl0T3B0aW9ucyk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRnVuw6fDo28gcXVlIHNlcsOhIGV4ZWN1dGFkYSBhcMOzcyBzZXIgcmVhbGl6YWRhIGEgYnVzY2EgZG9zIGRhZG9zLlxuICAgKlxuICAgKiBBIHByb3ByaWVkYWRlIGFjZWl0YSBvcyBzZWd1aW50ZXMgdGlwb3M6XG4gICAqIC0gYGZ1bmN0aW9uYDogTcOpdG9kbyBxdWUgc2Vyw6EgZXhlY3V0YWRvLlxuICAgKlxuICAgKiBFc3RhIGZ1bsOnw6NvIHBhc3NhIHBvciBwYXLDom1ldHJvIG8gbW9kZWwgZSBkZXZlIHJlY2Viw6otbG8gZGUgdm9sdGEgY29tIGFzIGFsdGVyYcOnw7Vlcy5cbiAgICogVGFtYsOpbSBhY2VpdGEgbyByZXRvcm5vIGRlIHVtIE9ic2VydmFibGUgY29tIG8gbm92byBtb2RlbC5cbiAgICpcbiAgICogUG9yIGV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBvbkxvYWRDdXN0b20obW9kZWwpIHtcbiAgICogIHJldHVybiB7IC4uLm1vZGVsLCBjdXN0b21GaWVsZDogJ25ld1ZhbHVlJyB9O1xuICAgKiB9XG4gICAqXG4gICAqIGBgYFxuICAgKiBQYXJhIHJlZmVyZW5jaWFyIGEgc3VhIGZ1bsOnw6NvIHV0aWxpemUgYSBwcm9wcmllZGFkZSBgYmluZGAsIHBvciBleGVtcGxvOlxuICAgKiBgYGBcbiAgICogIFtwLWxvYWQtZGF0YV09XCJvbkxvYWRDdXN0b20uYmluZCh0aGlzKVwiXG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLWxvYWQtZGF0YScpIG9uTG9hZERhdGE6ICgobW9kZWw6IGFueSkgPT4gYW55KSB8ICgobW9kZWw6IGFueSkgPT4gT2JzZXJ2YWJsZTxhbnk+KTtcblxuICBtb2RlbDogYW55ID0ge307XG5cbiAgLy8gYmVmb3JlU2F2ZTogcmV0dXJuIGJvb2xlYW5cbiAgLy8gYWZ0ZXJTYXZlXG4gIC8vIGJlZm9yZVJlbW92ZTogcmV0dXJuIGJvb2xlYW5cbiAgLy8gYWZ0ZXJSZW1vdmVcbiAgLy8gYmVmb3JlSW5zZXJ0OiA6IHJldHVybiBib29sZWFuXG4gIHJlYWRvbmx5IGRldGFpbEFjdGlvbnM6IFBvR3JpZFJvd0FjdGlvbnMgPSB7fTtcblxuICBwcml2YXRlIGluZGV4Rm9jdXMgPSAwO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuICBwcml2YXRlIF9hY3Rpb25zOiBQb1BhZ2VEeW5hbWljRWRpdEFjdGlvbnMgPSB7fTtcbiAgcHJpdmF0ZSBfbGl0ZXJhbHM6IFBvUGFnZUR5bmFtaWNFZGl0TGl0ZXJhbHM7XG4gIHByaXZhdGUgX2F1dG9Sb3V0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY29udHJvbEZpZWxkczogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9kZXRhaWxGaWVsZHM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBfZHVwbGljYXRlczogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9maWVsZHM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBfa2V5czogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9wYWdlQWN0aW9uczogQXJyYXk8UG9QYWdlQWN0aW9uPiA9IFtdO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEHDp8O1ZXMgZGEgcMOhZ2luYS5cbiAgICovXG4gIEBJbnB1dCgncC1hY3Rpb25zJykgc2V0IGFjdGlvbnModmFsdWU6IFBvUGFnZUR5bmFtaWNFZGl0QWN0aW9ucykge1xuICAgIHRoaXMuX2FjdGlvbnMgPSB0aGlzLmlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge307XG5cbiAgICB0aGlzLl9wYWdlQWN0aW9ucyA9IHRoaXMuZ2V0UGFnZUFjdGlvbnModGhpcy5fYWN0aW9ucyk7XG4gIH1cblxuICBnZXQgYWN0aW9ucygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9hY3Rpb25zIH07XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPYmpldG8gY29tIGFzIGxpdGVyYWlzIHVzYWRhcyBubyBgcG8tcGFnZS1keW5hbWljLWVkaXRgLlxuICAgKlxuICAgKiDDiSBwb3NzaXZlbCBjdXN0b21pemFyIHBhc3NhbmRvIHVtIG9iamV0byBjb20gdG9kYXMgYXMgbGl0ZXJhaXMgZGlzcG9uw612ZWlzXG4gICAqIG91IHBhc3NhbmRvIGFwZW5hcyBhcyBsaXRlcmFpcyBxdWUgZGVzZWphIGN1c3RvbWl6YXJcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9QYWdlRHluYW1pY0VkaXRMaXRlcmFscyA9IHtcbiAgICogICAgZGV0YWlsQWN0aW9uTmV3OiAnSW5jbHVpcicsXG4gICAqICAgIHBhZ2VBY3Rpb25DYW5jZWw6ICdEZXNjYXJ0YXInLFxuICAgKiAgICBwYWdlQWN0aW9uU2F2ZTogJ0dyYXZhcicsXG4gICAqICAgIHBhZ2VBY3Rpb25TYXZlTmV3OiAnR3JhdmFyIGUgaW5jbHVpcicsXG4gICAqICAgIHJlZ2lzdGVyTm90Rm91bmQ6ICdOZW5odW0gcmVnaXN0cm8gZW5jb250cmFkby4nLFxuICAgKiAgICBzYXZlTm90aWZpY2F0aW9uU3VjY2Vzc1NhdmU6ICdJdGVtIHNhbHZvIGNvbSBzdWNlc3NvLicsXG4gICAqICAgIHNhdmVOb3RpZmljYXRpb25TdWNjZXNzVXBkYXRlOiAnSXRlbSBhdHVhbGl6YWRvIGNvbSBzdWNlc3NvLicsXG4gICAqICAgIHNhdmVOb3RpZmljYXRpb25XYXJuaW5nOiAnTmVjZXNzw6FyaW8gcHJlZW5jaGVyIG8gZm9ybXVsw6FyaW8gY29ycmV0YW1lbnRlLidcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBFIHBhcmEgY2FycmVnYXIgYXMgbGl0ZXJhaXMgY3VzdG9taXphZGFzLCBiYXN0YSBhcGVuYXMgcGFzc2FyIG8gb2JqZXRvIHBhcmEgbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLXBhZ2UtZHluYW1pYy1lZGl0XG4gICAqICAgW3AtbGl0ZXJhbHNdPVwiY3VzdG9tTGl0ZXJhbHNcIj5cbiAgICogPC9wby1wYWdlLWR5bmFtaWMtZWRpdD5cbiAgICogYGBgXG4gICAqXG4gICAqID4gTyB2YWxvciBwYWRyw6NvIHNlcsOhIHRyYWR1emlkbyBkZSBhY29yZG8gY29tIG8gaWRpb21hIGNvbmZpZ3VyYWRvIG5vIFtgUG9JMThuU2VydmljZWBdKC9kb2N1bWVudGF0aW9uL3BvLWkxOG4pIG91ICpicm93c2VyKi5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9QYWdlRHluYW1pY0VkaXRMaXRlcmFscykge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHtcbiAgICAgICAgLi4ucG9QYWdlRHluYW1pY0VkaXRMaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgICAgLi4ucG9QYWdlRHluYW1pY0VkaXRMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvUGFnZUR5bmFtaWNFZGl0TGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICAgIH1cblxuICAgIHRoaXMuX3BhZ2VBY3Rpb25zID0gdGhpcy5nZXRQYWdlQWN0aW9ucyh0aGlzLl9hY3Rpb25zKTtcbiAgfVxuXG4gIGdldCBsaXRlcmFscygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGl0ZXJhbHMgfHwgcG9QYWdlRHluYW1pY0VkaXRMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gIH1cblxuICAvKipcbiAgICogQHRvZG8gVmFsaWRhciByb3RhcyBuYSBtw6NvIHBvaXMgc2UgZXhpc3RpciB1bWEgcm90YSAnKionIG8gY2F0Y2ggZG8gbmF2aWdhdGlvbiBuw6NvIGZ1bmNpb25hLlxuICAgKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIENyaWEgYXV0b21hdGljYW1lbnRlIGFzIHJvdGFzIGRlIGVkacOnw6NvIChub3ZvL2R1cGxpY2F0ZSkgZSBkZXRhbGhlcyBjYXNvIGFzIGHDp8O1ZXNcbiAgICogZXN0ZWphbSBkZWZpbmlkYXMgbmFzIGHDp8O1ZXMuXG4gICAqXG4gICAqID4gUGFyYSBvIGNvcnJldG8gZnVuY2lvbmFtZW50byBuw6NvIHBvZGUgaGF2ZXIgbmVuaHVtIHJvdGEgY29yaW5nYSAoYCoqYCkgZXNwZWNpZmljYWRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCdwLWF1dG8tcm91dGVyJykgc2V0IGF1dG9Sb3V0ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hdXRvUm91dGVyID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgYXV0b1JvdXRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b1JvdXRlcjtcbiAgfVxuXG4gIC8qKiBMaXN0YSBkb3MgY2FtcG9zIHVzYWRvcyBuYSB0YWJlbGEgZSBidXNjYSBhdmFuw6dhZGEuICovXG4gIEBJbnB1dCgncC1maWVsZHMnKSBzZXQgZmllbGRzKHZhbHVlOiBBcnJheTxQb1BhZ2VEeW5hbWljRWRpdEZpZWxkPikge1xuICAgIHRoaXMuX2ZpZWxkcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IFtdO1xuXG4gICAgdGhpcy5fa2V5cyA9IHRoaXMuZ2V0S2V5c0J5RmllbGRzKHRoaXMuX2ZpZWxkcyk7XG4gICAgdGhpcy5fZHVwbGljYXRlcyA9IHRoaXMuZ2V0RHVwbGljYXRlc0J5RmllbGRzKHRoaXMuX2ZpZWxkcyk7XG5cbiAgICB0aGlzLl9jb250cm9sRmllbGRzID0gdGhpcy5nZXRDb250cm9sRmllbGRzKHRoaXMuX2ZpZWxkcyk7XG4gICAgdGhpcy5fZGV0YWlsRmllbGRzID0gdGhpcy5nZXREZXRhaWxGaWVsZHModGhpcy5fZmllbGRzKTtcbiAgfVxuXG4gIGdldCBmaWVsZHMoKTogQXJyYXk8UG9QYWdlRHluYW1pY0VkaXRGaWVsZD4ge1xuICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcG9Ob3RpZmljYXRpb246IFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBvRGlhbG9nU2VydmljZTogUG9EaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlRHluYW1pY1NlcnZpY2U6IFBvUGFnZUR5bmFtaWNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2U6IFBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlRHluYW1pY0VkaXRBY3Rpb25zU2VydmljZTogUG9QYWdlRHluYW1pY0VkaXRBY3Rpb25zU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRGF0YUZyb21BUEkoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGV0YWlsQWN0aW9uTmV3KCkge1xuICAgIHRoaXMuZ3JpZERldGFpbC5pbnNlcnRSb3coKTtcbiAgfVxuXG4gIGdldCBkdXBsaWNhdGVzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5fZHVwbGljYXRlc107XG4gIH1cblxuICBnZXQga2V5cygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2tleXNdO1xuICB9XG5cbiAgZ2V0IHBhZ2VBY3Rpb25zKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFnZUFjdGlvbnNdO1xuICB9XG5cbiAgZ2V0IGNvbnRyb2xGaWVsZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xGaWVsZHM7XG4gIH1cblxuICBnZXQgZGV0YWlsRmllbGRzKCkge1xuICAgIHJldHVybiB0aGlzLl9kZXRhaWxGaWVsZHM7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRnJvbUFQSSgpIHtcbiAgICBjb25zdCB7IHNlcnZpY2VBcGk6IHNlcnZpY2VBcGlGcm9tUm91dGUsIHNlcnZpY2VNZXRhZGF0YUFwaSwgc2VydmljZUxvYWRBcGkgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTtcbiAgICBjb25zdCB7IGlkIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtcztcbiAgICBjb25zdCB7IGR1cGxpY2F0ZSB9ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcblxuICAgIGNvbnN0IG9uTG9hZCA9IHNlcnZpY2VMb2FkQXBpIHx8IHRoaXMub25Mb2FkO1xuICAgIHRoaXMuc2VydmljZUFwaSA9IHNlcnZpY2VBcGlGcm9tUm91dGUgfHwgdGhpcy5zZXJ2aWNlQXBpO1xuXG4gICAgdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5jb25maWdTZXJ2aWNlQXBpKHsgZW5kcG9pbnQ6IHRoaXMuc2VydmljZUFwaSwgbWV0YWRhdGE6IHNlcnZpY2VNZXRhZGF0YUFwaSB9KTtcblxuICAgIGNvbnN0IG1ldGFkYXRhJCA9IHRoaXMuZ2V0TWV0YWRhdGEoc2VydmljZUFwaUZyb21Sb3V0ZSwgaWQsIG9uTG9hZCk7XG4gICAgY29uc3QgZGF0YSQgPSB0aGlzLmxvYWREYXRhKGlkLCBkdXBsaWNhdGUpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY29uY2F0KG1ldGFkYXRhJCwgZGF0YSQpLnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsKFxuICAgIGFjdGlvbkNhbmNlbDogUG9QYWdlRHluYW1pY0VkaXRBY3Rpb25zWydjYW5jZWwnXSxcbiAgICBhY3Rpb25CZWZvcmVDYW5jZWw6IFBvUGFnZUR5bmFtaWNFZGl0QWN0aW9uc1snYmVmb3JlQ2FuY2VsJ11cbiAgKSB7XG4gICAgaWYgKHRoaXMuZHluYW1pY0Zvcm0gJiYgdGhpcy5keW5hbWljRm9ybS5mb3JtLmRpcnR5KSB7XG4gICAgICB0aGlzLnBvRGlhbG9nU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy5saXRlcmFscy5jYW5jZWxDb25maXJtTWVzc2FnZSxcbiAgICAgICAgdGl0bGU6IHRoaXMubGl0ZXJhbHMucGFnZUFjdGlvbkNhbmNlbCxcbiAgICAgICAgY29uZmlybTogdGhpcy5nb0JhY2suYmluZCh0aGlzLCBhY3Rpb25DYW5jZWwsIGFjdGlvbkJlZm9yZUNhbmNlbClcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdvQmFjayhhY3Rpb25DYW5jZWwsIGFjdGlvbkJlZm9yZUNhbmNlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRVbmlxdWVLZXkoaXRlbSkge1xuICAgIGNvbnN0IGtleXMgPSBtYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5rZXlzKTtcblxuICAgIHJldHVybiB2YWx1ZXNGcm9tT2JqZWN0KGtleXMpLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ29CYWNrKFxuICAgIGFjdGlvbkNhbmNlbDogUG9QYWdlRHluYW1pY0VkaXRBY3Rpb25zWydjYW5jZWwnXSxcbiAgICBhY3Rpb25CZWZvcmVDYW5jZWw6IFBvUGFnZUR5bmFtaWNFZGl0QWN0aW9uc1snYmVmb3JlQ2FuY2VsJ11cbiAgKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNFZGl0QWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZUNhbmNlbChhY3Rpb25CZWZvcmVDYW5jZWwpXG4gICAgICAgIC5zdWJzY3JpYmUoKGJlZm9yZUNhbmNlbFJlc3VsdDogUG9QYWdlRHluYW1pY0VkaXRCZWZvcmVDYW5jZWwpID0+IHtcbiAgICAgICAgICB0aGlzLmV4ZWN1dGVCYWNrQWN0aW9uKGFjdGlvbkNhbmNlbCwgYmVmb3JlQ2FuY2VsUmVzdWx0Py5hbGxvd0FjdGlvbiwgYmVmb3JlQ2FuY2VsUmVzdWx0Py5uZXdVcmwpO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVCYWNrQWN0aW9uKFxuICAgIGFjdGlvbkNhbmNlbDogUG9QYWdlRHluYW1pY0VkaXRBY3Rpb25zWydjYW5jZWwnXSxcbiAgICBhbGxvd0FjdGlvbj86IFBvUGFnZUR5bmFtaWNFZGl0QmVmb3JlQ2FuY2VsWydhbGxvd0FjdGlvbiddLFxuICAgIG5ld1VybD86IFBvUGFnZUR5bmFtaWNFZGl0QmVmb3JlQ2FuY2VsWyduZXdVcmwnXVxuICApIHtcbiAgICBjb25zdCBpc0FsbG93ZWRBY3Rpb24gPSB0eXBlb2YgYWxsb3dBY3Rpb24gPT09ICdib29sZWFuJyA/IGFsbG93QWN0aW9uIDogdHJ1ZTtcblxuICAgIGlmIChpc0FsbG93ZWRBY3Rpb24pIHtcbiAgICAgIGlmIChhY3Rpb25DYW5jZWwgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgYWN0aW9uQ2FuY2VsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb25DYW5jZWwgPT09ICdzdHJpbmcnIHx8IG5ld1VybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW25ld1VybCB8fCBhY3Rpb25DYW5jZWxdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjdGlvbkNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEoaWQsIGR1cGxpY2F0ZT8pIHtcbiAgICBpZiAoIWlkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm1vZGVsID0gZHVwbGljYXRlID8gSlNPTi5wYXJzZShkdXBsaWNhdGUpIDoge307XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHt9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0UmVzb3VyY2UoaWQpLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLmJlZm9yZVNldE1vZGVsKHJlc3BvbnNlKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIHRoaXMubW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fcGFnZUFjdGlvbnMgPSBbXTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBiZWZvcmVTZXRNb2RlbChyZXNwb25zZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLm9uTG9hZERhdGEpIHtcbiAgICAgIHRoaXMubW9kZWwgPSByZXNwb25zZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbkxvYWREYXRhRXhlY3V0aW9uID0gdGhpcy5vbkxvYWREYXRhKHJlc3BvbnNlKTtcbiAgICBjb25zdCBvbkxvYWREYXRhJCA9IG9uTG9hZERhdGFFeGVjdXRpb24gaW5zdGFuY2VvZiBPYnNlcnZhYmxlID8gb25Mb2FkRGF0YUV4ZWN1dGlvbiA6IG9mKG9uTG9hZERhdGFFeGVjdXRpb24pO1xuXG4gICAgb25Mb2FkRGF0YSQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGN1c3RvbU1vZGVsID0+IHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IGN1c3RvbU1vZGVsO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubW9kZWwgPSByZXNwb25zZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKG9uTG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9EeW5hbWljUGFnZU9wdGlvbnMob25Mb2FkKS5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2VQb09wdGlvbiA9PlxuICAgICAgICAgIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuY2hhbmdlT3JpZ2luYWxPcHRpb25zVG9OZXdPcHRpb25zKHRoaXMsIHJlc3BvbnNlUG9PcHRpb24pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0NoZWNrYm94SW5wdXQoY29udHJvbDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tib3hHcm91cCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHBvLWNoZWNrYm94LWdyb3VwW25nLXJlZmxlY3QtbmFtZT0ke2NvbnRyb2x9XWApO1xuICAgIGlmIChjaGVja2JveEdyb3VwKSB7XG4gICAgICBjb25zdCBjaGVja0JveENvbXBvbmVudCA9IGNoZWNrYm94R3JvdXAucXVlcnlTZWxlY3RvcigncG8tY2hlY2tib3hbbmctcmVmbGVjdC1kaXNhYmxlZD1mYWxzZV0nKTtcbiAgICAgIGNvbnN0IGxhYmVsSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgPSBjaGVja0JveENvbXBvbmVudD8ucXVlcnlTZWxlY3RvcignLnBvLWNoZWNrYm94LW91dGxpbmUnKTtcbiAgICAgIGlmIChsYWJlbElucHV0KSB7XG4gICAgICAgIGxhYmVsSW5wdXQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5kZXhGb2N1cy0tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNDb250cm9sKGNvbnRyb2w6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtuYW1lPSR7Y29udHJvbH1dYCk7XG4gICAgaWYgKGlucHV0RWxlbWVudCkge1xuICAgICAgaWYgKGlucHV0RWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICAgIGlucHV0RWxlbWVudC5mb2N1cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb2N1c1JhZGlvSW5wdXQoaW5wdXRFbGVtZW50LCBjb250cm9sKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c0NoZWNrYm94SW5wdXQoY29udHJvbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1JhZGlvSW5wdXQoaW5wdXRFbGVtZW50OiBFbGVtZW50LCBjb250cm9sOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByYWRpb0NvbXBvbmVudCA9IGlucHV0RWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYHBvLXJhZGlvW25nLXJlZmxlY3QtbmFtZT0ke2NvbnRyb2x9XVtuZy1yZWZsZWN0LWRpc2FibGVkPWZhbHNlXWBcbiAgICApO1xuICAgIGlmIChyYWRpb0NvbXBvbmVudCkge1xuICAgICAgY29uc3QgcmFkaW9JbnB1dCA9IHJhZGlvQ29tcG9uZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICByYWRpb0lucHV0LmZvY3VzKCk7XG4gICAgICByYWRpb0lucHV0LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdwby1yYWRpby1mb2N1cycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZGV4Rm9jdXMtLTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBvRHluYW1pY1BhZ2VPcHRpb25zKG9uTG9hZDogVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbik6IE9ic2VydmFibGU8UG9QYWdlRHluYW1pY0VkaXRPcHRpb25zPiB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcHRpb246IFBvUGFnZUR5bmFtaWNFZGl0T3B0aW9ucyA9IHtcbiAgICAgIGZpZWxkczogdGhpcy5maWVsZHMsXG4gICAgICBhY3Rpb25zOiB0aGlzLmFjdGlvbnMsXG4gICAgICBicmVhZGNydW1iOiB0aGlzLmJyZWFkY3J1bWIsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZVxuICAgIH07XG5cbiAgICBjb25zdCBwYWdlT3B0aW9uU2NoZW1hOiBQb1BhZ2VEeW5hbWljT3B0aW9uc1NjaGVtYTxQb1BhZ2VEeW5hbWljRWRpdE9wdGlvbnM+ID0ge1xuICAgICAgc2NoZW1hOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2ZpZWxkcycsXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXG4gICAgICAgICAga2V5Rm9yTWVyZ2U6ICdwcm9wZXJ0eSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnYWN0aW9ucycsXG4gICAgICAgICAgbWVyZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnYnJlYWRjcnVtYidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAndGl0bGUnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuZ2V0Q3VzdG9tT3B0aW9ucyhvbkxvYWQsIG9yaWdpbmFsT3B0aW9uLCBwYWdlT3B0aW9uU2NoZW1hKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWV0YWRhdGEoc2VydmljZUFwaUZyb21Sb3V0ZTogc3RyaW5nLCBwYXJhbUlkOiBzdHJpbmcgfCBudW1iZXIsIG9uTG9hZDogVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbikge1xuICAgIGNvbnN0IHR5cGVNZXRhZGF0YSA9IHBhcmFtSWQgPyAnZWRpdCcgOiAnY3JlYXRlJztcblxuICAgIGlmIChzZXJ2aWNlQXBpRnJvbVJvdXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5nZXRNZXRhZGF0YTxQb1BhZ2VEeW5hbWljRWRpdE1ldGFkYXRhPih0eXBlTWV0YWRhdGEpLnBpcGUoXG4gICAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5hdXRvUm91dGVyID0gcmVzcG9uc2UuYXV0b1JvdXRlciB8fCB0aGlzLmF1dG9Sb3V0ZXI7XG4gICAgICAgICAgdGhpcy5hY3Rpb25zID0gcmVzcG9uc2UuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnM7XG4gICAgICAgICAgdGhpcy5icmVhZGNydW1iID0gcmVzcG9uc2UuYnJlYWRjcnVtYiB8fCB0aGlzLmJyZWFkY3J1bWI7XG4gICAgICAgICAgdGhpcy5maWVsZHMgPSByZXNwb25zZS5maWVsZHMgfHwgdGhpcy5maWVsZHM7XG4gICAgICAgICAgdGhpcy50aXRsZSA9IHJlc3BvbnNlLnRpdGxlIHx8IHRoaXMudGl0bGU7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQ29udHJvbHNBc0RpcnR5QW5kRm9jdXNGaXJzdEludmFsaWQoKTogdm9pZCB7XG4gICAgdGhpcy5pbmRleEZvY3VzID0gMDtcbiAgICBjb25zdCBjb250cm9scyA9IE9iamVjdC5rZXlzKHRoaXMuZHluYW1pY0Zvcm0uZm9ybS5jb250cm9scyk7XG5cbiAgICBjb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgdGhpcy5keW5hbWljRm9ybS5mb3JtLmNvbnRyb2xzW2NvbnRyb2xdLm1hcmtBc0RpcnR5KCk7XG4gICAgICBpZiAodGhpcy5keW5hbWljRm9ybS5mb3JtLmNvbnRyb2xzW2NvbnRyb2xdLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIHRoaXMuaW5kZXhGb2N1cyA9PT0gMCkge1xuICAgICAgICB0aGlzLmZvY3VzQ29udHJvbChjb250cm9sKTtcbiAgICAgICAgdGhpcy5pbmRleEZvY3VzKys7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlVG8ocGF0aDogc3RyaW5nKSB7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb2x2ZVVybCh0aGlzLm1vZGVsLCBwYXRoKTtcblxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVW5pcXVlS2V5KGl0ZW06IGFueSkge1xuICAgIHJldHVybiB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtc1snaWQnXSA/IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVXJsKGl0ZW06IGFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG5cbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC86aWQvZywgdW5pcXVlS2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVNhdmUoc2F2ZVJlZGlyZWN0UGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2F2ZU9wZXJhdGlvbiQgPSB0aGlzLnNhdmVPcGVyYXRpb24oKTtcblxuICAgIHJldHVybiBzYXZlT3BlcmF0aW9uJC5waXBlKFxuICAgICAgdGFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLnN1Y2Nlc3MobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUbyhzYXZlUmVkaXJlY3RQYXRoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kZWwobmV3UmVzb3VyY2U6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgZHluYW1pY05nRm9ybSA9IHRoaXMuZHluYW1pY0Zvcm0uZm9ybTtcblxuICAgIHJlbW92ZUtleXNQcm9wZXJ0aWVzKHRoaXMua2V5cywgbmV3UmVzb3VyY2UpO1xuXG4gICAgdGhpcy5tb2RlbCA9IHsgLi4udGhpcy5tb2RlbCwgLi4ubmV3UmVzb3VyY2UgfTtcblxuICAgIGR5bmFtaWNOZ0Zvcm0uZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlT3BlcmF0aW9uKCkge1xuICAgIGlmICh0aGlzLmR5bmFtaWNGb3JtLmZvcm0uaW52YWxpZCkge1xuICAgICAgdGhpcy5tYXJrQ29udHJvbHNBc0RpcnR5QW5kRm9jdXNGaXJzdEludmFsaWQoKTtcbiAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24ud2FybmluZyh0aGlzLmxpdGVyYWxzLnNhdmVOb3RpZmljYXRpb25XYXJuaW5nKTtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbUlkID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2lkJ107XG4gICAgY29uc3Qgc3VjY2Vzc01zZyA9IHBhcmFtSWRcbiAgICAgID8gdGhpcy5saXRlcmFscy5zYXZlTm90aWZpY2F0aW9uU3VjY2Vzc1VwZGF0ZVxuICAgICAgOiB0aGlzLmxpdGVyYWxzLnNhdmVOb3RpZmljYXRpb25TdWNjZXNzU2F2ZTtcblxuICAgIGNvbnN0IHNhdmVPcGVyYXRpb24kID0gcGFyYW1JZFxuICAgICAgPyB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLnVwZGF0ZVJlc291cmNlKHBhcmFtSWQsIHRoaXMubW9kZWwpXG4gICAgICA6IHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuY3JlYXRlUmVzb3VyY2UodGhpcy5tb2RlbCk7XG5cbiAgICByZXR1cm4gc2F2ZU9wZXJhdGlvbiQucGlwZShtYXAoKCkgPT4gc3VjY2Vzc01zZykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlKGFjdGlvbjogU2F2ZUFjdGlvbiwgYmVmb3JlOiAnYmVmb3JlU2F2ZScgfCAnYmVmb3JlU2F2ZU5ldycgPSAnYmVmb3JlU2F2ZScpIHtcbiAgICBjb25zdCBleGVjdXRlT3BlcmF0aW9uID0ge1xuICAgICAgYmVmb3JlU2F2ZTogdGhpcy5leGVjdXRlU2F2ZS5iaW5kKHRoaXMpLFxuICAgICAgYmVmb3JlU2F2ZU5ldzogdGhpcy5leGVjdXRlU2F2ZU5ldy5iaW5kKHRoaXMpXG4gICAgfTtcblxuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMucmVzb2x2ZVVuaXF1ZUtleSh0aGlzLm1vZGVsKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljRWRpdEFjdGlvbnNTZXJ2aWNlW2JlZm9yZV0odGhpcy5hY3Rpb25zW2JlZm9yZV0sIHVuaXF1ZUtleSwgeyAuLi50aGlzLm1vZGVsIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcChyZXR1cm5CZWZvcmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3QWN0aW9uID0gcmV0dXJuQmVmb3JlPy5uZXdVcmwgPz8gYWN0aW9uO1xuICAgICAgICAgICAgY29uc3QgYWxsb3dBY3Rpb24gPSByZXR1cm5CZWZvcmU/LmFsbG93QWN0aW9uID8/IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwocmV0dXJuQmVmb3JlPy5yZXNvdXJjZSk7XG5cbiAgICAgICAgICAgIGlmICghYWxsb3dBY3Rpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZXdBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBleGVjdXRlT3BlcmF0aW9uW2JlZm9yZV0obmV3QWN0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld0FjdGlvbih7IC4uLnRoaXMubW9kZWwgfSwgdW5pcXVlS2V5KTtcbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVNhdmVOZXcocGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1JZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGFyYW1zWydpZCddO1xuICAgIGNvbnN0IHNhdmVPcGVyYXRpb24kID0gdGhpcy5zYXZlT3BlcmF0aW9uKCk7XG5cbiAgICByZXR1cm4gc2F2ZU9wZXJhdGlvbiQucGlwZShcbiAgICAgIHRhcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKHBhcmFtSWQpIHtcbiAgICAgICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLnN1Y2Nlc3MobWVzc2FnZSk7XG5cbiAgICAgICAgICB0aGlzLm5hdmlnYXRlVG8ocGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5zdWNjZXNzKG1lc3NhZ2UpO1xuXG4gICAgICAgICAgdGhpcy5tb2RlbCA9IHt9O1xuICAgICAgICAgIHRoaXMuZHluYW1pY0Zvcm0uZm9ybS5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEtleXNCeUZpZWxkcyhmaWVsZHM6IEFycmF5PGFueT4gPSBbXSkge1xuICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmtleSA9PT0gdHJ1ZSkubWFwKGZpZWxkID0+IGZpZWxkLnByb3BlcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udHJvbEZpZWxkcyhmaWVsZHM6IEFycmF5PGFueT4gPSBbXSkge1xuICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLnR5cGUgIT09ICdkZXRhaWwnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGV0YWlsRmllbGRzKGZpZWxkczogQXJyYXk8YW55PiA9IFtdKSB7XG4gICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQudHlwZSA9PT0gJ2RldGFpbCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREdXBsaWNhdGVzQnlGaWVsZHMoZmllbGRzOiBBcnJheTxhbnk+ID0gW10pIHtcbiAgICByZXR1cm4gZmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5kdXBsaWNhdGUgPT09IHRydWUpLm1hcChmaWVsZCA9PiBmaWVsZC5wcm9wZXJ0eSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhZ2VBY3Rpb25zKGFjdGlvbnM6IFBvUGFnZUR5bmFtaWNFZGl0QWN0aW9ucyA9IHt9KTogQXJyYXk8UG9QYWdlQWN0aW9uPiB7XG4gICAgY29uc3QgcGFnZUFjdGlvbnMgPSBbeyBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uU2F2ZSwgYWN0aW9uOiB0aGlzLnNhdmUuYmluZCh0aGlzLCBhY3Rpb25zLnNhdmUpIH1dO1xuXG4gICAgaWYgKGFjdGlvbnMuc2F2ZU5ldykge1xuICAgICAgcGFnZUFjdGlvbnMucHVzaCh7XG4gICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25TYXZlTmV3LFxuICAgICAgICBhY3Rpb246IHRoaXMuc2F2ZS5iaW5kKHRoaXMsIGFjdGlvbnMuc2F2ZU5ldywgJ2JlZm9yZVNhdmVOZXcnKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbnMuY2FuY2VsID09PSB1bmRlZmluZWQgfHwgYWN0aW9ucy5jYW5jZWwpIHtcbiAgICAgIHBhZ2VBY3Rpb25zLnB1c2goe1xuICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uQ2FuY2VsLFxuICAgICAgICBhY3Rpb246IHRoaXMuY2FuY2VsLmJpbmQodGhpcywgYWN0aW9ucy5jYW5jZWwsIHRoaXMuYWN0aW9ucy5iZWZvcmVDYW5jZWwpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZUFjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgfVxufVxuIiwiPHBvLXBhZ2UtZGVmYXVsdCBbcC1hY3Rpb25zXT1cInBhZ2VBY3Rpb25zXCIgW3AtYnJlYWRjcnVtYl09XCJicmVhZGNydW1iXCIgW3AtdGl0bGVdPVwidGl0bGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGVsOyB0aGVuIGZvcm1GaWVsZHNUZW1wbGF0ZTsgZWxzZSByZWdpc3Rlck5vdEZvdW5kVGVtcGxhdGVcIj4gPC9uZy1jb250YWluZXI+XG48L3BvLXBhZ2UtZGVmYXVsdD5cblxuPG5nLXRlbXBsYXRlICNyZWdpc3Rlck5vdEZvdW5kVGVtcGxhdGU+XG4gIDxwby13aWRnZXQ+XG4gICAgPHNwYW4gY2xhc3M9XCJwby1pY29uIHBvLWljb24taW5mb1wiPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInBvLWZvbnQtdGV4dC1sYXJnZVwiPlxuICAgICAge3sgbGl0ZXJhbHMucmVnaXN0ZXJOb3RGb3VuZCB9fVxuICAgIDwvc3Bhbj5cbiAgPC9wby13aWRnZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Zvcm1GaWVsZHNUZW1wbGF0ZT5cbiAgPHBvLWR5bmFtaWMtZm9ybSAjZHluYW1pY0Zvcm0gW3AtZmllbGRzXT1cImNvbnRyb2xGaWVsZHNcIiBbcC12YWx1ZV09XCJtb2RlbFwiPiA8L3BvLWR5bmFtaWMtZm9ybT5cblxuICA8ZGl2ICpuZ0lmPVwiZGV0YWlsRmllbGRzLmxlbmd0aCA+IDBcIiBjbGFzcz1cInBvLXNtLTEyXCI+XG4gICAgPHBvLWRpdmlkZXIgW3AtbGFiZWxdPVwiZGV0YWlsRmllbGRzWzBdLmRpdmlkZXJcIj48L3BvLWRpdmlkZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tcm93IHBvLW1iLTJcIj5cbiAgICAgIDxwby1idXR0b24gW3AtbGFiZWxdPVwibGl0ZXJhbHMuZGV0YWlsQWN0aW9uTmV3XCIgKHAtY2xpY2spPVwiZGV0YWlsQWN0aW9uTmV3KClcIj48L3BvLWJ1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxwby1ncmlkXG4gICAgICAjZ3JpZERldGFpbFxuICAgICAgW3Atcm93LWFjdGlvbnNdPVwiZGV0YWlsQWN0aW9uc1wiXG4gICAgICBbcC1jb2x1bW5zXT1cImRldGFpbEZpZWxkc1swXS5kZXRhaWwuY29sdW1uc1wiXG4gICAgICBbcC1kYXRhXT1cIm1vZGVsW2RldGFpbEZpZWxkc1swXS5wcm9wZXJ0eV1cIlxuICAgID5cbiAgICA8L3BvLWdyaWQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
840
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVtcGxhdGVzL3NyYy9saWIvY29tcG9uZW50cy9wby1wYWdlLWR5bmFtaWMtZWRpdC9wby1wYWdlLWR5bmFtaWMtZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy1lZGl0L3BvLXBhZ2UtZHluYW1pYy1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQWdCLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFTTCxlQUFlLEVBQ2hCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJckgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7Ozs7Ozs7Ozs7O0lDckI1Rix3QkFBb0c7OztJQUlwRyxpQ0FBVztJQUNULDBCQUEwQztJQUMxQywrQkFBaUM7SUFDL0IsWUFDRjtJQUFBLGlCQUFPLEVBQUE7OztJQURMLGVBQ0Y7SUFERSxpRUFDRjs7OztJQU9GLDhCQUFzRDtJQUNwRCxpQ0FBNkQ7SUFFN0QsK0JBQTRCLG9CQUFBO0lBQ3NCLDZMQUFXLGVBQUEsd0JB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NEhBa0JjOzs7O1lBL0JHLDJDQUF5QixnQ0FBQSxzQkFBQTtZQUN6QixlQUFhO1lBQWIsZ0NBQWEsaUJBQUEsaUJBQUE7Ozt1RkRvTGpCLDBCQUEwQjtjQUx0QyxTQUFTOzJCQUNFLHNCQUFzQixhQUVyQixDQUFDLG9CQUFvQixDQUFDO2tUQUdQLFdBQVc7a0JBQXBDLFNBQVM7bUJBQUMsYUFBYTtZQUNDLFVBQVU7a0JBQWxDLFNBQVM7bUJBQUMsWUFBWTtZQUdBLFVBQVU7a0JBQWhDLEtBQUs7bUJBQUMsY0FBYztZQXVFRyxVQUFVO2tCQUFqQyxLQUFLO21CQUFDLGVBQWU7WUFHSixLQUFLO2tCQUF0QixLQUFLO21CQUFDLFNBQVM7WUErQkMsTUFBTTtrQkFBdEIsS0FBSzttQkFBQyxRQUFRO1lBNEJPLFVBQVU7a0JBQS9CLEtBQUs7bUJBQUMsYUFBYTtZQStCSSxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUEyQ08sUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBZ0NTLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQVNDLE1BQU07a0JBQTVCLEtBQUs7bUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjb25jYXQsIG9mLCBTdWJzY3JpcHRpb24sIEVNUFRZLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIGNhdGNoRXJyb3IsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBQb0JyZWFkY3J1bWIsXG4gIFBvRGlhbG9nU2VydmljZSxcbiAgUG9EeW5hbWljRm9ybUNvbXBvbmVudCxcbiAgUG9HcmlkQ29tcG9uZW50LFxuICBQb0dyaWRSb3dBY3Rpb25zLFxuICBQb0xhbmd1YWdlU2VydmljZSxcbiAgUG9Ob3RpZmljYXRpb25TZXJ2aWNlLFxuICBQb1BhZ2VBY3Rpb24sXG4gIHBvTG9jYWxlRGVmYXVsdFxufSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG5cbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xlYW4sIG1hcE9iamVjdEJ5UHJvcGVydGllcywgdmFsdWVzRnJvbU9iamVjdCwgcmVtb3ZlS2V5c1Byb3BlcnRpZXMgfSBmcm9tICcuLy4uLy4uL3V0aWxzL3V0aWwnO1xuXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRWRpdEFjdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWVkaXQtYWN0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0VkaXRGaWVsZCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtZWRpdC1maWVsZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWR5bmFtaWMvcG8tcGFnZS1keW5hbWljLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0VkaXRPcHRpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1lZGl0LW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tcGFnZS1jdXN0b21pemF0aW9uL3BvLXBhZ2UtY3VzdG9taXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNFZGl0TWV0YWRhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWVkaXQtbWV0YWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tcGFnZS1jdXN0b21pemF0aW9uL3BvLXBhZ2UtZHluYW1pYy1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRWRpdEFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9wby1wYWdlLWR5bmFtaWMtZWRpdC1hY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0VkaXRCZWZvcmVDYW5jZWwgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWVkaXQtYmVmb3JlLWNhbmNlbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0VkaXRMaXRlcmFscyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtZWRpdC1saXRlcmFscy5pbnRlcmZhY2UnO1xuXG50eXBlIFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24gPSBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY0VkaXRPcHRpb25zKTtcbnR5cGUgU2F2ZUFjdGlvbiA9IFBvUGFnZUR5bmFtaWNFZGl0QWN0aW9uc1snc2F2ZSddIHwgUG9QYWdlRHluYW1pY0VkaXRBY3Rpb25zWydzYXZlTmV3J107XG5cbmV4cG9ydCBjb25zdCBwb1BhZ2VEeW5hbWljRWRpdExpdGVyYWxzRGVmYXVsdCA9IHtcbiAgZW46IDxQb1BhZ2VEeW5hbWljRWRpdExpdGVyYWxzPntcbiAgICBjYW5jZWxDb25maXJtTWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjYW5jZWwgdGhpcyBvcGVyYXRpb24/JyxcbiAgICBkZXRhaWxBY3Rpb25OZXc6ICdOZXcnLFxuICAgIHBhZ2VBY3Rpb25DYW5jZWw6ICdDYW5jZWwnLFxuICAgIHBhZ2VBY3Rpb25TYXZlOiAnU2F2ZScsXG4gICAgcGFnZUFjdGlvblNhdmVOZXc6ICdTYXZlIGFuZCBuZXcnLFxuICAgIHJlZ2lzdGVyTm90Rm91bmQ6ICdSZWdpc3RlciBub3QgZm91bmQuJyxcbiAgICBzYXZlTm90aWZpY2F0aW9uU3VjY2Vzc1NhdmU6ICdSZXNvdXJjZSBzdWNjZXNzZnVsbHkgc2F2ZWQuJyxcbiAgICBzYXZlTm90aWZpY2F0aW9uU3VjY2Vzc1VwZGF0ZTogJ1Jlc291cmNlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLicsXG4gICAgc2F2ZU5vdGlmaWNhdGlvbldhcm5pbmc6ICdGb3JtIG11c3QgYmUgZmlsbGVkIG91dCBjb3JyZWN0bHkuJ1xuICB9LFxuICBlczogPFBvUGFnZUR5bmFtaWNFZGl0TGl0ZXJhbHM+e1xuICAgIGNhbmNlbENvbmZpcm1NZXNzYWdlOiAnRXN0w6Egc2VndXJvIGRlIHF1ZSBkZXNlYSBjYW5jZWxhciBlc3RhIG9wZXJhY2nDs24/JyxcbiAgICBkZXRhaWxBY3Rpb25OZXc6ICdOdWV2bycsXG4gICAgcGFnZUFjdGlvbkNhbmNlbDogJ0NhbmNlbGFyJyxcbiAgICBwYWdlQWN0aW9uU2F2ZTogJ0d1YXJkYXInLFxuICAgIHBhZ2VBY3Rpb25TYXZlTmV3OiAnR3VhcmRhciB5IG51ZXZvJyxcbiAgICByZWdpc3Rlck5vdEZvdW5kOiAnUmVnaXN0cm8gbm8gZW5jb250cmFkby4nLFxuICAgIHNhdmVOb3RpZmljYXRpb25TdWNjZXNzU2F2ZTogJ1JlY3Vyc28gc2Fsdm8gY29uIMOpeGl0by4nLFxuICAgIHNhdmVOb3RpZmljYXRpb25TdWNjZXNzVXBkYXRlOiAnUmVjdXJzbyBhY3R1YWxpemFkbyBjb24gw6l4aXRvLicsXG4gICAgc2F2ZU5vdGlmaWNhdGlvbldhcm5pbmc6ICdFbCBmb3JtdWxhcmlvIGRlYmUgbGxlbmFyc2UgY29ycmVjdGFtZW50ZS4nXG4gIH0sXG4gIHB0OiA8UG9QYWdlRHluYW1pY0VkaXRMaXRlcmFscz57XG4gICAgY2FuY2VsQ29uZmlybU1lc3NhZ2U6ICdUZW0gY2VydGV6YSBxdWUgZGVzZWphIGNhbmNlbGFyIGVzdGEgb3BlcmHDp8Ojbz8nLFxuICAgIGRldGFpbEFjdGlvbk5ldzogJ05vdm8nLFxuICAgIHBhZ2VBY3Rpb25DYW5jZWw6ICdDYW5jZWxhcicsXG4gICAgcGFnZUFjdGlvblNhdmU6ICdTYWx2YXInLFxuICAgIHBhZ2VBY3Rpb25TYXZlTmV3OiAnU2FsdmFyIGUgbm92bycsXG4gICAgcmVnaXN0ZXJOb3RGb3VuZDogJ1JlZ2lzdHJvIG7Do28gZW5jb250cmFkby4nLFxuICAgIHNhdmVOb3RpZmljYXRpb25TdWNjZXNzU2F2ZTogJ1JlY3Vyc28gc2Fsdm8gY29tIHN1Y2Vzc28uJyxcbiAgICBzYXZlTm90aWZpY2F0aW9uU3VjY2Vzc1VwZGF0ZTogJ1JlY3Vyc28gYXR1YWxpemFkbyBjb20gc3VjZXNzby4nLFxuICAgIHNhdmVOb3RpZmljYXRpb25XYXJuaW5nOiAnRm9ybXVsw6FyaW8gcHJlY2lzYSBzZXIgcHJlZW5jaGlkbyBjb3JyZXRhbWVudGUuJ1xuICB9LFxuICBydTogPFBvUGFnZUR5bmFtaWNFZGl0TGl0ZXJhbHM+e1xuICAgIGNhbmNlbENvbmZpcm1NZXNzYWdlOiAn0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDQvtGC0LzQtdC90LjRgtGMINGN0YLRgyDQvtC/0LXRgNCw0YbQuNGOPycsXG4gICAgZGV0YWlsQWN0aW9uTmV3OiAn0J3QvtCy0YvQuScsXG4gICAgcGFnZUFjdGlvbkNhbmNlbDogJ9Ce0YLQvNC10L3QuNGC0YwnLFxuICAgIHBhZ2VBY3Rpb25TYXZlOiAn0KHQvtGF0YDQsNC90LjRgtGMJyxcbiAgICBwYWdlQWN0aW9uU2F2ZU5ldzogJ9Ch0L7RhdGA0LDQvdC40YLRjCDQuCDRgdC+0LfQtNCw0YLRjCcsXG4gICAgcmVnaXN0ZXJOb3RGb3VuZDogJ9CX0LDQv9C40YHRjCDQvdC1INC90LDQudC00LXQvdCwLicsXG4gICAgc2F2ZU5vdGlmaWNhdGlvblN1Y2Nlc3NTYXZlOiAn0KDQtdGB0YPRgNGBINGD0YHQv9C10YjQvdC+INGB0L7RhdGA0LDQvdC10L0uJyxcbiAgICBzYXZlTm90aWZpY2F0aW9uU3VjY2Vzc1VwZGF0ZTogJ9Cg0LXRgdGD0YDRgSDRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0LvQtdC9LicsXG4gICAgc2F2ZU5vdGlmaWNhdGlvbldhcm5pbmc6ICfQpNC+0YDQvNCwINC00L7Qu9C20L3QsCDQsdGL0YLRjCDQt9Cw0L/QvtC70L3QtdC90LAg0L/RgNCw0LLQuNC70YzQvdC+LidcbiAgfVxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBPIGBwby1wYWdlLWR5bmFtaWMtZWRpdGAgw6kgdW1hIHDDoWdpbmEgcXVlIHBvZGUgc2VydmlyIHBhcmEgZWRpdGFyIG91IGNyaWFyIG5vdm9zIHJlZ2lzdHJvcyxcbiAqIG8gbWVzbW8gdGFtYsOpbSBzdXBvcnRhIG1ldGFkYWRvcyBjb25mb3JtZSBlc3BlY2lmaWNhZG8gbmEgZG9jdW1lbnRhw6fDo28uXG4gKlxuICogIyMjIFV0aWxpemHDp8OjbyB2aWEgcm90YVxuICpcbiAqIEFvIHV0aWxpemFyIGFzIHJvdGFzIHBhcmEgaW5pY2lhbGl6YXIgbyB0ZW1wbGF0ZSwgbyBgcGFnZS1keW5hbWljLWVkaXRgIGRpc3BvbmliaWxpemEgcHJvcHJpZWRhZGVzIHF1ZSBkZXZlbSBzZXIgZm9ybmVjaWRhcyBubyBhcnF1aXZvIGRlIGNvbmZpZ3VyYcOnw6NvIGRlIHJvdGFzIGRhIGFwbGljYcOnw6NvLCBwYXJhXG4gKiBwb2RlciBlc3BlY2lmaWNhciBvIGVuZHBvaW50IGRvcyBkYWRvcyBlIGRvcyBtZXRhZGFkb3MgcXVlIHNlcsOjbyBjYXJyZWdhZG9zIG5hIGluaWNpYWxpemHDp8Ojby5cbiAqXG4gKiBFeGVtcGxvIGRlIHV0aWxpemHDp8OjbzpcbiAqXG4gKiBBcnF1aXZvIGRlIGNvbmZpZ3VyYcOnw6NvIGRlIHJvdGFzIGRhIGFwbGljYcOnw6NvOiBgYXBwLXJvdXRpbmcubW9kdWxlLnRzYFxuICogYGBgXG4gKiBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqIHtcbiAqICAgcGF0aDogJ3Blb3BsZScsXG4gKiAgIGNvbXBvbmVudDogUG9QYWdlRHluYW1pY0VkaXRDb21wb25lbnQsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzZXJ2aWNlQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL3YxL3Blb3BsZScsIC8vIGVuZHBvaW50IGRvcyBkYWRvc1xuICogICAgIHNlcnZpY2VNZXRhZGF0YUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9tZXRhZGF0YScsIC8vIGVuZHBvaW50IGRvcyBtZXRhZGFkb3MgdXRpbGl6YW5kbyBvIG3DqXRvZG8gSFRUUCBHZXRcbiAqICAgICBzZXJ2aWNlTG9hZEFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9sb2FkLW1ldGFkYXRhJyAvLyBlbmRwb2ludCBkZSBjdXN0b21pemHDp8O1ZXMgZG9zIG1ldGFkYWRvcyB1dGlsaXphbmRvIG8gbcOpdG9kbyBIVFRQIFBvc3RcbiAqICAgfVxuICogIH0sXG4gKiAge1xuICogICBwYXRoOiAnaG9tZScsXG4gKiAgIGNvbXBvbmVudDogSG9tZUV4YW1wbGVDb21wb25lbnRcbiAqICB9XG4gKiBdO1xuICpcbiAqIGBgYFxuICogTyBjb21wb25lbnRlIHByaW1laXJvIGlyw6EgY2FycmVnYXIgbyBtZXRhZGFkbyBkYSByb3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHNlcnZpY2VNZXRhZGF0YUFwaVxuICogZSBkZXBvaXMgaXLDoSBidXNjYXIgZGEgcm90YSBkZWZpbmlkYSBuYSBwcm9wcmllZGFkZSBzZXJ2aWNlTG9hZEFwaS5cbiAqXG4gKiBBIHJlcXVpc2nDp8OjbyBkb3MgbWV0YWRhZG9zIMOpIGZlaXRhIG5hIGluaWNpYWxpemHDp8OjbyBkbyB0ZW1wbGF0ZSBwYXJhIGJ1c2NhciBvcyBtZXRhZGFkb3MgZGEgcMOhZ2luYSBwYXNzYW5kbyBvXG4gKiB0aXBvIGRvIG1ldGFkYWRvIGVzcGVyYWRvIGUgYSB2ZXJzw6NvIGNhY2hlYWRhIHBlbG8gYnJvd3Nlci5cbiAqXG4gKiA+IENhc28gbyBzZXJ2aWRvciByZXRvcm5hciB1bSBlcnJvIGFvIHJlY3VwZXJhciBvcyBtZXRhZGFkb3MsIHNlcsOjbyByZXBhc3NhZG9zIG9zIG1ldGFkYWRvcyBzYWx2b3MgZW0gY2FjaGUsXG4gKiBzZSBvIGNhY2hlIG7Do28gZXhpc3RpciBzZXLDoSBkaXNwYXJhZGEgdW1hIG5vdGlmaWNhw6fDo28uXG4gKlxuICogUGFyYSBjYXJyZWdhciBjb20gdW0gcmVjdXJzbyBqw6EgZXhpc3RlbnRlLCBkZXZlLXNlIHNlciBpbmNsdcOtZG8gdW0gcGFyw6JtZXRybyBuYSByb3RhIGNoYW1hZG8gYGlkYDpcbiAqXG4gKiBgYGBcbiAqIHtcbiAqICAgcGF0aDogJ3Blb3BsZS86aWQnLFxuICogICBjb21wb25lbnQ6IFBvUGFnZUR5bmFtaWNFZGl0Q29tcG9uZW50LFxuICogICBkYXRhOiB7XG4gKiAgICAgc2VydmljZUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9wZW9wbGUnLCAvLyBlbmRwb2ludCBkb3MgZGFkb3NcbiAqICAgICBzZXJ2aWNlTWV0YWRhdGFBcGk6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvdjEvbWV0YWRhdGEnLCAvLyBlbmRwb2ludCBkb3MgbWV0YWRhZG9zXG4gKiAgICAgc2VydmljZUxvYWRBcGk6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvbG9hZC1tZXRhZGF0YScgLy8gZW5kcG9pbnQgZGUgY3VzdG9taXphw6fDtWVzIGRvcyBtZXRhZGFkb3NcbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogQSByZXF1aXNpw6fDo28gZG9zIG1ldGFkYWRvcyDDqSBmZWl0YSBuYSBpbmljaWFsaXphw6fDo28gZG8gdGVtcGxhdGUgcGFyYSBidXNjYXIgb3MgbWV0YWRhZG9zIGRhIHDDoWdpbmEgcGFzc2FuZG8gb1xuICogdGlwbyBkbyBtZXRhZGFkbyBlc3BlcmFkbyBlIGEgdmVyc8OjbyBjYWNoZWFkYSBwZWxvIGJyb3dzZXIuXG4gKlxuICogTyBmb3JtYXRvIGVzcGVyYWRvIG5hIHJlc3Bvc3RhIGRhIHJlcXVpc2nDp8OjbyBlc3TDoSBlc3BlY2lmaWNhZG8gbmEgaW50ZXJmYWNlXG4gKiBbUG9QYWdlRHluYW1pY0VkaXRNZXRhZGF0YV0oL2RvY3VtZW50YXRpb24vcG8tcGFnZS1keW5hbWljLWVkaXQjcG8tcGFnZS1keW5hbWljLWVkaXQtbWV0YWRhdGEpLiBQb3IgZXhlbXBsbzpcbiAqXG4gKiBgYGBcbiAqICB7XG4gKiAgIHZlcnNpb246IDEsXG4gKiAgIHRpdGxlOiAnUGVyc29uIGVkaXQnLFxuICogICBmaWVsZHM6IFtcbiAqICAgICB7IHByb3BlcnR5OiAnaWQnLCBrZXk6IHRydWUsIGRpc2FibGVkOiB0cnVlIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ3N0YXR1cycgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnbmFtZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnbmlja25hbWUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2JpcnRoZGF0ZScsIGxhYmVsOiAnQmlydGggZGF0ZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnZ2VucmUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2NpdHknIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2NvdW50cnknIH1cbiAqICAgXVxuICogfVxuICogYGBgXG4gKlxuICogPiBDYXNvIG8gZW5kcG9pbnQgZG9zIG1ldGFkYWRvcyBuw6NvIHNlamEgZXNwZWNpZmljYWRvLCBzZXLDoSBmZWl0byB1bWEgcmVxdWlzacOnw6NvIHV0aWxpemFuZG8gbyBgc2VydmljZUFwaWAgZGEgc2VndWludGUgZm9ybWE6XG4gKiBgYGBcbiAqIEdFVCB7ZW5kLXBvaW50fS9tZXRhZGF0YT90eXBlPWVkaXQmdmVyc2lvbj17dmVyc2lvbn1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy1lZGl0LWJhc2ljXCIgdGl0bGU9XCJQTyBQYWdlIER5bmFtaWMgRWRpdCBCYXNpY1wiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLWVkaXQtYmFzaWMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1lZGl0LWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1lZGl0LWJhc2ljL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtZWRpdC1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtZWRpdC11c2VyXCIgdGl0bGU9XCJQTyBQYWdlIER5bmFtaWMgRWRpdCAtIFVzZXJcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1lZGl0LXVzZXIvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1lZGl0LXVzZXIuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLWVkaXQtdXNlci9zYW1wbGUtcG8tcGFnZS1keW5hbWljLWVkaXQtdXNlci5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1wYWdlLWR5bmFtaWMtZWRpdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1wYWdlLWR5bmFtaWMtZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1BvUGFnZUR5bmFtaWNTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBQb1BhZ2VEeW5hbWljRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnZHluYW1pY0Zvcm0nKSBkeW5hbWljRm9ybTogUG9EeW5hbWljRm9ybUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZ3JpZERldGFpbCcpIGdyaWREZXRhaWw6IFBvR3JpZENvbXBvbmVudDtcblxuICAvKiogT2JqZXRvIGNvbSBwcm9wcmllZGFkZXMgZG8gYnJlYWRjcnVtYi4gKi9cbiAgQElucHV0KCdwLWJyZWFkY3J1bWInKSBicmVhZGNydW1iPzogUG9CcmVhZGNydW1iID0geyBpdGVtczogW10gfTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEVuZHBvaW50IHVzYWRvIHBlbG8gdGVtcGxhdGUgcGFyYSByZXF1aXNpw6fDo28gZG8gcmVjdXJzbyBxdWUgc2Vyw6EgZXhpYmlkbyBwYXJhIGVkacOnw6NvLlxuICAgKlxuICAgKiBQYXJhIGFzIGHDp8O1ZXMgZGUgYHNhdmVgIGUgYHNhdmVOZXdgLCBzZXLDoSBmZWl0byB1bWEgcmVxdWlzacOnw6NvIGRlIGNyaWHDp8OjbyBuZXNzZSBtZXNtbyBlbmRwb2ludCBwYXNzYW5kbyBvcyB2YWxvcmVzXG4gICAqIHByZWVuY2hpZG9zIHBlbG8gdXN1w6FyaW8gdmlhIHBheWxvYWQuXG4gICAqXG4gICAqID4gYFBPU1Qge2VuZC1wb2ludH1gXG4gICAqXG4gICAqIGBgYFxuICAgKiAgPHBvLXBhZ2UtZHluYW1pYy1lZGl0XG4gICAqICAgIFtwLWFjdGlvbnNdPVwieyBzYXZlOiAnLycsIHNhdmVOZXc6ICduZXcnIH1cIlxuICAgKiAgICBbcC1maWVsZHNdPVwiWyB7IHByb3BlcnR5OiAnbmFtZScgfSwgeyBwcm9wZXJ0eTogJ2NpdHknIH0gXVwiXG4gICAqICAgIHAtc2VydmljZT1cIi9hcGkvcG8tc2FtcGxlcy92MS9wZW9wbGVcIlxuICAgKiAgICAuLi4+XG4gICAqICA8L3BvLXBhZ2UtZHluYW1pYy1lZGl0PlxuICAgKiBgYGBcbiAgICpcbiAgICogUmVzcXVpc2nDp8OjbyBkaXNwYXJhZGEsIG9uZGUgYSBwcm9wcmllZGFkZSBgbmFtZWAgZSBgY2l0eWAgZm9yYW0gcHJlZW5jaGlkYXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgUE9TVCAvYXBpL3BvLXNhbXBsZXMvdjEvcGVvcGxlIEhUVFAvMS4xXG4gICAqICBIb3N0OiBsb2NhbGhvc3Q6NDAwMFxuICAgKiAgQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICAgKiAgQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluXG4gICAqICAuLi5cbiAgICogYGBgXG4gICAqXG4gICAqIFJlcXVlc3QgcGF5bG9hZDpcbiAgICpcbiAgICogYGBgXG4gICAqIHsgXCJuYW1lXCI6IFwiRnVsYW5vXCIsIFwiY2l0eVwiOiBcIlNtYWxsdmlsbGVcIiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBDYXNvIHF1ZWlyYSBxdWUgbyB0ZW1wbGF0ZSBjYXJyZWd1ZSB1bSByZWN1cnNvIGrDoSBleGlzdGVudGUsIGRldmUtc2Ugc2VyIGluY2x1w61kbyB1bSBwYXJhbWV0cm8gbmEgcm90YSBjaGFtYWRvIGBpZGAuXG4gICAqXG4gICAqIEV4ZW1wbG8gZGUgY29uZmlndXJhw6fDo28gZGUgcm90YTpcbiAgICpcbiAgICogYGBgXG4gICAqICBSb3V0ZXJNb2R1bGUuZm9yUm9vdChbXG4gICAqICAgIC4uLlxuICAgKiAgICB7IHBhdGg6ICdlZGl0LzppZCcsIGNvbXBvbmVudDogUGVyc29uRWRpdENvbXBvbmVudCB9LFxuICAgKiAgICAuLi5cbiAgICogIF0sXG4gICAqIGBgYFxuICAgKlxuICAgKiBCYXNlYWRvIG5pc3NvLCBuYSBpbmljaWFsaXphw6fDo28gZG8gdGVtcGxhdGUsIHNlcsOhIGRpc3BhcmFkbyB1bWEgcmVxdWlzacOnw6NvIHBhcmEgYnVzY2FyIG8gcmVjdXJzbyBxdWUgc2Vyw6EgZWRpdGFkby5cbiAgICpcbiAgICogPiBgR0VUIHtlbmQtcG9pbnR9L3tpZH1gXG4gICAqXG4gICAqIE5vcyBtw6l0b2RvcyBkZSBgc2F2ZWAgZSBgc2F2ZU5ld2AsIGFvIGludsOpcyBkZSB1bSBgUE9TVGAsIHNlcsOhIGRpc3BhcmFkbyB1bSBgUFVUYC5cbiAgICpcbiAgICogUmVzcXVpc2nDp8OjbyBkaXNwYXJhZGEsIG9uZGUgYSBwcm9wcmllZGFkZSBgbmFtZWAgZSBgY2l0eWAgZm9yYW0gcHJlZW5jaGlkYXMgLyBhdHVhbGl6YWRhcywgZSBvIGBpZGAgZGEgdXJsIMOpIDI6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgUFVUIC9hcGkvcG8tc2FtcGxlcy92MS9wZW9wbGUvMiBIVFRQLzEuMVxuICAgKiAgSG9zdDogbG9jYWxob3N0OjQwMDBcbiAgICogIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAgICogIEFjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpblxuICAgKiAgLi4uXG4gICAqIGBgYFxuICAgKlxuICAgKiBSZXF1ZXN0IHBheWxvYWQ6XG4gICAqXG4gICAqIGBgYFxuICAgKiB7IFwibmFtZVwiOiBcIkZ1bGFub1wiLCBcImNpdHlcIjogXCJNZXRyb3BvbGlzXCIgfVxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgncC1zZXJ2aWNlLWFwaScpIHNlcnZpY2VBcGk6IHN0cmluZztcblxuICAvKiogVMOtdHVsbyBkYSBww6FnaW5hLiAqL1xuICBASW5wdXQoJ3AtdGl0bGUnKSB0aXRsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBvdSBzZXJ2acOnbyBxdWUgc2Vyw6EgZXhlY3V0YWRvIG5hIGluaWNpYWxpemHDp8OjbyBkbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBBIHByb3ByaWVkYWRlIGFjZWl0YSBvcyBzZWd1aW50ZXMgdGlwb3M6XG4gICAqIC0gYHN0cmluZ2A6ICpFbmRwb2ludCogdXNhZG8gcGVsbyBjb21wb25lbnRlIHBhcmEgcmVxdWlzacOnw6NvIHZpYSBgUE9TVGAuXG4gICAqIC0gYGZ1bmN0aW9uYDogTcOpdG9kbyBxdWUgc2Vyw6EgZXhlY3V0YWRvLlxuICAgKlxuICAgKiBPIHJldG9ybm8gZGVzdGEgZnVuw6fDo28gZGV2ZSBzZXIgZG8gdGlwbyBgUG9QYWdlRHluYW1pY0VkaXRPcHRpb25zYCxcbiAgICogb25kZSBvIHVzdcOhcmlvIHBvZGVyw6EgY3VzdG9taXphciBub3ZvcyBjYW1wb3MsIGJyZWFkY3J1bWIsIHRpdGxlIGUgYWN0aW9uc1xuICAgKlxuICAgKiBQb3IgZXhlbXBsbzpcbiAgICpcbiAgICogYGBgXG4gICAqIGdldFBhZ2VPcHRpb25zKCk6IFBvUGFnZUR5bmFtaWNFZGl0T3B0aW9ucyB7XG4gICAqIHJldHVybiB7XG4gICAqICAgYWN0aW9uczpcbiAgICogICAgIHsgY2FuY2VsOiBmYWxzZSwgc2F2ZTogJ3NhdmUvOmlkJywgc2F2ZU5ldzogJ3NhdmVOZXcnIH0sXG4gICAqICAgZmllbGRzOiBbXG4gICAqICAgICB7IHByb3BlcnR5OiAnaWRDYXJkJywgZ3JpZENvbHVtbnM6IDYgfVxuICAgKiAgIF1cbiAgICogfTtcbiAgICogfVxuICAgKlxuICAgKiBgYGBcbiAgICogUGFyYSByZWZlcmVuY2lhciBhIHN1YSBmdW7Dp8OjbyB1dGlsaXplIGEgcHJvcHJpZWRhZGUgYGJpbmRgLCBwb3IgZXhlbXBsbzpcbiAgICogYGBgXG4gICAqICBbcC1sb2FkXT1cIm9uTG9hZE9wdGlvbnMuYmluZCh0aGlzKVwiXG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLWxvYWQnKSBvbkxvYWQ6IHN0cmluZyB8ICgoKSA9PiBQb1BhZ2VEeW5hbWljRWRpdE9wdGlvbnMpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEZ1bsOnw6NvIHF1ZSBzZXLDoSBleGVjdXRhZGEgYXDDs3Mgc2VyIHJlYWxpemFkYSBhIGJ1c2NhIGRvcyBkYWRvcy5cbiAgICpcbiAgICogQSBwcm9wcmllZGFkZSBhY2VpdGEgb3Mgc2VndWludGVzIHRpcG9zOlxuICAgKiAtIGBmdW5jdGlvbmA6IE3DqXRvZG8gcXVlIHNlcsOhIGV4ZWN1dGFkby5cbiAgICpcbiAgICogRXN0YSBmdW7Dp8OjbyBwYXNzYSBwb3IgcGFyw6JtZXRybyBvIG1vZGVsIGUgZGV2ZSByZWNlYsOqLWxvIGRlIHZvbHRhIGNvbSBhcyBhbHRlcmHDp8O1ZXMuXG4gICAqIFRhbWLDqW0gYWNlaXRhIG8gcmV0b3JubyBkZSB1bSBPYnNlcnZhYmxlIGNvbSBvIG5vdm8gbW9kZWwuXG4gICAqXG4gICAqIFBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGBcbiAgICogb25Mb2FkQ3VzdG9tKG1vZGVsKSB7XG4gICAqICByZXR1cm4geyAuLi5tb2RlbCwgY3VzdG9tRmllbGQ6ICduZXdWYWx1ZScgfTtcbiAgICogfVxuICAgKlxuICAgKiBgYGBcbiAgICogUGFyYSByZWZlcmVuY2lhciBhIHN1YSBmdW7Dp8OjbyB1dGlsaXplIGEgcHJvcHJpZWRhZGUgYGJpbmRgLCBwb3IgZXhlbXBsbzpcbiAgICogYGBgXG4gICAqICBbcC1sb2FkLWRhdGFdPVwib25Mb2FkQ3VzdG9tLmJpbmQodGhpcylcIlxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgncC1sb2FkLWRhdGEnKSBvbkxvYWREYXRhOiAoKG1vZGVsOiBhbnkpID0+IGFueSkgfCAoKG1vZGVsOiBhbnkpID0+IE9ic2VydmFibGU8YW55Pik7XG5cbiAgbW9kZWw6IGFueSA9IHt9O1xuXG4gIC8vIGJlZm9yZVNhdmU6IHJldHVybiBib29sZWFuXG4gIC8vIGFmdGVyU2F2ZVxuICAvLyBiZWZvcmVSZW1vdmU6IHJldHVybiBib29sZWFuXG4gIC8vIGFmdGVyUmVtb3ZlXG4gIC8vIGJlZm9yZUluc2VydDogOiByZXR1cm4gYm9vbGVhblxuICByZWFkb25seSBkZXRhaWxBY3Rpb25zOiBQb0dyaWRSb3dBY3Rpb25zID0ge307XG5cbiAgcHJpdmF0ZSBpbmRleEZvY3VzID0gMDtcbiAgcHJpdmF0ZSBsYW5ndWFnZTogc3RyaW5nO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfYWN0aW9uczogUG9QYWdlRHluYW1pY0VkaXRBY3Rpb25zID0ge307XG4gIHByaXZhdGUgX2xpdGVyYWxzOiBQb1BhZ2VEeW5hbWljRWRpdExpdGVyYWxzO1xuICBwcml2YXRlIF9hdXRvUm91dGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2NvbnRyb2xGaWVsZHM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBfZGV0YWlsRmllbGRzOiBBcnJheTxhbnk+ID0gW107XG4gIHByaXZhdGUgX2R1cGxpY2F0ZXM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBfZmllbGRzOiBBcnJheTxhbnk+ID0gW107XG4gIHByaXZhdGUgX2tleXM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBfcGFnZUFjdGlvbnM6IEFycmF5PFBvUGFnZUFjdGlvbj4gPSBbXTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBw6fDtWVzIGRhIHDDoWdpbmEuXG4gICAqL1xuICBASW5wdXQoJ3AtYWN0aW9ucycpIHNldCBhY3Rpb25zKHZhbHVlOiBQb1BhZ2VEeW5hbWljRWRpdEFjdGlvbnMpIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gdGhpcy5pc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IHt9O1xuXG4gICAgdGhpcy5fcGFnZUFjdGlvbnMgPSB0aGlzLmdldFBhZ2VBY3Rpb25zKHRoaXMuX2FjdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fYWN0aW9ucyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT2JqZXRvIGNvbSBhcyBsaXRlcmFpcyB1c2FkYXMgbm8gYHBvLXBhZ2UtZHluYW1pYy1lZGl0YC5cbiAgICpcbiAgICogw4kgcG9zc2l2ZWwgY3VzdG9taXphciBwYXNzYW5kbyB1bSBvYmpldG8gY29tIHRvZGFzIGFzIGxpdGVyYWlzIGRpc3BvbsOtdmVpc1xuICAgKiBvdSBwYXNzYW5kbyBhcGVuYXMgYXMgbGl0ZXJhaXMgcXVlIGRlc2VqYSBjdXN0b21pemFyXG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvUGFnZUR5bmFtaWNFZGl0TGl0ZXJhbHMgPSB7XG4gICAqICAgIGRldGFpbEFjdGlvbk5ldzogJ0luY2x1aXInLFxuICAgKiAgICBwYWdlQWN0aW9uQ2FuY2VsOiAnRGVzY2FydGFyJyxcbiAgICogICAgcGFnZUFjdGlvblNhdmU6ICdHcmF2YXInLFxuICAgKiAgICBwYWdlQWN0aW9uU2F2ZU5ldzogJ0dyYXZhciBlIGluY2x1aXInLFxuICAgKiAgICByZWdpc3Rlck5vdEZvdW5kOiAnTmVuaHVtIHJlZ2lzdHJvIGVuY29udHJhZG8uJyxcbiAgICogICAgc2F2ZU5vdGlmaWNhdGlvblN1Y2Nlc3NTYXZlOiAnSXRlbSBzYWx2byBjb20gc3VjZXNzby4nLFxuICAgKiAgICBzYXZlTm90aWZpY2F0aW9uU3VjY2Vzc1VwZGF0ZTogJ0l0ZW0gYXR1YWxpemFkbyBjb20gc3VjZXNzby4nLFxuICAgKiAgICBzYXZlTm90aWZpY2F0aW9uV2FybmluZzogJ05lY2Vzc8OhcmlvIHByZWVuY2hlciBvIGZvcm11bMOhcmlvIGNvcnJldGFtZW50ZS4nXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGFzIGxpdGVyYWlzIGN1c3RvbWl6YWRhcywgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1wYWdlLWR5bmFtaWMtZWRpdFxuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tcGFnZS1keW5hbWljLWVkaXQ+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gdmFsb3IgcGFkcsOjbyBzZXLDoSB0cmFkdXppZG8gZGUgYWNvcmRvIGNvbSBvIGlkaW9tYSBjb25maWd1cmFkbyBubyBbYFBvSTE4blNlcnZpY2VgXSgvZG9jdW1lbnRhdGlvbi9wby1pMThuKSBvdSAqYnJvd3NlciouXG4gICAqL1xuICBASW5wdXQoJ3AtbGl0ZXJhbHMnKSBzZXQgbGl0ZXJhbHModmFsdWU6IFBvUGFnZUR5bmFtaWNFZGl0TGl0ZXJhbHMpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgdGhpcy5fbGl0ZXJhbHMgPSB7XG4gICAgICAgIC4uLnBvUGFnZUR5bmFtaWNFZGl0TGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAgIC4uLnBvUGFnZUR5bmFtaWNFZGl0TGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdLFxuICAgICAgICAuLi52YWx1ZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGl0ZXJhbHMgPSBwb1BhZ2VEeW5hbWljRWRpdExpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgICB9XG5cbiAgICB0aGlzLl9wYWdlQWN0aW9ucyA9IHRoaXMuZ2V0UGFnZUFjdGlvbnModGhpcy5fYWN0aW9ucyk7XG4gIH1cblxuICBnZXQgbGl0ZXJhbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xpdGVyYWxzIHx8IHBvUGFnZUR5bmFtaWNFZGl0TGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0b2RvIFZhbGlkYXIgcm90YXMgbmEgbcOjbyBwb2lzIHNlIGV4aXN0aXIgdW1hIHJvdGEgJyoqJyBvIGNhdGNoIGRvIG5hdmlnYXRpb24gbsOjbyBmdW5jaW9uYS5cbiAgICpcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBDcmlhIGF1dG9tYXRpY2FtZW50ZSBhcyByb3RhcyBkZSBlZGnDp8OjbyAobm92by9kdXBsaWNhdGUpIGUgZGV0YWxoZXMgY2FzbyBhcyBhw6fDtWVzXG4gICAqIGVzdGVqYW0gZGVmaW5pZGFzIG5hcyBhw6fDtWVzLlxuICAgKlxuICAgKiA+IFBhcmEgbyBjb3JyZXRvIGZ1bmNpb25hbWVudG8gbsOjbyBwb2RlIGhhdmVyIG5lbmh1bSByb3RhIGNvcmluZ2EgKGAqKmApIGVzcGVjaWZpY2FkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgncC1hdXRvLXJvdXRlcicpIHNldCBhdXRvUm91dGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b1JvdXRlciA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IGF1dG9Sb3V0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9Sb3V0ZXI7XG4gIH1cblxuICAvKiogTGlzdGEgZG9zIGNhbXBvcyB1c2Fkb3MgbmEgdGFiZWxhIGUgYnVzY2EgYXZhbsOnYWRhLiAqL1xuICBASW5wdXQoJ3AtZmllbGRzJykgc2V0IGZpZWxkcyh2YWx1ZTogQXJyYXk8UG9QYWdlRHluYW1pY0VkaXRGaWVsZD4pIHtcbiAgICB0aGlzLl9maWVsZHMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiBbXTtcblxuICAgIHRoaXMuX2tleXMgPSB0aGlzLmdldEtleXNCeUZpZWxkcyh0aGlzLl9maWVsZHMpO1xuICAgIHRoaXMuX2R1cGxpY2F0ZXMgPSB0aGlzLmdldER1cGxpY2F0ZXNCeUZpZWxkcyh0aGlzLl9maWVsZHMpO1xuXG4gICAgdGhpcy5fY29udHJvbEZpZWxkcyA9IHRoaXMuZ2V0Q29udHJvbEZpZWxkcyh0aGlzLl9maWVsZHMpO1xuICAgIHRoaXMuX2RldGFpbEZpZWxkcyA9IHRoaXMuZ2V0RGV0YWlsRmllbGRzKHRoaXMuX2ZpZWxkcyk7XG4gIH1cblxuICBnZXQgZmllbGRzKCk6IEFycmF5PFBvUGFnZUR5bmFtaWNFZGl0RmllbGQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRzO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHBvTm90aWZpY2F0aW9uOiBQb05vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb0RpYWxvZ1NlcnZpY2U6IFBvRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNTZXJ2aWNlOiBQb1BhZ2VEeW5hbWljU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNFZGl0QWN0aW9uc1NlcnZpY2U6IFBvUGFnZUR5bmFtaWNFZGl0QWN0aW9uc1NlcnZpY2UsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2VTZXJ2aWNlLmdldFNob3J0TGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZERhdGFGcm9tQVBJKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4ge1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRldGFpbEFjdGlvbk5ldygpIHtcbiAgICB0aGlzLmdyaWREZXRhaWwuaW5zZXJ0Um93KCk7XG4gIH1cblxuICBnZXQgZHVwbGljYXRlcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2R1cGxpY2F0ZXNdO1xuICB9XG5cbiAgZ2V0IGtleXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9rZXlzXTtcbiAgfVxuXG4gIGdldCBwYWdlQWN0aW9ucygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3BhZ2VBY3Rpb25zXTtcbiAgfVxuXG4gIGdldCBjb250cm9sRmllbGRzKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250cm9sRmllbGRzO1xuICB9XG5cbiAgZ2V0IGRldGFpbEZpZWxkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGV0YWlsRmllbGRzO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YUZyb21BUEkoKSB7XG4gICAgY29uc3QgeyBzZXJ2aWNlQXBpOiBzZXJ2aWNlQXBpRnJvbVJvdXRlLCBzZXJ2aWNlTWV0YWRhdGFBcGksIHNlcnZpY2VMb2FkQXBpIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGE7XG4gICAgY29uc3QgeyBpZCB9ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJhbXM7XG4gICAgY29uc3QgeyBkdXBsaWNhdGUgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM7XG5cbiAgICBjb25zdCBvbkxvYWQgPSBzZXJ2aWNlTG9hZEFwaSB8fCB0aGlzLm9uTG9hZDtcbiAgICB0aGlzLnNlcnZpY2VBcGkgPSBzZXJ2aWNlQXBpRnJvbVJvdXRlIHx8IHRoaXMuc2VydmljZUFwaTtcblxuICAgIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuY29uZmlnU2VydmljZUFwaSh7IGVuZHBvaW50OiB0aGlzLnNlcnZpY2VBcGksIG1ldGFkYXRhOiBzZXJ2aWNlTWV0YWRhdGFBcGkgfSk7XG5cbiAgICBjb25zdCBtZXRhZGF0YSQgPSB0aGlzLmdldE1ldGFkYXRhKHNlcnZpY2VBcGlGcm9tUm91dGUsIGlkLCBvbkxvYWQpO1xuICAgIGNvbnN0IGRhdGEkID0gdGhpcy5sb2FkRGF0YShpZCwgZHVwbGljYXRlKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGNvbmNhdChtZXRhZGF0YSQsIGRhdGEkKS5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBwcml2YXRlIGNhbmNlbChcbiAgICBhY3Rpb25DYW5jZWw6IFBvUGFnZUR5bmFtaWNFZGl0QWN0aW9uc1snY2FuY2VsJ10sXG4gICAgYWN0aW9uQmVmb3JlQ2FuY2VsOiBQb1BhZ2VEeW5hbWljRWRpdEFjdGlvbnNbJ2JlZm9yZUNhbmNlbCddXG4gICkge1xuICAgIGlmICh0aGlzLmR5bmFtaWNGb3JtICYmIHRoaXMuZHluYW1pY0Zvcm0uZm9ybS5kaXJ0eSkge1xuICAgICAgdGhpcy5wb0RpYWxvZ1NlcnZpY2UuY29uZmlybSh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubGl0ZXJhbHMuY2FuY2VsQ29uZmlybU1lc3NhZ2UsXG4gICAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25DYW5jZWwsXG4gICAgICAgIGNvbmZpcm06IHRoaXMuZ29CYWNrLmJpbmQodGhpcywgYWN0aW9uQ2FuY2VsLCBhY3Rpb25CZWZvcmVDYW5jZWwpXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nb0JhY2soYWN0aW9uQ2FuY2VsLCBhY3Rpb25CZWZvcmVDYW5jZWwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VW5pcXVlS2V5KGl0ZW0pIHtcbiAgICBjb25zdCBrZXlzID0gbWFwT2JqZWN0QnlQcm9wZXJ0aWVzKGl0ZW0sIHRoaXMua2V5cyk7XG5cbiAgICByZXR1cm4gdmFsdWVzRnJvbU9iamVjdChrZXlzKS5qb2luKCd8Jyk7XG4gIH1cblxuICBwcml2YXRlIGdvQmFjayhcbiAgICBhY3Rpb25DYW5jZWw6IFBvUGFnZUR5bmFtaWNFZGl0QWN0aW9uc1snY2FuY2VsJ10sXG4gICAgYWN0aW9uQmVmb3JlQ2FuY2VsOiBQb1BhZ2VEeW5hbWljRWRpdEFjdGlvbnNbJ2JlZm9yZUNhbmNlbCddXG4gICkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljRWRpdEFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVDYW5jZWwoYWN0aW9uQmVmb3JlQ2FuY2VsKVxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVDYW5jZWxSZXN1bHQ6IFBvUGFnZUR5bmFtaWNFZGl0QmVmb3JlQ2FuY2VsKSA9PiB7XG4gICAgICAgICAgdGhpcy5leGVjdXRlQmFja0FjdGlvbihhY3Rpb25DYW5jZWwsIGJlZm9yZUNhbmNlbFJlc3VsdD8uYWxsb3dBY3Rpb24sIGJlZm9yZUNhbmNlbFJlc3VsdD8ubmV3VXJsKTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlQmFja0FjdGlvbihcbiAgICBhY3Rpb25DYW5jZWw6IFBvUGFnZUR5bmFtaWNFZGl0QWN0aW9uc1snY2FuY2VsJ10sXG4gICAgYWxsb3dBY3Rpb24/OiBQb1BhZ2VEeW5hbWljRWRpdEJlZm9yZUNhbmNlbFsnYWxsb3dBY3Rpb24nXSxcbiAgICBuZXdVcmw/OiBQb1BhZ2VEeW5hbWljRWRpdEJlZm9yZUNhbmNlbFsnbmV3VXJsJ11cbiAgKSB7XG4gICAgY29uc3QgaXNBbGxvd2VkQWN0aW9uID0gdHlwZW9mIGFsbG93QWN0aW9uID09PSAnYm9vbGVhbicgPyBhbGxvd0FjdGlvbiA6IHRydWU7XG5cbiAgICBpZiAoaXNBbGxvd2VkQWN0aW9uKSB7XG4gICAgICBpZiAoYWN0aW9uQ2FuY2VsID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGFjdGlvbkNhbmNlbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uQ2FuY2VsID09PSAnc3RyaW5nJyB8fCBuZXdVcmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuZXdVcmwgfHwgYWN0aW9uQ2FuY2VsXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY3Rpb25DYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhKGlkLCBkdXBsaWNhdGU/KSB7XG4gICAgaWYgKCFpZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IGR1cGxpY2F0ZSA/IEpTT04ucGFyc2UoZHVwbGljYXRlKSA6IHt9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMubW9kZWwgPSB7fTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmdldFJlc291cmNlKGlkKS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5iZWZvcmVTZXRNb2RlbChyZXNwb25zZSk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLm1vZGVsID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmFjdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3BhZ2VBY3Rpb25zID0gW107XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYmVmb3JlU2V0TW9kZWwocmVzcG9uc2U6IGFueSkge1xuICAgIGlmICghdGhpcy5vbkxvYWREYXRhKSB7XG4gICAgICB0aGlzLm1vZGVsID0gcmVzcG9uc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb25Mb2FkRGF0YUV4ZWN1dGlvbiA9IHRoaXMub25Mb2FkRGF0YShyZXNwb25zZSk7XG4gICAgY29uc3Qgb25Mb2FkRGF0YSQgPSBvbkxvYWREYXRhRXhlY3V0aW9uIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSA/IG9uTG9hZERhdGFFeGVjdXRpb24gOiBvZihvbkxvYWREYXRhRXhlY3V0aW9uKTtcblxuICAgIG9uTG9hZERhdGEkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBjdXN0b21Nb2RlbCA9PiB7XG4gICAgICAgIHRoaXMubW9kZWwgPSBjdXN0b21Nb2RlbDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVsID0gcmVzcG9uc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZDogVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbikge1xuICAgIGlmIChvbkxvYWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBvRHluYW1pY1BhZ2VPcHRpb25zKG9uTG9hZCkucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlUG9PcHRpb24gPT5cbiAgICAgICAgICB0aGlzLnBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLmNoYW5nZU9yaWdpbmFsT3B0aW9uc1RvTmV3T3B0aW9ucyh0aGlzLCByZXNwb25zZVBvT3B0aW9uKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNDaGVja2JveElucHV0KGNvbnRyb2w6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrYm94R3JvdXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBwby1jaGVja2JveC1ncm91cFtuZy1yZWZsZWN0LW5hbWU9JHtjb250cm9sfV1gKTtcbiAgICBpZiAoY2hlY2tib3hHcm91cCkge1xuICAgICAgY29uc3QgY2hlY2tCb3hDb21wb25lbnQgPSBjaGVja2JveEdyb3VwLnF1ZXJ5U2VsZWN0b3IoJ3BvLWNoZWNrYm94W25nLXJlZmxlY3QtZGlzYWJsZWQ9ZmFsc2VdJyk7XG4gICAgICBjb25zdCBsYWJlbElucHV0OiBIVE1MSW5wdXRFbGVtZW50ID0gY2hlY2tCb3hDb21wb25lbnQ/LnF1ZXJ5U2VsZWN0b3IoJy5wby1jaGVja2JveC1vdXRsaW5lJyk7XG4gICAgICBpZiAobGFiZWxJbnB1dCkge1xuICAgICAgICBsYWJlbElucHV0LmZvY3VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluZGV4Rm9jdXMtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzQ29udHJvbChjb250cm9sOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbbmFtZT0ke2NvbnRyb2x9XWApO1xuICAgIGlmIChpbnB1dEVsZW1lbnQpIHtcbiAgICAgIGlmIChpbnB1dEVsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgICAgICBpbnB1dEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9jdXNSYWRpb0lucHV0KGlucHV0RWxlbWVudCwgY29udHJvbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNDaGVja2JveElucHV0KGNvbnRyb2wpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNSYWRpb0lucHV0KGlucHV0RWxlbWVudDogRWxlbWVudCwgY29udHJvbDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmFkaW9Db21wb25lbnQgPSBpbnB1dEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGBwby1yYWRpb1tuZy1yZWZsZWN0LW5hbWU9JHtjb250cm9sfV1bbmctcmVmbGVjdC1kaXNhYmxlZD1mYWxzZV1gXG4gICAgKTtcbiAgICBpZiAocmFkaW9Db21wb25lbnQpIHtcbiAgICAgIGNvbnN0IHJhZGlvSW5wdXQgPSByYWRpb0NvbXBvbmVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgcmFkaW9JbnB1dC5mb2N1cygpO1xuICAgICAgcmFkaW9JbnB1dC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgncG8tcmFkaW8tZm9jdXMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmRleEZvY3VzLS07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24pOiBPYnNlcnZhYmxlPFBvUGFnZUR5bmFtaWNFZGl0T3B0aW9ucz4ge1xuICAgIGNvbnN0IG9yaWdpbmFsT3B0aW9uOiBQb1BhZ2VEeW5hbWljRWRpdE9wdGlvbnMgPSB7XG4gICAgICBmaWVsZHM6IHRoaXMuZmllbGRzLFxuICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zLFxuICAgICAgYnJlYWRjcnVtYjogdGhpcy5icmVhZGNydW1iLFxuICAgICAgdGl0bGU6IHRoaXMudGl0bGVcbiAgICB9O1xuXG4gICAgY29uc3QgcGFnZU9wdGlvblNjaGVtYTogUG9QYWdlRHluYW1pY09wdGlvbnNTY2hlbWE8UG9QYWdlRHluYW1pY0VkaXRPcHRpb25zPiA9IHtcbiAgICAgIHNjaGVtYTogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdmaWVsZHMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgICAgIGtleUZvck1lcmdlOiAncHJvcGVydHknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2FjdGlvbnMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2JyZWFkY3J1bWInXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ3RpdGxlJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldEN1c3RvbU9wdGlvbnMob25Mb2FkLCBvcmlnaW5hbE9wdGlvbiwgcGFnZU9wdGlvblNjaGVtYSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1ldGFkYXRhKHNlcnZpY2VBcGlGcm9tUm91dGU6IHN0cmluZywgcGFyYW1JZDogc3RyaW5nIHwgbnVtYmVyLCBvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24pIHtcbiAgICBjb25zdCB0eXBlTWV0YWRhdGEgPSBwYXJhbUlkID8gJ2VkaXQnIDogJ2NyZWF0ZSc7XG5cbiAgICBpZiAoc2VydmljZUFwaUZyb21Sb3V0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0TWV0YWRhdGE8UG9QYWdlRHluYW1pY0VkaXRNZXRhZGF0YT4odHlwZU1ldGFkYXRhKS5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIHRoaXMuYXV0b1JvdXRlciA9IHJlc3BvbnNlLmF1dG9Sb3V0ZXIgfHwgdGhpcy5hdXRvUm91dGVyO1xuICAgICAgICAgIHRoaXMuYWN0aW9ucyA9IHJlc3BvbnNlLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zO1xuICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYiA9IHJlc3BvbnNlLmJyZWFkY3J1bWIgfHwgdGhpcy5icmVhZGNydW1iO1xuICAgICAgICAgIHRoaXMuZmllbGRzID0gcmVzcG9uc2UuZmllbGRzIHx8IHRoaXMuZmllbGRzO1xuICAgICAgICAgIHRoaXMudGl0bGUgPSByZXNwb25zZS50aXRsZSB8fCB0aGlzLnRpdGxlO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0NvbnRyb2xzQXNEaXJ0eUFuZEZvY3VzRmlyc3RJbnZhbGlkKCk6IHZvaWQge1xuICAgIHRoaXMuaW5kZXhGb2N1cyA9IDA7XG4gICAgY29uc3QgY29udHJvbHMgPSBPYmplY3Qua2V5cyh0aGlzLmR5bmFtaWNGb3JtLmZvcm0uY29udHJvbHMpO1xuXG4gICAgY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0Zvcm0uZm9ybS5jb250cm9sc1tjb250cm9sXS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgaWYgKHRoaXMuZHluYW1pY0Zvcm0uZm9ybS5jb250cm9sc1tjb250cm9sXS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiB0aGlzLmluZGV4Rm9jdXMgPT09IDApIHtcbiAgICAgICAgdGhpcy5mb2N1c0NvbnRyb2woY29udHJvbCk7XG4gICAgICAgIHRoaXMuaW5kZXhGb2N1cysrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvKHBhdGg6IHN0cmluZykge1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLnJlc29sdmVVcmwodGhpcy5tb2RlbCwgcGF0aCk7XG5cbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVVuaXF1ZUtleShpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2lkJ10gPyB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVVybChpdGVtOiBhbnksIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuXG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvOmlkL2csIHVuaXF1ZUtleSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTYXZlKHNhdmVSZWRpcmVjdFBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHNhdmVPcGVyYXRpb24kID0gdGhpcy5zYXZlT3BlcmF0aW9uKCk7XG5cbiAgICByZXR1cm4gc2F2ZU9wZXJhdGlvbiQucGlwZShcbiAgICAgIHRhcChtZXNzYWdlID0+IHtcbiAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5zdWNjZXNzKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG8oc2F2ZVJlZGlyZWN0UGF0aCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vZGVsKG5ld1Jlc291cmNlOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IGR5bmFtaWNOZ0Zvcm0gPSB0aGlzLmR5bmFtaWNGb3JtLmZvcm07XG5cbiAgICByZW1vdmVLZXlzUHJvcGVydGllcyh0aGlzLmtleXMsIG5ld1Jlc291cmNlKTtcblxuICAgIHRoaXMubW9kZWwgPSB7IC4uLnRoaXMubW9kZWwsIC4uLm5ld1Jlc291cmNlIH07XG5cbiAgICBkeW5hbWljTmdGb3JtLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsKTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZU9wZXJhdGlvbigpIHtcbiAgICBpZiAodGhpcy5keW5hbWljRm9ybS5mb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMubWFya0NvbnRyb2xzQXNEaXJ0eUFuZEZvY3VzRmlyc3RJbnZhbGlkKCk7XG4gICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLndhcm5pbmcodGhpcy5saXRlcmFscy5zYXZlTm90aWZpY2F0aW9uV2FybmluZyk7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1JZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGFyYW1zWydpZCddO1xuICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBwYXJhbUlkXG4gICAgICA/IHRoaXMubGl0ZXJhbHMuc2F2ZU5vdGlmaWNhdGlvblN1Y2Nlc3NVcGRhdGVcbiAgICAgIDogdGhpcy5saXRlcmFscy5zYXZlTm90aWZpY2F0aW9uU3VjY2Vzc1NhdmU7XG5cbiAgICBjb25zdCBzYXZlT3BlcmF0aW9uJCA9IHBhcmFtSWRcbiAgICAgID8gdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS51cGRhdGVSZXNvdXJjZShwYXJhbUlkLCB0aGlzLm1vZGVsKVxuICAgICAgOiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmNyZWF0ZVJlc291cmNlKHRoaXMubW9kZWwpO1xuXG4gICAgcmV0dXJuIHNhdmVPcGVyYXRpb24kLnBpcGUobWFwKCgpID0+IHN1Y2Nlc3NNc2cpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZShhY3Rpb246IFNhdmVBY3Rpb24sIGJlZm9yZTogJ2JlZm9yZVNhdmUnIHwgJ2JlZm9yZVNhdmVOZXcnID0gJ2JlZm9yZVNhdmUnKSB7XG4gICAgY29uc3QgZXhlY3V0ZU9wZXJhdGlvbiA9IHtcbiAgICAgIGJlZm9yZVNhdmU6IHRoaXMuZXhlY3V0ZVNhdmUuYmluZCh0aGlzKSxcbiAgICAgIGJlZm9yZVNhdmVOZXc6IHRoaXMuZXhlY3V0ZVNhdmVOZXcuYmluZCh0aGlzKVxuICAgIH07XG5cbiAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLnJlc29sdmVVbmlxdWVLZXkodGhpcy5tb2RlbCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY0VkaXRBY3Rpb25zU2VydmljZVtiZWZvcmVdKHRoaXMuYWN0aW9uc1tiZWZvcmVdLCB1bmlxdWVLZXksIHsgLi4udGhpcy5tb2RlbCB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAocmV0dXJuQmVmb3JlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0FjdGlvbiA9IHJldHVybkJlZm9yZT8ubmV3VXJsID8/IGFjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93QWN0aW9uID0gcmV0dXJuQmVmb3JlPy5hbGxvd0FjdGlvbiA/PyB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKHJldHVybkJlZm9yZT8ucmVzb3VyY2UpO1xuXG4gICAgICAgICAgICBpZiAoIWFsbG93QWN0aW9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV3QWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICByZXR1cm4gZXhlY3V0ZU9wZXJhdGlvbltiZWZvcmVdKG5ld0FjdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdBY3Rpb24oeyAuLi50aGlzLm1vZGVsIH0sIHVuaXF1ZUtleSk7XG4gICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTYXZlTmV3KHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtSWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtc1snaWQnXTtcbiAgICBjb25zdCBzYXZlT3BlcmF0aW9uJCA9IHRoaXMuc2F2ZU9wZXJhdGlvbigpO1xuXG4gICAgcmV0dXJuIHNhdmVPcGVyYXRpb24kLnBpcGUoXG4gICAgICB0YXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChwYXJhbUlkKSB7XG4gICAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5zdWNjZXNzKG1lc3NhZ2UpO1xuXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uc3VjY2VzcyhtZXNzYWdlKTtcblxuICAgICAgICAgIHRoaXMubW9kZWwgPSB7fTtcbiAgICAgICAgICB0aGlzLmR5bmFtaWNGb3JtLmZvcm0ucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRLZXlzQnlGaWVsZHMoZmllbGRzOiBBcnJheTxhbnk+ID0gW10pIHtcbiAgICByZXR1cm4gZmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5rZXkgPT09IHRydWUpLm1hcChmaWVsZCA9PiBmaWVsZC5wcm9wZXJ0eSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRyb2xGaWVsZHMoZmllbGRzOiBBcnJheTxhbnk+ID0gW10pIHtcbiAgICByZXR1cm4gZmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC50eXBlICE9PSAnZGV0YWlsJyk7XG4gIH1cblxuICBwcml2YXRlIGdldERldGFpbEZpZWxkcyhmaWVsZHM6IEFycmF5PGFueT4gPSBbXSkge1xuICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLnR5cGUgPT09ICdkZXRhaWwnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHVwbGljYXRlc0J5RmllbGRzKGZpZWxkczogQXJyYXk8YW55PiA9IFtdKSB7XG4gICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQuZHVwbGljYXRlID09PSB0cnVlKS5tYXAoZmllbGQgPT4gZmllbGQucHJvcGVydHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYWdlQWN0aW9ucyhhY3Rpb25zOiBQb1BhZ2VEeW5hbWljRWRpdEFjdGlvbnMgPSB7fSk6IEFycmF5PFBvUGFnZUFjdGlvbj4ge1xuICAgIGNvbnN0IHBhZ2VBY3Rpb25zID0gW3sgbGFiZWw6IHRoaXMubGl0ZXJhbHMucGFnZUFjdGlvblNhdmUsIGFjdGlvbjogdGhpcy5zYXZlLmJpbmQodGhpcywgYWN0aW9ucy5zYXZlKSB9XTtcblxuICAgIGlmIChhY3Rpb25zLnNhdmVOZXcpIHtcbiAgICAgIHBhZ2VBY3Rpb25zLnB1c2goe1xuICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uU2F2ZU5ldyxcbiAgICAgICAgYWN0aW9uOiB0aGlzLnNhdmUuYmluZCh0aGlzLCBhY3Rpb25zLnNhdmVOZXcsICdiZWZvcmVTYXZlTmV3JylcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb25zLmNhbmNlbCA9PT0gdW5kZWZpbmVkIHx8IGFjdGlvbnMuY2FuY2VsKSB7XG4gICAgICBwYWdlQWN0aW9ucy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMucGFnZUFjdGlvbkNhbmNlbCxcbiAgICAgICAgYWN0aW9uOiB0aGlzLmNhbmNlbC5iaW5kKHRoaXMsIGFjdGlvbnMuY2FuY2VsLCB0aGlzLmFjdGlvbnMuYmVmb3JlQ2FuY2VsKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2VBY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cbn1cbiIsIjxwby1wYWdlLWRlZmF1bHQgW3AtYWN0aW9uc109XCJwYWdlQWN0aW9uc1wiIFtwLWJyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlwiIFtwLXRpdGxlXT1cInRpdGxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbDsgdGhlbiBmb3JtRmllbGRzVGVtcGxhdGU7IGVsc2UgcmVnaXN0ZXJOb3RGb3VuZFRlbXBsYXRlXCI+IDwvbmctY29udGFpbmVyPlxuPC9wby1wYWdlLWRlZmF1bHQ+XG5cbjxuZy10ZW1wbGF0ZSAjcmVnaXN0ZXJOb3RGb3VuZFRlbXBsYXRlPlxuICA8cG8td2lkZ2V0PlxuICAgIDxzcGFuIGNsYXNzPVwicG8taWNvbiBwby1pY29uLWluZm9cIj48L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJwby1mb250LXRleHQtbGFyZ2VcIj5cbiAgICAgIHt7IGxpdGVyYWxzLnJlZ2lzdGVyTm90Rm91bmQgfX1cbiAgICA8L3NwYW4+XG4gIDwvcG8td2lkZ2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmb3JtRmllbGRzVGVtcGxhdGU+XG4gIDxwby1keW5hbWljLWZvcm0gI2R5bmFtaWNGb3JtIFtwLWZpZWxkc109XCJjb250cm9sRmllbGRzXCIgW3AtdmFsdWVdPVwibW9kZWxcIj4gPC9wby1keW5hbWljLWZvcm0+XG5cbiAgPGRpdiAqbmdJZj1cImRldGFpbEZpZWxkcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJwby1zbS0xMlwiPlxuICAgIDxwby1kaXZpZGVyIFtwLWxhYmVsXT1cImRldGFpbEZpZWxkc1swXS5kaXZpZGVyXCI+PC9wby1kaXZpZGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLXJvdyBwby1tYi0yXCI+XG4gICAgICA8cG8tYnV0dG9uIFtwLWxhYmVsXT1cImxpdGVyYWxzLmRldGFpbEFjdGlvbk5ld1wiIChwLWNsaWNrKT1cImRldGFpbEFjdGlvbk5ldygpXCI+PC9wby1idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8cG8tZ3JpZFxuICAgICAgI2dyaWREZXRhaWxcbiAgICAgIFtwLXJvdy1hY3Rpb25zXT1cImRldGFpbEFjdGlvbnNcIlxuICAgICAgW3AtY29sdW1uc109XCJkZXRhaWxGaWVsZHNbMF0uZGV0YWlsLmNvbHVtbnNcIlxuICAgICAgW3AtZGF0YV09XCJtb2RlbFtkZXRhaWxGaWVsZHNbMF0ucHJvcGVydHldXCJcbiAgICA+XG4gICAgPC9wby1ncmlkPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=