File manager - Edit - /home/theblueo/tv/wp-content/plugins/sfwd-lms/includes/gutenberg/assets/js/editor.blocks.js
Back
!function(t){var c={};function l(n){if(c[n])return c[n].exports;var e=c[n]={i:n,l:!1,exports:{}};return t[n].call(e.exports,e,e.exports,l),e.l=!0,e.exports}l.m=t,l.c=c,l.d=function(t,c,n){l.o(t,c)||Object.defineProperty(t,c,{configurable:!1,enumerable:!0,get:n})},l.r=function(t){Object.defineProperty(t,"__esModule",{value:!0})},l.n=function(t){var c=t&&t.__esModule?function(){return t.default}:function(){return t};return l.d(c,"a",c),c},l.o=function(t,c){return Object.prototype.hasOwnProperty.call(t,c)},l.p="",l(l.s=0)}([function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: ./blocks/ld-login/index.js\nvar ld_login = __webpack_require__(4);\n\n// CONCATENATED MODULE: ./blocks/ldlms.js\n/**\n * LearnDash Block Functions\n * \n * This is a collection of common functions used within the LeanDash blocks\n * \n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * Will retrive meta information about the post being edited. For now\n * this is only loaded on post edit screen for Gutenberg. So no checks \n * are made to ensure that a post is being edited. \n * @param string token Token to return from meta array. If not provided will array is returned. \n */\nfunction ldlms_get_post_edit_meta(token) {\n\tif (typeof token !== 'undefined' && token != '') {\n\t\tif (typeof ldlms_settings['meta']['post'][token] !== 'undefined') {\n\t\t\treturn ldlms_settings['meta']['post'][token];\n\t\t}\n\t} else {\n\t\tif (typeof ldlms_settings['meta']['post'] !== 'undefined') {\n\t\t\treturn ldlms_settings['meta']['post'];\n\t\t}\n\t}\n}\n\n/**\n * Will retrive meta information about the post being edited. For now\n * this is only loaded on post edit screen for Gutenberg. So no checks \n * are made to ensure that a post is being edited. \n * @param string token Token to return from meta array. If not provided will array is returned. \n */\nfunction ldlms_get_setting(token, default_value) {\n\tif (typeof token !== 'undefined' && token != '' && typeof ldlms_settings['settings'][token] !== 'undefined') {\n\t\tvar token_value = ldlms_settings['settings'][token];\n\t\treturn ldlms_settings['settings'][token];\n\t}\n\treturn default_value;\n}\n\n/**\n * Returns the label for custom label element \n * @param string token Will represent the custom label field to retreive Course, Courses, Lesson, Quiz.\n */\nfunction ldlms_get_custom_label(token) {\n\tif (typeof ldlms_settings['meta']['post'] !== 'undefined' && token != '') {\n\t\tif (typeof ldlms_settings['settings']['custom_labels'][token] !== 'undefined') {\n\t\t\ttoken = ldlms_settings['settings']['custom_labels'][token];\n\t\t}\n\t}\n\treturn token;\n}\n\n/**\n * Returns the lowercase label for custom label element \n * @param string token Will represent the custom label field to retreive Course, Courses, Lesson, Quiz.\n */\nfunction ldlms_get_custom_label_lower(token) {\n\tif (typeof ldlms_settings['meta']['post'] !== 'undefined' && token != '') {\n\t\tif (typeof ldlms_settings['settings']['custom_labels'][token + '_lower'] !== 'undefined') {\n\t\t\ttoken = ldlms_settings['settings']['custom_labels'][token + '_lower'];\n\t\t}\n\t}\n\treturn token;\n}\n\n/**\n * Returns the slug for custom label element \n * @param string token Will represent the custom label field to retreive Course, Courses, Lesson, Quiz.\n */\nfunction ldlms_get_custom_label_slug(token) {\n\tif (token != '') {\n\t\tif (typeof ldlms_settings['settings']['custom_labels'][token + '_slug'] !== 'undefined') {\n\t\t\ttoken = ldlms_settings['settings']['custom_labels'][token + '_slug'];\n\t\t}\n\t}\n\treturn token;\n}\n\n/**\n * Will retrive meta information about the post being edited. For now\n * this is only loaded on post edit screen for Gutenberg. So no checks \n * are made to ensure that a post is being edited. \n * @param string token Token to return from meta array. If not provided will array is returned. \n */\nfunction ldlms_get_per_page(token) {\n\tif (typeof token !== 'undefined' && token != '') {\n\t\tif (typeof ldlms_settings['settings']['per_page'][token] !== 'undefined') {\n\t\t\treturn ldlms_settings['settings']['per_page'][token];\n\t\t}\n\t} else if (typeof ldlms_settings['meta']['posts_per_page'] !== 'undefined') {\n\t\treturn ldlms_settings['meta']['posts_per_page'];\n\t}\n}\n\n/**\n * Returns integet value for variable.\n * \n * @param mixed var_value Variable to determin integer from.\n * \n * @return integer value of zero.\n */\nfunction ldlms_get_integer_value(var_value) {\n\tif (typeof var_value === 'undefined') {\n\t\tvar_value = 0;\n\t}\n\tvar_value = parseInt(var_value);\n\tif (isNaN(var_value)) {\n\t\tvar_value = 0;\n\t}\n\n\treturn var_value;\n}\n// CONCATENATED MODULE: ./blocks/ld-profile/index.js\n/**\n * LearnDash Block ld-profile\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar _wp$i18n = wp.i18n,\n __ = _wp$i18n.__,\n _x = _wp$i18n._x,\n sprintf = _wp$i18n.sprintf;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar InspectorControls = wp.editor.InspectorControls;\nvar _wp$components = wp.components,\n ServerSideRender = _wp$components.ServerSideRender,\n PanelBody = _wp$components.PanelBody,\n SelectControl = _wp$components.SelectControl,\n ToggleControl = _wp$components.ToggleControl,\n TextControl = _wp$components.TextControl;\n\n\nregisterBlockType('learndash/ld-profile', {\n\ttitle: __('LearnDash Profile', 'learndash'),\n\tdescription: sprintf(_x(\"Displays user's enrolled %1$s, %2$s progress, %3$s scores, and achieved certificates.\", 'placeholder: courses, course, quiz', 'learndash'), ldlms_get_custom_label('courses'), ldlms_get_custom_label('course'), ldlms_get_custom_label('quiz')),\n\ticon: 'id-alt',\n\tcategory: 'learndash-blocks',\n\texample: {\n\t\tattributes: {\n\t\t\texample_show: 1\n\t\t}\n\t},\n\tsupports: {\n\t\tcustomClassName: false\n\t},\n\tattributes: {\n\t\tper_page: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\torderby: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'ID'\n\t\t},\n\t\torder: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'DESC'\n\t\t},\n\t\tcourse_points_user: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 1\n\t\t},\n\t\texpand_all: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 0\n\t\t},\n\t\tprofile_link: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 1\n\t\t},\n\t\tshow_header: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 1\n\t\t},\n\t\tshow_search: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 1\n\t\t},\n\t\tshow_quizzes: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 1\n\t\t},\n\t\tpreview_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 1\n\t\t},\n\t\tpreview_user_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\texample_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 0\n\t\t}\n\t},\n\tedit: function edit(props) {\n\t\tvar _props$attributes = props.attributes,\n\t\t per_page = _props$attributes.per_page,\n\t\t orderby = _props$attributes.orderby,\n\t\t order = _props$attributes.order,\n\t\t course_points_user = _props$attributes.course_points_user,\n\t\t expand_all = _props$attributes.expand_all,\n\t\t profile_link = _props$attributes.profile_link,\n\t\t show_header = _props$attributes.show_header,\n\t\t show_search = _props$attributes.show_search,\n\t\t show_quizzes = _props$attributes.show_quizzes,\n\t\t preview_user_id = _props$attributes.preview_user_id,\n\t\t preview_show = _props$attributes.preview_show,\n\t\t example_show = _props$attributes.example_show,\n\t\t setAttributes = props.setAttributes;\n\n\n\t\tvar inspectorControls = wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Settings', 'learndash')\n\t\t\t\t},\n\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\tlabel: sprintf(_x('%s per page', 'placeholder: Lessons', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\thelp: sprintf(_x('Leave empty for default (%d) or 0 to show all items.', 'placeholder: default per page', 'learndash'), ldlms_get_per_page('per_page')),\n\t\t\t\t\tvalue: per_page || '',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tonChange: function onChange(per_page) {\n\t\t\t\t\t\treturn setAttributes({ per_page: per_page });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(SelectControl, {\n\t\t\t\t\tkey: 'orderby',\n\t\t\t\t\tlabel: __('Order by', 'learndash'),\n\t\t\t\t\tvalue: orderby,\n\t\t\t\t\toptions: [{\n\t\t\t\t\t\tlabel: __('ID - Order by post id. (default)', 'learndash'),\n\t\t\t\t\t\tvalue: 'ID'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: __('Title - Order by post title', 'learndash'),\n\t\t\t\t\t\tvalue: 'title'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: __('Date - Order by post date', 'learndash'),\n\t\t\t\t\t\tvalue: 'date'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: __('Menu - Order by Page Order Value', 'learndash'),\n\t\t\t\t\t\tvalue: 'menu_order'\n\t\t\t\t\t}],\n\t\t\t\t\tonChange: function onChange(orderby) {\n\t\t\t\t\t\treturn setAttributes({ orderby: orderby });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(SelectControl, {\n\t\t\t\t\tkey: 'order',\n\t\t\t\t\tlabel: __('Order', 'learndash'),\n\t\t\t\t\tvalue: order,\n\t\t\t\t\toptions: [{\n\t\t\t\t\t\tlabel: __('DESC - highest to lowest values (default)', 'learndash'),\n\t\t\t\t\t\tvalue: 'DESC'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: __('ASC - lowest to highest values', 'learndash'),\n\t\t\t\t\t\tvalue: 'ASC'\n\t\t\t\t\t}],\n\t\t\t\t\tonChange: function onChange(order) {\n\t\t\t\t\t\treturn setAttributes({ order: order });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\tlabel: __('Show Search', 'learndash'),\n\t\t\t\t\tchecked: !!show_search,\n\t\t\t\t\tonChange: function onChange(show_search) {\n\t\t\t\t\t\treturn setAttributes({ show_search: show_search });\n\t\t\t\t\t},\n\t\t\t\t\thelp: __('LD30 template only', 'learndash')\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\tlabel: __('Show Profile Header', 'learndash'),\n\t\t\t\t\tchecked: !!show_header,\n\t\t\t\t\tonChange: function onChange(show_header) {\n\t\t\t\t\t\treturn setAttributes({ show_header: show_header });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\tlabel: sprintf(_x('Show Earned %s Points', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\tchecked: !!course_points_user,\n\t\t\t\t\tonChange: function onChange(course_points_user) {\n\t\t\t\t\t\treturn setAttributes({ course_points_user: course_points_user });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\tlabel: __('Show Profile Link', 'learndash'),\n\t\t\t\t\tchecked: !!profile_link,\n\t\t\t\t\tonChange: function onChange(profile_link) {\n\t\t\t\t\t\treturn setAttributes({ profile_link: profile_link });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\tlabel: sprintf(_x('Show User Quiz Attempts', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\t\t\t\t\tchecked: !!show_quizzes,\n\t\t\t\t\tonChange: function onChange(show_quizzes) {\n\t\t\t\t\t\treturn setAttributes({ show_quizzes: show_quizzes });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\tlabel: sprintf(_x('Expand All %s Sections', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\tchecked: !!expand_all,\n\t\t\t\t\tonChange: function onChange(expand_all) {\n\t\t\t\t\t\treturn setAttributes({ expand_all: expand_all });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t),\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Preview', 'learndash'),\n\t\t\t\t\tinitialOpen: false\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\tlabel: __('Show Preview', 'learndash'),\n\t\t\t\t\tchecked: !!preview_show,\n\t\t\t\t\tonChange: function onChange(preview_show) {\n\t\t\t\t\t\treturn setAttributes({ preview_show: preview_show });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\tlabel: __('User ID', 'learndash'),\n\t\t\t\t\thelp: __('Enter a User ID to test preview', 'learndash'),\n\t\t\t\t\tvalue: preview_user_id || '',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tonChange: function onChange(preview_user_id) {\n\t\t\t\t\t\treturn setAttributes({ preview_user_id: preview_user_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tfunction do_serverside_render(attributes) {\n\t\t\tif (attributes.preview_show == true) {\n\t\t\t\treturn wp.element.createElement(ServerSideRender, {\n\t\t\t\t\tblock: 'learndash/ld-profile',\n\t\t\t\t\tattributes: attributes\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn __('[ld_profile] shortcode output shown here', 'learndash');\n\t\t\t}\n\t\t}\n\n\t\treturn [inspectorControls, do_serverside_render(props.attributes)];\n\t},\n\n\tsave: function save(props) {\n\t\t// Delete preview_user_id from props to prevent it being saved.\n\t\tdelete props.attributes.preview_user_id;\n\t}\n});\n// CONCATENATED MODULE: ./blocks/ld-course-list/index.js\n/**\n * LearnDash Block ld-course-list\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_course_list_wp$i18n = wp.i18n,\n ld_course_list_ = ld_course_list_wp$i18n.__,\n ld_course_list_x = ld_course_list_wp$i18n._x,\n ld_course_list_sprintf = ld_course_list_wp$i18n.sprintf;\nvar ld_course_list_registerBlockType = wp.blocks.registerBlockType;\nvar ld_course_list_InspectorControls = wp.editor.InspectorControls;\nvar ld_course_list_wp$components = wp.components,\n ld_course_list_ServerSideRender = ld_course_list_wp$components.ServerSideRender,\n ld_course_list_PanelBody = ld_course_list_wp$components.PanelBody,\n RangeControl = ld_course_list_wp$components.RangeControl,\n ld_course_list_SelectControl = ld_course_list_wp$components.SelectControl,\n ld_course_list_ToggleControl = ld_course_list_wp$components.ToggleControl,\n ld_course_list_TextControl = ld_course_list_wp$components.TextControl;\n\n\nld_course_list_registerBlockType('learndash/ld-course-list', {\n\ttitle: ld_course_list_sprintf(ld_course_list_x('LearnDash %s List', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\tdescription: ld_course_list_sprintf(ld_course_list_x('This block shows a list of %s.', 'placeholders: courses', 'learndash'), ldlms_get_custom_label('courses')),\n\ticon: 'list-view',\n\tcategory: 'learndash-blocks',\n\texample: {\n\t\tattributes: {\n\t\t\texample_show: 1\n\t\t}\n\t},\n\tsupports: {\n\t\tcustomClassName: false\n\t},\n\tattributes: {\n\t\torderby: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'ID'\n\t\t},\n\t\torder: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'DESC'\n\t\t},\n\t\tper_page: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tmycourses: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tstatus: {\n\t\t\ttype: 'array',\n\t\t\tdefault: ['not_started', 'in_progress', 'completed']\n\t\t},\n\t\tshow_content: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tshow_thumbnail: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tcourse_category_name: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcourse_cat: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcourse_categoryselector: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\tcourse_tag: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcourse_tag_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcategory_name: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcat: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcategoryselector: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\ttag: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\ttag_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcourse_grid: {\n\t\t\ttype: 'boolean'\n\t\t},\n\t\tprogress_bar: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\tcol: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_default'] || 3\n\t\t},\n\t\tpreview_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\texample_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 0\n\t\t}\n\t},\n\tedit: function edit(props) {\n\t\tvar _props$attributes = props.attributes,\n\t\t orderby = _props$attributes.orderby,\n\t\t order = _props$attributes.order,\n\t\t per_page = _props$attributes.per_page,\n\t\t mycourses = _props$attributes.mycourses,\n\t\t status = _props$attributes.status,\n\t\t show_content = _props$attributes.show_content,\n\t\t show_thumbnail = _props$attributes.show_thumbnail,\n\t\t course_category_name = _props$attributes.course_category_name,\n\t\t course_cat = _props$attributes.course_cat,\n\t\t course_categoryselector = _props$attributes.course_categoryselector,\n\t\t course_tag = _props$attributes.course_tag,\n\t\t course_tag_id = _props$attributes.course_tag_id,\n\t\t category_name = _props$attributes.category_name,\n\t\t cat = _props$attributes.cat,\n\t\t categoryselector = _props$attributes.categoryselector,\n\t\t tag = _props$attributes.tag,\n\t\t tag_id = _props$attributes.tag_id,\n\t\t course_grid = _props$attributes.course_grid,\n\t\t progress_bar = _props$attributes.progress_bar,\n\t\t col = _props$attributes.col,\n\t\t preview_user_id = _props$attributes.preview_user_id,\n\t\t preview_show = _props$attributes.preview_show,\n\t\t example_show = _props$attributes.example_show,\n\t\t setAttributes = props.setAttributes;\n\n\n\t\tvar field_show_content = '';\n\t\tvar field_show_thumbnail = '';\n\t\tvar panel_course_grid_section = '';\n\n\t\tvar course_grid_default = true;\n\t\tif (ldlms_settings['plugins']['learndash-course-grid']['enabled'] === true) {\n\t\t\tif (typeof course_grid !== 'undefined' && (course_grid == true || course_grid == false)) {\n\t\t\t\tcourse_grid_default = course_grid;\n\t\t\t}\n\n\t\t\tvar course_grid_section_open = false;\n\t\t\tif (course_grid_default == true) {\n\t\t\t\tcourse_grid_section_open = true;\n\t\t\t}\n\t\t\tpanel_course_grid_section = wp.element.createElement(\n\t\t\t\tld_course_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_list_('Grid Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: course_grid_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_course_list_('Show Grid', 'learndash'),\n\t\t\t\t\tchecked: !!course_grid_default,\n\t\t\t\t\tonChange: function onChange(course_grid) {\n\t\t\t\t\t\treturn setAttributes({ course_grid: course_grid });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_course_list_('Show Progress Bar', 'learndash'),\n\t\t\t\t\tchecked: !!progress_bar,\n\t\t\t\t\tonChange: function onChange(progress_bar) {\n\t\t\t\t\t\treturn setAttributes({ progress_bar: progress_bar });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(RangeControl, {\n\t\t\t\t\tlabel: ld_course_list_('Columns', 'learndash'),\n\t\t\t\t\tvalue: col || ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_default'],\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_max'],\n\t\t\t\t\tstep: 1,\n\t\t\t\t\tonChange: function onChange(col) {\n\t\t\t\t\t\treturn setAttributes({ col: col });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t//if (course_grid !== true) {\n\t\tfield_show_content = wp.element.createElement(ld_course_list_ToggleControl, {\n\t\t\tlabel: ld_course_list_('Show Content', 'learndash'),\n\t\t\tchecked: !!show_content,\n\t\t\tonChange: function onChange(show_content) {\n\t\t\t\treturn setAttributes({ show_content: show_content });\n\t\t\t}\n\t\t});\n\n\t\tfield_show_thumbnail = wp.element.createElement(ld_course_list_ToggleControl, {\n\t\t\tlabel: ld_course_list_('Show Thumbnail', 'learndash'),\n\t\t\tchecked: !!show_thumbnail,\n\t\t\tonChange: function onChange(show_thumbnail) {\n\t\t\t\treturn setAttributes({ show_thumbnail: show_thumbnail });\n\t\t\t}\n\t\t});\n\t\t//}\n\n\t\tvar panelbody_header = wp.element.createElement(\n\t\t\tld_course_list_PanelBody,\n\t\t\t{\n\t\t\t\ttitle: ld_course_list_('Settings', 'learndash')\n\t\t\t},\n\t\t\twp.element.createElement(ld_course_list_SelectControl, {\n\t\t\t\tkey: 'orderby',\n\t\t\t\tlabel: ld_course_list_('Order by', 'learndash'),\n\t\t\t\tvalue: orderby,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: ld_course_list_('ID - Order by post id. (default)', 'learndash'),\n\t\t\t\t\tvalue: 'ID'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_course_list_('Title - Order by post title', 'learndash'),\n\t\t\t\t\tvalue: 'title'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_course_list_('Date - Order by post date', 'learndash'),\n\t\t\t\t\tvalue: 'date'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_course_list_('Menu - Order by Page Order Value', 'learndash'),\n\t\t\t\t\tvalue: 'menu_order'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(orderby) {\n\t\t\t\t\treturn setAttributes({ orderby: orderby });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_course_list_SelectControl, {\n\t\t\t\tkey: 'order',\n\t\t\t\tlabel: ld_course_list_('Order', 'learndash'),\n\t\t\t\tvalue: order,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: ld_course_list_('DESC - highest to lowest values (default)', 'learndash'),\n\t\t\t\t\tvalue: 'DESC'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_course_list_('ASC - lowest to highest values', 'learndash'),\n\t\t\t\t\tvalue: 'ASC'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(order) {\n\t\t\t\t\treturn setAttributes({ order: order });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_course_list_TextControl, {\n\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('%s per page', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\thelp: ld_course_list_sprintf(ld_course_list_x('Leave empty for default (%d) or 0 to show all items.', 'placeholder: default per page', 'learndash'), ldlms_get_per_page('per_page')),\n\t\t\t\tvalue: per_page || '',\n\t\t\t\ttype: 'number',\n\t\t\t\tonChange: function onChange(per_page) {\n\t\t\t\t\treturn setAttributes({ per_page: per_page });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_course_list_SelectControl, {\n\t\t\t\tkey: 'mycourses',\n\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('My %s', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\tvalue: mycourses,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('Show All %s (default)', 'placeholders: courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tvalue: ''\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('Show Enrolled %s only', 'placeholders: courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tvalue: 'enrolled'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('Show not-Enrolled %s only', 'placeholders: courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tvalue: 'not-enrolled'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(mycourses) {\n\t\t\t\t\treturn setAttributes({ mycourses: mycourses });\n\t\t\t\t}\n\t\t\t}),\n\t\t\t'enrolled' === mycourses && wp.element.createElement(ld_course_list_SelectControl, {\n\t\t\t\tmultiple: true,\n\t\t\t\tkey: 'status',\n\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('Enrolled %s Status', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\tvalue: status,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: ld_course_list_('Not Started', 'learndash'),\n\t\t\t\t\tvalue: 'not_started'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_course_list_('In Progress', 'learndash'),\n\t\t\t\t\tvalue: 'in_progress'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_course_list_('Completed', 'learndash'),\n\t\t\t\t\tvalue: 'completed'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(status) {\n\t\t\t\t\treturn setAttributes({ status: status });\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfield_show_content,\n\t\t\tfield_show_thumbnail\n\t\t);\n\n\t\tvar panel_course_category_section = '';\n\t\tif (ldlms_settings['settings']['courses_taxonomies']['ld_course_category'] === 'yes') {\n\t\t\tvar panel_course_category_section_open = false;\n\t\t\tif (course_category_name != '' || course_cat != '') {\n\t\t\t\tpanel_course_category_section_open = true;\n\t\t\t}\n\t\t\tpanel_course_category_section = wp.element.createElement(\n\t\t\t\tld_course_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_list_sprintf(ld_course_list_x('%s Category Settings', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\tinitialOpen: panel_course_category_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_list_TextControl, {\n\t\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('%s Category Slug', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\thelp: ld_course_list_sprintf(ld_course_list_x('shows %s with mentioned category slug.', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tvalue: course_category_name || '',\n\t\t\t\t\tonChange: function onChange(course_category_name) {\n\t\t\t\t\t\treturn setAttributes({ course_category_name: course_category_name });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_list_TextControl, {\n\t\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('%s Category ID', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\thelp: ld_course_list_sprintf(ld_course_list_x('shows %s with mentioned category ID.', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tvalue: course_cat || '',\n\t\t\t\t\tonChange: function onChange(course_cat) {\n\t\t\t\t\t\treturn setAttributes({ course_cat: course_cat });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('%s Category Selector', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\thelp: ld_course_list_sprintf(ld_course_list_x('shows a %s category dropdown.', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tchecked: !!course_categoryselector,\n\t\t\t\t\tonChange: function onChange(course_categoryselector) {\n\t\t\t\t\t\treturn setAttributes({ course_categoryselector: course_categoryselector });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_course_tag_section = '';\n\t\tif (ldlms_settings['settings']['courses_taxonomies']['ld_course_tag'] === 'yes') {\n\t\t\tvar panel_course_tag_section_open = false;\n\t\t\tif (course_tag != '' || course_tag_id != '') {\n\t\t\t\tpanel_course_tag_section_open = true;\n\t\t\t}\n\t\t\tpanel_course_tag_section = wp.element.createElement(\n\t\t\t\tld_course_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_list_sprintf(ld_course_list_x('%s Tag Settings', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\tinitialOpen: panel_course_tag_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_list_TextControl, {\n\t\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('%s Tag Slug', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\thelp: ld_course_list_sprintf(ld_course_list_x('shows %s with mentioned tag slug.', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tvalue: course_tag || '',\n\t\t\t\t\tonChange: function onChange(course_tag) {\n\t\t\t\t\t\treturn setAttributes({ course_tag: course_tag });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_list_TextControl, {\n\t\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('%s Tag ID', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\thelp: ld_course_list_sprintf(ld_course_list_x('shows %s with mentioned tag ID.', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tvalue: course_tag_id || '',\n\t\t\t\t\tonChange: function onChange(course_tag_id) {\n\t\t\t\t\t\treturn setAttributes({ course_tag_id: course_tag_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_wp_category_section = '';\n\t\tif (ldlms_settings['settings']['courses_taxonomies']['wp_post_category'] === 'yes') {\n\t\t\tvar panel_wp_category_section_open = false;\n\t\t\tif (category_name != '' || cat != '') {\n\t\t\t\tpanel_wp_category_section_open = true;\n\t\t\t}\n\t\t\tpanel_wp_category_section = wp.element.createElement(\n\t\t\t\tld_course_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_list_('WP Category Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: panel_wp_category_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_list_TextControl, {\n\t\t\t\t\tlabel: ld_course_list_('WP Category Slug', 'learndash'),\n\t\t\t\t\thelp: ld_course_list_sprintf(ld_course_list_x('shows %s with mentioned WP category slug.', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tvalue: category_name || '',\n\t\t\t\t\tonChange: function onChange(category_name) {\n\t\t\t\t\t\treturn setAttributes({ category_name: category_name });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_list_TextControl, {\n\t\t\t\t\tlabel: ld_course_list_sprintf(ld_course_list_x('%s Category ID', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\thelp: ld_course_list_sprintf(ld_course_list_x('shows %s with mentioned category ID.', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tvalue: cat || '',\n\t\t\t\t\tonChange: function onChange(cat) {\n\t\t\t\t\t\treturn setAttributes({ cat: cat });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_course_list_('WP Category Selector', 'learndash'),\n\t\t\t\t\thelp: ld_course_list_('shows a WP category dropdown.', 'learndash'),\n\t\t\t\t\tchecked: !!categoryselector,\n\t\t\t\t\tonChange: function onChange(categoryselector) {\n\t\t\t\t\t\treturn setAttributes({ categoryselector: categoryselector });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_wp_tag_section = '';\n\t\tif (ldlms_settings['settings']['courses_taxonomies']['wp_post_tag'] === 'yes') {\n\t\t\tvar panel_wp_tag_section_open = false;\n\t\t\tif (tag != '' || tag_id != '') {\n\t\t\t\tpanel_wp_tag_section_open = true;\n\t\t\t}\n\t\t\tpanel_wp_tag_section = wp.element.createElement(\n\t\t\t\tld_course_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_list_('WP Tag Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: panel_wp_tag_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_list_TextControl, {\n\t\t\t\t\tlabel: ld_course_list_('WP Tag Slug', 'learndash'),\n\t\t\t\t\thelp: ld_course_list_sprintf(ld_course_list_x('shows %s with mentioned WP tag slug.', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tvalue: tag || '',\n\t\t\t\t\tonChange: function onChange(tag) {\n\t\t\t\t\t\treturn setAttributes({ tag: tag });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_list_TextControl, {\n\t\t\t\t\tlabel: ld_course_list_('WP Tag ID', 'learndash'),\n\t\t\t\t\thelp: ld_course_list_sprintf(ld_course_list_x('shows %s with mentioned WP tag ID.', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tvalue: tag_id || '',\n\t\t\t\t\tonChange: function onChange(tag_id) {\n\t\t\t\t\t\treturn setAttributes({ tag_id: tag_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_preview = wp.element.createElement(\n\t\t\tld_course_list_PanelBody,\n\t\t\t{\n\t\t\t\ttitle: ld_course_list_('Preview', 'learndash'),\n\t\t\t\tinitialOpen: false\n\t\t\t},\n\t\t\twp.element.createElement(ld_course_list_ToggleControl, {\n\t\t\t\tlabel: ld_course_list_('Show Preview', 'learndash'),\n\t\t\t\tchecked: !!preview_show,\n\t\t\t\tonChange: function onChange(preview_show) {\n\t\t\t\t\treturn setAttributes({ preview_show: preview_show });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_course_list_TextControl, {\n\t\t\t\tlabel: ld_course_list_('User ID', 'learndash'),\n\t\t\t\thelp: ld_course_list_('Enter a User ID to test preview', 'learndash'),\n\t\t\t\tvalue: preview_user_id || '',\n\t\t\t\ttype: 'number',\n\t\t\t\tonChange: function onChange(preview_user_id) {\n\t\t\t\t\treturn setAttributes({ preview_user_id: preview_user_id });\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tvar inspectorControls = wp.element.createElement(\n\t\t\tld_course_list_InspectorControls,\n\t\t\tnull,\n\t\t\tpanelbody_header,\n\t\t\tpanel_course_grid_section,\n\t\t\tpanel_course_category_section,\n\t\t\tpanel_course_tag_section,\n\t\t\tpanel_wp_category_section,\n\t\t\tpanel_wp_tag_section,\n\t\t\tpanel_preview\n\t\t);\n\n\t\tfunction do_serverside_render(attributes) {\n\t\t\tif (attributes.preview_show == true) {\n\t\t\t\treturn wp.element.createElement(ld_course_list_ServerSideRender, {\n\t\t\t\t\tblock: 'learndash/ld-course-list',\n\t\t\t\t\tattributes: attributes\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn ld_course_list_('[ld_course_list] shortcode output shown here', 'learndash');\n\t\t\t}\n\t\t}\n\n\t\treturn [inspectorControls, do_serverside_render(props.attributes)];\n\t},\n\n\tsave: function save(props) {}\n});\n// CONCATENATED MODULE: ./blocks/ld-lesson-list/index.js\n/**\n * LearnDash Block ld-lesson-list\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_lesson_list_wp$i18n = wp.i18n,\n ld_lesson_list_ = ld_lesson_list_wp$i18n.__,\n ld_lesson_list_x = ld_lesson_list_wp$i18n._x,\n ld_lesson_list_sprintf = ld_lesson_list_wp$i18n.sprintf;\nvar ld_lesson_list_registerBlockType = wp.blocks.registerBlockType;\nvar ld_lesson_list_InspectorControls = wp.editor.InspectorControls;\nvar ld_lesson_list_wp$components = wp.components,\n ld_lesson_list_ServerSideRender = ld_lesson_list_wp$components.ServerSideRender,\n ld_lesson_list_PanelBody = ld_lesson_list_wp$components.PanelBody,\n ld_lesson_list_RangeControl = ld_lesson_list_wp$components.RangeControl,\n ld_lesson_list_SelectControl = ld_lesson_list_wp$components.SelectControl,\n ld_lesson_list_ToggleControl = ld_lesson_list_wp$components.ToggleControl,\n ld_lesson_list_TextControl = ld_lesson_list_wp$components.TextControl;\n\n\nld_lesson_list_registerBlockType('learndash/ld-lesson-list', {\n\ttitle: ld_lesson_list_sprintf(ld_lesson_list_x('LearnDash %s List', 'placeholder: Lesson', 'learndash'), ldlms_get_custom_label('lesson')),\n\tdescription: ld_lesson_list_sprintf(ld_lesson_list_x('This block shows a list of %s.', 'placeholders: lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\ticon: 'list-view',\n\tcategory: 'learndash-blocks',\n\texample: {\n\t\tattributes: {\n\t\t\texample_show: 1\n\t\t}\n\t},\n\tsupports: {\n\t\tcustomClassName: false\n\t},\n\tattributes: {\n\t\torderby: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'ID'\n\t\t},\n\t\torder: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'DESC'\n\t\t},\n\t\tper_page: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcourse_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tshow_content: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tshow_thumbnail: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tlesson_category_name: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlesson_cat: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlesson_categoryselector: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\tlesson_tag: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlesson_tag_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcategory_name: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcat: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcategoryselector: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\ttag: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\ttag_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcourse_grid: {\n\t\t\ttype: 'boolean'\n\t\t},\n\t\tcol: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_default'] || 3\n\t\t},\n\t\tpreview_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\texample_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 0\n\t\t}\n\t},\n\tedit: function edit(props) {\n\t\tvar _props$attributes = props.attributes,\n\t\t orderby = _props$attributes.orderby,\n\t\t order = _props$attributes.order,\n\t\t per_page = _props$attributes.per_page,\n\t\t course_id = _props$attributes.course_id,\n\t\t show_content = _props$attributes.show_content,\n\t\t show_thumbnail = _props$attributes.show_thumbnail,\n\t\t lesson_category_name = _props$attributes.lesson_category_name,\n\t\t lesson_cat = _props$attributes.lesson_cat,\n\t\t lesson_categoryselector = _props$attributes.lesson_categoryselector,\n\t\t lesson_tag = _props$attributes.lesson_tag,\n\t\t lesson_tag_id = _props$attributes.lesson_tag_id,\n\t\t category_name = _props$attributes.category_name,\n\t\t cat = _props$attributes.cat,\n\t\t categoryselector = _props$attributes.categoryselector,\n\t\t tag = _props$attributes.tag,\n\t\t tag_id = _props$attributes.tag_id,\n\t\t course_grid = _props$attributes.course_grid,\n\t\t col = _props$attributes.col,\n\t\t preview_show = _props$attributes.preview_show,\n\t\t example_show = _props$attributes.example_show,\n\t\t setAttributes = props.setAttributes;\n\n\n\t\tvar field_show_content = '';\n\t\tvar field_show_thumbnail = '';\n\t\tvar panel_lesson_grid_section = '';\n\n\t\tvar course_grid_default = true;\n\t\tif (ldlms_settings['plugins']['learndash-course-grid']['enabled'] === true) {\n\t\t\tif (typeof course_grid !== 'undefined' && (course_grid == true || course_grid == false)) {\n\t\t\t\tcourse_grid_default = course_grid;\n\t\t\t}\n\n\t\t\tvar lesson_grid_section_open = false;\n\t\t\tif (course_grid_default == true) {\n\t\t\t\tlesson_grid_section_open = true;\n\t\t\t}\n\t\t\tpanel_lesson_grid_section = wp.element.createElement(\n\t\t\t\tld_lesson_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_lesson_list_('Grid Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: lesson_grid_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_lesson_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_lesson_list_('Show Grid', 'learndash'),\n\t\t\t\t\tchecked: !!course_grid_default,\n\t\t\t\t\tonChange: function onChange(course_grid) {\n\t\t\t\t\t\treturn setAttributes({ course_grid: course_grid });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_lesson_list_RangeControl, {\n\t\t\t\t\tlabel: ld_lesson_list_('Columns', 'learndash'),\n\t\t\t\t\tvalue: col || ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_default'],\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_max'],\n\t\t\t\t\tstep: 1,\n\t\t\t\t\tonChange: function onChange(col) {\n\t\t\t\t\t\treturn setAttributes({ col: col });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tfield_show_content = wp.element.createElement(ld_lesson_list_ToggleControl, {\n\t\t\tlabel: ld_lesson_list_('Show Content', 'learndash'),\n\t\t\tchecked: !!show_content,\n\t\t\tonChange: function onChange(show_content) {\n\t\t\t\treturn setAttributes({ show_content: show_content });\n\t\t\t}\n\t\t});\n\n\t\tfield_show_thumbnail = wp.element.createElement(ld_lesson_list_ToggleControl, {\n\t\t\tlabel: ld_lesson_list_('Show Thumbnail', 'learndash'),\n\t\t\tchecked: !!show_thumbnail,\n\t\t\tonChange: function onChange(show_thumbnail) {\n\t\t\t\treturn setAttributes({ show_thumbnail: show_thumbnail });\n\t\t\t}\n\t\t});\n\n\t\tvar panelbody_header = wp.element.createElement(\n\t\t\tld_lesson_list_PanelBody,\n\t\t\t{\n\t\t\t\ttitle: ld_lesson_list_('Settings', 'learndash')\n\t\t\t},\n\t\t\twp.element.createElement(ld_lesson_list_TextControl, {\n\t\t\t\tlabel: ld_lesson_list_sprintf(ld_lesson_list_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\thelp: ld_lesson_list_sprintf(ld_lesson_list_x('Enter single %1$s ID to limit listing. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: course_id || '',\n\t\t\t\tonChange: function onChange(course_id) {\n\t\t\t\t\treturn setAttributes({ course_id: course_id });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_lesson_list_SelectControl, {\n\t\t\t\tkey: 'orderby',\n\t\t\t\tlabel: ld_lesson_list_('Order by', 'learndash'),\n\t\t\t\tvalue: orderby,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: ld_lesson_list_('ID - Order by post id. (default)', 'learndash'),\n\t\t\t\t\tvalue: 'ID'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_lesson_list_('Title - Order by post title', 'learndash'),\n\t\t\t\t\tvalue: 'title'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_lesson_list_('Date - Order by post date', 'learndash'),\n\t\t\t\t\tvalue: 'date'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_lesson_list_('Menu - Order by Page Order Value', 'learndash'),\n\t\t\t\t\tvalue: 'menu_order'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(orderby) {\n\t\t\t\t\treturn setAttributes({ orderby: orderby });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_lesson_list_SelectControl, {\n\t\t\t\tkey: 'order',\n\t\t\t\tlabel: ld_lesson_list_('Order', 'learndash'),\n\t\t\t\tvalue: order,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: ld_lesson_list_('DESC - highest to lowest values (default)', 'learndash'),\n\t\t\t\t\tvalue: 'DESC'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_lesson_list_('ASC - lowest to highest values', 'learndash'),\n\t\t\t\t\tvalue: 'ASC'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(order) {\n\t\t\t\t\treturn setAttributes({ order: order });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_lesson_list_TextControl, {\n\t\t\t\tlabel: ld_lesson_list_sprintf(ld_lesson_list_x('%s per page', 'placeholder: Lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\t\t\t\thelp: ld_lesson_list_sprintf(ld_lesson_list_x('Leave empty for default (%d) or 0 to show all items.', 'placeholder: default per page', 'learndash'), ldlms_get_per_page('per_page')),\n\t\t\t\tvalue: per_page || '',\n\t\t\t\ttype: 'number',\n\t\t\t\tonChange: function onChange(per_page) {\n\t\t\t\t\treturn setAttributes({ per_page: per_page });\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfield_show_content,\n\t\t\tfield_show_thumbnail\n\t\t);\n\n\t\tvar panel_lesson_category_section = '';\n\t\tif (ldlms_settings['settings']['lessons_taxonomies']['ld_lesson_category'] === 'yes') {\n\t\t\tvar panel_lesson_category_section_open = false;\n\t\t\tif (lesson_category_name != '' || lesson_cat != '') {\n\t\t\t\tpanel_lesson_category_section_open = true;\n\t\t\t}\n\t\t\tpanel_lesson_category_section = wp.element.createElement(\n\t\t\t\tld_lesson_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_lesson_list_sprintf(ld_lesson_list_x('%s Category Settings', 'placeholder: Lesson', 'learndash'), ldlms_get_custom_label('lesson')),\n\t\t\t\t\tinitialOpen: panel_lesson_category_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_lesson_list_TextControl, {\n\t\t\t\t\tlabel: ld_lesson_list_sprintf(ld_lesson_list_x('%s Category Slug', 'placeholder: Lesson', 'learndash'), ldlms_get_custom_label('lesson')),\n\t\t\t\t\thelp: ld_lesson_list_sprintf(ld_lesson_list_x('shows %s with mentioned category slug.', 'placeholder: lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\t\t\t\t\tvalue: lesson_category_name || '',\n\t\t\t\t\tonChange: function onChange(lesson_category_name) {\n\t\t\t\t\t\treturn setAttributes({ lesson_category_name: lesson_category_name });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_lesson_list_TextControl, {\n\t\t\t\t\tlabel: ld_lesson_list_sprintf(ld_lesson_list_x('%s Category ID', 'placeholder: Lesson', 'learndash'), ldlms_get_custom_label('lesson')),\n\t\t\t\t\thelp: ld_lesson_list_sprintf(ld_lesson_list_x('shows %s with mentioned category ID.', 'placeholder: lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\t\t\t\t\tvalue: lesson_cat || '',\n\t\t\t\t\tonChange: function onChange(lesson_cat) {\n\t\t\t\t\t\treturn setAttributes({ lesson_cat: lesson_cat });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_lesson_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_lesson_list_sprintf(ld_lesson_list_x('%s Category Selector', 'placeholder: Lesson', 'learndash'), ldlms_get_custom_label('lesson')),\n\t\t\t\t\thelp: ld_lesson_list_sprintf(ld_lesson_list_x('shows a %s category dropdown.', 'placeholder: Lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\t\t\t\t\tchecked: !!lesson_categoryselector,\n\t\t\t\t\tonChange: function onChange(lesson_categoryselector) {\n\t\t\t\t\t\treturn setAttributes({ lesson_categoryselector: lesson_categoryselector });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_lesson_tag_section = '';\n\t\tif (ldlms_settings['settings']['lessons_taxonomies']['ld_lesson_tag'] === 'yes') {\n\t\t\tvar panel_lesson_tag_section_open = false;\n\t\t\tif (lesson_tag != '' || lesson_tag_id != '') {\n\t\t\t\tpanel_lesson_tag_section_open = true;\n\t\t\t}\n\t\t\tpanel_lesson_tag_section = wp.element.createElement(\n\t\t\t\tld_lesson_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_lesson_list_sprintf(ld_lesson_list_x('%s Tag Settings', 'placeholder: Lesson', 'learndash'), ldlms_get_custom_label('lesson')),\n\t\t\t\t\tinitialOpen: panel_lesson_tag_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_lesson_list_TextControl, {\n\t\t\t\t\tlabel: ld_lesson_list_sprintf(ld_lesson_list_x('%s Tag Slug', 'placeholder: Lesson', 'learndash'), ldlms_get_custom_label('lesson')),\n\t\t\t\t\thelp: ld_lesson_list_sprintf(ld_lesson_list_x('shows %s with mentioned tag slug.', 'placeholder: Lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\t\t\t\t\tvalue: lesson_tag || '',\n\t\t\t\t\tonChange: function onChange(lesson_tag) {\n\t\t\t\t\t\treturn setAttributes({ lesson_tag: lesson_tag });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_lesson_list_TextControl, {\n\t\t\t\t\tlabel: ld_lesson_list_sprintf(ld_lesson_list_x('%s Tag ID', 'placeholder: Lesson', 'learndash'), ldlms_get_custom_label('lesson')),\n\t\t\t\t\thelp: ld_lesson_list_sprintf(ld_lesson_list_x('shows %s with mentioned tag ID.', 'placeholder: Lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\t\t\t\t\tvalue: lesson_tag_id || '',\n\t\t\t\t\tonChange: function onChange(lesson_tag_id) {\n\t\t\t\t\t\treturn setAttributes({ lesson_tag_id: lesson_tag_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_wp_category_section = '';\n\t\tif (ldlms_settings['settings']['lessons_taxonomies']['wp_post_category'] === 'yes') {\n\t\t\tvar panel_wp_category_section_open = false;\n\t\t\tif (category_name != '' || cat != '') {\n\t\t\t\tpanel_wp_category_section_open = true;\n\t\t\t}\n\t\t\tpanel_wp_category_section = wp.element.createElement(\n\t\t\t\tld_lesson_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_lesson_list_('WP Category Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: panel_wp_category_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_lesson_list_TextControl, {\n\t\t\t\t\tlabel: ld_lesson_list_('WP Category Slug', 'learndash'),\n\t\t\t\t\thelp: ld_lesson_list_sprintf(ld_lesson_list_x('shows %s with mentioned WP category slug.', 'placeholder: Lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\t\t\t\t\tvalue: category_name || '',\n\t\t\t\t\tonChange: function onChange(category_name) {\n\t\t\t\t\t\treturn setAttributes({ category_name: category_name });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_lesson_list_TextControl, {\n\t\t\t\t\tlabel: ld_lesson_list_sprintf(ld_lesson_list_x('%s Category ID', 'placeholder: Lesson', 'learndash'), ldlms_get_custom_label('lesson')),\n\t\t\t\t\thelp: ld_lesson_list_sprintf(ld_lesson_list_x('shows %s with mentioned category ID.', 'placeholder: Lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\t\t\t\t\tvalue: cat || '',\n\t\t\t\t\tonChange: function onChange(cat) {\n\t\t\t\t\t\treturn setAttributes({ cat: cat });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_lesson_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_lesson_list_('WP Category Selector', 'learndash'),\n\t\t\t\t\thelp: ld_lesson_list_('shows a WP category dropdown.', 'learndash'),\n\t\t\t\t\tchecked: !!categoryselector,\n\t\t\t\t\tonChange: function onChange(categoryselector) {\n\t\t\t\t\t\treturn setAttributes({ categoryselector: categoryselector });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_wp_tag_section = '';\n\t\tif (ldlms_settings['settings']['lessons_taxonomies']['wp_post_tag'] === 'yes') {\n\t\t\tvar panel_wp_tag_section_open = false;\n\t\t\tif (tag != '' || tag_id != '') {\n\t\t\t\tpanel_wp_tag_section_open = true;\n\t\t\t}\n\t\t\tpanel_wp_tag_section = wp.element.createElement(\n\t\t\t\tld_lesson_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_lesson_list_('WP Tag Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: panel_wp_tag_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_lesson_list_TextControl, {\n\t\t\t\t\tlabel: ld_lesson_list_('WP Tag Slug', 'learndash'),\n\t\t\t\t\thelp: ld_lesson_list_sprintf(ld_lesson_list_x('shows %s with mentioned WP tag slug.', 'placeholder: Lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\t\t\t\t\tvalue: tag || '',\n\t\t\t\t\tonChange: function onChange(tag) {\n\t\t\t\t\t\treturn setAttributes({ tag: tag });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_lesson_list_TextControl, {\n\t\t\t\t\tlabel: ld_lesson_list_('WP Tag ID', 'learndash'),\n\t\t\t\t\thelp: ld_lesson_list_sprintf(ld_lesson_list_x('shows %s with mentioned WP tag ID.', 'placeholder: Lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\t\t\t\t\tvalue: tag_id || '',\n\t\t\t\t\tonChange: function onChange(tag_id) {\n\t\t\t\t\t\treturn setAttributes({ tag_id: tag_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_preview = wp.element.createElement(\n\t\t\tld_lesson_list_PanelBody,\n\t\t\t{\n\t\t\t\ttitle: ld_lesson_list_('Preview', 'learndash'),\n\t\t\t\tinitialOpen: false\n\t\t\t},\n\t\t\twp.element.createElement(ld_lesson_list_ToggleControl, {\n\t\t\t\tlabel: ld_lesson_list_('Show Preview', 'learndash'),\n\t\t\t\tchecked: !!preview_show,\n\t\t\t\tonChange: function onChange(preview_show) {\n\t\t\t\t\treturn setAttributes({ preview_show: preview_show });\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tvar inspectorControls = wp.element.createElement(\n\t\t\tld_lesson_list_InspectorControls,\n\t\t\tnull,\n\t\t\tpanelbody_header,\n\t\t\tpanel_lesson_grid_section,\n\t\t\tpanel_lesson_category_section,\n\t\t\tpanel_lesson_tag_section,\n\t\t\tpanel_wp_category_section,\n\t\t\tpanel_wp_tag_section,\n\t\t\tpanel_preview\n\t\t);\n\n\t\tfunction do_serverside_render(attributes) {\n\t\t\tif (attributes.preview_show == true) {\n\t\t\t\treturn wp.element.createElement(ld_lesson_list_ServerSideRender, {\n\t\t\t\t\tblock: 'learndash/ld-lesson-list',\n\t\t\t\t\tattributes: attributes\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn ld_lesson_list_('[ld_lesson_list] shortcode output shown here', 'learndash');\n\t\t\t}\n\t\t}\n\n\t\treturn [inspectorControls, do_serverside_render(props.attributes)];\n\t},\n\n\tsave: function save(props) {}\n});\n// CONCATENATED MODULE: ./blocks/ld-topic-list/index.js\n/**\n * LearnDash Block ld-topic-list\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_topic_list_wp$i18n = wp.i18n,\n ld_topic_list_ = ld_topic_list_wp$i18n.__,\n ld_topic_list_x = ld_topic_list_wp$i18n._x,\n ld_topic_list_sprintf = ld_topic_list_wp$i18n.sprintf;\nvar ld_topic_list_registerBlockType = wp.blocks.registerBlockType;\nvar ld_topic_list_InspectorControls = wp.editor.InspectorControls;\nvar ld_topic_list_wp$components = wp.components,\n ld_topic_list_ServerSideRender = ld_topic_list_wp$components.ServerSideRender,\n ld_topic_list_PanelBody = ld_topic_list_wp$components.PanelBody,\n ld_topic_list_RangeControl = ld_topic_list_wp$components.RangeControl,\n ld_topic_list_SelectControl = ld_topic_list_wp$components.SelectControl,\n ld_topic_list_ToggleControl = ld_topic_list_wp$components.ToggleControl,\n ld_topic_list_TextControl = ld_topic_list_wp$components.TextControl;\n\n\nld_topic_list_registerBlockType('learndash/ld-topic-list', {\n\ttitle: ld_topic_list_sprintf(ld_topic_list_x('LearnDash %s List', 'placeholder: Topic', 'learndash'), ldlms_get_custom_label('topic')),\n\tdescription: ld_topic_list_sprintf(ld_topic_list_x('This block shows a list of %s.', 'placeholders: topics', 'learndash'), ldlms_get_custom_label('topics')),\n\ticon: 'list-view',\n\tcategory: 'learndash-blocks',\n\texample: {\n\t\tattributes: {\n\t\t\texample_show: 1\n\t\t}\n\t},\n\tsupports: {\n\t\tcustomClassName: false\n\t},\n\tattributes: {\n\t\torderby: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'ID'\n\t\t},\n\t\torder: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'DESC'\n\t\t},\n\t\tper_page: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcourse_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlesson_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tshow_content: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tshow_thumbnail: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\ttopic_category_name: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\ttopic_cat: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\ttopic_categoryselector: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\ttopic_tag: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\ttopic_tag_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcategory_name: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcat: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcategoryselector: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\ttag: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\ttag_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcourse_grid: {\n\t\t\ttype: 'boolean'\n\t\t},\n\t\tcol: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_default'] || 3\n\t\t},\n\t\tpreview_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\texample_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 0\n\t\t}\n\t},\n\tedit: function edit(props) {\n\t\tvar _props$attributes = props.attributes,\n\t\t orderby = _props$attributes.orderby,\n\t\t order = _props$attributes.order,\n\t\t per_page = _props$attributes.per_page,\n\t\t course_id = _props$attributes.course_id,\n\t\t lesson_id = _props$attributes.lesson_id,\n\t\t show_content = _props$attributes.show_content,\n\t\t show_thumbnail = _props$attributes.show_thumbnail,\n\t\t topic_category_name = _props$attributes.topic_category_name,\n\t\t topic_cat = _props$attributes.topic_cat,\n\t\t topic_categoryselector = _props$attributes.topic_categoryselector,\n\t\t topic_tag = _props$attributes.topic_tag,\n\t\t topic_tag_id = _props$attributes.topic_tag_id,\n\t\t category_name = _props$attributes.category_name,\n\t\t cat = _props$attributes.cat,\n\t\t categoryselector = _props$attributes.categoryselector,\n\t\t tag = _props$attributes.tag,\n\t\t tag_id = _props$attributes.tag_id,\n\t\t course_grid = _props$attributes.course_grid,\n\t\t col = _props$attributes.col,\n\t\t preview_show = _props$attributes.preview_show,\n\t\t example_show = _props$attributes.example_show,\n\t\t setAttributes = props.setAttributes;\n\n\n\t\tvar field_show_content = '';\n\t\tvar field_show_thumbnail = '';\n\t\tvar panel_topic_grid_section = '';\n\n\t\tvar course_grid_default = true;\n\t\tif (ldlms_settings['plugins']['learndash-course-grid']['enabled'] === true) {\n\t\t\tif (typeof course_grid !== 'undefined' && (course_grid == true || course_grid == false)) {\n\t\t\t\tcourse_grid_default = course_grid;\n\t\t\t}\n\n\t\t\tvar topic_grid_section_open = false;\n\t\t\tif (course_grid_default == true) {\n\t\t\t\ttopic_grid_section_open = true;\n\t\t\t}\n\t\t\tpanel_topic_grid_section = wp.element.createElement(\n\t\t\t\tld_topic_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_topic_list_('Grid Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: topic_grid_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_topic_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_topic_list_('Show Grid', 'learndash'),\n\t\t\t\t\tchecked: !!course_grid_default,\n\t\t\t\t\tonChange: function onChange(course_grid) {\n\t\t\t\t\t\treturn setAttributes({ course_grid: course_grid });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_topic_list_RangeControl, {\n\t\t\t\t\tlabel: ld_topic_list_('Columns', 'learndash'),\n\t\t\t\t\tvalue: col || ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_default'],\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_max'],\n\t\t\t\t\tstep: 1,\n\t\t\t\t\tonChange: function onChange(col) {\n\t\t\t\t\t\treturn setAttributes({ col: col });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tfield_show_content = wp.element.createElement(ld_topic_list_ToggleControl, {\n\t\t\tlabel: ld_topic_list_('Show Content', 'learndash'),\n\t\t\tchecked: !!show_content,\n\t\t\tonChange: function onChange(show_content) {\n\t\t\t\treturn setAttributes({ show_content: show_content });\n\t\t\t}\n\t\t});\n\n\t\tfield_show_thumbnail = wp.element.createElement(ld_topic_list_ToggleControl, {\n\t\t\tlabel: ld_topic_list_('Show Thumbnail', 'learndash'),\n\t\t\tchecked: !!show_thumbnail,\n\t\t\tonChange: function onChange(show_thumbnail) {\n\t\t\t\treturn setAttributes({ show_thumbnail: show_thumbnail });\n\t\t\t}\n\t\t});\n\n\t\tvar panelbody_header = wp.element.createElement(\n\t\t\tld_topic_list_PanelBody,\n\t\t\t{\n\t\t\t\ttitle: ld_topic_list_('Settings', 'learndash')\n\t\t\t},\n\t\t\twp.element.createElement(ld_topic_list_TextControl, {\n\t\t\t\tlabel: ld_topic_list_sprintf(ld_topic_list_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('Enter single %1$s ID to limit listing. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: course_id || '',\n\t\t\t\tonChange: function onChange(course_id) {\n\t\t\t\t\treturn setAttributes({ course_id: course_id });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_topic_list_TextControl, {\n\t\t\t\tlabel: ld_topic_list_sprintf(ld_topic_list_x('%s ID', 'Lesson ID', 'learndash'), ldlms_get_custom_label('lesson')),\n\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('Enter single %1$s ID to limit listing. Leave blank if used within a %2$s.', 'placeholders: lesson, course', 'learndash'), ldlms_get_custom_label('lesson'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: lesson_id || '',\n\t\t\t\tonChange: function onChange(lesson_id) {\n\t\t\t\t\treturn setAttributes({ lesson_id: lesson_id });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_topic_list_SelectControl, {\n\t\t\t\tkey: 'orderby',\n\t\t\t\tlabel: ld_topic_list_('Order by', 'learndash'),\n\t\t\t\tvalue: orderby,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: ld_topic_list_('ID - Order by post id. (default)', 'learndash'),\n\t\t\t\t\tvalue: 'ID'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_topic_list_('Title - Order by post title', 'learndash'),\n\t\t\t\t\tvalue: 'title'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_topic_list_('Date - Order by post date', 'learndash'),\n\t\t\t\t\tvalue: 'date'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_topic_list_('Menu - Order by Page Order Value', 'learndash'),\n\t\t\t\t\tvalue: 'menu_order'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(orderby) {\n\t\t\t\t\treturn setAttributes({ orderby: orderby });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_topic_list_SelectControl, {\n\t\t\t\tkey: 'order',\n\t\t\t\tlabel: ld_topic_list_('Order', 'learndash'),\n\t\t\t\tvalue: order,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: ld_topic_list_('DESC - highest to lowest values (default)', 'learndash'),\n\t\t\t\t\tvalue: 'DESC'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_topic_list_('ASC - lowest to highest values', 'learndash'),\n\t\t\t\t\tvalue: 'ASC'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(order) {\n\t\t\t\t\treturn setAttributes({ order: order });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_topic_list_TextControl, {\n\t\t\t\tlabel: ld_topic_list_sprintf(ld_topic_list_x('%s per page', 'placeholder: Topics', 'learndash'), ldlms_get_custom_label('topics')),\n\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('Leave empty for default (%d) or 0 to show all items.', 'placeholder: default per page', 'learndash'), ldlms_get_per_page('per_page')),\n\t\t\t\tvalue: per_page || '',\n\t\t\t\ttype: 'number',\n\t\t\t\tonChange: function onChange(per_page) {\n\t\t\t\t\treturn setAttributes({ per_page: per_page });\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfield_show_content,\n\t\t\tfield_show_thumbnail\n\t\t);\n\n\t\tvar panel_topic_category_section = '';\n\t\tif (ldlms_settings['settings']['topics_taxonomies']['ld_topic_category'] === 'yes') {\n\t\t\tvar panel_topic_category_section_open = false;\n\t\t\tif (topic_category_name != '' || topic_cat != '') {\n\t\t\t\tpanel_topic_category_section_open = true;\n\t\t\t}\n\t\t\tpanel_topic_category_section = wp.element.createElement(\n\t\t\t\tld_topic_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_topic_list_sprintf(ld_topic_list_x('%s Category Settings', 'placeholder: Topic', 'learndash'), ldlms_get_custom_label('topic')),\n\t\t\t\t\tinitialOpen: panel_topic_category_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_topic_list_TextControl, {\n\t\t\t\t\tlabel: ld_topic_list_sprintf(ld_topic_list_x('%s Category Slug', 'placeholder: Topic', 'learndash'), ldlms_get_custom_label('topic')),\n\t\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('shows %s with mentioned category slug.', 'placeholder: topics', 'learndash'), ldlms_get_custom_label('topics')),\n\t\t\t\t\tvalue: topic_category_name || '',\n\t\t\t\t\tonChange: function onChange(topic_category_name) {\n\t\t\t\t\t\treturn setAttributes({ topic_category_name: topic_category_name });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_topic_list_TextControl, {\n\t\t\t\t\tlabel: ld_topic_list_sprintf(ld_topic_list_x('%s Category ID', 'placeholder: Topic', 'learndash'), ldlms_get_custom_label('topic')),\n\t\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('shows %s with mentioned category ID.', 'placeholder: topics', 'learndash'), ldlms_get_custom_label('topics')),\n\t\t\t\t\tvalue: topic_cat || '',\n\t\t\t\t\tonChange: function onChange(topic_cat) {\n\t\t\t\t\t\treturn setAttributes({ topic_cat: topic_cat });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_topic_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_topic_list_sprintf(ld_topic_list_x('%s Category Selector', 'placeholder: topic', 'learndash'), ldlms_get_custom_label('topic')),\n\t\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('shows a %s category dropdown.', 'placeholder: topics', 'learndash'), ldlms_get_custom_label('topics')),\n\t\t\t\t\tchecked: !!topic_categoryselector,\n\t\t\t\t\tonChange: function onChange(topic_categoryselector) {\n\t\t\t\t\t\treturn setAttributes({ topic_categoryselector: topic_categoryselector });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_topic_tag_section = '';\n\t\tif (ldlms_settings['settings']['topics_taxonomies']['ld_topic_tag'] === 'yes') {\n\t\t\tvar panel_topic_tag_section_open = false;\n\t\t\tif (topic_tag != '' || topic_tag_id != '') {\n\t\t\t\tpanel_topic_tag_section_open = true;\n\t\t\t}\n\t\t\tpanel_topic_tag_section = wp.element.createElement(\n\t\t\t\tld_topic_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_topic_list_sprintf(ld_topic_list_x('%s Tag Settings', 'placeholder: Topic', 'learndash'), ldlms_get_custom_label('topic')),\n\t\t\t\t\tinitialOpen: panel_topic_tag_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_topic_list_TextControl, {\n\t\t\t\t\tlabel: ld_topic_list_sprintf(ld_topic_list_x('%s Tag Slug', 'placeholder: Topic', 'learndash'), ldlms_get_custom_label('topic')),\n\t\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('shows %s with mentioned tag slug.', 'placeholder: topics', 'learndash'), ldlms_get_custom_label('topics')),\n\t\t\t\t\tvalue: topic_tag || '',\n\t\t\t\t\tonChange: function onChange(topic_tag) {\n\t\t\t\t\t\treturn setAttributes({ topic_tag: topic_tag });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_topic_list_TextControl, {\n\t\t\t\t\tlabel: ld_topic_list_sprintf(ld_topic_list_x('%s Tag ID', 'placeholder: Topic', 'learndash'), ldlms_get_custom_label('topic')),\n\t\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('shows %s with mentioned tag ID.', 'placeholder: Topics', 'learndash'), ldlms_get_custom_label('topics')),\n\t\t\t\t\tvalue: topic_tag_id || '',\n\t\t\t\t\tonChange: function onChange(topic_tag_id) {\n\t\t\t\t\t\treturn setAttributes({ topic_tag_id: topic_tag_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_wp_category_section = '';\n\t\tif (ldlms_settings['settings']['topics_taxonomies']['wp_post_category'] === 'yes') {\n\t\t\tvar panel_wp_category_section_open = false;\n\t\t\tif (category_name != '' || cat != '') {\n\t\t\t\tpanel_wp_category_section_open = true;\n\t\t\t}\n\t\t\tpanel_wp_category_section = wp.element.createElement(\n\t\t\t\tld_topic_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_topic_list_('WP Category Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: panel_wp_category_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_topic_list_TextControl, {\n\t\t\t\t\tlabel: ld_topic_list_('WP Category Slug', 'learndash'),\n\t\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('shows %s with mentioned WP category slug.', 'placeholder: Topics', 'learndash'), ldlms_get_custom_label('topics')),\n\t\t\t\t\tvalue: category_name || '',\n\t\t\t\t\tonChange: function onChange(category_name) {\n\t\t\t\t\t\treturn setAttributes({ category_name: category_name });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_topic_list_TextControl, {\n\t\t\t\t\tlabel: ld_topic_list_sprintf(ld_topic_list_x('%s Category ID', 'placeholder: Topic', 'learndash'), ldlms_get_custom_label('topic')),\n\t\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('shows %s with mentioned category ID.', 'placeholder: Topics', 'learndash'), ldlms_get_custom_label('topics')),\n\t\t\t\t\tvalue: cat || '',\n\t\t\t\t\tonChange: function onChange(cat) {\n\t\t\t\t\t\treturn setAttributes({ cat: cat });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_topic_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_topic_list_('WP Category Selector', 'learndash'),\n\t\t\t\t\thelp: ld_topic_list_('shows a WP category dropdown.', 'learndash'),\n\t\t\t\t\tchecked: !!categoryselector,\n\t\t\t\t\tonChange: function onChange(categoryselector) {\n\t\t\t\t\t\treturn setAttributes({ categoryselector: categoryselector });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_wp_tag_section = '';\n\t\tif (ldlms_settings['settings']['topics_taxonomies']['wp_post_tag'] === 'yes') {\n\t\t\tvar panel_wp_tag_section_open = false;\n\t\t\tif (tag != '' || tag_id != '') {\n\t\t\t\tpanel_wp_tag_section_open = true;\n\t\t\t}\n\t\t\tpanel_wp_tag_section = wp.element.createElement(\n\t\t\t\tld_topic_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_topic_list_('WP Tag Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: panel_wp_tag_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_topic_list_TextControl, {\n\t\t\t\t\tlabel: ld_topic_list_('WP Tag Slug', 'learndash'),\n\t\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('shows %s with mentioned WP tag slug.', 'placeholder: Topics', 'learndash'), ldlms_get_custom_label('topics')),\n\t\t\t\t\tvalue: tag || '',\n\t\t\t\t\tonChange: function onChange(tag) {\n\t\t\t\t\t\treturn setAttributes({ tag: tag });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_topic_list_TextControl, {\n\t\t\t\t\tlabel: ld_topic_list_('WP Tag ID', 'learndash'),\n\t\t\t\t\thelp: ld_topic_list_sprintf(ld_topic_list_x('shows %s with mentioned WP tag ID.', 'placeholder: Topics', 'learndash'), ldlms_get_custom_label('topics')),\n\t\t\t\t\tvalue: tag_id || '',\n\t\t\t\t\tonChange: function onChange(tag_id) {\n\t\t\t\t\t\treturn setAttributes({ tag_id: tag_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_preview = wp.element.createElement(\n\t\t\tld_topic_list_PanelBody,\n\t\t\t{\n\t\t\t\ttitle: ld_topic_list_('Preview', 'learndash'),\n\t\t\t\tinitialOpen: false\n\t\t\t},\n\t\t\twp.element.createElement(ld_topic_list_ToggleControl, {\n\t\t\t\tlabel: ld_topic_list_('Show Preview', 'learndash'),\n\t\t\t\tchecked: !!preview_show,\n\t\t\t\tonChange: function onChange(preview_show) {\n\t\t\t\t\treturn setAttributes({ preview_show: preview_show });\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tvar inspectorControls = wp.element.createElement(\n\t\t\tld_topic_list_InspectorControls,\n\t\t\tnull,\n\t\t\tpanelbody_header,\n\t\t\tpanel_topic_grid_section,\n\t\t\tpanel_topic_category_section,\n\t\t\tpanel_topic_tag_section,\n\t\t\tpanel_wp_category_section,\n\t\t\tpanel_wp_tag_section,\n\t\t\tpanel_preview\n\t\t);\n\n\t\tfunction do_serverside_render(attributes) {\n\t\t\tif (attributes.preview_show == true) {\n\t\t\t\treturn wp.element.createElement(ld_topic_list_ServerSideRender, {\n\t\t\t\t\tblock: 'learndash/ld-topic-list',\n\t\t\t\t\tattributes: attributes\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn ld_topic_list_('[ld_topic_list] shortcode output shown here', 'learndash');\n\t\t\t}\n\t\t}\n\n\t\treturn [inspectorControls, do_serverside_render(props.attributes)];\n\t},\n\n\tsave: function save(props) {}\n});\n// CONCATENATED MODULE: ./blocks/ld-quiz-list/index.js\n/**\n * LearnDash Block ld-quiz-list\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_quiz_list_wp$i18n = wp.i18n,\n ld_quiz_list_ = ld_quiz_list_wp$i18n.__,\n ld_quiz_list_x = ld_quiz_list_wp$i18n._x,\n ld_quiz_list_sprintf = ld_quiz_list_wp$i18n.sprintf;\nvar ld_quiz_list_registerBlockType = wp.blocks.registerBlockType;\nvar ld_quiz_list_InspectorControls = wp.editor.InspectorControls;\nvar ld_quiz_list_wp$components = wp.components,\n ld_quiz_list_ServerSideRender = ld_quiz_list_wp$components.ServerSideRender,\n ld_quiz_list_PanelBody = ld_quiz_list_wp$components.PanelBody,\n ld_quiz_list_RangeControl = ld_quiz_list_wp$components.RangeControl,\n ld_quiz_list_SelectControl = ld_quiz_list_wp$components.SelectControl,\n ld_quiz_list_ToggleControl = ld_quiz_list_wp$components.ToggleControl,\n ld_quiz_list_TextControl = ld_quiz_list_wp$components.TextControl;\n\n\nld_quiz_list_registerBlockType('learndash/ld-quiz-list', {\n\ttitle: ld_quiz_list_sprintf(ld_quiz_list_x('LearnDash %s List', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\tdescription: ld_quiz_list_sprintf(ld_quiz_list_x('This block shows a list of %s.', 'placeholders: quizzes', 'learndash'), ldlms_get_custom_label('quizzes')),\n\ticon: 'list-view',\n\tcategory: 'learndash-blocks',\n\texample: {\n\t\tattributes: {\n\t\t\texample_show: 1\n\t\t}\n\t},\n\tsupports: {\n\t\tcustomClassName: false\n\t},\n\tattributes: {\n\t\torderby: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'ID'\n\t\t},\n\t\torder: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'DESC'\n\t\t},\n\t\tper_page: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcourse_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlesson_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tshow_content: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tshow_thumbnail: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tquiz_category_name: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tquiz_cat: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tquiz_categoryselector: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\tquiz_tag: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tquiz_tag_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcategory_name: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcat: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcategoryselector: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\ttag: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\ttag_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tcourse_grid: {\n\t\t\ttype: 'boolean'\n\t\t},\n\t\tcol: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_default'] || 3\n\t\t},\n\t\tpreview_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\texample_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 0\n\t\t}\n\t},\n\tedit: function edit(props) {\n\t\tvar _props$attributes = props.attributes,\n\t\t orderby = _props$attributes.orderby,\n\t\t order = _props$attributes.order,\n\t\t per_page = _props$attributes.per_page,\n\t\t course_id = _props$attributes.course_id,\n\t\t lesson_id = _props$attributes.lesson_id,\n\t\t show_content = _props$attributes.show_content,\n\t\t show_thumbnail = _props$attributes.show_thumbnail,\n\t\t quiz_category_name = _props$attributes.quiz_category_name,\n\t\t quiz_cat = _props$attributes.quiz_cat,\n\t\t quiz_categoryselector = _props$attributes.quiz_categoryselector,\n\t\t quiz_tag = _props$attributes.quiz_tag,\n\t\t quiz_tag_id = _props$attributes.quiz_tag_id,\n\t\t category_name = _props$attributes.category_name,\n\t\t cat = _props$attributes.cat,\n\t\t categoryselector = _props$attributes.categoryselector,\n\t\t tag = _props$attributes.tag,\n\t\t tag_id = _props$attributes.tag_id,\n\t\t course_grid = _props$attributes.course_grid,\n\t\t col = _props$attributes.col,\n\t\t preview_show = _props$attributes.preview_show,\n\t\t example_show = _props$attributes.example_show,\n\t\t setAttributes = props.setAttributes;\n\n\n\t\tvar field_show_content = '';\n\t\tvar field_show_thumbnail = '';\n\t\tvar panel_quiz_grid_section = '';\n\n\t\tvar course_grid_default = true;\n\t\tif (ldlms_settings['plugins']['learndash-course-grid']['enabled'] === true) {\n\t\t\tif (typeof course_grid !== 'undefined' && (course_grid == true || course_grid == false)) {\n\t\t\t\tcourse_grid_default = course_grid;\n\t\t\t}\n\n\t\t\tvar quiz_grid_section_open = false;\n\t\t\tif (course_grid_default == true) {\n\t\t\t\tquiz_grid_section_open = true;\n\t\t\t}\n\t\t\tpanel_quiz_grid_section = wp.element.createElement(\n\t\t\t\tld_quiz_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_quiz_list_('Grid Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: quiz_grid_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_quiz_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_quiz_list_('Show Grid', 'learndash'),\n\t\t\t\t\tchecked: !!course_grid_default,\n\t\t\t\t\tonChange: function onChange(course_grid) {\n\t\t\t\t\t\treturn setAttributes({ course_grid: course_grid });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_quiz_list_RangeControl, {\n\t\t\t\t\tlabel: ld_quiz_list_('Columns', 'learndash'),\n\t\t\t\t\tvalue: col || ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_default'],\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: ldlms_settings['plugins']['learndash-course-grid']['enabled']['col_max'],\n\t\t\t\t\tstep: 1,\n\t\t\t\t\tonChange: function onChange(col) {\n\t\t\t\t\t\treturn setAttributes({ col: col });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tfield_show_content = wp.element.createElement(ld_quiz_list_ToggleControl, {\n\t\t\tlabel: ld_quiz_list_('Show Content', 'learndash'),\n\t\t\tchecked: !!show_content,\n\t\t\tonChange: function onChange(show_content) {\n\t\t\t\treturn setAttributes({ show_content: show_content });\n\t\t\t}\n\t\t});\n\n\t\tfield_show_thumbnail = wp.element.createElement(ld_quiz_list_ToggleControl, {\n\t\t\tlabel: ld_quiz_list_('Show Thumbnail', 'learndash'),\n\t\t\tchecked: !!show_thumbnail,\n\t\t\tonChange: function onChange(show_thumbnail) {\n\t\t\t\treturn setAttributes({ show_thumbnail: show_thumbnail });\n\t\t\t}\n\t\t});\n\n\t\tvar panelbody_header = wp.element.createElement(\n\t\t\tld_quiz_list_PanelBody,\n\t\t\t{\n\t\t\t\ttitle: ld_quiz_list_('Settings', 'learndash')\n\t\t\t},\n\t\t\twp.element.createElement(ld_quiz_list_TextControl, {\n\t\t\t\tlabel: ld_quiz_list_sprintf(ld_quiz_list_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('Enter single %1$s ID to limit listing. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: course_id || '',\n\t\t\t\tonChange: function onChange(course_id) {\n\t\t\t\t\treturn setAttributes({ course_id: course_id });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_quiz_list_TextControl, {\n\t\t\t\tlabel: ld_quiz_list_sprintf(ld_quiz_list_x('%s ID', 'Lesson ID', 'learndash'), ldlms_get_custom_label('lesson')),\n\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('Enter single %1$s ID to limit listing. Leave blank if used within a %2$s. Zero for global.', 'placeholders: lesson, course', 'learndash'), ldlms_get_custom_label('lesson'), ldlms_get_custom_label('lesson')),\n\t\t\t\tvalue: lesson_id || '',\n\t\t\t\tonChange: function onChange(lesson_id) {\n\t\t\t\t\treturn setAttributes({ lesson_id: lesson_id });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_quiz_list_SelectControl, {\n\t\t\t\tkey: 'orderby',\n\t\t\t\tlabel: ld_quiz_list_('Order by', 'learndash'),\n\t\t\t\tvalue: orderby,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: ld_quiz_list_('ID - Order by post id. (default)', 'learndash'),\n\t\t\t\t\tvalue: 'ID'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_quiz_list_('Title - Order by post title', 'learndash'),\n\t\t\t\t\tvalue: 'title'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_quiz_list_('Date - Order by post date', 'learndash'),\n\t\t\t\t\tvalue: 'date'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_quiz_list_('Menu - Order by Page Order Value', 'learndash'),\n\t\t\t\t\tvalue: 'menu_order'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(orderby) {\n\t\t\t\t\treturn setAttributes({ orderby: orderby });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_quiz_list_SelectControl, {\n\t\t\t\tkey: 'order',\n\t\t\t\tlabel: ld_quiz_list_('Order', 'learndash'),\n\t\t\t\tvalue: order,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: ld_quiz_list_('DESC - highest to lowest values (default)', 'learndash'),\n\t\t\t\t\tvalue: 'DESC'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_quiz_list_('ASC - lowest to highest values', 'learndash'),\n\t\t\t\t\tvalue: 'ASC'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(order) {\n\t\t\t\t\treturn setAttributes({ order: order });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_quiz_list_TextControl, {\n\t\t\t\tlabel: ld_quiz_list_sprintf(ld_quiz_list_x('%s per page', 'placeholder: Quizzess', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('Leave empty for default (%d) or 0 to show all items.', 'placeholder: default per page', 'learndash'), ldlms_get_per_page('per_page')),\n\t\t\t\tvalue: per_page || '',\n\t\t\t\ttype: 'number',\n\t\t\t\tonChange: function onChange(per_page) {\n\t\t\t\t\treturn setAttributes({ per_page: per_page });\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfield_show_content,\n\t\t\tfield_show_thumbnail\n\t\t);\n\n\t\tvar panel_quiz_category_section = '';\n\t\tif (ldlms_settings['settings']['quizzes_taxonomies']['ld_quiz_category'] === 'yes') {\n\t\t\tvar panel_quiz_category_section_open = false;\n\t\t\tif (quiz_category_name != '' || quiz_cat != '') {\n\t\t\t\tpanel_quiz_category_section_open = true;\n\t\t\t}\n\t\t\tpanel_quiz_category_section = wp.element.createElement(\n\t\t\t\tld_quiz_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_quiz_list_sprintf(ld_quiz_list_x('%s Category Settings', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\t\t\t\t\tinitialOpen: panel_quiz_category_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_quiz_list_TextControl, {\n\t\t\t\t\tlabel: ld_quiz_list_sprintf(ld_quiz_list_x('%s Category Slug', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\t\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('shows %s with mentioned category slug.', 'placeholder: quizzes', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\t\tvalue: quiz_category_name || '',\n\t\t\t\t\tonChange: function onChange(quiz_category_name) {\n\t\t\t\t\t\treturn setAttributes({ quiz_category_name: quiz_category_name });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_quiz_list_TextControl, {\n\t\t\t\t\tlabel: ld_quiz_list_sprintf(ld_quiz_list_x('%s Category ID', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\t\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('shows %s with mentioned category ID.', 'placeholder: Quizzes', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\t\tvalue: quiz_cat || '',\n\t\t\t\t\tonChange: function onChange(quiz_cat) {\n\t\t\t\t\t\treturn setAttributes({ quiz_cat: quiz_cat });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_quiz_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_quiz_list_sprintf(ld_quiz_list_x('%s Category Selector', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\t\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('shows a %s category dropdown.', 'placeholder: Quizzes', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\t\tchecked: !!quiz_categoryselector,\n\t\t\t\t\tonChange: function onChange(quiz_categoryselector) {\n\t\t\t\t\t\treturn setAttributes({ quiz_categoryselector: quiz_categoryselector });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_quiz_tag_section = '';\n\t\tif (ldlms_settings['settings']['quizzes_taxonomies']['ld_quiz_tag'] === 'yes') {\n\t\t\tvar panel_quiz_tag_section_open = false;\n\t\t\tif (quiz_tag != '' || quiz_tag_id != '') {\n\t\t\t\tpanel_quiz_tag_section_open = true;\n\t\t\t}\n\t\t\tpanel_quiz_tag_section = wp.element.createElement(\n\t\t\t\tld_quiz_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_quiz_list_sprintf(ld_quiz_list_x('%s Tag Settings', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\t\t\t\t\tinitialOpen: panel_quiz_tag_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_quiz_list_TextControl, {\n\t\t\t\t\tlabel: ld_quiz_list_sprintf(ld_quiz_list_x('%s Tag Slug', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\t\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('shows %s with mentioned tag slug.', 'placeholder: quizzes', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\t\tvalue: quiz_tag || '',\n\t\t\t\t\tonChange: function onChange(quiz_tag) {\n\t\t\t\t\t\treturn setAttributes({ quiz_tag: quiz_tag });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_quiz_list_TextControl, {\n\t\t\t\t\tlabel: ld_quiz_list_sprintf(ld_quiz_list_x('%s Tag ID', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\t\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('shows %s with mentioned tag ID.', 'placeholder: Quizzes', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\t\tvalue: quiz_tag_id || '',\n\t\t\t\t\tonChange: function onChange(quiz_tag_id) {\n\t\t\t\t\t\treturn setAttributes({ quiz_tag_id: quiz_tag_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_wp_category_section = '';\n\t\tif (ldlms_settings['settings']['quizzes_taxonomies']['wp_post_category'] === 'yes') {\n\t\t\tvar panel_wp_category_section_open = false;\n\t\t\tif (category_name != '' || cat != '') {\n\t\t\t\tpanel_wp_category_section_open = true;\n\t\t\t}\n\t\t\tpanel_wp_category_section = wp.element.createElement(\n\t\t\t\tld_quiz_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_quiz_list_('WP Category Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: panel_wp_category_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_quiz_list_TextControl, {\n\t\t\t\t\tlabel: ld_quiz_list_('WP Category Slug', 'learndash'),\n\t\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('shows %s with mentioned WP category slug.', 'placeholder: Quizzes', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\t\tvalue: category_name || '',\n\t\t\t\t\tonChange: function onChange(category_name) {\n\t\t\t\t\t\treturn setAttributes({ category_name: category_name });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_quiz_list_TextControl, {\n\t\t\t\t\tlabel: ld_quiz_list_sprintf(ld_quiz_list_x('%s Category ID', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\t\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('shows %s with mentioned category ID.', 'placeholder: Quizzes', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\t\tvalue: cat || '',\n\t\t\t\t\tonChange: function onChange(cat) {\n\t\t\t\t\t\treturn setAttributes({ cat: cat });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_quiz_list_ToggleControl, {\n\t\t\t\t\tlabel: ld_quiz_list_('WP Category Selector', 'learndash'),\n\t\t\t\t\thelp: ld_quiz_list_('shows a WP category dropdown.', 'learndash'),\n\t\t\t\t\tchecked: !!categoryselector,\n\t\t\t\t\tonChange: function onChange(categoryselector) {\n\t\t\t\t\t\treturn setAttributes({ categoryselector: categoryselector });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_wp_tag_section = '';\n\t\tif (ldlms_settings['settings']['quizzes_taxonomies']['wp_post_tag'] === 'yes') {\n\t\t\tvar panel_wp_tag_section_open = false;\n\t\t\tif (tag != '' || tag_id != '') {\n\t\t\t\tpanel_wp_tag_section_open = true;\n\t\t\t}\n\t\t\tpanel_wp_tag_section = wp.element.createElement(\n\t\t\t\tld_quiz_list_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_quiz_list_('WP Tag Settings', 'learndash'),\n\t\t\t\t\tinitialOpen: panel_wp_tag_section_open\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_quiz_list_TextControl, {\n\t\t\t\t\tlabel: ld_quiz_list_('WP Tag Slug', 'learndash'),\n\t\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('shows %s with mentioned WP tag slug.', 'placeholder: Quizzes', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\t\tvalue: tag || '',\n\t\t\t\t\tonChange: function onChange(tag) {\n\t\t\t\t\t\treturn setAttributes({ tag: tag });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_quiz_list_TextControl, {\n\t\t\t\t\tlabel: ld_quiz_list_('WP Tag ID', 'learndash'),\n\t\t\t\t\thelp: ld_quiz_list_sprintf(ld_quiz_list_x('shows %s with mentioned WP tag ID.', 'placeholder: Quizzes', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\t\tvalue: tag_id || '',\n\t\t\t\t\tonChange: function onChange(tag_id) {\n\t\t\t\t\t\treturn setAttributes({ tag_id: tag_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panel_preview = wp.element.createElement(\n\t\t\tld_quiz_list_PanelBody,\n\t\t\t{\n\t\t\t\ttitle: ld_quiz_list_('Preview', 'learndash'),\n\t\t\t\tinitialOpen: false\n\t\t\t},\n\t\t\twp.element.createElement(ld_quiz_list_ToggleControl, {\n\t\t\t\tlabel: ld_quiz_list_('Show Preview', 'learndash'),\n\t\t\t\tchecked: !!preview_show,\n\t\t\t\tonChange: function onChange(preview_show) {\n\t\t\t\t\treturn setAttributes({ preview_show: preview_show });\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tvar inspectorControls = wp.element.createElement(\n\t\t\tld_quiz_list_InspectorControls,\n\t\t\tnull,\n\t\t\tpanelbody_header,\n\t\t\tpanel_quiz_grid_section,\n\t\t\tpanel_quiz_category_section,\n\t\t\tpanel_quiz_tag_section,\n\t\t\tpanel_wp_category_section,\n\t\t\tpanel_wp_tag_section,\n\t\t\tpanel_preview\n\t\t);\n\n\t\tfunction do_serverside_render(attributes) {\n\t\t\tif (attributes.preview_show == true) {\n\t\t\t\treturn wp.element.createElement(ld_quiz_list_ServerSideRender, {\n\t\t\t\t\tblock: 'learndash/ld-quiz-list',\n\t\t\t\t\tattributes: attributes\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn ld_quiz_list_('[ld_quiz_list] shortcode output shown here', 'learndash');\n\t\t\t}\n\t\t}\n\n\t\treturn [inspectorControls, do_serverside_render(props.attributes)];\n\t},\n\n\tsave: function save(props) {}\n});\n// CONCATENATED MODULE: ./blocks/ld-course-progress/index.js\n/**\n * LearnDash Block ld-course-progress\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_course_progress_wp$i18n = wp.i18n,\n ld_course_progress_ = ld_course_progress_wp$i18n.__,\n ld_course_progress_x = ld_course_progress_wp$i18n._x,\n ld_course_progress_sprintf = ld_course_progress_wp$i18n.sprintf;\nvar ld_course_progress_registerBlockType = wp.blocks.registerBlockType;\nvar _wp$editor = wp.editor,\n InnerBlocks = _wp$editor.InnerBlocks,\n ld_course_progress_InspectorControls = _wp$editor.InspectorControls;\nvar ld_course_progress_wp$components = wp.components,\n ld_course_progress_ServerSideRender = ld_course_progress_wp$components.ServerSideRender,\n ld_course_progress_PanelBody = ld_course_progress_wp$components.PanelBody,\n ld_course_progress_ToggleControl = ld_course_progress_wp$components.ToggleControl,\n ld_course_progress_TextControl = ld_course_progress_wp$components.TextControl;\n\n\nvar el = wp.element.createElement;\n\nvar iconEl = el('svg', { width: 300, height: 300, viewBox: '0 0 50 10' }, el('path', { d: \"M47.1,0h-44c-1.7,0-3,1.3-3,3v4c0,1.7,1.3,3,3,3h44c1.7,0,3-1.3,3-3V3C50.1,1.3,48.7,0,47.1,0z M48.1,7c0,0.6-0.4,1-1,1h-12 V2h12c0.6,0,1,0.4,1,1V7z\" }));\n\nld_course_progress_registerBlockType('learndash/ld-course-progress', {\n title: ld_course_progress_sprintf(ld_course_progress_x('LearnDash %s Progress', 'LearnDash Course Progress', 'learndash'), ldlms_get_custom_label('course')),\n description: ld_course_progress_sprintf(ld_course_progress_x('This block displays users progress bar for the %1$s.', 'placeholders: course', 'learndash'), ldlms_get_custom_label('course')),\n icon: iconEl,\n category: 'learndash-blocks',\n example: {\n attributes: {\n example_show: 1\n }\n },\n supports: {\n customClassName: false\n },\n attributes: {\n course_id: {\n type: 'string',\n default: ''\n },\n user_id: {\n type: 'string',\n default: ''\n },\n preview_show: {\n type: 'boolean',\n default: 1\n },\n preview_user_id: {\n type: 'string'\n },\n preview_course_id: {\n type: 'string'\n },\n example_show: {\n type: 'boolean',\n default: 0\n }\n },\n edit: function edit(props) {\n var course_id = props.attributes.course_id,\n className = props.className;\n var _props$attributes = props.attributes,\n user_id = _props$attributes.user_id,\n preview_show = _props$attributes.preview_show,\n preview_user_id = _props$attributes.preview_user_id,\n preview_course_id = _props$attributes.preview_course_id,\n example_show = _props$attributes.example_show,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_course_progress_InspectorControls,\n null,\n wp.element.createElement(\n ld_course_progress_PanelBody,\n {\n title: ld_course_progress_('Settings', 'learndash')\n },\n wp.element.createElement(ld_course_progress_TextControl, {\n label: ld_course_progress_sprintf(ld_course_progress_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_course_progress_sprintf(ld_course_progress_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n value: course_id || '',\n onChange: function onChange(course_id) {\n return setAttributes({ course_id: course_id });\n }\n }),\n wp.element.createElement(ld_course_progress_TextControl, {\n label: ld_course_progress_('User ID', 'learndash'),\n help: ld_course_progress_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: user_id || '',\n onChange: function onChange(user_id) {\n return setAttributes({ user_id: user_id });\n }\n })\n ),\n wp.element.createElement(\n ld_course_progress_PanelBody,\n {\n title: ld_course_progress_('Preview', 'learndash'),\n initialOpen: false\n },\n wp.element.createElement(ld_course_progress_ToggleControl, {\n label: ld_course_progress_('Show Preview', 'learndash'),\n checked: !!preview_show,\n onChange: function onChange(preview_show) {\n return setAttributes({ preview_show: preview_show });\n }\n }),\n wp.element.createElement(ld_course_progress_TextControl, {\n label: ld_course_progress_sprintf(ld_course_progress_x('%s ID', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_course_progress_sprintf(ld_course_progress_x('Enter a %s ID to test preview', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n value: preview_course_id || '',\n type: 'number',\n onChange: function onChange(preview_course_id) {\n return setAttributes({ preview_course_id: preview_course_id });\n }\n }),\n wp.element.createElement(ld_course_progress_TextControl, {\n label: ld_course_progress_('User ID', 'learndash'),\n help: ld_course_progress_('Enter a User ID to test preview', 'learndash'),\n value: preview_user_id || '',\n type: 'number',\n onChange: function onChange(preview_user_id) {\n return setAttributes({ preview_user_id: preview_user_id });\n }\n })\n )\n );\n\n function do_serverside_render(attributes) {\n if (attributes.preview_show == true) {\n // We add the meta so the server knowns what is being edited.\n attributes.meta = ldlms_get_post_edit_meta();\n\n return wp.element.createElement(ld_course_progress_ServerSideRender, {\n block: 'learndash/ld-course-progress',\n attributes: attributes\n });\n } else {\n return ld_course_progress_('[learndash_course_progress] shortcode output shown here', 'learndash');\n }\n }\n\n return [inspectorControls, do_serverside_render(props.attributes)];\n },\n\n save: function save(props) {\n // Delete meta from props to prevent it being saved.\n delete props.attributes.meta;\n }\n});\n// CONCATENATED MODULE: ./blocks/ld-visitor/index.js\n\n/**\n * LearnDash Block ld-visitor\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_visitor_wp$i18n = wp.i18n,\n ld_visitor_ = ld_visitor_wp$i18n.__,\n ld_visitor_x = ld_visitor_wp$i18n._x,\n ld_visitor_sprintf = ld_visitor_wp$i18n.sprintf;\nvar ld_visitor_registerBlockType = wp.blocks.registerBlockType;\nvar ld_visitor_wp$editor = wp.editor,\n ld_visitor_InnerBlocks = ld_visitor_wp$editor.InnerBlocks,\n ld_visitor_InspectorControls = ld_visitor_wp$editor.InspectorControls;\nvar ld_visitor_wp$components = wp.components,\n ld_visitor_PanelBody = ld_visitor_wp$components.PanelBody,\n ld_visitor_TextControl = ld_visitor_wp$components.TextControl,\n ld_visitor_ToggleControl = ld_visitor_wp$components.ToggleControl;\n\n\nld_visitor_registerBlockType('learndash/ld-visitor', {\n title: ld_visitor_('LearnDash Visitor', 'learndash'),\n description: ld_visitor_sprintf(ld_visitor_x('This block shows the content if the user is not enrolled into the %s.', 'placeholders: course', 'learndash'), ldlms_get_custom_label('course')),\n icon: 'visibility',\n supports: {\n customClassName: false\n },\n category: 'learndash-blocks',\n attributes: {\n course_id: {\n type: 'string',\n default: ''\n },\n autop: {\n type: 'boolean',\n default: true\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n course_id = _props$attributes.course_id,\n autop = _props$attributes.autop,\n className = props.className,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_visitor_InspectorControls,\n null,\n wp.element.createElement(\n ld_visitor_PanelBody,\n {\n title: ld_visitor_('Settings', 'learndash')\n },\n wp.element.createElement(ld_visitor_TextControl, {\n label: ld_visitor_sprintf(ld_visitor_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_visitor_sprintf(ld_visitor_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n value: course_id || '',\n onChange: function onChange(course_id) {\n return setAttributes({ course_id: course_id });\n }\n }),\n wp.element.createElement(ld_visitor_ToggleControl, {\n label: ld_visitor_('Auto Paragraph', 'learndash'),\n checked: !!autop,\n onChange: function onChange(autop) {\n return setAttributes({ autop: autop });\n }\n })\n )\n );\n\n var ld_block_error_message = '';\n var preview_course_id = ldlms_get_integer_value(course_id);\n\n if (preview_course_id === 0) {\n preview_course_id = ldlms_get_post_edit_meta('course_id');\n preview_course_id = ldlms_get_integer_value(preview_course_id);\n\n if (preview_course_id == 0) {\n ld_block_error_message = ld_visitor_sprintf(ld_visitor_x('%1$s ID is required when not used within a %2$s.', 'placeholders: Course, Course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course'));\n }\n }\n\n if (ld_block_error_message.length) {\n ld_block_error_message = wp.element.createElement(\n 'span',\n { className: 'learndash-block-error-message' },\n ld_block_error_message\n );\n }\n\n var outputBlock = wp.element.createElement(\n 'div',\n { className: className },\n wp.element.createElement(\n 'div',\n { className: 'learndash-block-inner' },\n ld_block_error_message,\n wp.element.createElement(ld_visitor_InnerBlocks, null)\n )\n );\n\n return [inspectorControls, outputBlock];\n },\n save: function save(props) {\n return wp.element.createElement(ld_visitor_InnerBlocks.Content, null);\n }\n});\n// CONCATENATED MODULE: ./blocks/ld-student/index.js\n/**\n * LearnDash Block ld-student\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_student_wp$i18n = wp.i18n,\n ld_student_ = ld_student_wp$i18n.__,\n ld_student_x = ld_student_wp$i18n._x,\n ld_student_sprintf = ld_student_wp$i18n.sprintf;\nvar ld_student_registerBlockType = wp.blocks.registerBlockType;\nvar ld_student_wp$editor = wp.editor,\n ld_student_InnerBlocks = ld_student_wp$editor.InnerBlocks,\n ld_student_InspectorControls = ld_student_wp$editor.InspectorControls;\nvar ld_student_wp$components = wp.components,\n ld_student_PanelBody = ld_student_wp$components.PanelBody,\n ld_student_TextControl = ld_student_wp$components.TextControl,\n ld_student_ToggleControl = ld_student_wp$components.ToggleControl;\n\n\nld_student_registerBlockType('learndash/ld-student', {\n title: ld_student_('LearnDash Student', 'learndash'),\n description: ld_student_sprintf(ld_student_x('This block shows the content if the user is enrolled in the %s.', 'placeholders: course', 'learndash'), ldlms_get_custom_label('course')),\n icon: 'welcome-learn-more',\n category: 'learndash-blocks',\n supports: {\n customClassName: false\n },\n attributes: {\n course_id: {\n type: 'string',\n default: ''\n },\n user_id: {\n type: 'string',\n default: ''\n },\n autop: {\n type: 'boolean',\n default: true\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n course_id = _props$attributes.course_id,\n user_id = _props$attributes.user_id,\n autop = _props$attributes.autop,\n className = props.className,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_student_InspectorControls,\n null,\n wp.element.createElement(\n ld_student_PanelBody,\n {\n title: ld_student_('Settings', 'learndash')\n },\n wp.element.createElement(ld_student_TextControl, {\n label: ld_student_sprintf(ld_student_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_student_sprintf(ld_student_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n value: course_id || '',\n onChange: function onChange(course_id) {\n return setAttributes({ course_id: course_id });\n }\n }),\n wp.element.createElement(ld_student_TextControl, {\n label: ld_student_('User ID', 'learndash'),\n help: ld_student_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: user_id || '',\n onChange: function onChange(user_id) {\n return setAttributes({ user_id: user_id });\n }\n }),\n wp.element.createElement(ld_student_ToggleControl, {\n label: ld_student_('Auto Paragraph', 'learndash'),\n checked: !!autop,\n onChange: function onChange(autop) {\n return setAttributes({ autop: autop });\n }\n })\n )\n );\n\n var ld_block_error_message = '';\n var preview_course_id = ldlms_get_integer_value(course_id);\n\n if (preview_course_id === 0) {\n preview_course_id = ldlms_get_post_edit_meta('course_id');\n preview_course_id = ldlms_get_integer_value(preview_course_id);\n\n if (preview_course_id == 0) {\n ld_block_error_message = ld_student_sprintf(ld_student_x('%1$s ID is required when not used within a %2$s.', 'placeholders: Course, Course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course'));\n }\n }\n\n if (ld_block_error_message.length) {\n ld_block_error_message = wp.element.createElement(\n 'span',\n { className: 'learndash-block-error-message' },\n ld_block_error_message\n );\n }\n\n var outputBlock = wp.element.createElement(\n 'div',\n { className: className },\n wp.element.createElement(\n 'div',\n { className: 'learndash-block-inner' },\n ld_block_error_message,\n wp.element.createElement(ld_student_InnerBlocks, null)\n )\n );\n\n return [inspectorControls, outputBlock];\n },\n\n save: function save(props) {\n return wp.element.createElement(ld_student_InnerBlocks.Content, null);\n }\n});\n// CONCATENATED MODULE: ./blocks/ld-course-complete/index.js\n/**\n * LearnDash Block ld-course-complete\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_course_complete_wp$i18n = wp.i18n,\n ld_course_complete_ = ld_course_complete_wp$i18n.__,\n ld_course_complete_x = ld_course_complete_wp$i18n._x,\n ld_course_complete_sprintf = ld_course_complete_wp$i18n.sprintf;\nvar ld_course_complete_registerBlockType = wp.blocks.registerBlockType;\nvar ld_course_complete_wp$editor = wp.editor,\n ld_course_complete_InnerBlocks = ld_course_complete_wp$editor.InnerBlocks,\n ld_course_complete_InspectorControls = ld_course_complete_wp$editor.InspectorControls;\nvar ld_course_complete_wp$components = wp.components,\n ld_course_complete_PanelBody = ld_course_complete_wp$components.PanelBody,\n ld_course_complete_TextControl = ld_course_complete_wp$components.TextControl,\n ld_course_complete_ToggleControl = ld_course_complete_wp$components.ToggleControl;\n\n\nld_course_complete_registerBlockType('learndash/ld-course-complete', {\n title: ld_course_complete_sprintf(ld_course_complete_x('LearnDash %s Complete', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n description: ld_course_complete_sprintf(ld_course_complete_x('This block shows the content if the user is enrolled into the %s and it is completed.', 'placeholders: course', 'learndash'), ldlms_get_custom_label('course')),\n icon: 'star-filled',\n category: 'learndash-blocks',\n supports: {\n customClassName: false\n },\n attributes: {\n course_id: {\n type: 'string',\n default: ''\n },\n user_id: {\n type: 'string',\n default: ''\n },\n autop: {\n type: 'boolean',\n default: true\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n course_id = _props$attributes.course_id,\n user_id = _props$attributes.user_id,\n autop = _props$attributes.autop,\n className = props.className,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_course_complete_InspectorControls,\n null,\n wp.element.createElement(\n ld_course_complete_PanelBody,\n {\n title: ld_course_complete_('Settings', 'learndash')\n },\n wp.element.createElement(ld_course_complete_TextControl, {\n label: ld_course_complete_sprintf(ld_course_complete_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_course_complete_sprintf(ld_course_complete_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n value: course_id || '',\n onChange: function onChange(course_id) {\n return setAttributes({ course_id: course_id });\n }\n }),\n wp.element.createElement(ld_course_complete_TextControl, {\n label: ld_course_complete_('User ID', 'learndash'),\n help: ld_course_complete_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: user_id || '',\n onChange: function onChange(user_id) {\n return setAttributes({ user_id: user_id });\n }\n }),\n wp.element.createElement(ld_course_complete_ToggleControl, {\n label: ld_course_complete_('Auto Paragraph', 'learndash'),\n checked: !!autop,\n onChange: function onChange(autop) {\n return setAttributes({ autop: autop });\n }\n })\n )\n );\n\n var ld_block_error_message = '';\n var preview_course_id = ldlms_get_integer_value(course_id);\n if (preview_course_id === 0) {\n preview_course_id = ldlms_get_post_edit_meta('course_id');\n preview_course_id = ldlms_get_integer_value(preview_course_id);\n\n if (preview_course_id == 0) {\n ld_block_error_message = ld_course_complete_sprintf(ld_course_complete_x('%1$s ID is required when not used within a %2$s.', 'placeholders: Course, Course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course'));\n }\n }\n\n if (ld_block_error_message.length) {\n ld_block_error_message = wp.element.createElement(\n 'span',\n { className: 'learndash-block-error-message' },\n ld_block_error_message\n );\n }\n\n var outputBlock = wp.element.createElement(\n 'div',\n { className: className },\n wp.element.createElement(\n 'div',\n { className: 'learndash-block-inner' },\n ld_block_error_message,\n wp.element.createElement(ld_course_complete_InnerBlocks, null)\n )\n );\n\n return [inspectorControls, outputBlock];\n },\n\n save: function save(props) {\n return wp.element.createElement(ld_course_complete_InnerBlocks.Content, null);\n }\n});\n// CONCATENATED MODULE: ./blocks/ld-course-inprogress/index.js\n/**\n * LearnDash Block ld-course-inprogress\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_course_inprogress_wp$i18n = wp.i18n,\n ld_course_inprogress_ = ld_course_inprogress_wp$i18n.__,\n ld_course_inprogress_x = ld_course_inprogress_wp$i18n._x,\n ld_course_inprogress_sprintf = ld_course_inprogress_wp$i18n.sprintf;\nvar ld_course_inprogress_registerBlockType = wp.blocks.registerBlockType;\nvar ld_course_inprogress_wp$editor = wp.editor,\n ld_course_inprogress_InnerBlocks = ld_course_inprogress_wp$editor.InnerBlocks,\n ld_course_inprogress_InspectorControls = ld_course_inprogress_wp$editor.InspectorControls;\nvar ld_course_inprogress_wp$components = wp.components,\n ld_course_inprogress_PanelBody = ld_course_inprogress_wp$components.PanelBody,\n ld_course_inprogress_TextControl = ld_course_inprogress_wp$components.TextControl,\n ld_course_inprogress_ToggleControl = ld_course_inprogress_wp$components.ToggleControl;\n\n\nld_course_inprogress_registerBlockType('learndash/ld-course-inprogress', {\n title: ld_course_inprogress_sprintf(ld_course_inprogress_x('LearnDash %s In Progress', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n description: ld_course_inprogress_sprintf(ld_course_inprogress_x('This block shows the content if the user is enrolled into the %s but not yet completed.', 'placeholder: course', 'learndash'), ldlms_get_custom_label('course')),\n icon: 'star-half',\n category: 'learndash-blocks',\n supports: {\n customClassName: false\n },\n attributes: {\n course_id: {\n type: 'string',\n default: ''\n },\n user_id: {\n type: 'string',\n default: ''\n },\n autop: {\n type: 'boolean',\n default: true\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n course_id = _props$attributes.course_id,\n user_id = _props$attributes.user_id,\n autop = _props$attributes.autop,\n className = props.className,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_course_inprogress_InspectorControls,\n null,\n wp.element.createElement(\n ld_course_inprogress_PanelBody,\n {\n title: ld_course_inprogress_('Settings', 'learndash')\n },\n wp.element.createElement(ld_course_inprogress_TextControl, {\n label: ld_course_inprogress_sprintf(ld_course_inprogress_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_course_inprogress_sprintf(ld_course_inprogress_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n value: course_id || '',\n onChange: function onChange(course_id) {\n return setAttributes({ course_id: course_id });\n }\n }),\n wp.element.createElement(ld_course_inprogress_TextControl, {\n label: ld_course_inprogress_('User ID', 'learndash'),\n help: ld_course_inprogress_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: user_id || '',\n onChange: function onChange(user_id) {\n return setAttributes({ user_id: user_id });\n }\n }),\n wp.element.createElement(ld_course_inprogress_ToggleControl, {\n label: ld_course_inprogress_('Auto Paragraph', 'learndash'),\n checked: !!autop,\n onChange: function onChange(autop) {\n return setAttributes({ autop: autop });\n }\n })\n )\n );\n\n var ld_block_error_message = '';\n var preview_course_id = ldlms_get_integer_value(course_id);\n\n if (preview_course_id === 0) {\n preview_course_id = ldlms_get_post_edit_meta('course_id');\n preview_course_id = ldlms_get_integer_value(preview_course_id);\n\n if (preview_course_id == 0) {\n ld_block_error_message = ld_course_inprogress_sprintf(ld_course_inprogress_x('%1$s ID is required when not used within a %2$s.', 'placeholders: Course, Course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course'));\n }\n }\n\n if (ld_block_error_message.length) {\n ld_block_error_message = wp.element.createElement(\n 'span',\n { className: 'learndash-block-error-message' },\n ld_block_error_message\n );\n }\n\n var outputBlock = wp.element.createElement(\n 'div',\n { className: className },\n wp.element.createElement(\n 'div',\n { className: 'learndash-block-inner' },\n ld_block_error_message,\n wp.element.createElement(ld_course_inprogress_InnerBlocks, null)\n )\n );\n\n return [inspectorControls, outputBlock];\n },\n\n save: function save(props) {\n return wp.element.createElement(ld_course_inprogress_InnerBlocks.Content, null);\n }\n});\n// CONCATENATED MODULE: ./blocks/ld-course-notstarted/index.js\n/**\n * LearnDash Block ld-course-notstarted\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_course_notstarted_wp$i18n = wp.i18n,\n ld_course_notstarted_ = ld_course_notstarted_wp$i18n.__,\n ld_course_notstarted_x = ld_course_notstarted_wp$i18n._x,\n ld_course_notstarted_sprintf = ld_course_notstarted_wp$i18n.sprintf;\nvar ld_course_notstarted_registerBlockType = wp.blocks.registerBlockType;\nvar ld_course_notstarted_wp$editor = wp.editor,\n ld_course_notstarted_InnerBlocks = ld_course_notstarted_wp$editor.InnerBlocks,\n ld_course_notstarted_InspectorControls = ld_course_notstarted_wp$editor.InspectorControls;\nvar ld_course_notstarted_wp$components = wp.components,\n ld_course_notstarted_PanelBody = ld_course_notstarted_wp$components.PanelBody,\n ld_course_notstarted_TextControl = ld_course_notstarted_wp$components.TextControl,\n ld_course_notstarted_ToggleControl = ld_course_notstarted_wp$components.ToggleControl;\n\n\nld_course_notstarted_registerBlockType('learndash/ld-course-notstarted', {\n title: ld_course_notstarted_sprintf(ld_course_notstarted_x('LearnDash %s Not Started', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n description: ld_course_notstarted_sprintf(ld_course_notstarted_x('This block shows the content if the user is enrolled into the %s but not yet started.', 'placeholders: course', 'learndash'), ldlms_get_custom_label('course')),\n icon: 'star-empty',\n category: 'learndash-blocks',\n supports: {\n customClassName: false\n },\n attributes: {\n course_id: {\n type: 'string',\n default: ''\n },\n user_id: {\n type: 'string',\n default: ''\n },\n autop: {\n type: 'boolean',\n default: true\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n course_id = _props$attributes.course_id,\n user_id = _props$attributes.user_id,\n autop = _props$attributes.autop,\n className = props.className,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_course_notstarted_InspectorControls,\n null,\n wp.element.createElement(\n ld_course_notstarted_PanelBody,\n {\n title: ld_course_notstarted_('Settings', 'learndash')\n },\n wp.element.createElement(ld_course_notstarted_TextControl, {\n label: ld_course_notstarted_sprintf(ld_course_notstarted_x('%s ID', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_course_notstarted_sprintf(ld_course_notstarted_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n value: course_id || '',\n onChange: function onChange(course_id) {\n return setAttributes({ course_id: course_id });\n }\n }),\n wp.element.createElement(ld_course_notstarted_TextControl, {\n label: ld_course_notstarted_('User ID', 'learndash'),\n help: ld_course_notstarted_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: user_id || '',\n onChange: function onChange(user_id) {\n return setAttributes({ user_id: user_id });\n }\n }),\n wp.element.createElement(ld_course_notstarted_ToggleControl, {\n label: ld_course_notstarted_('Auto Paragraph', 'learndash'),\n checked: !!autop,\n onChange: function onChange(autop) {\n return setAttributes({ autop: autop });\n }\n })\n )\n );\n\n var ld_block_error_message = '';\n var preview_course_id = ldlms_get_integer_value(course_id);\n\n if (preview_course_id === 0) {\n preview_course_id = ldlms_get_post_edit_meta('course_id');\n preview_course_id = ldlms_get_integer_value(preview_course_id);\n\n if (preview_course_id == 0) {\n ld_block_error_message = ld_course_notstarted_sprintf(ld_course_notstarted_x('%1$s ID is required when not used within a %2$s.', 'placeholders: Course, Course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course'));\n }\n }\n\n if (ld_block_error_message.length) {\n ld_block_error_message = wp.element.createElement(\n 'span',\n { className: 'learndash-block-error-message' },\n ld_block_error_message\n );\n }\n\n var outputBlock = wp.element.createElement(\n 'div',\n { className: className },\n wp.element.createElement(\n 'div',\n { className: 'learndash-block-inner' },\n ld_block_error_message,\n wp.element.createElement(ld_course_notstarted_InnerBlocks, null)\n )\n );\n\n return [inspectorControls, outputBlock];\n },\n\n save: function save(props) {\n return wp.element.createElement(ld_course_notstarted_InnerBlocks.Content, null);\n }\n});\n// CONCATENATED MODULE: ./blocks/ld-course-resume/index.js\n/**\n * LearnDash Block ld-certificate\n *\n * @since 3.2\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_course_resume_wp$i18n = wp.i18n,\n ld_course_resume_ = ld_course_resume_wp$i18n.__,\n ld_course_resume_x = ld_course_resume_wp$i18n._x,\n ld_course_resume_sprintf = ld_course_resume_wp$i18n.sprintf;\nvar ld_course_resume_registerBlockType = wp.blocks.registerBlockType;\nvar ld_course_resume_InspectorControls = wp.editor.InspectorControls;\nvar ld_course_resume_wp$components = wp.components,\n ld_course_resume_ServerSideRender = ld_course_resume_wp$components.ServerSideRender,\n ld_course_resume_PanelBody = ld_course_resume_wp$components.PanelBody,\n ld_course_resume_TextControl = ld_course_resume_wp$components.TextControl,\n ld_course_resume_SelectControl = ld_course_resume_wp$components.SelectControl,\n ld_course_resume_ToggleControl = ld_course_resume_wp$components.ToggleControl;\n\n\nld_course_resume_registerBlockType('learndash/ld-course-resume', {\n title: ld_course_resume_sprintf(ld_course_resume_x('%s Resume', 'Course', 'learndash'), ldlms_get_custom_label('course')),\n description: ld_course_resume_sprintf(ld_course_resume_x('Return to %s link/button.', 'Course', 'learndash'), ldlms_get_custom_label('course')),\n icon: 'welcome-learn-more',\n category: 'learndash-blocks',\n supports: {\n customClassName: false\n },\n attributes: {\n course_id: {\n type: 'string',\n default: ''\n },\n user_id: {\n type: 'string',\n default: ''\n },\n label: {\n type: 'string',\n default: ''\n },\n html_class: {\n type: 'string',\n default: ''\n },\n button: {\n type: 'string',\n default: ''\n },\n preview_show: {\n type: 'boolean',\n default: 1\n },\n preview_course_id: {\n type: 'string',\n default: ''\n },\n preview_user_id: {\n type: 'string',\n default: ''\n },\n example_show: {\n type: 'boolean',\n default: 0\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n course_id = _props$attributes.course_id,\n user_id = _props$attributes.user_id,\n label = _props$attributes.label,\n html_class = _props$attributes.html_class,\n button = _props$attributes.button,\n preview_show = _props$attributes.preview_show,\n preview_course_id = _props$attributes.preview_course_id,\n preview_user_id = _props$attributes.preview_user_id,\n example_show = _props$attributes.example_show,\n className = props.className,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_course_resume_InspectorControls,\n null,\n wp.element.createElement(\n ld_course_resume_PanelBody,\n {\n title: ld_course_resume_('Settings', 'learndash')\n },\n wp.element.createElement(ld_course_resume_TextControl, {\n label: ld_course_resume_sprintf(ld_course_resume_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_course_resume_sprintf(ld_course_resume_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n value: course_id || '',\n onChange: function onChange(course_id) {\n return setAttributes({ course_id: course_id });\n }\n }),\n wp.element.createElement(ld_course_resume_TextControl, {\n label: ld_course_resume_('User ID', 'learndash'),\n help: ld_course_resume_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: user_id || '',\n onChange: function onChange(user_id) {\n return setAttributes({ user_id: user_id });\n }\n }),\n wp.element.createElement(ld_course_resume_SelectControl, {\n key: 'button',\n label: ld_course_resume_('Show as button', 'learndash'),\n value: button,\n options: [{\n label: ld_course_resume_('Yes', 'learndash'),\n value: 'true'\n }, {\n label: ld_course_resume_('No', 'learndash'),\n value: 'false'\n }],\n onChange: function onChange(button) {\n return setAttributes({ button: button });\n }\n }),\n wp.element.createElement(ld_course_resume_TextControl, {\n label: ld_course_resume_('Label', 'learndash'),\n help: ld_course_resume_('Label for link shown to user', 'learndash'),\n value: label || '',\n onChange: function onChange(label) {\n return setAttributes({ label: label });\n }\n }),\n wp.element.createElement(ld_course_resume_TextControl, {\n key: 'html_class',\n label: ld_course_resume_('Class', 'learndash'),\n help: ld_course_resume_('HTML class for link element', 'learndash'),\n value: html_class || '',\n onChange: function onChange(html_class) {\n return setAttributes({ html_class: html_class });\n }\n })\n ),\n wp.element.createElement(\n ld_course_resume_PanelBody,\n {\n title: ld_course_resume_('Preview', 'learndash'),\n initialOpen: false\n },\n wp.element.createElement(ld_course_resume_ToggleControl, {\n label: ld_course_resume_('Show Preview', 'learndash'),\n checked: !!preview_show,\n onChange: function onChange(preview_show) {\n return setAttributes({ preview_show: preview_show });\n }\n }),\n wp.element.createElement(ld_course_resume_TextControl, {\n label: ld_course_resume_sprintf(ld_course_resume_x('%s ID', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_course_resume_sprintf(ld_course_resume_x('Enter a %s ID to test preview', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n value: preview_course_id || '',\n type: 'number',\n onChange: function onChange(preview_course_id) {\n return setAttributes({ preview_course_id: preview_course_id });\n }\n }),\n wp.element.createElement(ld_course_resume_TextControl, {\n label: ld_course_resume_('User ID', 'learndash'),\n help: ld_course_resume_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: preview_user_id || '',\n onChange: function onChange(preview_user_id) {\n return setAttributes({ preview_user_id: preview_user_id });\n }\n })\n )\n );\n\n function do_serverside_render(attributes) {\n if (attributes.preview_show == true) {\n return wp.element.createElement(ld_course_resume_ServerSideRender, {\n block: 'learndash/ld-course-resume',\n attributes: attributes\n });\n } else {\n return ld_course_resume_('[ld_course_resume] shortcode output shown here', 'learndash');\n }\n }\n\n return [inspectorControls, do_serverside_render(props.attributes)];\n }\n});\n// CONCATENATED MODULE: ./blocks/ld-course-info/index.js\n/**\n * LearnDash Block ld-course-info\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_course_info_wp$i18n = wp.i18n,\n ld_course_info_ = ld_course_info_wp$i18n.__,\n ld_course_info_x = ld_course_info_wp$i18n._x,\n ld_course_info_sprintf = ld_course_info_wp$i18n.sprintf;\nvar ld_course_info_registerBlockType = wp.blocks.registerBlockType;\nvar ld_course_info_InspectorControls = wp.editor.InspectorControls;\nvar ld_course_info_wp$components = wp.components,\n ld_course_info_ServerSideRender = ld_course_info_wp$components.ServerSideRender,\n ld_course_info_PanelBody = ld_course_info_wp$components.PanelBody,\n ld_course_info_RangeControl = ld_course_info_wp$components.RangeControl,\n ld_course_info_SelectControl = ld_course_info_wp$components.SelectControl,\n ld_course_info_ToggleControl = ld_course_info_wp$components.ToggleControl,\n ld_course_info_TextControl = ld_course_info_wp$components.TextControl;\n\n\nld_course_info_registerBlockType('learndash/ld-course-info', {\n\ttitle: ld_course_info_sprintf(ld_course_info_x('LearnDash %s Info [ld_course_info]', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\tdescription: ld_course_info_sprintf(ld_course_info_x('This block shows the %s and progress for the user.', 'placeholders: courses', 'learndash'), ldlms_get_custom_label('course')),\n\ticon: 'analytics',\n\tcategory: 'learndash-blocks',\n\texample: {\n\t\tattributes: {\n\t\t\texample_show: 1\n\t\t}\n\t},\n\tsupports: {\n\t\tcustomClassName: false\n\t},\n\tattributes: {\n\t\tuser_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 0\n\t\t},\n\t\tregistered_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tregistered_show_thumbnail: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tregistered_num: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tregistered_orderby: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'ID'\n\t\t},\n\t\tregistered_order: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'ASC'\n\t\t},\n\t\tprogress_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tprogress_num: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tprogress_orderby: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'ID'\n\t\t},\n\t\tprogress_order: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'ASC'\n\t\t},\n\t\tquiz_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tquiz_num: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tquiz_orderby: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'taken'\n\t\t},\n\t\tquiz_order: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'DESC'\n\t\t},\n\t\tpreview_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tpreview_user_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\texample_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 0\n\t\t},\n\t\tmeta: {\n\t\t\ttype: 'object'\n\t\t}\n\t},\n\tedit: function edit(props) {\n\t\tvar _props$attributes = props.attributes,\n\t\t user_id = _props$attributes.user_id,\n\t\t registered_show = _props$attributes.registered_show,\n\t\t registered_show_thumbnail = _props$attributes.registered_show_thumbnail,\n\t\t registered_num = _props$attributes.registered_num,\n\t\t registered_orderby = _props$attributes.registered_orderby,\n\t\t registered_order = _props$attributes.registered_order,\n\t\t progress_show = _props$attributes.progress_show,\n\t\t progress_num = _props$attributes.progress_num,\n\t\t progress_orderby = _props$attributes.progress_orderby,\n\t\t progress_order = _props$attributes.progress_order,\n\t\t quiz_show = _props$attributes.quiz_show,\n\t\t quiz_num = _props$attributes.quiz_num,\n\t\t quiz_orderby = _props$attributes.quiz_orderby,\n\t\t quiz_order = _props$attributes.quiz_order,\n\t\t preview_user_id = _props$attributes.preview_user_id,\n\t\t preview_show = _props$attributes.preview_show,\n\t\t setAttributes = props.setAttributes;\n\n\n\t\tvar panelbody_header = wp.element.createElement(\n\t\t\tld_course_info_PanelBody,\n\t\t\t{\n\t\t\t\ttitle: ld_course_info_('Settings', 'learndash')\n\t\t\t},\n\t\t\twp.element.createElement(ld_course_info_TextControl, {\n\t\t\t\tlabel: ld_course_info_('User ID', 'learndash'),\n\t\t\t\thelp: ld_course_info_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n\t\t\t\tvalue: user_id || '',\n\t\t\t\tonChange: function onChange(user_id) {\n\t\t\t\t\treturn setAttributes({ user_id: user_id });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_course_info_ToggleControl, {\n\t\t\t\tlabel: ld_course_info_sprintf(ld_course_info_x('Show Registered %s', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\tchecked: !!registered_show,\n\t\t\t\tonChange: function onChange(registered_show) {\n\t\t\t\t\treturn setAttributes({ registered_show: registered_show });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_course_info_ToggleControl, {\n\t\t\t\tlabel: ld_course_info_sprintf(ld_course_info_x('Show %s Progess', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\tchecked: !!progress_show,\n\t\t\t\tonChange: function onChange(progress_show) {\n\t\t\t\t\treturn setAttributes({ progress_show: progress_show });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_course_info_ToggleControl, {\n\t\t\t\tlabel: ld_course_info_sprintf(ld_course_info_x('Show %s Attempts', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\t\t\t\tchecked: !!quiz_show,\n\t\t\t\tonChange: function onChange(quiz_show) {\n\t\t\t\t\treturn setAttributes({ quiz_show: quiz_show });\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tvar panelbody_registered = '';\n\t\tif (registered_show === true) {\n\t\t\tpanelbody_registered = wp.element.createElement(\n\t\t\t\tld_course_info_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_info_sprintf(ld_course_info_x('Registered %s', 'placeholder: Courses', 'learndash'), ldlms_get_custom_label('courses')),\n\t\t\t\t\tinitialOpen: false\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_info_ToggleControl, {\n\t\t\t\t\tlabel: ld_course_info_('Show Thumbnail', 'learndash'),\n\t\t\t\t\tchecked: !!registered_show_thumbnail,\n\t\t\t\t\tonChange: function onChange(registered_show_thumbnail) {\n\t\t\t\t\t\treturn setAttributes({ registered_show_thumbnail: registered_show_thumbnail });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_info_TextControl, {\n\t\t\t\t\tlabel: ld_course_info_('per page', 'learndash'),\n\t\t\t\t\thelp: ld_course_info_sprintf(ld_course_info_x('Leave empty for default (%d) or 0 to show all items.', 'placeholder: default per page', 'learndash'), ldlms_get_per_page('per_page')),\n\t\t\t\t\tvalue: registered_num || '',\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 100,\n\t\t\t\t\tonChange: function onChange(registered_num) {\n\t\t\t\t\t\treturn setAttributes({ registered_num: registered_num });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_info_SelectControl, {\n\t\t\t\t\tkey: 'registered_orderby',\n\t\t\t\t\tlabel: ld_course_info_('Order by', 'learndash'),\n\t\t\t\t\tvalue: registered_orderby,\n\t\t\t\t\toptions: [{\n\t\t\t\t\t\tlabel: ld_course_info_('ID - Order by post id. (default)', 'learndash'),\n\t\t\t\t\t\tvalue: 'ID'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('Title - Order by post title', 'learndash'),\n\t\t\t\t\t\tvalue: 'title'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('Date - Order by post date', 'learndash'),\n\t\t\t\t\t\tvalue: 'date'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('Menu - Order by Page Order Value', 'learndash'),\n\t\t\t\t\t\tvalue: 'menu_order'\n\t\t\t\t\t}],\n\t\t\t\t\tonChange: function onChange(registered_orderby) {\n\t\t\t\t\t\treturn setAttributes({ registered_orderby: registered_orderby });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_info_SelectControl, {\n\t\t\t\t\tkey: 'registered_order',\n\t\t\t\t\tlabel: ld_course_info_('Order', 'learndash'),\n\t\t\t\t\tvalue: registered_order,\n\t\t\t\t\toptions: [{\n\t\t\t\t\t\tlabel: ld_course_info_('DESC - highest to lowest values (default)', 'learndash'),\n\t\t\t\t\t\tvalue: 'DESC'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('ASC - lowest to highest values', 'learndash'),\n\t\t\t\t\t\tvalue: 'ASC'\n\t\t\t\t\t}],\n\t\t\t\t\tonChange: function onChange(registered_order) {\n\t\t\t\t\t\treturn setAttributes({ registered_order: registered_order });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panelbody_progress = '';\n\t\tif (progress_show === true) {\n\t\t\tpanelbody_progress = wp.element.createElement(\n\t\t\t\tld_course_info_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_info_sprintf(ld_course_info_x('%s Progress', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\tinitialOpen: false\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_info_TextControl, {\n\t\t\t\t\tlabel: ld_course_info_('per page', 'learndash'),\n\t\t\t\t\thelp: ld_course_info_sprintf(ld_course_info_x('Leave empty for default (%d) or 0 to show all items.', 'placeholder: default per page', 'learndash'), ldlms_get_per_page('progress_num')),\n\t\t\t\t\tvalue: progress_num || '',\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 100,\n\t\t\t\t\tonChange: function onChange(progress_num) {\n\t\t\t\t\t\treturn setAttributes({ progress_num: progress_num });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_info_SelectControl, {\n\t\t\t\t\tkey: 'progress_orderby',\n\t\t\t\t\tlabel: ld_course_info_('Order by', 'learndash'),\n\t\t\t\t\tvalue: progress_orderby,\n\t\t\t\t\toptions: [{\n\t\t\t\t\t\tlabel: ld_course_info_('ID - Order by post id. (default)', 'learndash'),\n\t\t\t\t\t\tvalue: 'ID'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('Title - Order by post title', 'learndash'),\n\t\t\t\t\t\tvalue: 'title'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('Date - Order by post date', 'learndash'),\n\t\t\t\t\t\tvalue: 'date'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('Menu - Order by Page Order Value', 'learndash'),\n\t\t\t\t\t\tvalue: 'menu_order'\n\t\t\t\t\t}],\n\t\t\t\t\tonChange: function onChange(progress_orderby) {\n\t\t\t\t\t\treturn setAttributes({ progress_orderby: progress_orderby });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_info_SelectControl, {\n\t\t\t\t\tkey: 'progress_order',\n\t\t\t\t\tlabel: ld_course_info_('Order', 'learndash'),\n\t\t\t\t\tvalue: progress_order,\n\t\t\t\t\toptions: [{\n\t\t\t\t\t\tlabel: ld_course_info_('DESC - highest to lowest values (default)', 'learndash'),\n\t\t\t\t\t\tvalue: 'DESC'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('ASC - lowest to highest values', 'learndash'),\n\t\t\t\t\t\tvalue: 'ASC'\n\t\t\t\t\t}],\n\t\t\t\t\tonChange: function onChange(progress_order) {\n\t\t\t\t\t\treturn setAttributes({ progress_order: progress_order });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar panelbody_quiz = '';\n\t\tif (quiz_show === true) {\n\t\t\tpanelbody_quiz = wp.element.createElement(\n\t\t\t\tld_course_info_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_info_sprintf(ld_course_info_x('%s Attempts', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n\t\t\t\t\tinitialOpen: false\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_info_TextControl, {\n\t\t\t\t\tlabel: ld_course_info_('per page', 'learndash'),\n\t\t\t\t\thelp: ld_course_info_sprintf(ld_course_info_x('Leave empty for default (%d) or 0 to show all items.', 'placeholder: default per page', 'learndash'), ldlms_get_per_page('quiz_num')),\n\t\t\t\t\tvalue: quiz_num || '',\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 100,\n\t\t\t\t\tonChange: function onChange(quiz_num) {\n\t\t\t\t\t\treturn setAttributes({ quiz_num: quiz_num });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_info_SelectControl, {\n\t\t\t\t\tkey: 'quiz_orderby',\n\t\t\t\t\tlabel: ld_course_info_('Order by', 'learndash'),\n\t\t\t\t\tvalue: quiz_orderby,\n\t\t\t\t\toptions: [{\n\t\t\t\t\t\tlabel: ld_course_info_('Date Taken (default) - Order by date taken', 'learndash'),\n\t\t\t\t\t\tvalue: 'taken'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('Title - Order by post title', 'learndash'),\n\t\t\t\t\t\tvalue: 'title'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('ID - Order by post id. (default)', 'learndash'),\n\t\t\t\t\t\tvalue: 'ID'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('Date - Order by post date', 'learndash'),\n\t\t\t\t\t\tvalue: 'date'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('Menu - Order by Page Order Value', 'learndash'),\n\t\t\t\t\t\tvalue: 'menu_order'\n\t\t\t\t\t}],\n\t\t\t\t\tonChange: function onChange(quiz_orderby) {\n\t\t\t\t\t\treturn setAttributes({ quiz_orderby: quiz_orderby });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_info_SelectControl, {\n\t\t\t\t\tkey: 'quiz_order',\n\t\t\t\t\tlabel: ld_course_info_('Order', 'learndash'),\n\t\t\t\t\tvalue: quiz_order,\n\t\t\t\t\toptions: [{\n\t\t\t\t\t\tlabel: ld_course_info_('DESC - highest to lowest values (default)', 'learndash'),\n\t\t\t\t\t\tvalue: 'DESC'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tlabel: ld_course_info_('ASC - lowest to highest values', 'learndash'),\n\t\t\t\t\t\tvalue: 'ASC'\n\t\t\t\t\t}],\n\t\t\t\t\tonChange: function onChange(quiz_order) {\n\t\t\t\t\t\treturn setAttributes({ quiz_order: quiz_order });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar inspectorControls = wp.element.createElement(\n\t\t\tld_course_info_InspectorControls,\n\t\t\tnull,\n\t\t\tpanelbody_header,\n\t\t\tpanelbody_registered,\n\t\t\tpanelbody_progress,\n\t\t\tpanelbody_quiz,\n\t\t\twp.element.createElement(\n\t\t\t\tld_course_info_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_info_('Preview', 'learndash'),\n\t\t\t\t\tinitialOpen: false\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_info_ToggleControl, {\n\t\t\t\t\tlabel: ld_course_info_('Show Preview', 'learndash'),\n\t\t\t\t\tchecked: !!preview_show,\n\t\t\t\t\tonChange: function onChange(preview_show) {\n\t\t\t\t\t\treturn setAttributes({ preview_show: preview_show });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_info_TextControl, {\n\t\t\t\t\tlabel: ld_course_info_('User ID', 'learndash'),\n\t\t\t\t\thelp: ld_course_info_('Enter a User ID to test preview', 'learndash'),\n\t\t\t\t\tvalue: preview_user_id || '',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tonChange: function onChange(preview_user_id) {\n\t\t\t\t\t\treturn setAttributes({ preview_user_id: preview_user_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tfunction do_serverside_render(attributes) {\n\t\t\tif (attributes.preview_show == true) {\n\t\t\t\treturn wp.element.createElement(ld_course_info_ServerSideRender, {\n\t\t\t\t\tblock: 'learndash/ld-course-info',\n\t\t\t\t\tattributes: attributes\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn ld_course_info_('[ld_course_info] shortcode output shown here', 'learndash');\n\t\t\t}\n\t\t}\n\n\t\treturn [inspectorControls, do_serverside_render(props.attributes)];\n\t},\n\n\tsave: function save(props) {\n\t\t// Delete meta from props to prevent it being saved.\n\t\tdelete props.attributes.meta;\n\n\t\t// Delete preview_user_id from props to prevent it being saved.\n\t\tdelete props.attributes.preview_user_id;\n\t}\n});\n// CONCATENATED MODULE: ./blocks/ld-user-course-points/index.js\n/**\n * LearnDash Block ld-user-course-points\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_user_course_points_wp$i18n = wp.i18n,\n ld_user_course_points_ = ld_user_course_points_wp$i18n.__,\n ld_user_course_points_x = ld_user_course_points_wp$i18n._x,\n ld_user_course_points_sprintf = ld_user_course_points_wp$i18n.sprintf;\nvar ld_user_course_points_registerBlockType = wp.blocks.registerBlockType;\nvar ld_user_course_points_InspectorControls = wp.editor.InspectorControls;\nvar ld_user_course_points_wp$components = wp.components,\n ld_user_course_points_ServerSideRender = ld_user_course_points_wp$components.ServerSideRender,\n ld_user_course_points_PanelBody = ld_user_course_points_wp$components.PanelBody,\n ld_user_course_points_ToggleControl = ld_user_course_points_wp$components.ToggleControl,\n ld_user_course_points_TextControl = ld_user_course_points_wp$components.TextControl;\n\n\nld_user_course_points_registerBlockType('learndash/ld-user-course-points', {\n title: ld_user_course_points_sprintf(ld_user_course_points_x('LearnDash User %s Points', 'LearnDash User Course Points', 'learndash'), ldlms_get_custom_label('course')),\n description: ld_user_course_points_sprintf(ld_user_course_points_x('This block shows the earned %s points for the user.', 'placeholders: course', 'learndash'), ldlms_get_custom_label('course')),\n icon: 'chart-area',\n category: 'learndash-blocks',\n example: {\n attributes: {\n example_show: 1\n }\n },\n supports: {\n customClassName: false\n },\n attributes: {\n user_id: {\n type: 'string',\n default: ''\n },\n preview_show: {\n type: 'boolean',\n default: 1\n },\n preview_user_id: {\n type: 'string'\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n user_id = _props$attributes.user_id,\n preview_show = _props$attributes.preview_show,\n preview_user_id = _props$attributes.preview_user_id,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_user_course_points_InspectorControls,\n null,\n wp.element.createElement(\n ld_user_course_points_PanelBody,\n {\n title: ld_user_course_points_('Settings', 'learndash')\n },\n wp.element.createElement(ld_user_course_points_TextControl, {\n label: ld_user_course_points_('User ID', 'learndash'),\n help: ld_user_course_points_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: user_id || '',\n onChange: function onChange(user_id) {\n return setAttributes({ user_id: user_id });\n }\n })\n ),\n wp.element.createElement(\n ld_user_course_points_PanelBody,\n {\n title: ld_user_course_points_('Preview', 'learndash'),\n initialOpen: false\n },\n wp.element.createElement(ld_user_course_points_ToggleControl, {\n label: ld_user_course_points_('Show Preview', 'learndash'),\n checked: !!preview_show,\n onChange: function onChange(preview_show) {\n return setAttributes({ preview_show: preview_show });\n }\n }),\n wp.element.createElement(ld_user_course_points_TextControl, {\n label: ld_user_course_points_('Preview User ID', 'learndash'),\n help: ld_user_course_points_('Enter a User ID to test preview', 'learndash'),\n value: preview_user_id || '',\n type: 'number',\n onChange: function onChange(preview_user_id) {\n return setAttributes({ preview_user_id: preview_user_id });\n }\n })\n )\n );\n\n function do_serverside_render(attributes) {\n if (attributes.preview_show == true) {\n return wp.element.createElement(ld_user_course_points_ServerSideRender, {\n block: 'learndash/ld-user-course-points',\n attributes: attributes\n });\n } else {\n return ld_user_course_points_('[ld_user_course_points] shortcode output shown here', 'learndash');\n }\n }\n\n return [inspectorControls, do_serverside_render(props.attributes)];\n },\n\n save: function save(props) {\n // Delete preview_user_id from props to prevent it being saved.\n delete props.attributes.preview_user_id;\n }\n});\n// EXTERNAL MODULE: ./blocks/ld-user-groups/index.js\nvar ld_user_groups = __webpack_require__(3);\n\n// CONCATENATED MODULE: ./blocks/ld-group/index.js\n/**\n * LearnDash Block ld-group\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_group_wp$i18n = wp.i18n,\n ld_group_ = ld_group_wp$i18n.__,\n ld_group_x = ld_group_wp$i18n._x,\n ld_group_sprintf = ld_group_wp$i18n.sprintf;\nvar ld_group_registerBlockType = wp.blocks.registerBlockType;\nvar ld_group_wp$editor = wp.editor,\n ld_group_InnerBlocks = ld_group_wp$editor.InnerBlocks,\n ld_group_InspectorControls = ld_group_wp$editor.InspectorControls;\nvar ld_group_wp$components = wp.components,\n ld_group_PanelBody = ld_group_wp$components.PanelBody,\n ld_group_TextControl = ld_group_wp$components.TextControl,\n ld_group_ToggleControl = ld_group_wp$components.ToggleControl;\n\n\nld_group_registerBlockType('learndash/ld-group', {\n title: ld_group_('LearnDash Group', 'learndash'),\n description: ld_group_('This block shows the content if the user is enrolled into the Group.', 'learndash'),\n icon: 'groups',\n category: 'learndash-blocks',\n supports: {\n customClassName: false\n },\n attributes: {\n group_id: {\n type: 'string'\n },\n user_id: {\n type: 'string',\n default: ''\n },\n autop: {\n type: 'boolean',\n default: true\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n group_id = _props$attributes.group_id,\n user_id = _props$attributes.user_id,\n autop = _props$attributes.autop,\n className = props.className,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_group_InspectorControls,\n null,\n wp.element.createElement(\n ld_group_PanelBody,\n {\n title: ld_group_('Settings', 'learndash')\n },\n wp.element.createElement(ld_group_TextControl, {\n label: ld_group_('Group ID', 'learndash'),\n help: ld_group_('Group ID (required)', 'learndash'),\n value: group_id || '',\n onChange: function onChange(group_id) {\n return setAttributes({ group_id: group_id });\n }\n }),\n wp.element.createElement(ld_group_TextControl, {\n label: ld_group_('User ID', 'learndash'),\n help: ld_group_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: user_id || '',\n onChange: function onChange(user_id) {\n return setAttributes({ user_id: user_id });\n }\n }),\n wp.element.createElement(ld_group_ToggleControl, {\n label: ld_group_('Auto Paragraph', 'learndash'),\n checked: !!autop,\n onChange: function onChange(autop) {\n return setAttributes({ autop: autop });\n }\n })\n )\n );\n\n var ld_block_error_message = '';\n var preview_group_id = ldlms_get_integer_value(group_id);\n if (preview_group_id == 0) {\n ld_block_error_message = ld_group_('Group ID is required.', 'learndash');\n }\n\n if (ld_block_error_message.length) {\n ld_block_error_message = wp.element.createElement(\n 'span',\n { className: 'learndash-block-error-message' },\n ld_block_error_message\n );\n }\n\n var outputBlock = wp.element.createElement(\n 'div',\n { className: className },\n wp.element.createElement(\n 'div',\n { className: 'learndash-block-inner' },\n ld_block_error_message,\n wp.element.createElement(ld_group_InnerBlocks, null)\n )\n );\n\n return [inspectorControls, outputBlock];\n },\n save: function save(props) {\n return wp.element.createElement(ld_group_InnerBlocks.Content, null);\n }\n});\n// CONCATENATED MODULE: ./blocks/ld-payment-buttons/index.js\n/**\n * LearnDash Block ld-payment-buttons\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_payment_buttons_wp$i18n = wp.i18n,\n ld_payment_buttons_ = ld_payment_buttons_wp$i18n.__,\n ld_payment_buttons_x = ld_payment_buttons_wp$i18n._x,\n ld_payment_buttons_sprintf = ld_payment_buttons_wp$i18n.sprintf;\nvar ld_payment_buttons_registerBlockType = wp.blocks.registerBlockType;\nvar ld_payment_buttons_InspectorControls = wp.editor.InspectorControls;\nvar ld_payment_buttons_wp$components = wp.components,\n ld_payment_buttons_ServerSideRender = ld_payment_buttons_wp$components.ServerSideRender,\n ld_payment_buttons_PanelBody = ld_payment_buttons_wp$components.PanelBody,\n ld_payment_buttons_ToggleControl = ld_payment_buttons_wp$components.ToggleControl,\n ld_payment_buttons_TextControl = ld_payment_buttons_wp$components.TextControl;\n\n\nld_payment_buttons_registerBlockType('learndash/ld-payment-buttons', {\n title: ld_payment_buttons_('LearnDash Payment Buttons', 'learndash'),\n description: ld_payment_buttons_sprintf(ld_payment_buttons_x('This block the %s payment buttons', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n icon: 'cart',\n category: 'learndash-blocks',\n supports: {\n customClassName: false\n },\n attributes: {\n course_id: {\n type: 'string'\n },\n preview_show: {\n type: 'boolean',\n default: 1\n },\n preview_course_id: {\n type: 'string',\n default: ''\n },\n meta: {\n type: 'object'\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n course_id = _props$attributes.course_id,\n preview_show = _props$attributes.preview_show,\n preview_course_id = _props$attributes.preview_course_id,\n className = props.className,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_payment_buttons_InspectorControls,\n null,\n wp.element.createElement(\n ld_payment_buttons_PanelBody,\n {\n title: ld_payment_buttons_('Settings', 'learndash')\n },\n wp.element.createElement(ld_payment_buttons_TextControl, {\n label: ld_payment_buttons_sprintf(ld_payment_buttons_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_payment_buttons_sprintf(ld_payment_buttons_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n value: course_id || '',\n onChange: function onChange(course_id) {\n return setAttributes({ course_id: course_id });\n }\n })\n ),\n wp.element.createElement(\n ld_payment_buttons_PanelBody,\n {\n title: ld_payment_buttons_('Preview', 'learndash'),\n initialOpen: false\n },\n wp.element.createElement(ld_payment_buttons_ToggleControl, {\n label: ld_payment_buttons_('Show Preview', 'learndash'),\n checked: !!preview_show,\n onChange: function onChange(preview_show) {\n return setAttributes({ preview_show: preview_show });\n }\n }),\n wp.element.createElement(ld_payment_buttons_TextControl, {\n label: ld_payment_buttons_sprintf(ld_payment_buttons_x('%s ID', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_payment_buttons_sprintf(ld_payment_buttons_x('Enter a %s ID to test preview', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n value: preview_course_id || '',\n type: 'number',\n onChange: function onChange(preview_course_id) {\n return setAttributes({ preview_course_id: preview_course_id });\n }\n })\n )\n );\n\n function do_serverside_render(attributes) {\n if (attributes.preview_show == true) {\n var ld_block_error_message = '';\n var _preview_course_id = ldlms_get_integer_value(course_id);\n\n if (_preview_course_id === 0) {\n _preview_course_id = ldlms_get_post_edit_meta('course_id');\n _preview_course_id = ldlms_get_integer_value(_preview_course_id);\n\n if (_preview_course_id == 0) {\n ld_block_error_message = ld_payment_buttons_sprintf(ld_payment_buttons_x('%1$s ID is required when not used within a %2$s.', 'placeholders: Course, Course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course'));\n }\n }\n\n if (ld_block_error_message.length) {\n ld_block_error_message = wp.element.createElement(\n 'span',\n { className: 'learndash-block-error-message' },\n ld_block_error_message\n );\n\n var outputBlock = wp.element.createElement(\n 'div',\n { className: className },\n wp.element.createElement(\n 'div',\n { className: 'learndash-block-inner' },\n ld_block_error_message\n )\n );\n return outputBlock;\n } else {\n // We add the meta so the server knowns what is being edited.\n attributes.meta = ldlms_get_post_edit_meta();\n\n return wp.element.createElement(ld_payment_buttons_ServerSideRender, {\n block: 'learndash/ld-payment-buttons',\n attributes: attributes\n });\n }\n } else {\n return ld_payment_buttons_('[learndash_payment_buttons] shortcode output shown here', 'learndash');\n }\n }\n\n return [inspectorControls, do_serverside_render(props.attributes)];\n },\n\n save: function save(props) {\n // Delete meta from props to prevent it being saved.\n delete props.attributes.meta;\n }\n});\n// CONCATENATED MODULE: ./blocks/ld-course-content/index.js\n/**\n * LearnDash Block ld-course-content\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_course_content_wp$i18n = wp.i18n,\n ld_course_content_ = ld_course_content_wp$i18n.__,\n ld_course_content_x = ld_course_content_wp$i18n._x,\n ld_course_content_sprintf = ld_course_content_wp$i18n.sprintf;\nvar ld_course_content_registerBlockType = wp.blocks.registerBlockType;\nvar ld_course_content_InspectorControls = wp.editor.InspectorControls;\nvar ld_course_content_wp$components = wp.components,\n ld_course_content_ServerSideRender = ld_course_content_wp$components.ServerSideRender,\n ld_course_content_PanelBody = ld_course_content_wp$components.PanelBody,\n ld_course_content_ToggleControl = ld_course_content_wp$components.ToggleControl,\n ld_course_content_TextControl = ld_course_content_wp$components.TextControl;\n\n\nld_course_content_registerBlockType('learndash/ld-course-content', {\n\ttitle: ld_course_content_sprintf(ld_course_content_x('LearnDash %s Content', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\tdescription: ld_course_content_sprintf(ld_course_content_x('This block displays the %1$s Content table.', 'placeholders: Course', 'learndash'), ldlms_get_custom_label('course')),\n\ticon: 'format-aside',\n\tcategory: 'learndash-blocks',\n\texample: {\n\t\tattributes: {\n\t\t\texample_show: 1\n\t\t}\n\t},\n\tsupports: {\n\t\tcustomClassName: false\n\t},\n\tattributes: {\n\t\tcourse_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tper_page: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tpreview_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 1\n\t\t},\n\t\tpreview_course_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\texample_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 0\n\t\t},\n\t\tmeta: {\n\t\t\ttype: 'object'\n\t\t}\n\t},\n\tedit: function edit(props) {\n\t\tvar _props$attributes = props.attributes,\n\t\t course_id = _props$attributes.course_id,\n\t\t per_page = _props$attributes.per_page,\n\t\t preview_show = _props$attributes.preview_show,\n\t\t preview_course_id = _props$attributes.preview_course_id,\n\t\t example_show = _props$attributes.example_show,\n\t\t className = props.className,\n\t\t setAttributes = props.setAttributes;\n\n\n\t\tvar inspectorControls = wp.element.createElement(\n\t\t\tld_course_content_InspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tld_course_content_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_content_('Settings', 'learndash')\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_content_TextControl, {\n\t\t\t\t\tlabel: ld_course_content_sprintf(ld_course_content_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\thelp: ld_course_content_sprintf(ld_course_content_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n\t\t\t\t\tvalue: course_id || '',\n\t\t\t\t\tonChange: function onChange(course_id) {\n\t\t\t\t\t\treturn setAttributes({ course_id: course_id });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_content_TextControl, {\n\t\t\t\t\tlabel: ld_course_content_sprintf(ld_course_content_x('%s per page', 'placeholder: Lessons', 'learndash'), ldlms_get_custom_label('lessons')),\n\t\t\t\t\thelp: ld_course_content_sprintf(ld_course_content_x('Leave empty for default (%d) or 0 to show all items.', 'placeholder: default per page', 'learndash'), ldlms_get_per_page('per_page')),\n\t\t\t\t\tvalue: per_page || '',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tonChange: function onChange(per_page) {\n\t\t\t\t\t\treturn setAttributes({ per_page: per_page });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t),\n\t\t\twp.element.createElement(\n\t\t\t\tld_course_content_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_content_('Preview', 'learndash'),\n\t\t\t\t\tinitialOpen: false\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_content_ToggleControl, {\n\t\t\t\t\tlabel: ld_course_content_('Show Preview', 'learndash'),\n\t\t\t\t\tchecked: !!preview_show,\n\t\t\t\t\tonChange: function onChange(preview_show) {\n\t\t\t\t\t\treturn setAttributes({ preview_show: preview_show });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_content_TextControl, {\n\t\t\t\t\tlabel: ld_course_content_sprintf(ld_course_content_x('%s ID', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\thelp: ld_course_content_sprintf(ld_course_content_x('Enter a %s ID to test preview', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\tvalue: preview_course_id || '',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tonChange: function onChange(preview_course_id) {\n\t\t\t\t\t\treturn setAttributes({ preview_course_id: preview_course_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tfunction do_serverside_render(attributes) {\n\t\t\tif (attributes.preview_show == true) {\n\t\t\t\t// We add the meta so the server knowns what is being edited.\n\t\t\t\tattributes.meta = ldlms_get_post_edit_meta();\n\n\t\t\t\treturn wp.element.createElement(ld_course_content_ServerSideRender, {\n\t\t\t\t\tblock: 'learndash/ld-course-content',\n\t\t\t\t\tattributes: attributes\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn ld_course_content_('[course_content] shortcode output shown here', 'learndash');\n\t\t\t}\n\t\t}\n\n\t\treturn [inspectorControls, do_serverside_render(props.attributes)];\n\t},\n\n\tsave: function save(props) {\n\t\t// Delete meta from props to prevent it being saved.\n\t\tdelete props.attributes.meta;\n\t}\n});\n// CONCATENATED MODULE: ./blocks/ld-course-expire-status/index.js\n/**\n * LearnDash Block ld-course-expire-status\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_course_expire_status_wp$i18n = wp.i18n,\n ld_course_expire_status_ = ld_course_expire_status_wp$i18n.__,\n ld_course_expire_status_x = ld_course_expire_status_wp$i18n._x,\n ld_course_expire_status_sprintf = ld_course_expire_status_wp$i18n.sprintf;\nvar ld_course_expire_status_registerBlockType = wp.blocks.registerBlockType;\nvar ld_course_expire_status_InspectorControls = wp.editor.InspectorControls;\nvar ld_course_expire_status_wp$components = wp.components,\n ld_course_expire_status_ServerSideRender = ld_course_expire_status_wp$components.ServerSideRender,\n ld_course_expire_status_PanelBody = ld_course_expire_status_wp$components.PanelBody,\n ld_course_expire_status_ToggleControl = ld_course_expire_status_wp$components.ToggleControl,\n ld_course_expire_status_TextControl = ld_course_expire_status_wp$components.TextControl;\n\n\nld_course_expire_status_registerBlockType('learndash/ld-course-expire-status', {\n\ttitle: ld_course_expire_status_sprintf(ld_course_expire_status_x('LearnDash %s Expire Status', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\tdescription: ld_course_expire_status_sprintf(ld_course_expire_status_x('This block displays the user %s access expire date.', 'placeholders: course', 'learndash'), ldlms_get_custom_label('course')),\n\ticon: 'clock',\n\tcategory: 'learndash-blocks',\n\texample: {\n\t\tattributes: {\n\t\t\texample_show: 1\n\t\t}\n\t},\n\tsupports: {\n\t\tcustomClassName: false\n\t},\n\tattributes: {\n\t\tcourse_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tuser_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlabel_before: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlabel_after: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tautop: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tpreview_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 1\n\t\t},\n\t\tpreview_course_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tpreview_user_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\texample_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 0\n\t\t},\n\t\tmeta: {\n\t\t\ttype: 'object'\n\t\t}\n\t},\n\tedit: function edit(props) {\n\t\tvar course_id = props.attributes.course_id,\n\t\t className = props.className;\n\t\tvar _props$attributes = props.attributes,\n\t\t user_id = _props$attributes.user_id,\n\t\t label_before = _props$attributes.label_before,\n\t\t label_after = _props$attributes.label_after,\n\t\t autop = _props$attributes.autop,\n\t\t preview_course_id = _props$attributes.preview_course_id,\n\t\t preview_user_id = _props$attributes.preview_user_id,\n\t\t preview_show = _props$attributes.preview_show,\n\t\t example_show = _props$attributes.example_show,\n\t\t setAttributes = props.setAttributes;\n\n\n\t\tvar inspectorControls = wp.element.createElement(\n\t\t\tld_course_expire_status_InspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tld_course_expire_status_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_expire_status_('Settings', 'learndash')\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_expire_status_TextControl, {\n\t\t\t\t\tlabel: ld_course_expire_status_sprintf(ld_course_expire_status_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\thelp: ld_course_expire_status_sprintf(ld_course_expire_status_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n\t\t\t\t\tvalue: course_id || '',\n\t\t\t\t\tonChange: function onChange(course_id) {\n\t\t\t\t\t\treturn setAttributes({ course_id: course_id });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_expire_status_TextControl, {\n\t\t\t\t\tlabel: ld_course_expire_status_('User ID', 'learndash'),\n\t\t\t\t\thelp: ld_course_expire_status_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n\t\t\t\t\tvalue: user_id || '',\n\t\t\t\t\tonChange: function onChange(user_id) {\n\t\t\t\t\t\treturn setAttributes({ user_id: user_id });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_expire_status_TextControl, {\n\t\t\t\t\tlabel: ld_course_expire_status_('Label Before', 'learndash'),\n\t\t\t\t\thelp: ld_course_expire_status_('The label prefix shown before the access expires', 'learndash'),\n\t\t\t\t\tvalue: label_before || '',\n\t\t\t\t\tonChange: function onChange(label_before) {\n\t\t\t\t\t\treturn setAttributes({ label_before: label_before });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_expire_status_TextControl, {\n\t\t\t\t\tlabel: ld_course_expire_status_('Label After', 'learndash'),\n\t\t\t\t\thelp: ld_course_expire_status_('The label prefix shown after access has expired', 'learndash'),\n\t\t\t\t\tvalue: label_after || '',\n\t\t\t\t\tonChange: function onChange(label_after) {\n\t\t\t\t\t\treturn setAttributes({ label_after: label_after });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_expire_status_ToggleControl, {\n\t\t\t\t\tlabel: ld_course_expire_status_('Auto Paragraph', 'learndash'),\n\t\t\t\t\tchecked: !!autop,\n\t\t\t\t\tonChange: function onChange(autop) {\n\t\t\t\t\t\treturn setAttributes({ autop: autop });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t),\n\t\t\twp.element.createElement(\n\t\t\t\tld_course_expire_status_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_course_expire_status_('Preview', 'learndash'),\n\t\t\t\t\tinitialOpen: false\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ld_course_expire_status_ToggleControl, {\n\t\t\t\t\tlabel: ld_course_expire_status_('Show Preview', 'learndash'),\n\t\t\t\t\tchecked: !!preview_show,\n\t\t\t\t\tonChange: function onChange(preview_show) {\n\t\t\t\t\t\treturn setAttributes({ preview_show: preview_show });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_expire_status_TextControl, {\n\t\t\t\t\tlabel: ld_course_expire_status_sprintf(ld_course_expire_status_x('%s ID', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\thelp: ld_course_expire_status_sprintf(ld_course_expire_status_x('Enter a %s ID to test preview', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\t\tvalue: preview_course_id || '',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tonChange: function onChange(preview_course_id) {\n\t\t\t\t\t\treturn setAttributes({ preview_course_id: preview_course_id });\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ld_course_expire_status_TextControl, {\n\t\t\t\t\tlabel: ld_course_expire_status_('User ID', 'learndash'),\n\t\t\t\t\thelp: ld_course_expire_status_('Enter a User ID to test preview', 'learndash'),\n\t\t\t\t\tvalue: preview_user_id || '',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tonChange: function onChange(preview_user_id) {\n\t\t\t\t\t\treturn setAttributes({ preview_user_id: preview_user_id });\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tfunction do_serverside_render(attributes) {\n\t\t\tif (attributes.preview_show == true) {\n\t\t\t\t// We add the meta so the server knowns what is being edited.\n\t\t\t\tattributes.meta = ldlms_get_post_edit_meta();\n\n\t\t\t\treturn wp.element.createElement(ld_course_expire_status_ServerSideRender, {\n\t\t\t\t\tblock: 'learndash/ld-course-expire-status',\n\t\t\t\t\tattributes: attributes\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn ld_course_expire_status_('[ld_course_expire_status] shortcode output shown here', 'learndash');\n\t\t\t}\n\t\t}\n\n\t\treturn [inspectorControls, do_serverside_render(props.attributes)];\n\t},\n\n\tsave: function save(props) {\n\t\t// Delete meta from props to prevent it being saved.\n\t\tdelete props.attributes.meta;\n\n\t\t// Delete preview_user_id from props to prevent it being saved.\n\t\tdelete props.attributes.preview_user_id;\n\t}\n});\n// CONCATENATED MODULE: ./blocks/ld-certificate/index.js\n/**\n * LearnDash Block ld-certificate\n *\n * @since 3.2\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_certificate_wp$i18n = wp.i18n,\n ld_certificate_ = ld_certificate_wp$i18n.__,\n ld_certificate_x = ld_certificate_wp$i18n._x,\n ld_certificate_sprintf = ld_certificate_wp$i18n.sprintf;\nvar ld_certificate_registerBlockType = wp.blocks.registerBlockType;\nvar ld_certificate_InspectorControls = wp.editor.InspectorControls;\nvar ld_certificate_wp$components = wp.components,\n ld_certificate_ServerSideRender = ld_certificate_wp$components.ServerSideRender,\n ld_certificate_PanelBody = ld_certificate_wp$components.PanelBody,\n ld_certificate_TextControl = ld_certificate_wp$components.TextControl,\n ld_certificate_ToggleControl = ld_certificate_wp$components.ToggleControl;\n\n\nld_certificate_registerBlockType('learndash/ld-certificate', {\n title: ld_certificate_('LearnDash Certificate', 'learndash'),\n description: ld_certificate_x('This shortcode shows a Certificate download link.', 'learndash'),\n icon: 'welcome-learn-more',\n category: 'learndash-blocks',\n supports: {\n customClassName: false\n },\n attributes: {\n course_id: {\n type: 'string',\n default: ''\n },\n quiz_id: {\n type: 'string',\n default: ''\n },\n user_id: {\n type: 'string',\n default: ''\n },\n label: {\n type: 'string',\n default: ''\n },\n class_html: {\n type: 'string',\n default: ''\n },\n context: {\n type: 'string',\n default: ''\n },\n callback: {\n type: 'string',\n default: ''\n },\n preview_show: {\n type: 'boolean',\n default: 1\n },\n preview_course_id: {\n type: 'string',\n default: ''\n },\n preview_quiz_id: {\n type: 'string',\n default: ''\n },\n preview_user_id: {\n type: 'string',\n default: ''\n },\n example_show: {\n type: 'boolean',\n default: 0\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n course_id = _props$attributes.course_id,\n quiz_id = _props$attributes.quiz_id,\n user_id = _props$attributes.user_id,\n label = _props$attributes.label,\n class_html = _props$attributes.class_html,\n context = _props$attributes.context,\n callback = _props$attributes.callback,\n preview_show = _props$attributes.preview_show,\n preview_course_id = _props$attributes.preview_course_id,\n preview_quiz_id = _props$attributes.preview_quiz_id,\n preview_user_id = _props$attributes.preview_user_id,\n example_show = _props$attributes.example_show,\n className = props.className,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_certificate_InspectorControls,\n null,\n wp.element.createElement(\n ld_certificate_PanelBody,\n {\n title: ld_certificate_('Settings', 'learndash')\n },\n wp.element.createElement(ld_certificate_TextControl, {\n label: ld_certificate_sprintf(ld_certificate_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_certificate_sprintf(ld_certificate_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n value: course_id || '',\n onChange: function onChange(course_id) {\n return setAttributes({ course_id: course_id });\n }\n }),\n wp.element.createElement(ld_certificate_TextControl, {\n label: ld_certificate_sprintf(ld_certificate_x('%s ID', 'Quiz ID', 'learndash'), ldlms_get_custom_label('quiz')),\n help: ld_certificate_sprintf(ld_certificate_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: quiz, quiz', 'learndash'), ldlms_get_custom_label('quiz'), ldlms_get_custom_label('quiz')),\n value: quiz_id || '',\n onChange: function onChange(quiz_id) {\n return setAttributes({ quiz_id: quiz_id });\n }\n }),\n wp.element.createElement(ld_certificate_TextControl, {\n label: ld_certificate_('User ID', 'learndash'),\n help: ld_certificate_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: user_id || '',\n onChange: function onChange(user_id) {\n return setAttributes({ user_id: user_id });\n }\n }),\n wp.element.createElement(ld_certificate_TextControl, {\n label: ld_certificate_('Label', 'learndash'),\n help: ld_certificate_('Label for link shown to user', 'learndash'),\n value: label || '',\n onChange: function onChange(label) {\n return setAttributes({ label: label });\n }\n }),\n wp.element.createElement(ld_certificate_TextControl, {\n label: ld_certificate_('Class', 'learndash'),\n help: ld_certificate_('HTML class for link element', 'learndash'),\n value: class_html || '',\n onChange: function onChange(class_html) {\n return setAttributes({ class_html: class_html });\n }\n }),\n wp.element.createElement(ld_certificate_TextControl, {\n label: ld_certificate_('Context', 'learndash'),\n help: ld_certificate_('User defined value to be passed into shortcode handler', 'learndash'),\n value: context || '',\n onChange: function onChange(context) {\n return setAttributes({ context: context });\n }\n }),\n wp.element.createElement(ld_certificate_TextControl, {\n label: ld_certificate_('Callback', 'learndash'),\n help: ld_certificate_('Custom callback function to be used instead of default output', 'learndash'),\n value: callback || '',\n onChange: function onChange(callback) {\n return setAttributes({ callback: callback });\n }\n })\n ),\n wp.element.createElement(\n ld_certificate_PanelBody,\n {\n title: ld_certificate_('Preview', 'learndash'),\n initialOpen: false\n },\n wp.element.createElement(ld_certificate_ToggleControl, {\n label: ld_certificate_('Show Preview', 'learndash'),\n checked: !!preview_show,\n onChange: function onChange(preview_show) {\n return setAttributes({ preview_show: preview_show });\n }\n }),\n wp.element.createElement(ld_certificate_TextControl, {\n label: ld_certificate_sprintf(ld_certificate_x('%s ID', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_certificate_sprintf(ld_certificate_x('Enter a %s ID to test preview', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n value: preview_course_id || '',\n type: 'number',\n onChange: function onChange(preview_course_id) {\n return setAttributes({ preview_course_id: preview_course_id });\n }\n }),\n wp.element.createElement(ld_certificate_TextControl, {\n label: ld_certificate_sprintf(ld_certificate_x('%s ID', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n help: ld_certificate_sprintf(ld_certificate_x('Enter a %s ID to test preview', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n value: preview_quiz_id || '',\n type: 'number',\n onChange: function onChange(preview_quiz_id) {\n return setAttributes({ preview_quiz_id: preview_quiz_id });\n }\n }),\n wp.element.createElement(ld_certificate_TextControl, {\n label: ld_certificate_('User ID', 'learndash'),\n help: ld_certificate_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: preview_user_id || '',\n onChange: function onChange(preview_user_id) {\n return setAttributes({ preview_user_id: preview_user_id });\n }\n })\n )\n );\n\n /*\n let ld_block_error_message = '';\n let show_course_id = ldlms_get_integer_value(course_id);\n let show_quiz_id = ldlms_get_integer_value(quiz_id);\n let post_type = ldlms_get_post_edit_meta('post_type'); \n if (show_course_id === 0) {\n if (post_type === 'sfwd-courses') {\n show_course_id = ldlms_get_post_edit_meta('post_id');\n } else if ((post_type === 'sfwd-lessons') || (post_type === 'sfwd-topic') || (post_type === 'sfwd-quiz')) {\n show_course_id = ldlms_get_post_edit_meta('course_id');\n }\n show_course_id = ldlms_get_integer_value(show_course_id);\n }\n if (show_quiz_id === 0) {\n if (ldlms_get_post_edit_meta('post_type') === 'sfwd-quiz') {\n show_quiz_id = ldlms_get_post_edit_meta('post_id');\n show_quiz_id = ldlms_get_integer_value(show_quiz_id);\n }\n }\n if ((show_course_id == 0) && (show_quiz_id == 0)) {\n ld_block_error_message = sprintf(_x('%1$s ID or %2$s ID is required when not used within a %2$s.', 'placeholders: Course, Quz, Course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('quiz'), ldlms_get_custom_label('course'));\n }\n if (ld_block_error_message.length) {\n ld_block_error_message = (<span className=\"learndash-block-error-message\">{ld_block_error_message}</span>);\n }\n const outputBlock = (\n <div className={className}>\n <div className=\"learndash-block-inner\">\n {ld_block_error_message}\n <InnerBlocks />\n </div>\n </div>\n );\n */\n\n function do_serverside_render(attributes) {\n if (attributes.preview_show == true) {\n return wp.element.createElement(ld_certificate_ServerSideRender, {\n block: 'learndash/ld-certificate',\n attributes: attributes\n });\n } else {\n return ld_certificate_('[ld_certificate] shortcode output shown here', 'learndash');\n }\n }\n\n return [inspectorControls, do_serverside_render(props.attributes)];\n }\n});\n// CONCATENATED MODULE: ./blocks/ld-quiz-complete/index.js\n/**\n * LearnDash Block ld-quiz-complete\n *\n * @since 3.2\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_quiz_complete_wp$i18n = wp.i18n,\n ld_quiz_complete_ = ld_quiz_complete_wp$i18n.__,\n ld_quiz_complete_x = ld_quiz_complete_wp$i18n._x,\n ld_quiz_complete_sprintf = ld_quiz_complete_wp$i18n.sprintf;\nvar ld_quiz_complete_registerBlockType = wp.blocks.registerBlockType;\nvar ld_quiz_complete_wp$editor = wp.editor,\n ld_quiz_complete_InnerBlocks = ld_quiz_complete_wp$editor.InnerBlocks,\n ld_quiz_complete_InspectorControls = ld_quiz_complete_wp$editor.InspectorControls;\nvar ld_quiz_complete_wp$components = wp.components,\n ld_quiz_complete_ServerSideRender = ld_quiz_complete_wp$components.ServerSideRender,\n ld_quiz_complete_PanelBody = ld_quiz_complete_wp$components.PanelBody,\n ld_quiz_complete_TextControl = ld_quiz_complete_wp$components.TextControl,\n ld_quiz_complete_ToggleControl = ld_quiz_complete_wp$components.ToggleControl;\n\n\nld_quiz_complete_registerBlockType('learndash/ld-quiz-complete', {\n title: ld_quiz_complete_sprintf(ld_quiz_complete_x('LearnDash %s Complete', 'placeholder: Quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n description: ld_quiz_complete_sprintf(ld_quiz_complete_x('This block shows the content if the user is has completed the %s.', 'placeholders: quiz', 'learndash'), ldlms_get_custom_label('quiz')),\n icon: 'star-filled',\n category: 'learndash-blocks',\n supports: {\n customClassName: false\n },\n attributes: {\n course_id: {\n type: 'string',\n default: ''\n },\n quiz_id: {\n type: 'string',\n default: ''\n },\n user_id: {\n type: 'string',\n default: ''\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n course_id = _props$attributes.course_id,\n quiz_id = _props$attributes.quiz_id,\n user_id = _props$attributes.user_id,\n className = props.className,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n ld_quiz_complete_InspectorControls,\n null,\n wp.element.createElement(\n ld_quiz_complete_PanelBody,\n {\n title: ld_quiz_complete_('Settings', 'learndash')\n },\n wp.element.createElement(ld_quiz_complete_TextControl, {\n label: ld_quiz_complete_sprintf(ld_quiz_complete_x('%s ID', 'Quiz ID', 'learndash'), ldlms_get_custom_label('quiz')),\n help: ld_quiz_complete_sprintf(ld_quiz_complete_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: quiz, quiz', 'learndash'), ldlms_get_custom_label('quiz'), ldlms_get_custom_label('quiz')),\n value: quiz_id || '',\n onChange: function onChange(quiz_id) {\n return setAttributes({ quiz_id: quiz_id });\n }\n }),\n wp.element.createElement(ld_quiz_complete_TextControl, {\n label: ld_quiz_complete_sprintf(ld_quiz_complete_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n help: ld_quiz_complete_sprintf(ld_quiz_complete_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n value: course_id || '',\n onChange: function onChange(course_id) {\n return setAttributes({ course_id: course_id });\n }\n }),\n wp.element.createElement(ld_quiz_complete_TextControl, {\n label: ld_quiz_complete_('User ID', 'learndash'),\n help: ld_quiz_complete_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: user_id || '',\n onChange: function onChange(user_id) {\n return setAttributes({ user_id: user_id });\n }\n })\n )\n );\n\n var ld_block_error_message = '';\n var preview_quiz_id = ldlms_get_integer_value(quiz_id);\n if (preview_quiz_id === 0) {\n if ('sfwd-quiz' === ldlms_get_post_edit_meta('post_type')) {\n preview_quiz_id = ldlms_get_post_edit_meta('post_id');\n preview_quiz_id = ldlms_get_integer_value(preview_quiz_id);\n }\n if (preview_quiz_id == 0) {\n ld_block_error_message = ld_quiz_complete_sprintf(ld_quiz_complete_x('%1$s ID is required when not used within a %2$s.', 'placeholders: Quiz, Quiz', 'learndash'), ldlms_get_custom_label('quiz'), ldlms_get_custom_label('quiz'));\n }\n }\n\n if (ld_block_error_message.length) {\n ld_block_error_message = wp.element.createElement(\n 'span',\n { className: 'learndash-block-error-message' },\n ld_block_error_message\n );\n }\n\n var outputBlock = wp.element.createElement(\n 'div',\n { className: className },\n wp.element.createElement(\n 'div',\n { className: 'learndash-block-inner' },\n ld_block_error_message,\n wp.element.createElement(ld_quiz_complete_InnerBlocks, null)\n )\n );\n\n return [inspectorControls, outputBlock];\n },\n save: function save(props) {\n return wp.element.createElement(ld_quiz_complete_InnerBlocks.Content, null);\n }\n});\n// CONCATENATED MODULE: ./blocks/ld-courseinfo/index.js\n/**\n * LearnDash Block ld-courseinfo\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n\n\n/**\n * Internal block libraries\n */\nvar ld_courseinfo_wp$i18n = wp.i18n,\n ld_courseinfo_ = ld_courseinfo_wp$i18n.__,\n ld_courseinfo_x = ld_courseinfo_wp$i18n._x,\n ld_courseinfo_sprintf = ld_courseinfo_wp$i18n.sprintf;\nvar ld_courseinfo_registerBlockType = wp.blocks.registerBlockType;\nvar ld_courseinfo_InspectorControls = wp.editor.InspectorControls;\nvar ld_courseinfo_wp$components = wp.components,\n ld_courseinfo_ServerSideRender = ld_courseinfo_wp$components.ServerSideRender,\n ld_courseinfo_PanelBody = ld_courseinfo_wp$components.PanelBody,\n ld_courseinfo_SelectControl = ld_courseinfo_wp$components.SelectControl,\n ld_courseinfo_ToggleControl = ld_courseinfo_wp$components.ToggleControl,\n ld_courseinfo_TextControl = ld_courseinfo_wp$components.TextControl;\n\n\nld_courseinfo_registerBlockType('learndash/ld-courseinfo', {\n\ttitle: ld_courseinfo_sprintf(ld_courseinfo_x('LearnDash %s Info [courseinfo]', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\tdescription: ld_courseinfo_sprintf(ld_courseinfo_x('This block displays %s related information', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\ticon: 'analytics',\n\tcategory: 'learndash-blocks',\n\tsupports: {\n\t\tcustomClassName: false\n\t},\n\tattributes: {\n\t\tshow: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tcourse_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tuser_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tformat: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tseconds_format: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tdecimals: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tpreview_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 1\n\t\t},\n\t\tpreview_course_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tpreview_user_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tmeta: {\n\t\t\ttype: 'object'\n\t\t}\n\t},\n\tedit: function edit(props) {\n\t\tvar _props$attributes = props.attributes,\n\t\t course_id = _props$attributes.course_id,\n\t\t show = _props$attributes.show,\n\t\t user_id = _props$attributes.user_id,\n\t\t format = _props$attributes.format,\n\t\t seconds_format = _props$attributes.seconds_format,\n\t\t decimals = _props$attributes.decimals,\n\t\t preview_show = _props$attributes.preview_show,\n\t\t preview_user_id = _props$attributes.preview_user_id,\n\t\t className = props.className,\n\t\t setAttributes = props.setAttributes;\n\n\n\t\tvar field_show = wp.element.createElement(ld_courseinfo_SelectControl, {\n\t\t\tkey: 'show',\n\t\t\tvalue: show,\n\t\t\tlabel: ld_courseinfo_('Show', 'learndash'),\n\t\t\toptions: [{\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('%s Title', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: 'course_title'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('%s URL', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: 'course_url'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('%s Points', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: 'course_points'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('%s Price', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: 'course_price'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('%s Price Type', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: 'course_price_type'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Total User %s Points', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: 'user_course_points'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Total User %s Time', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: 'user_course_time'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('%s Completed On (date)', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: 'completed_on'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('%s Enrolled On (date)', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\t\tvalue: 'enrolled_on'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Cumulative %s Score', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\tvalue: 'cumulative_score'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Cumulative %s Points', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\tvalue: 'cumulative_points'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Possible Cumulative %s Total Points', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\tvalue: 'cumulative_total_points'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Cumulative %s Percentage', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\tvalue: 'cumulative_percentage'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Cumulative %s Time Spent', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\tvalue: 'cumulative_timespent'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Aggregate %s Percentage', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\tvalue: 'aggregate_percentage'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Aggregate %s Score', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\tvalue: 'aggregate_score'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Aggregate %s Points', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\tvalue: 'aggregate_points'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Possible Aggregate %s Total Points', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\tvalue: 'aggregate_total_points'\n\t\t\t}, {\n\t\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('Aggregate %s Time Spent', 'placeholder: Course', 'learndash'), ldlms_get_custom_label('quizzes')),\n\t\t\t\tvalue: 'aggregate_timespent'\n\t\t\t}],\n\t\t\tonChange: function onChange(show) {\n\t\t\t\treturn setAttributes({ show: show });\n\t\t\t}\n\t\t});\n\n\t\tvar field_course_id = wp.element.createElement(ld_courseinfo_TextControl, {\n\t\t\tlabel: ld_courseinfo_sprintf(ld_courseinfo_x('%s ID', 'Course ID', 'learndash'), ldlms_get_custom_label('course')),\n\t\t\thelp: ld_courseinfo_sprintf(ld_courseinfo_x('Enter single %1$s ID. Leave blank if used within a %2$s.', 'placeholders: course, course', 'learndash'), ldlms_get_custom_label('course'), ldlms_get_custom_label('course')),\n\t\t\tvalue: course_id || '',\n\t\t\tonChange: function onChange(course_id) {\n\t\t\t\treturn setAttributes({ course_id: course_id });\n\t\t\t}\n\t\t});\n\t\tvar field_user_id = '';\n\n\t\tif (show != 'course_title' && show != 'course_url' && show != 'course_url' && show != 'course_points' && show != 'course_price' && show != 'course_price_type') {\n\t\t\tfield_user_id = wp.element.createElement(ld_courseinfo_TextControl, {\n\t\t\t\tlabel: ld_courseinfo_('User ID', 'learndash'),\n\t\t\t\thelp: ld_courseinfo_('Enter specific User ID. Leave blank for current User.', 'learndash'),\n\t\t\t\tvalue: user_id || '',\n\t\t\t\tonChange: function onChange(user_id) {\n\t\t\t\t\treturn setAttributes({ user_id: user_id });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar field_format = '';\n\t\tif (show == 'completed_on' || show == 'enrolled_on') {\n\t\t\tfield_format = wp.element.createElement(ld_courseinfo_TextControl, {\n\t\t\t\tlabel: ld_courseinfo_('Format', 'learndash'),\n\t\t\t\thelp: ld_courseinfo_('This can be used to change the date format. Default: \"F j, Y, g:i a.', 'learndash'),\n\t\t\t\tvalue: format || '',\n\t\t\t\tonChange: function onChange(format) {\n\t\t\t\t\treturn setAttributes({ format: format });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar field_seconds_format = '';\n\t\tif (show == 'user_course_time') {\n\t\t\tfield_seconds_format = wp.element.createElement(ld_courseinfo_SelectControl, {\n\t\t\t\tkey: 'seconds_format',\n\t\t\t\tvalue: seconds_format,\n\t\t\t\tlabel: ld_courseinfo_('Seconds Format', 'learndash'),\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: ld_courseinfo_('Time - 20min 49sec', 'learndash'),\n\t\t\t\t\tvalue: 'time'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: ld_courseinfo_('Seconds - 1436', 'learndash'),\n\t\t\t\t\tvalue: 'seconds'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(seconds_format) {\n\t\t\t\t\treturn setAttributes({ seconds_format: seconds_format });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar field_decimals = '';\n\t\tif (show == 'course_points' || show == 'user_course_points') {\n\t\t\tfield_decimals = wp.element.createElement(ld_courseinfo_TextControl, {\n\t\t\t\tlabel: ld_courseinfo_('Decimals', 'learndash'),\n\t\t\t\thelp: ld_courseinfo_('Number of decimal places to show. Default is 2.', 'learndash'),\n\t\t\t\tvalue: decimals || '',\n\t\t\t\tonChange: function onChange(decimals) {\n\t\t\t\t\treturn setAttributes({ decimals: decimals });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar panel_preview = wp.element.createElement(\n\t\t\tld_courseinfo_PanelBody,\n\t\t\t{\n\t\t\t\ttitle: ld_courseinfo_('Preview', 'learndash'),\n\t\t\t\tinitialOpen: false\n\t\t\t},\n\t\t\twp.element.createElement(ld_courseinfo_ToggleControl, {\n\t\t\t\tlabel: ld_courseinfo_('Show Preview', 'learndash'),\n\t\t\t\tchecked: !!preview_show,\n\t\t\t\tonChange: function onChange(preview_show) {\n\t\t\t\t\treturn setAttributes({ preview_show: preview_show });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(ld_courseinfo_TextControl, {\n\t\t\t\tlabel: ld_courseinfo_('User ID', 'learndash'),\n\t\t\t\thelp: ld_courseinfo_('Enter a User ID to test preview', 'learndash'),\n\t\t\t\tvalue: preview_user_id || '',\n\t\t\t\ttype: 'number',\n\t\t\t\tonChange: function onChange(preview_user_id) {\n\t\t\t\t\treturn setAttributes({ preview_user_id: preview_user_id });\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tvar inspectorControls = wp.element.createElement(\n\t\t\tld_courseinfo_InspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tld_courseinfo_PanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: ld_courseinfo_('Settings', 'learndash')\n\t\t\t\t},\n\t\t\t\tfield_course_id,\n\t\t\t\tfield_user_id,\n\t\t\t\tfield_show,\n\t\t\t\tfield_format,\n\t\t\t\tfield_seconds_format,\n\t\t\t\tfield_decimals\n\t\t\t),\n\t\t\tpanel_preview\n\t\t);\n\n\t\tfunction do_serverside_render(attributes) {\n\t\t\tif (attributes.preview_show == true) {\n\t\t\t\t// We add the meta so the server knowns what is being edited.\n\t\t\t\tattributes.meta = ldlms_get_post_edit_meta();\n\n\t\t\t\treturn wp.element.createElement(ld_courseinfo_ServerSideRender, {\n\t\t\t\t\tblock: 'learndash/ld-courseinfo',\n\t\t\t\t\tattributes: attributes\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn ld_courseinfo_('[courseinfo] shortcode output shown here', 'learndash');\n\t\t\t}\n\t\t}\n\n\t\treturn [inspectorControls, do_serverside_render(props.attributes)];\n\t},\n\tsave: function save(props) {\n\t\t// Delete meta from props to prevent it being saved.\n\t\tdelete props.attributes.meta;\n\t}\n});\n// EXTERNAL MODULE: ./blocks/ld-usermeta/index.js\nvar ld_usermeta = __webpack_require__(2);\n\n// CONCATENATED MODULE: ./blocks/index.js\n//import './i18n.js';\n\n/**\n * Import LearnDash blocks\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Jsb2Nrcy9sZGxtcy5qcz9mOGEwIiwid2VicGFjazovLy8uL2Jsb2Nrcy9sZC1wcm9maWxlL2luZGV4LmpzPzA5YTUiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2xkLWNvdXJzZS1saXN0L2luZGV4LmpzP2ZkNmQiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2xkLWxlc3Nvbi1saXN0L2luZGV4LmpzPzliODYiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2xkLXRvcGljLWxpc3QvaW5kZXguanM/MTI4NCIsIndlYnBhY2s6Ly8vLi9ibG9ja3MvbGQtcXVpei1saXN0L2luZGV4LmpzP2UwMDUiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2xkLWNvdXJzZS1wcm9ncmVzcy9pbmRleC5qcz8xNDc5Iiwid2VicGFjazovLy8uL2Jsb2Nrcy9sZC12aXNpdG9yL2luZGV4LmpzPzc2NGYiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2xkLXN0dWRlbnQvaW5kZXguanM/Y2IxOSIsIndlYnBhY2s6Ly8vLi9ibG9ja3MvbGQtY291cnNlLWNvbXBsZXRlL2luZGV4LmpzPzM0YjAiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2xkLWNvdXJzZS1pbnByb2dyZXNzL2luZGV4LmpzPzUxNDYiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2xkLWNvdXJzZS1ub3RzdGFydGVkL2luZGV4LmpzP2ZjOTciLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2xkLWNvdXJzZS1yZXN1bWUvaW5kZXguanM/MmNlNSIsIndlYnBhY2s6Ly8vLi9ibG9ja3MvbGQtY291cnNlLWluZm8vaW5kZXguanM/MzZhOSIsIndlYnBhY2s6Ly8vLi9ibG9ja3MvbGQtdXNlci1jb3Vyc2UtcG9pbnRzL2luZGV4LmpzPzMyYWEiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2xkLWdyb3VwL2luZGV4LmpzPzkwMjUiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2xkLXBheW1lbnQtYnV0dG9ucy9pbmRleC5qcz9kYjNkIiwid2VicGFjazovLy8uL2Jsb2Nrcy9sZC1jb3Vyc2UtY29udGVudC9pbmRleC5qcz9kZjFjIiwid2VicGFjazovLy8uL2Jsb2Nrcy9sZC1jb3Vyc2UtZXhwaXJlLXN0YXR1cy9pbmRleC5qcz9iY2ZmIiwid2VicGFjazovLy8uL2Jsb2Nrcy9sZC1jZXJ0aWZpY2F0ZS9pbmRleC5qcz85MGIxIiwid2VicGFjazovLy8uL2Jsb2Nrcy9sZC1xdWl6LWNvbXBsZXRlL2luZGV4LmpzPzc5NDQiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2xkLWNvdXJzZWluZm8vaW5kZXguanM/ODYxMyIsIndlYnBhY2s6Ly8vLi9ibG9ja3MvaW5kZXguanM/ZDc3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExlYXJuRGFzaCBCbG9jayBGdW5jdGlvbnNcbiAqIFxuICogVGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgY29tbW9uIGZ1bmN0aW9ucyB1c2VkIHdpdGhpbiB0aGUgTGVhbkRhc2ggYmxvY2tzXG4gKiBcbiAqIEBzaW5jZSAyLjUuOVxuICogQHBhY2thZ2UgTGVhcm5EYXNoXG4gKi9cblxuLyoqXG4gKiBXaWxsIHJldHJpdmUgbWV0YSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9zdCBiZWluZyBlZGl0ZWQuIEZvciBub3dcbiAqIHRoaXMgaXMgb25seSBsb2FkZWQgb24gcG9zdCBlZGl0IHNjcmVlbiBmb3IgR3V0ZW5iZXJnLiBTbyBubyBjaGVja3MgXG4gKiBhcmUgbWFkZSB0byBlbnN1cmUgdGhhdCBhIHBvc3QgaXMgYmVpbmcgZWRpdGVkLiBcbiAqIEBwYXJhbSBzdHJpbmcgdG9rZW4gVG9rZW4gdG8gcmV0dXJuIGZyb20gbWV0YSBhcnJheS4gSWYgbm90IHByb3ZpZGVkIHdpbGwgYXJyYXkgaXMgcmV0dXJuZWQuIFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhKHRva2VuKSB7XG5cdGlmICh0eXBlb2YgdG9rZW4gIT09ICd1bmRlZmluZWQnICYmIHRva2VuICE9ICcnKSB7XG5cdFx0aWYgKHR5cGVvZiBsZGxtc19zZXR0aW5nc1snbWV0YSddWydwb3N0J11bdG9rZW5dICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cmV0dXJuIGxkbG1zX3NldHRpbmdzWydtZXRhJ11bJ3Bvc3QnXVt0b2tlbl07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmICh0eXBlb2YgbGRsbXNfc2V0dGluZ3NbJ21ldGEnXVsncG9zdCddICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cmV0dXJuIGxkbG1zX3NldHRpbmdzWydtZXRhJ11bJ3Bvc3QnXTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBXaWxsIHJldHJpdmUgbWV0YSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9zdCBiZWluZyBlZGl0ZWQuIEZvciBub3dcbiAqIHRoaXMgaXMgb25seSBsb2FkZWQgb24gcG9zdCBlZGl0IHNjcmVlbiBmb3IgR3V0ZW5iZXJnLiBTbyBubyBjaGVja3MgXG4gKiBhcmUgbWFkZSB0byBlbnN1cmUgdGhhdCBhIHBvc3QgaXMgYmVpbmcgZWRpdGVkLiBcbiAqIEBwYXJhbSBzdHJpbmcgdG9rZW4gVG9rZW4gdG8gcmV0dXJuIGZyb20gbWV0YSBhcnJheS4gSWYgbm90IHByb3ZpZGVkIHdpbGwgYXJyYXkgaXMgcmV0dXJuZWQuIFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGRsbXNfZ2V0X3NldHRpbmcodG9rZW4sIGRlZmF1bHRfdmFsdWUpIHtcblx0aWYgKHR5cGVvZiB0b2tlbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdG9rZW4gIT0gJycgJiYgdHlwZW9mIGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddW3Rva2VuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHR2YXIgdG9rZW5fdmFsdWUgPSBsZGxtc19zZXR0aW5nc1snc2V0dGluZ3MnXVt0b2tlbl07XG5cdFx0cmV0dXJuIGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddW3Rva2VuXTtcblx0fVxuXHRyZXR1cm4gZGVmYXVsdF92YWx1ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgY3VzdG9tIGxhYmVsIGVsZW1lbnQgXG4gKiBAcGFyYW0gc3RyaW5nIHRva2VuIFdpbGwgcmVwcmVzZW50IHRoZSBjdXN0b20gbGFiZWwgZmllbGQgdG8gcmV0cmVpdmUgQ291cnNlLCBDb3Vyc2VzLCBMZXNzb24sIFF1aXouXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKHRva2VuKSB7XG5cdGlmICh0eXBlb2YgbGRsbXNfc2V0dGluZ3NbJ21ldGEnXVsncG9zdCddICE9PSAndW5kZWZpbmVkJyAmJiB0b2tlbiAhPSAnJykge1xuXHRcdGlmICh0eXBlb2YgbGRsbXNfc2V0dGluZ3NbJ3NldHRpbmdzJ11bJ2N1c3RvbV9sYWJlbHMnXVt0b2tlbl0gIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHR0b2tlbiA9IGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddWydjdXN0b21fbGFiZWxzJ11bdG9rZW5dO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdG9rZW47XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbG93ZXJjYXNlIGxhYmVsIGZvciBjdXN0b20gbGFiZWwgZWxlbWVudCBcbiAqIEBwYXJhbSBzdHJpbmcgdG9rZW4gV2lsbCByZXByZXNlbnQgdGhlIGN1c3RvbSBsYWJlbCBmaWVsZCB0byByZXRyZWl2ZSBDb3Vyc2UsIENvdXJzZXMsIExlc3NvbiwgUXVpei5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxkbG1zX2dldF9jdXN0b21fbGFiZWxfbG93ZXIodG9rZW4pIHtcblx0aWYgKHR5cGVvZiBsZGxtc19zZXR0aW5nc1snbWV0YSddWydwb3N0J10gIT09ICd1bmRlZmluZWQnICYmIHRva2VuICE9ICcnKSB7XG5cdFx0aWYgKHR5cGVvZiBsZGxtc19zZXR0aW5nc1snc2V0dGluZ3MnXVsnY3VzdG9tX2xhYmVscyddW3Rva2VuICsgJ19sb3dlciddICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0dG9rZW4gPSBsZGxtc19zZXR0aW5nc1snc2V0dGluZ3MnXVsnY3VzdG9tX2xhYmVscyddW3Rva2VuICsgJ19sb3dlciddO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdG9rZW47XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc2x1ZyBmb3IgY3VzdG9tIGxhYmVsIGVsZW1lbnQgXG4gKiBAcGFyYW0gc3RyaW5nIHRva2VuIFdpbGwgcmVwcmVzZW50IHRoZSBjdXN0b20gbGFiZWwgZmllbGQgdG8gcmV0cmVpdmUgQ291cnNlLCBDb3Vyc2VzLCBMZXNzb24sIFF1aXouXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZGxtc19nZXRfY3VzdG9tX2xhYmVsX3NsdWcodG9rZW4pIHtcblx0aWYgKHRva2VuICE9ICcnKSB7XG5cdFx0aWYgKHR5cGVvZiBsZGxtc19zZXR0aW5nc1snc2V0dGluZ3MnXVsnY3VzdG9tX2xhYmVscyddW3Rva2VuICsgJ19zbHVnJ10gIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHR0b2tlbiA9IGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddWydjdXN0b21fbGFiZWxzJ11bdG9rZW4gKyAnX3NsdWcnXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRva2VuO1xufVxuXG4vKipcbiAqIFdpbGwgcmV0cml2ZSBtZXRhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwb3N0IGJlaW5nIGVkaXRlZC4gRm9yIG5vd1xuICogdGhpcyBpcyBvbmx5IGxvYWRlZCBvbiBwb3N0IGVkaXQgc2NyZWVuIGZvciBHdXRlbmJlcmcuIFNvIG5vIGNoZWNrcyBcbiAqIGFyZSBtYWRlIHRvIGVuc3VyZSB0aGF0IGEgcG9zdCBpcyBiZWluZyBlZGl0ZWQuIFxuICogQHBhcmFtIHN0cmluZyB0b2tlbiBUb2tlbiB0byByZXR1cm4gZnJvbSBtZXRhIGFycmF5LiBJZiBub3QgcHJvdmlkZWQgd2lsbCBhcnJheSBpcyByZXR1cm5lZC4gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZGxtc19nZXRfcGVyX3BhZ2UodG9rZW4pIHtcblx0aWYgKHR5cGVvZiB0b2tlbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdG9rZW4gIT0gJycpIHtcblx0XHRpZiAodHlwZW9mIGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddWydwZXJfcGFnZSddW3Rva2VuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBsZGxtc19zZXR0aW5nc1snc2V0dGluZ3MnXVsncGVyX3BhZ2UnXVt0b2tlbl07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5cGVvZiBsZGxtc19zZXR0aW5nc1snbWV0YSddWydwb3N0c19wZXJfcGFnZSddICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBsZGxtc19zZXR0aW5nc1snbWV0YSddWydwb3N0c19wZXJfcGFnZSddO1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyBpbnRlZ2V0IHZhbHVlIGZvciB2YXJpYWJsZS5cbiAqIFxuICogQHBhcmFtIG1peGVkIHZhcl92YWx1ZSBWYXJpYWJsZSB0byBkZXRlcm1pbiBpbnRlZ2VyIGZyb20uXG4gKiBcbiAqIEByZXR1cm4gaW50ZWdlciB2YWx1ZSBvZiB6ZXJvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGRsbXNfZ2V0X2ludGVnZXJfdmFsdWUodmFyX3ZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFyX3ZhbHVlID09PSAndW5kZWZpbmVkJykge1xuXHRcdHZhcl92YWx1ZSA9IDA7XG5cdH1cblx0dmFyX3ZhbHVlID0gcGFyc2VJbnQodmFyX3ZhbHVlKTtcblx0aWYgKGlzTmFOKHZhcl92YWx1ZSkpIHtcblx0XHR2YXJfdmFsdWUgPSAwO1xuXHR9XG5cblx0cmV0dXJuIHZhcl92YWx1ZTtcbn0iLCIvKipcbiAqIExlYXJuRGFzaCBCbG9jayBsZC1wcm9maWxlXG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCwgbGRsbXNfZ2V0X3Blcl9wYWdlIH0gZnJvbSAnLi4vbGRsbXMuanMnO1xuXG4vKipcbiAqIEludGVybmFsIGJsb2NrIGxpYnJhcmllc1xuICovXG52YXIgX3dwJGkxOG4gPSB3cC5pMThuLFxuICAgIF9fID0gX3dwJGkxOG4uX18sXG4gICAgX3ggPSBfd3AkaTE4bi5feCxcbiAgICBzcHJpbnRmID0gX3dwJGkxOG4uc3ByaW50ZjtcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBJbnNwZWN0b3JDb250cm9scyA9IHdwLmVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgU2VydmVyU2lkZVJlbmRlciA9IF93cCRjb21wb25lbnRzLlNlcnZlclNpZGVSZW5kZXIsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFNlbGVjdENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5TZWxlY3RDb250cm9sLFxuICAgIFRvZ2dsZUNvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5Ub2dnbGVDb250cm9sLFxuICAgIFRleHRDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVGV4dENvbnRyb2w7XG5cblxucmVnaXN0ZXJCbG9ja1R5cGUoJ2xlYXJuZGFzaC9sZC1wcm9maWxlJywge1xuXHR0aXRsZTogX18oJ0xlYXJuRGFzaCBQcm9maWxlJywgJ2xlYXJuZGFzaCcpLFxuXHRkZXNjcmlwdGlvbjogc3ByaW50ZihfeChcIkRpc3BsYXlzIHVzZXIncyBlbnJvbGxlZCAlMSRzLCAlMiRzIHByb2dyZXNzLCAlMyRzIHNjb3JlcywgYW5kIGFjaGlldmVkIGNlcnRpZmljYXRlcy5cIiwgJ3BsYWNlaG9sZGVyOiBjb3Vyc2VzLCBjb3Vyc2UsIHF1aXonLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZXMnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXonKSksXG5cdGljb246ICdpZC1hbHQnLFxuXHRjYXRlZ29yeTogJ2xlYXJuZGFzaC1ibG9ja3MnLFxuXHRleGFtcGxlOiB7XG5cdFx0YXR0cmlidXRlczoge1xuXHRcdFx0ZXhhbXBsZV9zaG93OiAxXG5cdFx0fVxuXHR9LFxuXHRzdXBwb3J0czoge1xuXHRcdGN1c3RvbUNsYXNzTmFtZTogZmFsc2Vcblx0fSxcblx0YXR0cmlidXRlczoge1xuXHRcdHBlcl9wYWdlOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRvcmRlcmJ5OiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICdJRCdcblx0XHR9LFxuXHRcdG9yZGVyOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICdERVNDJ1xuXHRcdH0sXG5cdFx0Y291cnNlX3BvaW50c191c2VyOiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiAxXG5cdFx0fSxcblx0XHRleHBhbmRfYWxsOiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiAwXG5cdFx0fSxcblx0XHRwcm9maWxlX2xpbms6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IDFcblx0XHR9LFxuXHRcdHNob3dfaGVhZGVyOiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiAxXG5cdFx0fSxcblx0XHRzaG93X3NlYXJjaDoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogMVxuXHRcdH0sXG5cdFx0c2hvd19xdWl6emVzOiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiAxXG5cdFx0fSxcblx0XHRwcmV2aWV3X3Nob3c6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IDFcblx0XHR9LFxuXHRcdHByZXZpZXdfdXNlcl9pZDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0ZXhhbXBsZV9zaG93OiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiAwXG5cdFx0fVxuXHR9LFxuXHRlZGl0OiBmdW5jdGlvbiBlZGl0KHByb3BzKSB7XG5cdFx0dmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcblx0XHQgICAgcGVyX3BhZ2UgPSBfcHJvcHMkYXR0cmlidXRlcy5wZXJfcGFnZSxcblx0XHQgICAgb3JkZXJieSA9IF9wcm9wcyRhdHRyaWJ1dGVzLm9yZGVyYnksXG5cdFx0ICAgIG9yZGVyID0gX3Byb3BzJGF0dHJpYnV0ZXMub3JkZXIsXG5cdFx0ICAgIGNvdXJzZV9wb2ludHNfdXNlciA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvdXJzZV9wb2ludHNfdXNlcixcblx0XHQgICAgZXhwYW5kX2FsbCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmV4cGFuZF9hbGwsXG5cdFx0ICAgIHByb2ZpbGVfbGluayA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByb2ZpbGVfbGluayxcblx0XHQgICAgc2hvd19oZWFkZXIgPSBfcHJvcHMkYXR0cmlidXRlcy5zaG93X2hlYWRlcixcblx0XHQgICAgc2hvd19zZWFyY2ggPSBfcHJvcHMkYXR0cmlidXRlcy5zaG93X3NlYXJjaCxcblx0XHQgICAgc2hvd19xdWl6emVzID0gX3Byb3BzJGF0dHJpYnV0ZXMuc2hvd19xdWl6emVzLFxuXHRcdCAgICBwcmV2aWV3X3VzZXJfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5wcmV2aWV3X3VzZXJfaWQsXG5cdFx0ICAgIHByZXZpZXdfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyxcblx0XHQgICAgZXhhbXBsZV9zaG93ID0gX3Byb3BzJGF0dHJpYnV0ZXMuZXhhbXBsZV9zaG93LFxuXHRcdCAgICBzZXRBdHRyaWJ1dGVzID0gcHJvcHMuc2V0QXR0cmlidXRlcztcblxuXG5cdFx0dmFyIGluc3BlY3RvckNvbnRyb2xzID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0SW5zcGVjdG9yQ29udHJvbHMsXG5cdFx0XHRudWxsLFxuXHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogX18oJ1NldHRpbmdzJywgJ2xlYXJuZGFzaCcpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBwZXIgcGFnZScsICdwbGFjZWhvbGRlcjogTGVzc29ucycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlcycpKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdMZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdCAoJWQpIG9yIDAgdG8gc2hvdyBhbGwgaXRlbXMuJywgJ3BsYWNlaG9sZGVyOiBkZWZhdWx0IHBlciBwYWdlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfcGVyX3BhZ2UoJ3Blcl9wYWdlJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBwZXJfcGFnZSB8fCAnJyxcblx0XHRcdFx0XHR0eXBlOiAnbnVtYmVyJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocGVyX3BhZ2UpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcGVyX3BhZ2U6IHBlcl9wYWdlIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdFx0a2V5OiAnb3JkZXJieScsXG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdPcmRlciBieScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogb3JkZXJieSxcblx0XHRcdFx0XHRvcHRpb25zOiBbe1xuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdJRCAtIE9yZGVyIGJ5IHBvc3QgaWQuIChkZWZhdWx0KScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnSUQnXG5cdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdUaXRsZSAtIE9yZGVyIGJ5IHBvc3QgdGl0bGUnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3RpdGxlJ1xuXHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdGxhYmVsOiBfXygnRGF0ZSAtIE9yZGVyIGJ5IHBvc3QgZGF0ZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnZGF0ZSdcblx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRsYWJlbDogX18oJ01lbnUgLSBPcmRlciBieSBQYWdlIE9yZGVyIFZhbHVlJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICdtZW51X29yZGVyJ1xuXHRcdFx0XHRcdH1dLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShvcmRlcmJ5KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IG9yZGVyYnk6IG9yZGVyYnkgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRyb2wsIHtcblx0XHRcdFx0XHRrZXk6ICdvcmRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdPcmRlcicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogb3JkZXIsXG5cdFx0XHRcdFx0b3B0aW9uczogW3tcblx0XHRcdFx0XHRcdGxhYmVsOiBfXygnREVTQyAtIGhpZ2hlc3QgdG8gbG93ZXN0IHZhbHVlcyAoZGVmYXVsdCknLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ0RFU0MnXG5cdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdBU0MgLSBsb3dlc3QgdG8gaGlnaGVzdCB2YWx1ZXMnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ0FTQydcblx0XHRcdFx0XHR9XSxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2Uob3JkZXIpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgb3JkZXI6IG9yZGVyIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdTaG93IFNlYXJjaCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRjaGVja2VkOiAhIXNob3dfc2VhcmNoLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShzaG93X3NlYXJjaCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBzaG93X3NlYXJjaDogc2hvd19zZWFyY2ggfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRoZWxwOiBfXygnTEQzMCB0ZW1wbGF0ZSBvbmx5JywgJ2xlYXJuZGFzaCcpXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnU2hvdyBQcm9maWxlIEhlYWRlcicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRjaGVja2VkOiAhIXNob3dfaGVhZGVyLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShzaG93X2hlYWRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBzaG93X2hlYWRlcjogc2hvd19oZWFkZXIgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnU2hvdyBFYXJuZWQgJXMgUG9pbnRzJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0XHRjaGVja2VkOiAhIWNvdXJzZV9wb2ludHNfdXNlcixcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY291cnNlX3BvaW50c191c2VyKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvdXJzZV9wb2ludHNfdXNlcjogY291cnNlX3BvaW50c191c2VyIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdTaG93IFByb2ZpbGUgTGluaycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRjaGVja2VkOiAhIXByb2ZpbGVfbGluayxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocHJvZmlsZV9saW5rKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByb2ZpbGVfbGluazogcHJvZmlsZV9saW5rIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJ1Nob3cgVXNlciBRdWl6IEF0dGVtcHRzJywgJ3BsYWNlaG9sZGVyOiBRdWl6JywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdxdWl6JykpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICEhc2hvd19xdWl6emVzLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShzaG93X3F1aXp6ZXMpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgc2hvd19xdWl6emVzOiBzaG93X3F1aXp6ZXMgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnRXhwYW5kIEFsbCAlcyBTZWN0aW9ucycsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdFx0Y2hlY2tlZDogISFleHBhbmRfYWxsLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShleHBhbmRfYWxsKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGV4cGFuZF9hbGw6IGV4cGFuZF9hbGwgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IF9fKCdQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGluaXRpYWxPcGVuOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnU2hvdyBQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICEhcHJldmlld19zaG93LFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X3Nob3cpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJldmlld19zaG93OiBwcmV2aWV3X3Nob3cgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdVc2VyIElEJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGhlbHA6IF9fKCdFbnRlciBhIFVzZXIgSUQgdG8gdGVzdCBwcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBwcmV2aWV3X3VzZXJfaWQgfHwgJycsXG5cdFx0XHRcdFx0dHlwZTogJ251bWJlcicsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfdXNlcl9pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X3VzZXJfaWQ6IHByZXZpZXdfdXNlcl9pZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdGZ1bmN0aW9uIGRvX3NlcnZlcnNpZGVfcmVuZGVyKGF0dHJpYnV0ZXMpIHtcblx0XHRcdGlmIChhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyA9PSB0cnVlKSB7XG5cdFx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoU2VydmVyU2lkZVJlbmRlciwge1xuXHRcdFx0XHRcdGJsb2NrOiAnbGVhcm5kYXNoL2xkLXByb2ZpbGUnLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gX18oJ1tsZF9wcm9maWxlXSBzaG9ydGNvZGUgb3V0cHV0IHNob3duIGhlcmUnLCAnbGVhcm5kYXNoJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtpbnNwZWN0b3JDb250cm9scywgZG9fc2VydmVyc2lkZV9yZW5kZXIocHJvcHMuYXR0cmlidXRlcyldO1xuXHR9LFxuXG5cdHNhdmU6IGZ1bmN0aW9uIHNhdmUocHJvcHMpIHtcblx0XHQvLyBEZWxldGUgcHJldmlld191c2VyX2lkIGZyb20gcHJvcHMgdG8gcHJldmVudCBpdCBiZWluZyBzYXZlZC5cblx0XHRkZWxldGUgcHJvcHMuYXR0cmlidXRlcy5wcmV2aWV3X3VzZXJfaWQ7XG5cdH1cbn0pOyIsIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLWNvdXJzZS1saXN0XG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCwgbGRsbXNfZ2V0X3Blcl9wYWdlIH0gZnJvbSAnLi4vbGRsbXMuanMnO1xuXG4vKipcbiAqIEludGVybmFsIGJsb2NrIGxpYnJhcmllc1xuICovXG52YXIgX3dwJGkxOG4gPSB3cC5pMThuLFxuICAgIF9fID0gX3dwJGkxOG4uX18sXG4gICAgX3ggPSBfd3AkaTE4bi5feCxcbiAgICBzcHJpbnRmID0gX3dwJGkxOG4uc3ByaW50ZjtcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBJbnNwZWN0b3JDb250cm9scyA9IHdwLmVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgU2VydmVyU2lkZVJlbmRlciA9IF93cCRjb21wb25lbnRzLlNlcnZlclNpZGVSZW5kZXIsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFJhbmdlQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlJhbmdlQ29udHJvbCxcbiAgICBTZWxlY3RDb250cm9sID0gX3dwJGNvbXBvbmVudHMuU2VsZWN0Q29udHJvbCxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbCxcbiAgICBUZXh0Q29udHJvbCA9IF93cCRjb21wb25lbnRzLlRleHRDb250cm9sO1xuXG5cbnJlZ2lzdGVyQmxvY2tUeXBlKCdsZWFybmRhc2gvbGQtY291cnNlLWxpc3QnLCB7XG5cdHRpdGxlOiBzcHJpbnRmKF94KCdMZWFybkRhc2ggJXMgTGlzdCcsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdGRlc2NyaXB0aW9uOiBzcHJpbnRmKF94KCdUaGlzIGJsb2NrIHNob3dzIGEgbGlzdCBvZiAlcy4nLCAncGxhY2Vob2xkZXJzOiBjb3Vyc2VzJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2VzJykpLFxuXHRpY29uOiAnbGlzdC12aWV3Jyxcblx0Y2F0ZWdvcnk6ICdsZWFybmRhc2gtYmxvY2tzJyxcblx0ZXhhbXBsZToge1xuXHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdGV4YW1wbGVfc2hvdzogMVxuXHRcdH1cblx0fSxcblx0c3VwcG9ydHM6IHtcblx0XHRjdXN0b21DbGFzc05hbWU6IGZhbHNlXG5cdH0sXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHRvcmRlcmJ5OiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICdJRCdcblx0XHR9LFxuXHRcdG9yZGVyOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICdERVNDJ1xuXHRcdH0sXG5cdFx0cGVyX3BhZ2U6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdG15Y291cnNlczoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0c3RhdHVzOiB7XG5cdFx0XHR0eXBlOiAnYXJyYXknLFxuXHRcdFx0ZGVmYXVsdDogWydub3Rfc3RhcnRlZCcsICdpbl9wcm9ncmVzcycsICdjb21wbGV0ZWQnXVxuXHRcdH0sXG5cdFx0c2hvd19jb250ZW50OiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiB0cnVlXG5cdFx0fSxcblx0XHRzaG93X3RodW1ibmFpbDoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogdHJ1ZVxuXHRcdH0sXG5cdFx0Y291cnNlX2NhdGVnb3J5X25hbWU6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdGNvdXJzZV9jYXQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdGNvdXJzZV9jYXRlZ29yeXNlbGVjdG9yOiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdH0sXG5cdFx0Y291cnNlX3RhZzoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0Y291cnNlX3RhZ19pZDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0Y2F0ZWdvcnlfbmFtZToge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0Y2F0OiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRjYXRlZ29yeXNlbGVjdG9yOiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdH0sXG5cdFx0dGFnOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHR0YWdfaWQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdGNvdXJzZV9ncmlkOiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbidcblx0XHR9LFxuXHRcdHByb2dyZXNzX2Jhcjoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogZmFsc2Vcblx0XHR9LFxuXHRcdGNvbDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiBsZGxtc19zZXR0aW5nc1sncGx1Z2lucyddWydsZWFybmRhc2gtY291cnNlLWdyaWQnXVsnZW5hYmxlZCddWydjb2xfZGVmYXVsdCddIHx8IDNcblx0XHR9LFxuXHRcdHByZXZpZXdfc2hvdzoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogdHJ1ZVxuXHRcdH0sXG5cdFx0ZXhhbXBsZV9zaG93OiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiAwXG5cdFx0fVxuXHR9LFxuXHRlZGl0OiBmdW5jdGlvbiBlZGl0KHByb3BzKSB7XG5cdFx0dmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcblx0XHQgICAgb3JkZXJieSA9IF9wcm9wcyRhdHRyaWJ1dGVzLm9yZGVyYnksXG5cdFx0ICAgIG9yZGVyID0gX3Byb3BzJGF0dHJpYnV0ZXMub3JkZXIsXG5cdFx0ICAgIHBlcl9wYWdlID0gX3Byb3BzJGF0dHJpYnV0ZXMucGVyX3BhZ2UsXG5cdFx0ICAgIG15Y291cnNlcyA9IF9wcm9wcyRhdHRyaWJ1dGVzLm15Y291cnNlcyxcblx0XHQgICAgc3RhdHVzID0gX3Byb3BzJGF0dHJpYnV0ZXMuc3RhdHVzLFxuXHRcdCAgICBzaG93X2NvbnRlbnQgPSBfcHJvcHMkYXR0cmlidXRlcy5zaG93X2NvbnRlbnQsXG5cdFx0ICAgIHNob3dfdGh1bWJuYWlsID0gX3Byb3BzJGF0dHJpYnV0ZXMuc2hvd190aHVtYm5haWwsXG5cdFx0ICAgIGNvdXJzZV9jYXRlZ29yeV9uYW1lID0gX3Byb3BzJGF0dHJpYnV0ZXMuY291cnNlX2NhdGVnb3J5X25hbWUsXG5cdFx0ICAgIGNvdXJzZV9jYXQgPSBfcHJvcHMkYXR0cmlidXRlcy5jb3Vyc2VfY2F0LFxuXHRcdCAgICBjb3Vyc2VfY2F0ZWdvcnlzZWxlY3RvciA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvdXJzZV9jYXRlZ29yeXNlbGVjdG9yLFxuXHRcdCAgICBjb3Vyc2VfdGFnID0gX3Byb3BzJGF0dHJpYnV0ZXMuY291cnNlX3RhZyxcblx0XHQgICAgY291cnNlX3RhZ19pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvdXJzZV90YWdfaWQsXG5cdFx0ICAgIGNhdGVnb3J5X25hbWUgPSBfcHJvcHMkYXR0cmlidXRlcy5jYXRlZ29yeV9uYW1lLFxuXHRcdCAgICBjYXQgPSBfcHJvcHMkYXR0cmlidXRlcy5jYXQsXG5cdFx0ICAgIGNhdGVnb3J5c2VsZWN0b3IgPSBfcHJvcHMkYXR0cmlidXRlcy5jYXRlZ29yeXNlbGVjdG9yLFxuXHRcdCAgICB0YWcgPSBfcHJvcHMkYXR0cmlidXRlcy50YWcsXG5cdFx0ICAgIHRhZ19pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnRhZ19pZCxcblx0XHQgICAgY291cnNlX2dyaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5jb3Vyc2VfZ3JpZCxcblx0XHQgICAgcHJvZ3Jlc3NfYmFyID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJvZ3Jlc3NfYmFyLFxuXHRcdCAgICBjb2wgPSBfcHJvcHMkYXR0cmlidXRlcy5jb2wsXG5cdFx0ICAgIHByZXZpZXdfdXNlcl9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByZXZpZXdfdXNlcl9pZCxcblx0XHQgICAgcHJldmlld19zaG93ID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld19zaG93LFxuXHRcdCAgICBleGFtcGxlX3Nob3cgPSBfcHJvcHMkYXR0cmlidXRlcy5leGFtcGxlX3Nob3csXG5cdFx0ICAgIHNldEF0dHJpYnV0ZXMgPSBwcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXG5cblx0XHR2YXIgZmllbGRfc2hvd19jb250ZW50ID0gJyc7XG5cdFx0dmFyIGZpZWxkX3Nob3dfdGh1bWJuYWlsID0gJyc7XG5cdFx0dmFyIHBhbmVsX2NvdXJzZV9ncmlkX3NlY3Rpb24gPSAnJztcblxuXHRcdHZhciBjb3Vyc2VfZ3JpZF9kZWZhdWx0ID0gdHJ1ZTtcblx0XHRpZiAobGRsbXNfc2V0dGluZ3NbJ3BsdWdpbnMnXVsnbGVhcm5kYXNoLWNvdXJzZS1ncmlkJ11bJ2VuYWJsZWQnXSA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKHR5cGVvZiBjb3Vyc2VfZ3JpZCAhPT0gJ3VuZGVmaW5lZCcgJiYgKGNvdXJzZV9ncmlkID09IHRydWUgfHwgY291cnNlX2dyaWQgPT0gZmFsc2UpKSB7XG5cdFx0XHRcdGNvdXJzZV9ncmlkX2RlZmF1bHQgPSBjb3Vyc2VfZ3JpZDtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGNvdXJzZV9ncmlkX3NlY3Rpb25fb3BlbiA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvdXJzZV9ncmlkX2RlZmF1bHQgPT0gdHJ1ZSkge1xuXHRcdFx0XHRjb3Vyc2VfZ3JpZF9zZWN0aW9uX29wZW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGFuZWxfY291cnNlX2dyaWRfc2VjdGlvbiA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IF9fKCdHcmlkIFNldHRpbmdzJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGluaXRpYWxPcGVuOiBjb3Vyc2VfZ3JpZF9zZWN0aW9uX29wZW5cblx0XHRcdFx0fSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1Nob3cgR3JpZCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRjaGVja2VkOiAhIWNvdXJzZV9ncmlkX2RlZmF1bHQsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNvdXJzZV9ncmlkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvdXJzZV9ncmlkOiBjb3Vyc2VfZ3JpZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnU2hvdyBQcm9ncmVzcyBCYXInLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0Y2hlY2tlZDogISFwcm9ncmVzc19iYXIsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByb2dyZXNzX2Jhcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcm9ncmVzc19iYXI6IHByb2dyZXNzX2JhciB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoUmFuZ2VDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdDb2x1bW5zJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBjb2wgfHwgbGRsbXNfc2V0dGluZ3NbJ3BsdWdpbnMnXVsnbGVhcm5kYXNoLWNvdXJzZS1ncmlkJ11bJ2VuYWJsZWQnXVsnY29sX2RlZmF1bHQnXSxcblx0XHRcdFx0XHRtaW46IDEsXG5cdFx0XHRcdFx0bWF4OiBsZGxtc19zZXR0aW5nc1sncGx1Z2lucyddWydsZWFybmRhc2gtY291cnNlLWdyaWQnXVsnZW5hYmxlZCddWydjb2xfbWF4J10sXG5cdFx0XHRcdFx0c3RlcDogMSxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY29sKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvbDogY29sIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly9pZiAoY291cnNlX2dyaWQgIT09IHRydWUpIHtcblx0XHRmaWVsZF9zaG93X2NvbnRlbnQgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0bGFiZWw6IF9fKCdTaG93IENvbnRlbnQnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRjaGVja2VkOiAhIXNob3dfY29udGVudCxcblx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShzaG93X2NvbnRlbnQpIHtcblx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBzaG93X2NvbnRlbnQ6IHNob3dfY29udGVudCB9KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGZpZWxkX3Nob3dfdGh1bWJuYWlsID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdGxhYmVsOiBfXygnU2hvdyBUaHVtYm5haWwnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRjaGVja2VkOiAhIXNob3dfdGh1bWJuYWlsLFxuXHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHNob3dfdGh1bWJuYWlsKSB7XG5cdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgc2hvd190aHVtYm5haWw6IHNob3dfdGh1bWJuYWlsIH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vfVxuXG5cdFx0dmFyIHBhbmVsYm9keV9oZWFkZXIgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRQYW5lbEJvZHksXG5cdFx0XHR7XG5cdFx0XHRcdHRpdGxlOiBfXygnU2V0dGluZ3MnLCAnbGVhcm5kYXNoJylcblx0XHRcdH0sXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoU2VsZWN0Q29udHJvbCwge1xuXHRcdFx0XHRrZXk6ICdvcmRlcmJ5Jyxcblx0XHRcdFx0bGFiZWw6IF9fKCdPcmRlciBieScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0dmFsdWU6IG9yZGVyYnksXG5cdFx0XHRcdG9wdGlvbnM6IFt7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdJRCAtIE9yZGVyIGJ5IHBvc3QgaWQuIChkZWZhdWx0KScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ0lEJ1xuXHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdUaXRsZSAtIE9yZGVyIGJ5IHBvc3QgdGl0bGUnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd0aXRsZSdcblx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnRGF0ZSAtIE9yZGVyIGJ5IHBvc3QgZGF0ZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ2RhdGUnXG5cdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ01lbnUgLSBPcmRlciBieSBQYWdlIE9yZGVyIFZhbHVlJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbWVudV9vcmRlcidcblx0XHRcdFx0fV0sXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShvcmRlcmJ5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBvcmRlcmJ5OiBvcmRlcmJ5IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdGtleTogJ29yZGVyJyxcblx0XHRcdFx0bGFiZWw6IF9fKCdPcmRlcicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0dmFsdWU6IG9yZGVyLFxuXHRcdFx0XHRvcHRpb25zOiBbe1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnREVTQyAtIGhpZ2hlc3QgdG8gbG93ZXN0IHZhbHVlcyAoZGVmYXVsdCknLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdERVNDJ1xuXHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdBU0MgLSBsb3dlc3QgdG8gaGlnaGVzdCB2YWx1ZXMnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdBU0MnXG5cdFx0XHRcdH1dLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2Uob3JkZXIpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IG9yZGVyOiBvcmRlciB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIHBlciBwYWdlJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2VzJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2VzJykpLFxuXHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdMZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdCAoJWQpIG9yIDAgdG8gc2hvdyBhbGwgaXRlbXMuJywgJ3BsYWNlaG9sZGVyOiBkZWZhdWx0IHBlciBwYWdlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfcGVyX3BhZ2UoJ3Blcl9wYWdlJykpLFxuXHRcdFx0XHR2YWx1ZTogcGVyX3BhZ2UgfHwgJycsXG5cdFx0XHRcdHR5cGU6ICdudW1iZXInLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocGVyX3BhZ2UpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHBlcl9wYWdlOiBwZXJfcGFnZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoU2VsZWN0Q29udHJvbCwge1xuXHRcdFx0XHRrZXk6ICdteWNvdXJzZXMnLFxuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnTXkgJXMnLCAncGxhY2Vob2xkZXI6IENvdXJzZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZXMnKSksXG5cdFx0XHRcdHZhbHVlOiBteWNvdXJzZXMsXG5cdFx0XHRcdG9wdGlvbnM6IFt7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJ1Nob3cgQWxsICVzIChkZWZhdWx0KScsICdwbGFjZWhvbGRlcnM6IGNvdXJzZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZXMnKSksXG5cdFx0XHRcdFx0dmFsdWU6ICcnXG5cdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnU2hvdyBFbnJvbGxlZCAlcyBvbmx5JywgJ3BsYWNlaG9sZGVyczogY291cnNlcycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlcycpKSxcblx0XHRcdFx0XHR2YWx1ZTogJ2Vucm9sbGVkJ1xuXHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJ1Nob3cgbm90LUVucm9sbGVkICVzIG9ubHknLCAncGxhY2Vob2xkZXJzOiBjb3Vyc2VzJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2VzJykpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbm90LWVucm9sbGVkJ1xuXHRcdFx0XHR9XSxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKG15Y291cnNlcykge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgbXljb3Vyc2VzOiBteWNvdXJzZXMgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0J2Vucm9sbGVkJyA9PT0gbXljb3Vyc2VzICYmIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRrZXk6ICdzdGF0dXMnLFxuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnRW5yb2xsZWQgJXMgU3RhdHVzJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2VzJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2VzJykpLFxuXHRcdFx0XHR2YWx1ZTogc3RhdHVzLFxuXHRcdFx0XHRvcHRpb25zOiBbe1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnTm90IFN0YXJ0ZWQnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdub3Rfc3RhcnRlZCdcblx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnSW4gUHJvZ3Jlc3MnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdpbl9wcm9ncmVzcydcblx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnQ29tcGxldGVkJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnY29tcGxldGVkJ1xuXHRcdFx0XHR9XSxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHN0YXR1cykge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgc3RhdHVzOiBzdGF0dXMgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZmllbGRfc2hvd19jb250ZW50LFxuXHRcdFx0ZmllbGRfc2hvd190aHVtYm5haWxcblx0XHQpO1xuXG5cdFx0dmFyIHBhbmVsX2NvdXJzZV9jYXRlZ29yeV9zZWN0aW9uID0gJyc7XG5cdFx0aWYgKGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddWydjb3Vyc2VzX3RheG9ub21pZXMnXVsnbGRfY291cnNlX2NhdGVnb3J5J10gPT09ICd5ZXMnKSB7XG5cdFx0XHR2YXIgcGFuZWxfY291cnNlX2NhdGVnb3J5X3NlY3Rpb25fb3BlbiA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvdXJzZV9jYXRlZ29yeV9uYW1lICE9ICcnIHx8IGNvdXJzZV9jYXQgIT0gJycpIHtcblx0XHRcdFx0cGFuZWxfY291cnNlX2NhdGVnb3J5X3NlY3Rpb25fb3BlbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYW5lbF9jb3Vyc2VfY2F0ZWdvcnlfc2VjdGlvbiA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHNwcmludGYoX3goJyVzIENhdGVnb3J5IFNldHRpbmdzJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogcGFuZWxfY291cnNlX2NhdGVnb3J5X3NlY3Rpb25fb3BlblxuXHRcdFx0XHR9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgQ2F0ZWdvcnkgU2x1ZycsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgY2F0ZWdvcnkgc2x1Zy4nLCAncGxhY2Vob2xkZXI6IENvdXJzZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZXMnKSksXG5cdFx0XHRcdFx0dmFsdWU6IGNvdXJzZV9jYXRlZ29yeV9uYW1lIHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb3Vyc2VfY2F0ZWdvcnlfbmFtZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjb3Vyc2VfY2F0ZWdvcnlfbmFtZTogY291cnNlX2NhdGVnb3J5X25hbWUgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIENhdGVnb3J5IElEJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdzaG93cyAlcyB3aXRoIG1lbnRpb25lZCBjYXRlZ29yeSBJRC4nLCAncGxhY2Vob2xkZXI6IENvdXJzZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZXMnKSksXG5cdFx0XHRcdFx0dmFsdWU6IGNvdXJzZV9jYXQgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNvdXJzZV9jYXQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY291cnNlX2NhdDogY291cnNlX2NhdCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBDYXRlZ29yeSBTZWxlY3RvcicsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgYSAlcyBjYXRlZ29yeSBkcm9wZG93bi4nLCAncGxhY2Vob2xkZXI6IENvdXJzZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZXMnKSksXG5cdFx0XHRcdFx0Y2hlY2tlZDogISFjb3Vyc2VfY2F0ZWdvcnlzZWxlY3Rvcixcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY291cnNlX2NhdGVnb3J5c2VsZWN0b3IpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY291cnNlX2NhdGVnb3J5c2VsZWN0b3I6IGNvdXJzZV9jYXRlZ29yeXNlbGVjdG9yIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dmFyIHBhbmVsX2NvdXJzZV90YWdfc2VjdGlvbiA9ICcnO1xuXHRcdGlmIChsZGxtc19zZXR0aW5nc1snc2V0dGluZ3MnXVsnY291cnNlc190YXhvbm9taWVzJ11bJ2xkX2NvdXJzZV90YWcnXSA9PT0gJ3llcycpIHtcblx0XHRcdHZhciBwYW5lbF9jb3Vyc2VfdGFnX3NlY3Rpb25fb3BlbiA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvdXJzZV90YWcgIT0gJycgfHwgY291cnNlX3RhZ19pZCAhPSAnJykge1xuXHRcdFx0XHRwYW5lbF9jb3Vyc2VfdGFnX3NlY3Rpb25fb3BlbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYW5lbF9jb3Vyc2VfdGFnX3NlY3Rpb24gPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiBzcHJpbnRmKF94KCclcyBUYWcgU2V0dGluZ3MnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHRcdGluaXRpYWxPcGVuOiBwYW5lbF9jb3Vyc2VfdGFnX3NlY3Rpb25fb3BlblxuXHRcdFx0XHR9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgVGFnIFNsdWcnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzICVzIHdpdGggbWVudGlvbmVkIHRhZyBzbHVnLicsICdwbGFjZWhvbGRlcjogQ291cnNlcycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlcycpKSxcblx0XHRcdFx0XHR2YWx1ZTogY291cnNlX3RhZyB8fCAnJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY291cnNlX3RhZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjb3Vyc2VfdGFnOiBjb3Vyc2VfdGFnIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBUYWcgSUQnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzICVzIHdpdGggbWVudGlvbmVkIHRhZyBJRC4nLCAncGxhY2Vob2xkZXI6IENvdXJzZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZXMnKSksXG5cdFx0XHRcdFx0dmFsdWU6IGNvdXJzZV90YWdfaWQgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNvdXJzZV90YWdfaWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY291cnNlX3RhZ19pZDogY291cnNlX3RhZ19pZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHZhciBwYW5lbF93cF9jYXRlZ29yeV9zZWN0aW9uID0gJyc7XG5cdFx0aWYgKGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddWydjb3Vyc2VzX3RheG9ub21pZXMnXVsnd3BfcG9zdF9jYXRlZ29yeSddID09PSAneWVzJykge1xuXHRcdFx0dmFyIHBhbmVsX3dwX2NhdGVnb3J5X3NlY3Rpb25fb3BlbiA9IGZhbHNlO1xuXHRcdFx0aWYgKGNhdGVnb3J5X25hbWUgIT0gJycgfHwgY2F0ICE9ICcnKSB7XG5cdFx0XHRcdHBhbmVsX3dwX2NhdGVnb3J5X3NlY3Rpb25fb3BlbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYW5lbF93cF9jYXRlZ29yeV9zZWN0aW9uID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogX18oJ1dQIENhdGVnb3J5IFNldHRpbmdzJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGluaXRpYWxPcGVuOiBwYW5lbF93cF9jYXRlZ29yeV9zZWN0aW9uX29wZW5cblx0XHRcdFx0fSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdXUCBDYXRlZ29yeSBTbHVnJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzICVzIHdpdGggbWVudGlvbmVkIFdQIGNhdGVnb3J5IHNsdWcuJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2VzJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2VzJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBjYXRlZ29yeV9uYW1lIHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjYXRlZ29yeV9uYW1lKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNhdGVnb3J5X25hbWU6IGNhdGVnb3J5X25hbWUgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIENhdGVnb3J5IElEJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdzaG93cyAlcyB3aXRoIG1lbnRpb25lZCBjYXRlZ29yeSBJRC4nLCAncGxhY2Vob2xkZXI6IENvdXJzZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZXMnKSksXG5cdFx0XHRcdFx0dmFsdWU6IGNhdCB8fCAnJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY2F0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNhdDogY2F0IH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdXUCBDYXRlZ29yeSBTZWxlY3RvcicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRoZWxwOiBfXygnc2hvd3MgYSBXUCBjYXRlZ29yeSBkcm9wZG93bi4nLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0Y2hlY2tlZDogISFjYXRlZ29yeXNlbGVjdG9yLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjYXRlZ29yeXNlbGVjdG9yKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNhdGVnb3J5c2VsZWN0b3I6IGNhdGVnb3J5c2VsZWN0b3IgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR2YXIgcGFuZWxfd3BfdGFnX3NlY3Rpb24gPSAnJztcblx0XHRpZiAobGRsbXNfc2V0dGluZ3NbJ3NldHRpbmdzJ11bJ2NvdXJzZXNfdGF4b25vbWllcyddWyd3cF9wb3N0X3RhZyddID09PSAneWVzJykge1xuXHRcdFx0dmFyIHBhbmVsX3dwX3RhZ19zZWN0aW9uX29wZW4gPSBmYWxzZTtcblx0XHRcdGlmICh0YWcgIT0gJycgfHwgdGFnX2lkICE9ICcnKSB7XG5cdFx0XHRcdHBhbmVsX3dwX3RhZ19zZWN0aW9uX29wZW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGFuZWxfd3BfdGFnX3NlY3Rpb24gPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiBfXygnV1AgVGFnIFNldHRpbmdzJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGluaXRpYWxPcGVuOiBwYW5lbF93cF90YWdfc2VjdGlvbl9vcGVuXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnV1AgVGFnIFNsdWcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgV1AgdGFnIHNsdWcuJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2VzJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2VzJykpLFxuXHRcdFx0XHRcdHZhbHVlOiB0YWcgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHRhZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB0YWc6IHRhZyB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1dQIFRhZyBJRCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdzaG93cyAlcyB3aXRoIG1lbnRpb25lZCBXUCB0YWcgSUQuJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2VzJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2VzJykpLFxuXHRcdFx0XHRcdHZhbHVlOiB0YWdfaWQgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHRhZ19pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB0YWdfaWQ6IHRhZ19pZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHZhciBwYW5lbF9wcmV2aWV3ID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0e1xuXHRcdFx0XHR0aXRsZTogX18oJ1ByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdGluaXRpYWxPcGVuOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdGxhYmVsOiBfXygnU2hvdyBQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRjaGVja2VkOiAhIXByZXZpZXdfc2hvdyxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfc2hvdykge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJldmlld19zaG93OiBwcmV2aWV3X3Nob3cgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdGxhYmVsOiBfXygnVXNlciBJRCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0aGVscDogX18oJ0VudGVyIGEgVXNlciBJRCB0byB0ZXN0IHByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdHZhbHVlOiBwcmV2aWV3X3VzZXJfaWQgfHwgJycsXG5cdFx0XHRcdHR5cGU6ICdudW1iZXInLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocHJldmlld191c2VyX2lkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X3VzZXJfaWQ6IHByZXZpZXdfdXNlcl9pZCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0dmFyIGluc3BlY3RvckNvbnRyb2xzID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0SW5zcGVjdG9yQ29udHJvbHMsXG5cdFx0XHRudWxsLFxuXHRcdFx0cGFuZWxib2R5X2hlYWRlcixcblx0XHRcdHBhbmVsX2NvdXJzZV9ncmlkX3NlY3Rpb24sXG5cdFx0XHRwYW5lbF9jb3Vyc2VfY2F0ZWdvcnlfc2VjdGlvbixcblx0XHRcdHBhbmVsX2NvdXJzZV90YWdfc2VjdGlvbixcblx0XHRcdHBhbmVsX3dwX2NhdGVnb3J5X3NlY3Rpb24sXG5cdFx0XHRwYW5lbF93cF90YWdfc2VjdGlvbixcblx0XHRcdHBhbmVsX3ByZXZpZXdcblx0XHQpO1xuXG5cdFx0ZnVuY3Rpb24gZG9fc2VydmVyc2lkZV9yZW5kZXIoYXR0cmlidXRlcykge1xuXHRcdFx0aWYgKGF0dHJpYnV0ZXMucHJldmlld19zaG93ID09IHRydWUpIHtcblx0XHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZXJ2ZXJTaWRlUmVuZGVyLCB7XG5cdFx0XHRcdFx0YmxvY2s6ICdsZWFybmRhc2gvbGQtY291cnNlLWxpc3QnLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gX18oJ1tsZF9jb3Vyc2VfbGlzdF0gc2hvcnRjb2RlIG91dHB1dCBzaG93biBoZXJlJywgJ2xlYXJuZGFzaCcpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBbaW5zcGVjdG9yQ29udHJvbHMsIGRvX3NlcnZlcnNpZGVfcmVuZGVyKHByb3BzLmF0dHJpYnV0ZXMpXTtcblx0fSxcblxuXHRzYXZlOiBmdW5jdGlvbiBzYXZlKHByb3BzKSB7fVxufSk7IiwiLyoqXG4gKiBMZWFybkRhc2ggQmxvY2sgbGQtbGVzc29uLWxpc3RcbiAqXG4gKiBAc2luY2UgMi41LjlcbiAqIEBwYWNrYWdlIExlYXJuRGFzaFxuICovXG5cbi8qKlxuICogTGVhcm5EYXNoIGJsb2NrIGZ1bmN0aW9uc1xuICovXG5pbXBvcnQgeyBsZGxtc19nZXRfY3VzdG9tX2xhYmVsLCBsZGxtc19nZXRfcGVyX3BhZ2UgfSBmcm9tICcuLi9sZGxtcy5qcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgYmxvY2sgbGlicmFyaWVzXG4gKi9cbnZhciBfd3AkaTE4biA9IHdwLmkxOG4sXG4gICAgX18gPSBfd3AkaTE4bi5fXyxcbiAgICBfeCA9IF93cCRpMThuLl94LFxuICAgIHNwcmludGYgPSBfd3AkaTE4bi5zcHJpbnRmO1xudmFyIHJlZ2lzdGVyQmxvY2tUeXBlID0gd3AuYmxvY2tzLnJlZ2lzdGVyQmxvY2tUeXBlO1xudmFyIEluc3BlY3RvckNvbnRyb2xzID0gd3AuZWRpdG9yLkluc3BlY3RvckNvbnRyb2xzO1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBTZXJ2ZXJTaWRlUmVuZGVyID0gX3dwJGNvbXBvbmVudHMuU2VydmVyU2lkZVJlbmRlcixcbiAgICBQYW5lbEJvZHkgPSBfd3AkY29tcG9uZW50cy5QYW5lbEJvZHksXG4gICAgUmFuZ2VDb250cm9sID0gX3dwJGNvbXBvbmVudHMuUmFuZ2VDb250cm9sLFxuICAgIFNlbGVjdENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5TZWxlY3RDb250cm9sLFxuICAgIFRvZ2dsZUNvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5Ub2dnbGVDb250cm9sLFxuICAgIFRleHRDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVGV4dENvbnRyb2w7XG5cblxucmVnaXN0ZXJCbG9ja1R5cGUoJ2xlYXJuZGFzaC9sZC1sZXNzb24tbGlzdCcsIHtcblx0dGl0bGU6IHNwcmludGYoX3goJ0xlYXJuRGFzaCAlcyBMaXN0JywgJ3BsYWNlaG9sZGVyOiBMZXNzb24nLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2xlc3NvbicpKSxcblx0ZGVzY3JpcHRpb246IHNwcmludGYoX3goJ1RoaXMgYmxvY2sgc2hvd3MgYSBsaXN0IG9mICVzLicsICdwbGFjZWhvbGRlcnM6IGxlc3NvbnMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2xlc3NvbnMnKSksXG5cdGljb246ICdsaXN0LXZpZXcnLFxuXHRjYXRlZ29yeTogJ2xlYXJuZGFzaC1ibG9ja3MnLFxuXHRleGFtcGxlOiB7XG5cdFx0YXR0cmlidXRlczoge1xuXHRcdFx0ZXhhbXBsZV9zaG93OiAxXG5cdFx0fVxuXHR9LFxuXHRzdXBwb3J0czoge1xuXHRcdGN1c3RvbUNsYXNzTmFtZTogZmFsc2Vcblx0fSxcblx0YXR0cmlidXRlczoge1xuXHRcdG9yZGVyYnk6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJ0lEJ1xuXHRcdH0sXG5cdFx0b3JkZXI6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJ0RFU0MnXG5cdFx0fSxcblx0XHRwZXJfcGFnZToge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0Y291cnNlX2lkOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRzaG93X2NvbnRlbnQ6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IHRydWVcblx0XHR9LFxuXHRcdHNob3dfdGh1bWJuYWlsOiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiB0cnVlXG5cdFx0fSxcblx0XHRsZXNzb25fY2F0ZWdvcnlfbmFtZToge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0bGVzc29uX2NhdDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0bGVzc29uX2NhdGVnb3J5c2VsZWN0b3I6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IGZhbHNlXG5cdFx0fSxcblx0XHRsZXNzb25fdGFnOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRsZXNzb25fdGFnX2lkOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRjYXRlZ29yeV9uYW1lOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRjYXQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdGNhdGVnb3J5c2VsZWN0b3I6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IGZhbHNlXG5cdFx0fSxcblx0XHR0YWc6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdHRhZ19pZDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0Y291cnNlX2dyaWQ6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJ1xuXHRcdH0sXG5cdFx0Y29sOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6IGxkbG1zX3NldHRpbmdzWydwbHVnaW5zJ11bJ2xlYXJuZGFzaC1jb3Vyc2UtZ3JpZCddWydlbmFibGVkJ11bJ2NvbF9kZWZhdWx0J10gfHwgM1xuXHRcdH0sXG5cdFx0cHJldmlld19zaG93OiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiB0cnVlXG5cdFx0fSxcblx0XHRleGFtcGxlX3Nob3c6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IDBcblx0XHR9XG5cdH0sXG5cdGVkaXQ6IGZ1bmN0aW9uIGVkaXQocHJvcHMpIHtcblx0XHR2YXIgX3Byb3BzJGF0dHJpYnV0ZXMgPSBwcm9wcy5hdHRyaWJ1dGVzLFxuXHRcdCAgICBvcmRlcmJ5ID0gX3Byb3BzJGF0dHJpYnV0ZXMub3JkZXJieSxcblx0XHQgICAgb3JkZXIgPSBfcHJvcHMkYXR0cmlidXRlcy5vcmRlcixcblx0XHQgICAgcGVyX3BhZ2UgPSBfcHJvcHMkYXR0cmlidXRlcy5wZXJfcGFnZSxcblx0XHQgICAgY291cnNlX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMuY291cnNlX2lkLFxuXHRcdCAgICBzaG93X2NvbnRlbnQgPSBfcHJvcHMkYXR0cmlidXRlcy5zaG93X2NvbnRlbnQsXG5cdFx0ICAgIHNob3dfdGh1bWJuYWlsID0gX3Byb3BzJGF0dHJpYnV0ZXMuc2hvd190aHVtYm5haWwsXG5cdFx0ICAgIGxlc3Nvbl9jYXRlZ29yeV9uYW1lID0gX3Byb3BzJGF0dHJpYnV0ZXMubGVzc29uX2NhdGVnb3J5X25hbWUsXG5cdFx0ICAgIGxlc3Nvbl9jYXQgPSBfcHJvcHMkYXR0cmlidXRlcy5sZXNzb25fY2F0LFxuXHRcdCAgICBsZXNzb25fY2F0ZWdvcnlzZWxlY3RvciA9IF9wcm9wcyRhdHRyaWJ1dGVzLmxlc3Nvbl9jYXRlZ29yeXNlbGVjdG9yLFxuXHRcdCAgICBsZXNzb25fdGFnID0gX3Byb3BzJGF0dHJpYnV0ZXMubGVzc29uX3RhZyxcblx0XHQgICAgbGVzc29uX3RhZ19pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmxlc3Nvbl90YWdfaWQsXG5cdFx0ICAgIGNhdGVnb3J5X25hbWUgPSBfcHJvcHMkYXR0cmlidXRlcy5jYXRlZ29yeV9uYW1lLFxuXHRcdCAgICBjYXQgPSBfcHJvcHMkYXR0cmlidXRlcy5jYXQsXG5cdFx0ICAgIGNhdGVnb3J5c2VsZWN0b3IgPSBfcHJvcHMkYXR0cmlidXRlcy5jYXRlZ29yeXNlbGVjdG9yLFxuXHRcdCAgICB0YWcgPSBfcHJvcHMkYXR0cmlidXRlcy50YWcsXG5cdFx0ICAgIHRhZ19pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnRhZ19pZCxcblx0XHQgICAgY291cnNlX2dyaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5jb3Vyc2VfZ3JpZCxcblx0XHQgICAgY29sID0gX3Byb3BzJGF0dHJpYnV0ZXMuY29sLFxuXHRcdCAgICBwcmV2aWV3X3Nob3cgPSBfcHJvcHMkYXR0cmlidXRlcy5wcmV2aWV3X3Nob3csXG5cdFx0ICAgIGV4YW1wbGVfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLmV4YW1wbGVfc2hvdyxcblx0XHQgICAgc2V0QXR0cmlidXRlcyA9IHByb3BzLnNldEF0dHJpYnV0ZXM7XG5cblxuXHRcdHZhciBmaWVsZF9zaG93X2NvbnRlbnQgPSAnJztcblx0XHR2YXIgZmllbGRfc2hvd190aHVtYm5haWwgPSAnJztcblx0XHR2YXIgcGFuZWxfbGVzc29uX2dyaWRfc2VjdGlvbiA9ICcnO1xuXG5cdFx0dmFyIGNvdXJzZV9ncmlkX2RlZmF1bHQgPSB0cnVlO1xuXHRcdGlmIChsZGxtc19zZXR0aW5nc1sncGx1Z2lucyddWydsZWFybmRhc2gtY291cnNlLWdyaWQnXVsnZW5hYmxlZCddID09PSB0cnVlKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNvdXJzZV9ncmlkICE9PSAndW5kZWZpbmVkJyAmJiAoY291cnNlX2dyaWQgPT0gdHJ1ZSB8fCBjb3Vyc2VfZ3JpZCA9PSBmYWxzZSkpIHtcblx0XHRcdFx0Y291cnNlX2dyaWRfZGVmYXVsdCA9IGNvdXJzZV9ncmlkO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbGVzc29uX2dyaWRfc2VjdGlvbl9vcGVuID0gZmFsc2U7XG5cdFx0XHRpZiAoY291cnNlX2dyaWRfZGVmYXVsdCA9PSB0cnVlKSB7XG5cdFx0XHRcdGxlc3Nvbl9ncmlkX3NlY3Rpb25fb3BlbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYW5lbF9sZXNzb25fZ3JpZF9zZWN0aW9uID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogX18oJ0dyaWQgU2V0dGluZ3MnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aW5pdGlhbE9wZW46IGxlc3Nvbl9ncmlkX3NlY3Rpb25fb3BlblxuXHRcdFx0XHR9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnU2hvdyBHcmlkJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICEhY291cnNlX2dyaWRfZGVmYXVsdCxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY291cnNlX2dyaWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY291cnNlX2dyaWQ6IGNvdXJzZV9ncmlkIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChSYW5nZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ0NvbHVtbnMnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6IGNvbCB8fCBsZGxtc19zZXR0aW5nc1sncGx1Z2lucyddWydsZWFybmRhc2gtY291cnNlLWdyaWQnXVsnZW5hYmxlZCddWydjb2xfZGVmYXVsdCddLFxuXHRcdFx0XHRcdG1pbjogMSxcblx0XHRcdFx0XHRtYXg6IGxkbG1zX3NldHRpbmdzWydwbHVnaW5zJ11bJ2xlYXJuZGFzaC1jb3Vyc2UtZ3JpZCddWydlbmFibGVkJ11bJ2NvbF9tYXgnXSxcblx0XHRcdFx0XHRzdGVwOiAxLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb2wpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY29sOiBjb2wgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRmaWVsZF9zaG93X2NvbnRlbnQgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0bGFiZWw6IF9fKCdTaG93IENvbnRlbnQnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRjaGVja2VkOiAhIXNob3dfY29udGVudCxcblx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShzaG93X2NvbnRlbnQpIHtcblx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBzaG93X2NvbnRlbnQ6IHNob3dfY29udGVudCB9KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGZpZWxkX3Nob3dfdGh1bWJuYWlsID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdGxhYmVsOiBfXygnU2hvdyBUaHVtYm5haWwnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRjaGVja2VkOiAhIXNob3dfdGh1bWJuYWlsLFxuXHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHNob3dfdGh1bWJuYWlsKSB7XG5cdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgc2hvd190aHVtYm5haWw6IHNob3dfdGh1bWJuYWlsIH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dmFyIHBhbmVsYm9keV9oZWFkZXIgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRQYW5lbEJvZHksXG5cdFx0XHR7XG5cdFx0XHRcdHRpdGxlOiBfXygnU2V0dGluZ3MnLCAnbGVhcm5kYXNoJylcblx0XHRcdH0sXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIElEJywgJ0NvdXJzZSBJRCcsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdFbnRlciBzaW5nbGUgJTEkcyBJRCB0byBsaW1pdCBsaXN0aW5nLiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogY291cnNlLCBjb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdHZhbHVlOiBjb3Vyc2VfaWQgfHwgJycsXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb3Vyc2VfaWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvdXJzZV9pZDogY291cnNlX2lkIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdGtleTogJ29yZGVyYnknLFxuXHRcdFx0XHRsYWJlbDogX18oJ09yZGVyIGJ5JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHR2YWx1ZTogb3JkZXJieSxcblx0XHRcdFx0b3B0aW9uczogW3tcblx0XHRcdFx0XHRsYWJlbDogX18oJ0lEIC0gT3JkZXIgYnkgcG9zdCBpZC4gKGRlZmF1bHQpJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnSUQnXG5cdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1RpdGxlIC0gT3JkZXIgYnkgcG9zdCB0aXRsZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3RpdGxlJ1xuXHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdEYXRlIC0gT3JkZXIgYnkgcG9zdCBkYXRlJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnZGF0ZSdcblx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnTWVudSAtIE9yZGVyIGJ5IFBhZ2UgT3JkZXIgVmFsdWUnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdtZW51X29yZGVyJ1xuXHRcdFx0XHR9XSxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKG9yZGVyYnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IG9yZGVyYnk6IG9yZGVyYnkgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRyb2wsIHtcblx0XHRcdFx0a2V5OiAnb3JkZXInLFxuXHRcdFx0XHRsYWJlbDogX18oJ09yZGVyJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHR2YWx1ZTogb3JkZXIsXG5cdFx0XHRcdG9wdGlvbnM6IFt7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdERVNDIC0gaGlnaGVzdCB0byBsb3dlc3QgdmFsdWVzIChkZWZhdWx0KScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ0RFU0MnXG5cdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ0FTQyAtIGxvd2VzdCB0byBoaWdoZXN0IHZhbHVlcycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ0FTQydcblx0XHRcdFx0fV0sXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShvcmRlcikge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgb3JkZXI6IG9yZGVyIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgcGVyIHBhZ2UnLCAncGxhY2Vob2xkZXI6IExlc3NvbnMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2xlc3NvbnMnKSksXG5cdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ0xlYXZlIGVtcHR5IGZvciBkZWZhdWx0ICglZCkgb3IgMCB0byBzaG93IGFsbCBpdGVtcy4nLCAncGxhY2Vob2xkZXI6IGRlZmF1bHQgcGVyIHBhZ2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9wZXJfcGFnZSgncGVyX3BhZ2UnKSksXG5cdFx0XHRcdHZhbHVlOiBwZXJfcGFnZSB8fCAnJyxcblx0XHRcdFx0dHlwZTogJ251bWJlcicsXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwZXJfcGFnZSkge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcGVyX3BhZ2U6IHBlcl9wYWdlIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdGZpZWxkX3Nob3dfY29udGVudCxcblx0XHRcdGZpZWxkX3Nob3dfdGh1bWJuYWlsXG5cdFx0KTtcblxuXHRcdHZhciBwYW5lbF9sZXNzb25fY2F0ZWdvcnlfc2VjdGlvbiA9ICcnO1xuXHRcdGlmIChsZGxtc19zZXR0aW5nc1snc2V0dGluZ3MnXVsnbGVzc29uc190YXhvbm9taWVzJ11bJ2xkX2xlc3Nvbl9jYXRlZ29yeSddID09PSAneWVzJykge1xuXHRcdFx0dmFyIHBhbmVsX2xlc3Nvbl9jYXRlZ29yeV9zZWN0aW9uX29wZW4gPSBmYWxzZTtcblx0XHRcdGlmIChsZXNzb25fY2F0ZWdvcnlfbmFtZSAhPSAnJyB8fCBsZXNzb25fY2F0ICE9ICcnKSB7XG5cdFx0XHRcdHBhbmVsX2xlc3Nvbl9jYXRlZ29yeV9zZWN0aW9uX29wZW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGFuZWxfbGVzc29uX2NhdGVnb3J5X3NlY3Rpb24gPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiBzcHJpbnRmKF94KCclcyBDYXRlZ29yeSBTZXR0aW5ncycsICdwbGFjZWhvbGRlcjogTGVzc29uJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdsZXNzb24nKSksXG5cdFx0XHRcdFx0aW5pdGlhbE9wZW46IHBhbmVsX2xlc3Nvbl9jYXRlZ29yeV9zZWN0aW9uX29wZW5cblx0XHRcdFx0fSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIENhdGVnb3J5IFNsdWcnLCAncGxhY2Vob2xkZXI6IExlc3NvbicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnbGVzc29uJykpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzICVzIHdpdGggbWVudGlvbmVkIGNhdGVnb3J5IHNsdWcuJywgJ3BsYWNlaG9sZGVyOiBsZXNzb25zJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdsZXNzb25zJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBsZXNzb25fY2F0ZWdvcnlfbmFtZSB8fCAnJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UobGVzc29uX2NhdGVnb3J5X25hbWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgbGVzc29uX2NhdGVnb3J5X25hbWU6IGxlc3Nvbl9jYXRlZ29yeV9uYW1lIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBDYXRlZ29yeSBJRCcsICdwbGFjZWhvbGRlcjogTGVzc29uJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdsZXNzb24nKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgY2F0ZWdvcnkgSUQuJywgJ3BsYWNlaG9sZGVyOiBsZXNzb25zJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdsZXNzb25zJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBsZXNzb25fY2F0IHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShsZXNzb25fY2F0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGxlc3Nvbl9jYXQ6IGxlc3Nvbl9jYXQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgQ2F0ZWdvcnkgU2VsZWN0b3InLCAncGxhY2Vob2xkZXI6IExlc3NvbicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnbGVzc29uJykpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzIGEgJXMgY2F0ZWdvcnkgZHJvcGRvd24uJywgJ3BsYWNlaG9sZGVyOiBMZXNzb25zJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdsZXNzb25zJykpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICEhbGVzc29uX2NhdGVnb3J5c2VsZWN0b3IsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGxlc3Nvbl9jYXRlZ29yeXNlbGVjdG9yKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGxlc3Nvbl9jYXRlZ29yeXNlbGVjdG9yOiBsZXNzb25fY2F0ZWdvcnlzZWxlY3RvciB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHZhciBwYW5lbF9sZXNzb25fdGFnX3NlY3Rpb24gPSAnJztcblx0XHRpZiAobGRsbXNfc2V0dGluZ3NbJ3NldHRpbmdzJ11bJ2xlc3NvbnNfdGF4b25vbWllcyddWydsZF9sZXNzb25fdGFnJ10gPT09ICd5ZXMnKSB7XG5cdFx0XHR2YXIgcGFuZWxfbGVzc29uX3RhZ19zZWN0aW9uX29wZW4gPSBmYWxzZTtcblx0XHRcdGlmIChsZXNzb25fdGFnICE9ICcnIHx8IGxlc3Nvbl90YWdfaWQgIT0gJycpIHtcblx0XHRcdFx0cGFuZWxfbGVzc29uX3RhZ19zZWN0aW9uX29wZW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGFuZWxfbGVzc29uX3RhZ19zZWN0aW9uID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogc3ByaW50ZihfeCgnJXMgVGFnIFNldHRpbmdzJywgJ3BsYWNlaG9sZGVyOiBMZXNzb24nLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2xlc3NvbicpKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogcGFuZWxfbGVzc29uX3RhZ19zZWN0aW9uX29wZW5cblx0XHRcdFx0fSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIFRhZyBTbHVnJywgJ3BsYWNlaG9sZGVyOiBMZXNzb24nLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2xlc3NvbicpKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdzaG93cyAlcyB3aXRoIG1lbnRpb25lZCB0YWcgc2x1Zy4nLCAncGxhY2Vob2xkZXI6IExlc3NvbnMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2xlc3NvbnMnKSksXG5cdFx0XHRcdFx0dmFsdWU6IGxlc3Nvbl90YWcgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGxlc3Nvbl90YWcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgbGVzc29uX3RhZzogbGVzc29uX3RhZyB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgVGFnIElEJywgJ3BsYWNlaG9sZGVyOiBMZXNzb24nLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2xlc3NvbicpKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdzaG93cyAlcyB3aXRoIG1lbnRpb25lZCB0YWcgSUQuJywgJ3BsYWNlaG9sZGVyOiBMZXNzb25zJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdsZXNzb25zJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBsZXNzb25fdGFnX2lkIHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShsZXNzb25fdGFnX2lkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGxlc3Nvbl90YWdfaWQ6IGxlc3Nvbl90YWdfaWQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR2YXIgcGFuZWxfd3BfY2F0ZWdvcnlfc2VjdGlvbiA9ICcnO1xuXHRcdGlmIChsZGxtc19zZXR0aW5nc1snc2V0dGluZ3MnXVsnbGVzc29uc190YXhvbm9taWVzJ11bJ3dwX3Bvc3RfY2F0ZWdvcnknXSA9PT0gJ3llcycpIHtcblx0XHRcdHZhciBwYW5lbF93cF9jYXRlZ29yeV9zZWN0aW9uX29wZW4gPSBmYWxzZTtcblx0XHRcdGlmIChjYXRlZ29yeV9uYW1lICE9ICcnIHx8IGNhdCAhPSAnJykge1xuXHRcdFx0XHRwYW5lbF93cF9jYXRlZ29yeV9zZWN0aW9uX29wZW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGFuZWxfd3BfY2F0ZWdvcnlfc2VjdGlvbiA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IF9fKCdXUCBDYXRlZ29yeSBTZXR0aW5ncycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogcGFuZWxfd3BfY2F0ZWdvcnlfc2VjdGlvbl9vcGVuXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnV1AgQ2F0ZWdvcnkgU2x1ZycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdzaG93cyAlcyB3aXRoIG1lbnRpb25lZCBXUCBjYXRlZ29yeSBzbHVnLicsICdwbGFjZWhvbGRlcjogTGVzc29ucycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnbGVzc29ucycpKSxcblx0XHRcdFx0XHR2YWx1ZTogY2F0ZWdvcnlfbmFtZSB8fCAnJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY2F0ZWdvcnlfbmFtZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjYXRlZ29yeV9uYW1lOiBjYXRlZ29yeV9uYW1lIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBDYXRlZ29yeSBJRCcsICdwbGFjZWhvbGRlcjogTGVzc29uJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdsZXNzb24nKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgY2F0ZWdvcnkgSUQuJywgJ3BsYWNlaG9sZGVyOiBMZXNzb25zJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdsZXNzb25zJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBjYXQgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNhdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjYXQ6IGNhdCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnV1AgQ2F0ZWdvcnkgU2VsZWN0b3InLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aGVscDogX18oJ3Nob3dzIGEgV1AgY2F0ZWdvcnkgZHJvcGRvd24uJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICEhY2F0ZWdvcnlzZWxlY3Rvcixcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY2F0ZWdvcnlzZWxlY3Rvcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjYXRlZ29yeXNlbGVjdG9yOiBjYXRlZ29yeXNlbGVjdG9yIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dmFyIHBhbmVsX3dwX3RhZ19zZWN0aW9uID0gJyc7XG5cdFx0aWYgKGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddWydsZXNzb25zX3RheG9ub21pZXMnXVsnd3BfcG9zdF90YWcnXSA9PT0gJ3llcycpIHtcblx0XHRcdHZhciBwYW5lbF93cF90YWdfc2VjdGlvbl9vcGVuID0gZmFsc2U7XG5cdFx0XHRpZiAodGFnICE9ICcnIHx8IHRhZ19pZCAhPSAnJykge1xuXHRcdFx0XHRwYW5lbF93cF90YWdfc2VjdGlvbl9vcGVuID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHBhbmVsX3dwX3RhZ19zZWN0aW9uID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogX18oJ1dQIFRhZyBTZXR0aW5ncycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogcGFuZWxfd3BfdGFnX3NlY3Rpb25fb3BlblxuXHRcdFx0XHR9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1dQIFRhZyBTbHVnJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzICVzIHdpdGggbWVudGlvbmVkIFdQIHRhZyBzbHVnLicsICdwbGFjZWhvbGRlcjogTGVzc29ucycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnbGVzc29ucycpKSxcblx0XHRcdFx0XHR2YWx1ZTogdGFnIHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSh0YWcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgdGFnOiB0YWcgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdXUCBUYWcgSUQnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgV1AgdGFnIElELicsICdwbGFjZWhvbGRlcjogTGVzc29ucycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnbGVzc29ucycpKSxcblx0XHRcdFx0XHR2YWx1ZTogdGFnX2lkIHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSh0YWdfaWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgdGFnX2lkOiB0YWdfaWQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR2YXIgcGFuZWxfcHJldmlldyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFBhbmVsQm9keSxcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IF9fKCdQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRpbml0aWFsT3BlbjogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogX18oJ1Nob3cgUHJldmlldycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0Y2hlY2tlZDogISFwcmV2aWV3X3Nob3csXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X3Nob3cpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByZXZpZXdfc2hvdzogcHJldmlld19zaG93IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHR2YXIgaW5zcGVjdG9yQ29udHJvbHMgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRJbnNwZWN0b3JDb250cm9scyxcblx0XHRcdG51bGwsXG5cdFx0XHRwYW5lbGJvZHlfaGVhZGVyLFxuXHRcdFx0cGFuZWxfbGVzc29uX2dyaWRfc2VjdGlvbixcblx0XHRcdHBhbmVsX2xlc3Nvbl9jYXRlZ29yeV9zZWN0aW9uLFxuXHRcdFx0cGFuZWxfbGVzc29uX3RhZ19zZWN0aW9uLFxuXHRcdFx0cGFuZWxfd3BfY2F0ZWdvcnlfc2VjdGlvbixcblx0XHRcdHBhbmVsX3dwX3RhZ19zZWN0aW9uLFxuXHRcdFx0cGFuZWxfcHJldmlld1xuXHRcdCk7XG5cblx0XHRmdW5jdGlvbiBkb19zZXJ2ZXJzaWRlX3JlbmRlcihhdHRyaWJ1dGVzKSB7XG5cdFx0XHRpZiAoYXR0cmlidXRlcy5wcmV2aWV3X3Nob3cgPT0gdHJ1ZSkge1xuXHRcdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlcnZlclNpZGVSZW5kZXIsIHtcblx0XHRcdFx0XHRibG9jazogJ2xlYXJuZGFzaC9sZC1sZXNzb24tbGlzdCcsXG5cdFx0XHRcdFx0YXR0cmlidXRlczogYXR0cmlidXRlc1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBfXygnW2xkX2xlc3Nvbl9saXN0XSBzaG9ydGNvZGUgb3V0cHV0IHNob3duIGhlcmUnLCAnbGVhcm5kYXNoJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtpbnNwZWN0b3JDb250cm9scywgZG9fc2VydmVyc2lkZV9yZW5kZXIocHJvcHMuYXR0cmlidXRlcyldO1xuXHR9LFxuXG5cdHNhdmU6IGZ1bmN0aW9uIHNhdmUocHJvcHMpIHt9XG59KTsiLCIvKipcbiAqIExlYXJuRGFzaCBCbG9jayBsZC10b3BpYy1saXN0XG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCwgbGRsbXNfZ2V0X3Blcl9wYWdlIH0gZnJvbSAnLi4vbGRsbXMuanMnO1xuXG4vKipcbiAqIEludGVybmFsIGJsb2NrIGxpYnJhcmllc1xuICovXG52YXIgX3dwJGkxOG4gPSB3cC5pMThuLFxuICAgIF9fID0gX3dwJGkxOG4uX18sXG4gICAgX3ggPSBfd3AkaTE4bi5feCxcbiAgICBzcHJpbnRmID0gX3dwJGkxOG4uc3ByaW50ZjtcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBJbnNwZWN0b3JDb250cm9scyA9IHdwLmVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgU2VydmVyU2lkZVJlbmRlciA9IF93cCRjb21wb25lbnRzLlNlcnZlclNpZGVSZW5kZXIsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFJhbmdlQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlJhbmdlQ29udHJvbCxcbiAgICBTZWxlY3RDb250cm9sID0gX3dwJGNvbXBvbmVudHMuU2VsZWN0Q29udHJvbCxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbCxcbiAgICBUZXh0Q29udHJvbCA9IF93cCRjb21wb25lbnRzLlRleHRDb250cm9sO1xuXG5cbnJlZ2lzdGVyQmxvY2tUeXBlKCdsZWFybmRhc2gvbGQtdG9waWMtbGlzdCcsIHtcblx0dGl0bGU6IHNwcmludGYoX3goJ0xlYXJuRGFzaCAlcyBMaXN0JywgJ3BsYWNlaG9sZGVyOiBUb3BpYycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgndG9waWMnKSksXG5cdGRlc2NyaXB0aW9uOiBzcHJpbnRmKF94KCdUaGlzIGJsb2NrIHNob3dzIGEgbGlzdCBvZiAlcy4nLCAncGxhY2Vob2xkZXJzOiB0b3BpY3MnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3RvcGljcycpKSxcblx0aWNvbjogJ2xpc3QtdmlldycsXG5cdGNhdGVnb3J5OiAnbGVhcm5kYXNoLWJsb2NrcycsXG5cdGV4YW1wbGU6IHtcblx0XHRhdHRyaWJ1dGVzOiB7XG5cdFx0XHRleGFtcGxlX3Nob3c6IDFcblx0XHR9XG5cdH0sXG5cdHN1cHBvcnRzOiB7XG5cdFx0Y3VzdG9tQ2xhc3NOYW1lOiBmYWxzZVxuXHR9LFxuXHRhdHRyaWJ1dGVzOiB7XG5cdFx0b3JkZXJieToge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnSUQnXG5cdFx0fSxcblx0XHRvcmRlcjoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnREVTQydcblx0XHR9LFxuXHRcdHBlcl9wYWdlOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRjb3Vyc2VfaWQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdGxlc3Nvbl9pZDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0c2hvd19jb250ZW50OiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiB0cnVlXG5cdFx0fSxcblx0XHRzaG93X3RodW1ibmFpbDoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogdHJ1ZVxuXHRcdH0sXG5cdFx0dG9waWNfY2F0ZWdvcnlfbmFtZToge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0dG9waWNfY2F0OiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHR0b3BpY19jYXRlZ29yeXNlbGVjdG9yOiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdH0sXG5cdFx0dG9waWNfdGFnOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHR0b3BpY190YWdfaWQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdGNhdGVnb3J5X25hbWU6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdGNhdDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0Y2F0ZWdvcnlzZWxlY3Rvcjoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogZmFsc2Vcblx0XHR9LFxuXHRcdHRhZzoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0dGFnX2lkOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRjb3Vyc2VfZ3JpZDoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nXG5cdFx0fSxcblx0XHRjb2w6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogbGRsbXNfc2V0dGluZ3NbJ3BsdWdpbnMnXVsnbGVhcm5kYXNoLWNvdXJzZS1ncmlkJ11bJ2VuYWJsZWQnXVsnY29sX2RlZmF1bHQnXSB8fCAzXG5cdFx0fSxcblx0XHRwcmV2aWV3X3Nob3c6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IHRydWVcblx0XHR9LFxuXHRcdGV4YW1wbGVfc2hvdzoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogMFxuXHRcdH1cblx0fSxcblx0ZWRpdDogZnVuY3Rpb24gZWRpdChwcm9wcykge1xuXHRcdHZhciBfcHJvcHMkYXR0cmlidXRlcyA9IHByb3BzLmF0dHJpYnV0ZXMsXG5cdFx0ICAgIG9yZGVyYnkgPSBfcHJvcHMkYXR0cmlidXRlcy5vcmRlcmJ5LFxuXHRcdCAgICBvcmRlciA9IF9wcm9wcyRhdHRyaWJ1dGVzLm9yZGVyLFxuXHRcdCAgICBwZXJfcGFnZSA9IF9wcm9wcyRhdHRyaWJ1dGVzLnBlcl9wYWdlLFxuXHRcdCAgICBjb3Vyc2VfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5jb3Vyc2VfaWQsXG5cdFx0ICAgIGxlc3Nvbl9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmxlc3Nvbl9pZCxcblx0XHQgICAgc2hvd19jb250ZW50ID0gX3Byb3BzJGF0dHJpYnV0ZXMuc2hvd19jb250ZW50LFxuXHRcdCAgICBzaG93X3RodW1ibmFpbCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnNob3dfdGh1bWJuYWlsLFxuXHRcdCAgICB0b3BpY19jYXRlZ29yeV9uYW1lID0gX3Byb3BzJGF0dHJpYnV0ZXMudG9waWNfY2F0ZWdvcnlfbmFtZSxcblx0XHQgICAgdG9waWNfY2F0ID0gX3Byb3BzJGF0dHJpYnV0ZXMudG9waWNfY2F0LFxuXHRcdCAgICB0b3BpY19jYXRlZ29yeXNlbGVjdG9yID0gX3Byb3BzJGF0dHJpYnV0ZXMudG9waWNfY2F0ZWdvcnlzZWxlY3Rvcixcblx0XHQgICAgdG9waWNfdGFnID0gX3Byb3BzJGF0dHJpYnV0ZXMudG9waWNfdGFnLFxuXHRcdCAgICB0b3BpY190YWdfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy50b3BpY190YWdfaWQsXG5cdFx0ICAgIGNhdGVnb3J5X25hbWUgPSBfcHJvcHMkYXR0cmlidXRlcy5jYXRlZ29yeV9uYW1lLFxuXHRcdCAgICBjYXQgPSBfcHJvcHMkYXR0cmlidXRlcy5jYXQsXG5cdFx0ICAgIGNhdGVnb3J5c2VsZWN0b3IgPSBfcHJvcHMkYXR0cmlidXRlcy5jYXRlZ29yeXNlbGVjdG9yLFxuXHRcdCAgICB0YWcgPSBfcHJvcHMkYXR0cmlidXRlcy50YWcsXG5cdFx0ICAgIHRhZ19pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnRhZ19pZCxcblx0XHQgICAgY291cnNlX2dyaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5jb3Vyc2VfZ3JpZCxcblx0XHQgICAgY29sID0gX3Byb3BzJGF0dHJpYnV0ZXMuY29sLFxuXHRcdCAgICBwcmV2aWV3X3Nob3cgPSBfcHJvcHMkYXR0cmlidXRlcy5wcmV2aWV3X3Nob3csXG5cdFx0ICAgIGV4YW1wbGVfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLmV4YW1wbGVfc2hvdyxcblx0XHQgICAgc2V0QXR0cmlidXRlcyA9IHByb3BzLnNldEF0dHJpYnV0ZXM7XG5cblxuXHRcdHZhciBmaWVsZF9zaG93X2NvbnRlbnQgPSAnJztcblx0XHR2YXIgZmllbGRfc2hvd190aHVtYm5haWwgPSAnJztcblx0XHR2YXIgcGFuZWxfdG9waWNfZ3JpZF9zZWN0aW9uID0gJyc7XG5cblx0XHR2YXIgY291cnNlX2dyaWRfZGVmYXVsdCA9IHRydWU7XG5cdFx0aWYgKGxkbG1zX3NldHRpbmdzWydwbHVnaW5zJ11bJ2xlYXJuZGFzaC1jb3Vyc2UtZ3JpZCddWydlbmFibGVkJ10gPT09IHRydWUpIHtcblx0XHRcdGlmICh0eXBlb2YgY291cnNlX2dyaWQgIT09ICd1bmRlZmluZWQnICYmIChjb3Vyc2VfZ3JpZCA9PSB0cnVlIHx8IGNvdXJzZV9ncmlkID09IGZhbHNlKSkge1xuXHRcdFx0XHRjb3Vyc2VfZ3JpZF9kZWZhdWx0ID0gY291cnNlX2dyaWQ7XG5cdFx0XHR9XG5cblx0XHRcdHZhciB0b3BpY19ncmlkX3NlY3Rpb25fb3BlbiA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvdXJzZV9ncmlkX2RlZmF1bHQgPT0gdHJ1ZSkge1xuXHRcdFx0XHR0b3BpY19ncmlkX3NlY3Rpb25fb3BlbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYW5lbF90b3BpY19ncmlkX3NlY3Rpb24gPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiBfXygnR3JpZCBTZXR0aW5ncycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogdG9waWNfZ3JpZF9zZWN0aW9uX29wZW5cblx0XHRcdFx0fSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1Nob3cgR3JpZCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRjaGVja2VkOiAhIWNvdXJzZV9ncmlkX2RlZmF1bHQsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNvdXJzZV9ncmlkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvdXJzZV9ncmlkOiBjb3Vyc2VfZ3JpZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoUmFuZ2VDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdDb2x1bW5zJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBjb2wgfHwgbGRsbXNfc2V0dGluZ3NbJ3BsdWdpbnMnXVsnbGVhcm5kYXNoLWNvdXJzZS1ncmlkJ11bJ2VuYWJsZWQnXVsnY29sX2RlZmF1bHQnXSxcblx0XHRcdFx0XHRtaW46IDEsXG5cdFx0XHRcdFx0bWF4OiBsZGxtc19zZXR0aW5nc1sncGx1Z2lucyddWydsZWFybmRhc2gtY291cnNlLWdyaWQnXVsnZW5hYmxlZCddWydjb2xfbWF4J10sXG5cdFx0XHRcdFx0c3RlcDogMSxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY29sKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvbDogY29sIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0ZmllbGRfc2hvd19jb250ZW50ID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdGxhYmVsOiBfXygnU2hvdyBDb250ZW50JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0Y2hlY2tlZDogISFzaG93X2NvbnRlbnQsXG5cdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2Uoc2hvd19jb250ZW50KSB7XG5cdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgc2hvd19jb250ZW50OiBzaG93X2NvbnRlbnQgfSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRmaWVsZF9zaG93X3RodW1ibmFpbCA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRsYWJlbDogX18oJ1Nob3cgVGh1bWJuYWlsJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0Y2hlY2tlZDogISFzaG93X3RodW1ibmFpbCxcblx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShzaG93X3RodW1ibmFpbCkge1xuXHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHNob3dfdGh1bWJuYWlsOiBzaG93X3RodW1ibmFpbCB9KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHZhciBwYW5lbGJvZHlfaGVhZGVyID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0e1xuXHRcdFx0XHR0aXRsZTogX18oJ1NldHRpbmdzJywgJ2xlYXJuZGFzaCcpXG5cdFx0XHR9LFxuXHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBJRCcsICdDb3Vyc2UgSUQnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnRW50ZXIgc2luZ2xlICUxJHMgSUQgdG8gbGltaXQgbGlzdGluZy4gTGVhdmUgYmxhbmsgaWYgdXNlZCB3aXRoaW4gYSAlMiRzLicsICdwbGFjZWhvbGRlcnM6IGNvdXJzZSwgY291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHR2YWx1ZTogY291cnNlX2lkIHx8ICcnLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY291cnNlX2lkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjb3Vyc2VfaWQ6IGNvdXJzZV9pZCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIElEJywgJ0xlc3NvbiBJRCcsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnbGVzc29uJykpLFxuXHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdFbnRlciBzaW5nbGUgJTEkcyBJRCB0byBsaW1pdCBsaXN0aW5nLiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogbGVzc29uLCBjb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2xlc3NvbicpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdHZhbHVlOiBsZXNzb25faWQgfHwgJycsXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShsZXNzb25faWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGxlc3Nvbl9pZDogbGVzc29uX2lkIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdGtleTogJ29yZGVyYnknLFxuXHRcdFx0XHRsYWJlbDogX18oJ09yZGVyIGJ5JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHR2YWx1ZTogb3JkZXJieSxcblx0XHRcdFx0b3B0aW9uczogW3tcblx0XHRcdFx0XHRsYWJlbDogX18oJ0lEIC0gT3JkZXIgYnkgcG9zdCBpZC4gKGRlZmF1bHQpJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnSUQnXG5cdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1RpdGxlIC0gT3JkZXIgYnkgcG9zdCB0aXRsZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3RpdGxlJ1xuXHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdEYXRlIC0gT3JkZXIgYnkgcG9zdCBkYXRlJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnZGF0ZSdcblx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnTWVudSAtIE9yZGVyIGJ5IFBhZ2UgT3JkZXIgVmFsdWUnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdtZW51X29yZGVyJ1xuXHRcdFx0XHR9XSxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKG9yZGVyYnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IG9yZGVyYnk6IG9yZGVyYnkgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRyb2wsIHtcblx0XHRcdFx0a2V5OiAnb3JkZXInLFxuXHRcdFx0XHRsYWJlbDogX18oJ09yZGVyJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHR2YWx1ZTogb3JkZXIsXG5cdFx0XHRcdG9wdGlvbnM6IFt7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdERVNDIC0gaGlnaGVzdCB0byBsb3dlc3QgdmFsdWVzIChkZWZhdWx0KScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ0RFU0MnXG5cdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ0FTQyAtIGxvd2VzdCB0byBoaWdoZXN0IHZhbHVlcycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ0FTQydcblx0XHRcdFx0fV0sXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShvcmRlcikge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgb3JkZXI6IG9yZGVyIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgcGVyIHBhZ2UnLCAncGxhY2Vob2xkZXI6IFRvcGljcycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgndG9waWNzJykpLFxuXHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdMZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdCAoJWQpIG9yIDAgdG8gc2hvdyBhbGwgaXRlbXMuJywgJ3BsYWNlaG9sZGVyOiBkZWZhdWx0IHBlciBwYWdlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfcGVyX3BhZ2UoJ3Blcl9wYWdlJykpLFxuXHRcdFx0XHR2YWx1ZTogcGVyX3BhZ2UgfHwgJycsXG5cdFx0XHRcdHR5cGU6ICdudW1iZXInLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocGVyX3BhZ2UpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHBlcl9wYWdlOiBwZXJfcGFnZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRmaWVsZF9zaG93X2NvbnRlbnQsXG5cdFx0XHRmaWVsZF9zaG93X3RodW1ibmFpbFxuXHRcdCk7XG5cblx0XHR2YXIgcGFuZWxfdG9waWNfY2F0ZWdvcnlfc2VjdGlvbiA9ICcnO1xuXHRcdGlmIChsZGxtc19zZXR0aW5nc1snc2V0dGluZ3MnXVsndG9waWNzX3RheG9ub21pZXMnXVsnbGRfdG9waWNfY2F0ZWdvcnknXSA9PT0gJ3llcycpIHtcblx0XHRcdHZhciBwYW5lbF90b3BpY19jYXRlZ29yeV9zZWN0aW9uX29wZW4gPSBmYWxzZTtcblx0XHRcdGlmICh0b3BpY19jYXRlZ29yeV9uYW1lICE9ICcnIHx8IHRvcGljX2NhdCAhPSAnJykge1xuXHRcdFx0XHRwYW5lbF90b3BpY19jYXRlZ29yeV9zZWN0aW9uX29wZW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGFuZWxfdG9waWNfY2F0ZWdvcnlfc2VjdGlvbiA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHNwcmludGYoX3goJyVzIENhdGVnb3J5IFNldHRpbmdzJywgJ3BsYWNlaG9sZGVyOiBUb3BpYycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgndG9waWMnKSksXG5cdFx0XHRcdFx0aW5pdGlhbE9wZW46IHBhbmVsX3RvcGljX2NhdGVnb3J5X3NlY3Rpb25fb3BlblxuXHRcdFx0XHR9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgQ2F0ZWdvcnkgU2x1ZycsICdwbGFjZWhvbGRlcjogVG9waWMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3RvcGljJykpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzICVzIHdpdGggbWVudGlvbmVkIGNhdGVnb3J5IHNsdWcuJywgJ3BsYWNlaG9sZGVyOiB0b3BpY3MnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3RvcGljcycpKSxcblx0XHRcdFx0XHR2YWx1ZTogdG9waWNfY2F0ZWdvcnlfbmFtZSB8fCAnJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodG9waWNfY2F0ZWdvcnlfbmFtZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB0b3BpY19jYXRlZ29yeV9uYW1lOiB0b3BpY19jYXRlZ29yeV9uYW1lIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBDYXRlZ29yeSBJRCcsICdwbGFjZWhvbGRlcjogVG9waWMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3RvcGljJykpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzICVzIHdpdGggbWVudGlvbmVkIGNhdGVnb3J5IElELicsICdwbGFjZWhvbGRlcjogdG9waWNzJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCd0b3BpY3MnKSksXG5cdFx0XHRcdFx0dmFsdWU6IHRvcGljX2NhdCB8fCAnJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodG9waWNfY2F0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHRvcGljX2NhdDogdG9waWNfY2F0IH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIENhdGVnb3J5IFNlbGVjdG9yJywgJ3BsYWNlaG9sZGVyOiB0b3BpYycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgndG9waWMnKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgYSAlcyBjYXRlZ29yeSBkcm9wZG93bi4nLCAncGxhY2Vob2xkZXI6IHRvcGljcycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgndG9waWNzJykpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICEhdG9waWNfY2F0ZWdvcnlzZWxlY3Rvcixcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodG9waWNfY2F0ZWdvcnlzZWxlY3Rvcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB0b3BpY19jYXRlZ29yeXNlbGVjdG9yOiB0b3BpY19jYXRlZ29yeXNlbGVjdG9yIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dmFyIHBhbmVsX3RvcGljX3RhZ19zZWN0aW9uID0gJyc7XG5cdFx0aWYgKGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddWyd0b3BpY3NfdGF4b25vbWllcyddWydsZF90b3BpY190YWcnXSA9PT0gJ3llcycpIHtcblx0XHRcdHZhciBwYW5lbF90b3BpY190YWdfc2VjdGlvbl9vcGVuID0gZmFsc2U7XG5cdFx0XHRpZiAodG9waWNfdGFnICE9ICcnIHx8IHRvcGljX3RhZ19pZCAhPSAnJykge1xuXHRcdFx0XHRwYW5lbF90b3BpY190YWdfc2VjdGlvbl9vcGVuID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHBhbmVsX3RvcGljX3RhZ19zZWN0aW9uID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogc3ByaW50ZihfeCgnJXMgVGFnIFNldHRpbmdzJywgJ3BsYWNlaG9sZGVyOiBUb3BpYycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgndG9waWMnKSksXG5cdFx0XHRcdFx0aW5pdGlhbE9wZW46IHBhbmVsX3RvcGljX3RhZ19zZWN0aW9uX29wZW5cblx0XHRcdFx0fSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIFRhZyBTbHVnJywgJ3BsYWNlaG9sZGVyOiBUb3BpYycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgndG9waWMnKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgdGFnIHNsdWcuJywgJ3BsYWNlaG9sZGVyOiB0b3BpY3MnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3RvcGljcycpKSxcblx0XHRcdFx0XHR2YWx1ZTogdG9waWNfdGFnIHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSh0b3BpY190YWcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgdG9waWNfdGFnOiB0b3BpY190YWcgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIFRhZyBJRCcsICdwbGFjZWhvbGRlcjogVG9waWMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3RvcGljJykpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzICVzIHdpdGggbWVudGlvbmVkIHRhZyBJRC4nLCAncGxhY2Vob2xkZXI6IFRvcGljcycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgndG9waWNzJykpLFxuXHRcdFx0XHRcdHZhbHVlOiB0b3BpY190YWdfaWQgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHRvcGljX3RhZ19pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB0b3BpY190YWdfaWQ6IHRvcGljX3RhZ19pZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHZhciBwYW5lbF93cF9jYXRlZ29yeV9zZWN0aW9uID0gJyc7XG5cdFx0aWYgKGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddWyd0b3BpY3NfdGF4b25vbWllcyddWyd3cF9wb3N0X2NhdGVnb3J5J10gPT09ICd5ZXMnKSB7XG5cdFx0XHR2YXIgcGFuZWxfd3BfY2F0ZWdvcnlfc2VjdGlvbl9vcGVuID0gZmFsc2U7XG5cdFx0XHRpZiAoY2F0ZWdvcnlfbmFtZSAhPSAnJyB8fCBjYXQgIT0gJycpIHtcblx0XHRcdFx0cGFuZWxfd3BfY2F0ZWdvcnlfc2VjdGlvbl9vcGVuID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHBhbmVsX3dwX2NhdGVnb3J5X3NlY3Rpb24gPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiBfXygnV1AgQ2F0ZWdvcnkgU2V0dGluZ3MnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aW5pdGlhbE9wZW46IHBhbmVsX3dwX2NhdGVnb3J5X3NlY3Rpb25fb3BlblxuXHRcdFx0XHR9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1dQIENhdGVnb3J5IFNsdWcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgV1AgY2F0ZWdvcnkgc2x1Zy4nLCAncGxhY2Vob2xkZXI6IFRvcGljcycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgndG9waWNzJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBjYXRlZ29yeV9uYW1lIHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjYXRlZ29yeV9uYW1lKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNhdGVnb3J5X25hbWU6IGNhdGVnb3J5X25hbWUgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIENhdGVnb3J5IElEJywgJ3BsYWNlaG9sZGVyOiBUb3BpYycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgndG9waWMnKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgY2F0ZWdvcnkgSUQuJywgJ3BsYWNlaG9sZGVyOiBUb3BpY3MnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3RvcGljcycpKSxcblx0XHRcdFx0XHR2YWx1ZTogY2F0IHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjYXQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY2F0OiBjYXQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1dQIENhdGVnb3J5IFNlbGVjdG9yJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGhlbHA6IF9fKCdzaG93cyBhIFdQIGNhdGVnb3J5IGRyb3Bkb3duLicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRjaGVja2VkOiAhIWNhdGVnb3J5c2VsZWN0b3IsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNhdGVnb3J5c2VsZWN0b3IpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY2F0ZWdvcnlzZWxlY3RvcjogY2F0ZWdvcnlzZWxlY3RvciB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHZhciBwYW5lbF93cF90YWdfc2VjdGlvbiA9ICcnO1xuXHRcdGlmIChsZGxtc19zZXR0aW5nc1snc2V0dGluZ3MnXVsndG9waWNzX3RheG9ub21pZXMnXVsnd3BfcG9zdF90YWcnXSA9PT0gJ3llcycpIHtcblx0XHRcdHZhciBwYW5lbF93cF90YWdfc2VjdGlvbl9vcGVuID0gZmFsc2U7XG5cdFx0XHRpZiAodGFnICE9ICcnIHx8IHRhZ19pZCAhPSAnJykge1xuXHRcdFx0XHRwYW5lbF93cF90YWdfc2VjdGlvbl9vcGVuID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHBhbmVsX3dwX3RhZ19zZWN0aW9uID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogX18oJ1dQIFRhZyBTZXR0aW5ncycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogcGFuZWxfd3BfdGFnX3NlY3Rpb25fb3BlblxuXHRcdFx0XHR9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1dQIFRhZyBTbHVnJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzICVzIHdpdGggbWVudGlvbmVkIFdQIHRhZyBzbHVnLicsICdwbGFjZWhvbGRlcjogVG9waWNzJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCd0b3BpY3MnKSksXG5cdFx0XHRcdFx0dmFsdWU6IHRhZyB8fCAnJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodGFnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHRhZzogdGFnIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnV1AgVGFnIElEJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzICVzIHdpdGggbWVudGlvbmVkIFdQIHRhZyBJRC4nLCAncGxhY2Vob2xkZXI6IFRvcGljcycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgndG9waWNzJykpLFxuXHRcdFx0XHRcdHZhbHVlOiB0YWdfaWQgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHRhZ19pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB0YWdfaWQ6IHRhZ19pZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHZhciBwYW5lbF9wcmV2aWV3ID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0e1xuXHRcdFx0XHR0aXRsZTogX18oJ1ByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdGluaXRpYWxPcGVuOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdGxhYmVsOiBfXygnU2hvdyBQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRjaGVja2VkOiAhIXByZXZpZXdfc2hvdyxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfc2hvdykge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJldmlld19zaG93OiBwcmV2aWV3X3Nob3cgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdHZhciBpbnNwZWN0b3JDb250cm9scyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdEluc3BlY3RvckNvbnRyb2xzLFxuXHRcdFx0bnVsbCxcblx0XHRcdHBhbmVsYm9keV9oZWFkZXIsXG5cdFx0XHRwYW5lbF90b3BpY19ncmlkX3NlY3Rpb24sXG5cdFx0XHRwYW5lbF90b3BpY19jYXRlZ29yeV9zZWN0aW9uLFxuXHRcdFx0cGFuZWxfdG9waWNfdGFnX3NlY3Rpb24sXG5cdFx0XHRwYW5lbF93cF9jYXRlZ29yeV9zZWN0aW9uLFxuXHRcdFx0cGFuZWxfd3BfdGFnX3NlY3Rpb24sXG5cdFx0XHRwYW5lbF9wcmV2aWV3XG5cdFx0KTtcblxuXHRcdGZ1bmN0aW9uIGRvX3NlcnZlcnNpZGVfcmVuZGVyKGF0dHJpYnV0ZXMpIHtcblx0XHRcdGlmIChhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyA9PSB0cnVlKSB7XG5cdFx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoU2VydmVyU2lkZVJlbmRlciwge1xuXHRcdFx0XHRcdGJsb2NrOiAnbGVhcm5kYXNoL2xkLXRvcGljLWxpc3QnLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gX18oJ1tsZF90b3BpY19saXN0XSBzaG9ydGNvZGUgb3V0cHV0IHNob3duIGhlcmUnLCAnbGVhcm5kYXNoJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtpbnNwZWN0b3JDb250cm9scywgZG9fc2VydmVyc2lkZV9yZW5kZXIocHJvcHMuYXR0cmlidXRlcyldO1xuXHR9LFxuXG5cdHNhdmU6IGZ1bmN0aW9uIHNhdmUocHJvcHMpIHt9XG59KTsiLCIvKipcbiAqIExlYXJuRGFzaCBCbG9jayBsZC1xdWl6LWxpc3RcbiAqXG4gKiBAc2luY2UgMi41LjlcbiAqIEBwYWNrYWdlIExlYXJuRGFzaFxuICovXG5cbi8qKlxuICogTGVhcm5EYXNoIGJsb2NrIGZ1bmN0aW9uc1xuICovXG5pbXBvcnQgeyBsZGxtc19nZXRfY3VzdG9tX2xhYmVsLCBsZGxtc19nZXRfcGVyX3BhZ2UgfSBmcm9tICcuLi9sZGxtcy5qcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgYmxvY2sgbGlicmFyaWVzXG4gKi9cbnZhciBfd3AkaTE4biA9IHdwLmkxOG4sXG4gICAgX18gPSBfd3AkaTE4bi5fXyxcbiAgICBfeCA9IF93cCRpMThuLl94LFxuICAgIHNwcmludGYgPSBfd3AkaTE4bi5zcHJpbnRmO1xudmFyIHJlZ2lzdGVyQmxvY2tUeXBlID0gd3AuYmxvY2tzLnJlZ2lzdGVyQmxvY2tUeXBlO1xudmFyIEluc3BlY3RvckNvbnRyb2xzID0gd3AuZWRpdG9yLkluc3BlY3RvckNvbnRyb2xzO1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBTZXJ2ZXJTaWRlUmVuZGVyID0gX3dwJGNvbXBvbmVudHMuU2VydmVyU2lkZVJlbmRlcixcbiAgICBQYW5lbEJvZHkgPSBfd3AkY29tcG9uZW50cy5QYW5lbEJvZHksXG4gICAgUmFuZ2VDb250cm9sID0gX3dwJGNvbXBvbmVudHMuUmFuZ2VDb250cm9sLFxuICAgIFNlbGVjdENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5TZWxlY3RDb250cm9sLFxuICAgIFRvZ2dsZUNvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5Ub2dnbGVDb250cm9sLFxuICAgIFRleHRDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVGV4dENvbnRyb2w7XG5cblxucmVnaXN0ZXJCbG9ja1R5cGUoJ2xlYXJuZGFzaC9sZC1xdWl6LWxpc3QnLCB7XG5cdHRpdGxlOiBzcHJpbnRmKF94KCdMZWFybkRhc2ggJXMgTGlzdCcsICdwbGFjZWhvbGRlcjogUXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpKSxcblx0ZGVzY3JpcHRpb246IHNwcmludGYoX3goJ1RoaXMgYmxvY2sgc2hvd3MgYSBsaXN0IG9mICVzLicsICdwbGFjZWhvbGRlcnM6IHF1aXp6ZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXp6ZXMnKSksXG5cdGljb246ICdsaXN0LXZpZXcnLFxuXHRjYXRlZ29yeTogJ2xlYXJuZGFzaC1ibG9ja3MnLFxuXHRleGFtcGxlOiB7XG5cdFx0YXR0cmlidXRlczoge1xuXHRcdFx0ZXhhbXBsZV9zaG93OiAxXG5cdFx0fVxuXHR9LFxuXHRzdXBwb3J0czoge1xuXHRcdGN1c3RvbUNsYXNzTmFtZTogZmFsc2Vcblx0fSxcblx0YXR0cmlidXRlczoge1xuXHRcdG9yZGVyYnk6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJ0lEJ1xuXHRcdH0sXG5cdFx0b3JkZXI6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJ0RFU0MnXG5cdFx0fSxcblx0XHRwZXJfcGFnZToge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0Y291cnNlX2lkOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRsZXNzb25faWQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdHNob3dfY29udGVudDoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogdHJ1ZVxuXHRcdH0sXG5cdFx0c2hvd190aHVtYm5haWw6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IHRydWVcblx0XHR9LFxuXHRcdHF1aXpfY2F0ZWdvcnlfbmFtZToge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0cXVpel9jYXQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdHF1aXpfY2F0ZWdvcnlzZWxlY3Rvcjoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogZmFsc2Vcblx0XHR9LFxuXHRcdHF1aXpfdGFnOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRxdWl6X3RhZ19pZDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0Y2F0ZWdvcnlfbmFtZToge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0Y2F0OiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRjYXRlZ29yeXNlbGVjdG9yOiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdH0sXG5cdFx0dGFnOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHR0YWdfaWQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdGNvdXJzZV9ncmlkOiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbidcblx0XHR9LFxuXHRcdGNvbDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiBsZGxtc19zZXR0aW5nc1sncGx1Z2lucyddWydsZWFybmRhc2gtY291cnNlLWdyaWQnXVsnZW5hYmxlZCddWydjb2xfZGVmYXVsdCddIHx8IDNcblx0XHR9LFxuXHRcdHByZXZpZXdfc2hvdzoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogdHJ1ZVxuXHRcdH0sXG5cdFx0ZXhhbXBsZV9zaG93OiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiAwXG5cdFx0fVxuXHR9LFxuXHRlZGl0OiBmdW5jdGlvbiBlZGl0KHByb3BzKSB7XG5cdFx0dmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcblx0XHQgICAgb3JkZXJieSA9IF9wcm9wcyRhdHRyaWJ1dGVzLm9yZGVyYnksXG5cdFx0ICAgIG9yZGVyID0gX3Byb3BzJGF0dHJpYnV0ZXMub3JkZXIsXG5cdFx0ICAgIHBlcl9wYWdlID0gX3Byb3BzJGF0dHJpYnV0ZXMucGVyX3BhZ2UsXG5cdFx0ICAgIGNvdXJzZV9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvdXJzZV9pZCxcblx0XHQgICAgbGVzc29uX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMubGVzc29uX2lkLFxuXHRcdCAgICBzaG93X2NvbnRlbnQgPSBfcHJvcHMkYXR0cmlidXRlcy5zaG93X2NvbnRlbnQsXG5cdFx0ICAgIHNob3dfdGh1bWJuYWlsID0gX3Byb3BzJGF0dHJpYnV0ZXMuc2hvd190aHVtYm5haWwsXG5cdFx0ICAgIHF1aXpfY2F0ZWdvcnlfbmFtZSA9IF9wcm9wcyRhdHRyaWJ1dGVzLnF1aXpfY2F0ZWdvcnlfbmFtZSxcblx0XHQgICAgcXVpel9jYXQgPSBfcHJvcHMkYXR0cmlidXRlcy5xdWl6X2NhdCxcblx0XHQgICAgcXVpel9jYXRlZ29yeXNlbGVjdG9yID0gX3Byb3BzJGF0dHJpYnV0ZXMucXVpel9jYXRlZ29yeXNlbGVjdG9yLFxuXHRcdCAgICBxdWl6X3RhZyA9IF9wcm9wcyRhdHRyaWJ1dGVzLnF1aXpfdGFnLFxuXHRcdCAgICBxdWl6X3RhZ19pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnF1aXpfdGFnX2lkLFxuXHRcdCAgICBjYXRlZ29yeV9uYW1lID0gX3Byb3BzJGF0dHJpYnV0ZXMuY2F0ZWdvcnlfbmFtZSxcblx0XHQgICAgY2F0ID0gX3Byb3BzJGF0dHJpYnV0ZXMuY2F0LFxuXHRcdCAgICBjYXRlZ29yeXNlbGVjdG9yID0gX3Byb3BzJGF0dHJpYnV0ZXMuY2F0ZWdvcnlzZWxlY3Rvcixcblx0XHQgICAgdGFnID0gX3Byb3BzJGF0dHJpYnV0ZXMudGFnLFxuXHRcdCAgICB0YWdfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy50YWdfaWQsXG5cdFx0ICAgIGNvdXJzZV9ncmlkID0gX3Byb3BzJGF0dHJpYnV0ZXMuY291cnNlX2dyaWQsXG5cdFx0ICAgIGNvbCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvbCxcblx0XHQgICAgcHJldmlld19zaG93ID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld19zaG93LFxuXHRcdCAgICBleGFtcGxlX3Nob3cgPSBfcHJvcHMkYXR0cmlidXRlcy5leGFtcGxlX3Nob3csXG5cdFx0ICAgIHNldEF0dHJpYnV0ZXMgPSBwcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXG5cblx0XHR2YXIgZmllbGRfc2hvd19jb250ZW50ID0gJyc7XG5cdFx0dmFyIGZpZWxkX3Nob3dfdGh1bWJuYWlsID0gJyc7XG5cdFx0dmFyIHBhbmVsX3F1aXpfZ3JpZF9zZWN0aW9uID0gJyc7XG5cblx0XHR2YXIgY291cnNlX2dyaWRfZGVmYXVsdCA9IHRydWU7XG5cdFx0aWYgKGxkbG1zX3NldHRpbmdzWydwbHVnaW5zJ11bJ2xlYXJuZGFzaC1jb3Vyc2UtZ3JpZCddWydlbmFibGVkJ10gPT09IHRydWUpIHtcblx0XHRcdGlmICh0eXBlb2YgY291cnNlX2dyaWQgIT09ICd1bmRlZmluZWQnICYmIChjb3Vyc2VfZ3JpZCA9PSB0cnVlIHx8IGNvdXJzZV9ncmlkID09IGZhbHNlKSkge1xuXHRcdFx0XHRjb3Vyc2VfZ3JpZF9kZWZhdWx0ID0gY291cnNlX2dyaWQ7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBxdWl6X2dyaWRfc2VjdGlvbl9vcGVuID0gZmFsc2U7XG5cdFx0XHRpZiAoY291cnNlX2dyaWRfZGVmYXVsdCA9PSB0cnVlKSB7XG5cdFx0XHRcdHF1aXpfZ3JpZF9zZWN0aW9uX29wZW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGFuZWxfcXVpel9ncmlkX3NlY3Rpb24gPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiBfXygnR3JpZCBTZXR0aW5ncycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogcXVpel9ncmlkX3NlY3Rpb25fb3BlblxuXHRcdFx0XHR9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnU2hvdyBHcmlkJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICEhY291cnNlX2dyaWRfZGVmYXVsdCxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY291cnNlX2dyaWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY291cnNlX2dyaWQ6IGNvdXJzZV9ncmlkIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChSYW5nZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ0NvbHVtbnMnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6IGNvbCB8fCBsZGxtc19zZXR0aW5nc1sncGx1Z2lucyddWydsZWFybmRhc2gtY291cnNlLWdyaWQnXVsnZW5hYmxlZCddWydjb2xfZGVmYXVsdCddLFxuXHRcdFx0XHRcdG1pbjogMSxcblx0XHRcdFx0XHRtYXg6IGxkbG1zX3NldHRpbmdzWydwbHVnaW5zJ11bJ2xlYXJuZGFzaC1jb3Vyc2UtZ3JpZCddWydlbmFibGVkJ11bJ2NvbF9tYXgnXSxcblx0XHRcdFx0XHRzdGVwOiAxLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb2wpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY29sOiBjb2wgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRmaWVsZF9zaG93X2NvbnRlbnQgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0bGFiZWw6IF9fKCdTaG93IENvbnRlbnQnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRjaGVja2VkOiAhIXNob3dfY29udGVudCxcblx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShzaG93X2NvbnRlbnQpIHtcblx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBzaG93X2NvbnRlbnQ6IHNob3dfY29udGVudCB9KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGZpZWxkX3Nob3dfdGh1bWJuYWlsID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdGxhYmVsOiBfXygnU2hvdyBUaHVtYm5haWwnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRjaGVja2VkOiAhIXNob3dfdGh1bWJuYWlsLFxuXHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHNob3dfdGh1bWJuYWlsKSB7XG5cdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgc2hvd190aHVtYm5haWw6IHNob3dfdGh1bWJuYWlsIH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dmFyIHBhbmVsYm9keV9oZWFkZXIgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRQYW5lbEJvZHksXG5cdFx0XHR7XG5cdFx0XHRcdHRpdGxlOiBfXygnU2V0dGluZ3MnLCAnbGVhcm5kYXNoJylcblx0XHRcdH0sXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIElEJywgJ0NvdXJzZSBJRCcsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdFbnRlciBzaW5nbGUgJTEkcyBJRCB0byBsaW1pdCBsaXN0aW5nLiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogY291cnNlLCBjb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdHZhbHVlOiBjb3Vyc2VfaWQgfHwgJycsXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb3Vyc2VfaWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvdXJzZV9pZDogY291cnNlX2lkIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAnTGVzc29uIElEJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdsZXNzb24nKSksXG5cdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ0VudGVyIHNpbmdsZSAlMSRzIElEIHRvIGxpbWl0IGxpc3RpbmcuIExlYXZlIGJsYW5rIGlmIHVzZWQgd2l0aGluIGEgJTIkcy4gWmVybyBmb3IgZ2xvYmFsLicsICdwbGFjZWhvbGRlcnM6IGxlc3NvbiwgY291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdsZXNzb24nKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnbGVzc29uJykpLFxuXHRcdFx0XHR2YWx1ZTogbGVzc29uX2lkIHx8ICcnLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UobGVzc29uX2lkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBsZXNzb25faWQ6IGxlc3Nvbl9pZCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoU2VsZWN0Q29udHJvbCwge1xuXHRcdFx0XHRrZXk6ICdvcmRlcmJ5Jyxcblx0XHRcdFx0bGFiZWw6IF9fKCdPcmRlciBieScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0dmFsdWU6IG9yZGVyYnksXG5cdFx0XHRcdG9wdGlvbnM6IFt7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdJRCAtIE9yZGVyIGJ5IHBvc3QgaWQuIChkZWZhdWx0KScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ0lEJ1xuXHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdUaXRsZSAtIE9yZGVyIGJ5IHBvc3QgdGl0bGUnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd0aXRsZSdcblx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnRGF0ZSAtIE9yZGVyIGJ5IHBvc3QgZGF0ZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ2RhdGUnXG5cdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ01lbnUgLSBPcmRlciBieSBQYWdlIE9yZGVyIFZhbHVlJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbWVudV9vcmRlcidcblx0XHRcdFx0fV0sXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShvcmRlcmJ5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBvcmRlcmJ5OiBvcmRlcmJ5IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdGtleTogJ29yZGVyJyxcblx0XHRcdFx0bGFiZWw6IF9fKCdPcmRlcicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0dmFsdWU6IG9yZGVyLFxuXHRcdFx0XHRvcHRpb25zOiBbe1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnREVTQyAtIGhpZ2hlc3QgdG8gbG93ZXN0IHZhbHVlcyAoZGVmYXVsdCknLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdERVNDJ1xuXHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdBU0MgLSBsb3dlc3QgdG8gaGlnaGVzdCB2YWx1ZXMnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdBU0MnXG5cdFx0XHRcdH1dLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2Uob3JkZXIpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IG9yZGVyOiBvcmRlciB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIHBlciBwYWdlJywgJ3BsYWNlaG9sZGVyOiBRdWl6emVzcycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpenplcycpKSxcblx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnTGVhdmUgZW1wdHkgZm9yIGRlZmF1bHQgKCVkKSBvciAwIHRvIHNob3cgYWxsIGl0ZW1zLicsICdwbGFjZWhvbGRlcjogZGVmYXVsdCBwZXIgcGFnZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X3Blcl9wYWdlKCdwZXJfcGFnZScpKSxcblx0XHRcdFx0dmFsdWU6IHBlcl9wYWdlIHx8ICcnLFxuXHRcdFx0XHR0eXBlOiAnbnVtYmVyJyxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHBlcl9wYWdlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwZXJfcGFnZTogcGVyX3BhZ2UgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZmllbGRfc2hvd19jb250ZW50LFxuXHRcdFx0ZmllbGRfc2hvd190aHVtYm5haWxcblx0XHQpO1xuXG5cdFx0dmFyIHBhbmVsX3F1aXpfY2F0ZWdvcnlfc2VjdGlvbiA9ICcnO1xuXHRcdGlmIChsZGxtc19zZXR0aW5nc1snc2V0dGluZ3MnXVsncXVpenplc190YXhvbm9taWVzJ11bJ2xkX3F1aXpfY2F0ZWdvcnknXSA9PT0gJ3llcycpIHtcblx0XHRcdHZhciBwYW5lbF9xdWl6X2NhdGVnb3J5X3NlY3Rpb25fb3BlbiA9IGZhbHNlO1xuXHRcdFx0aWYgKHF1aXpfY2F0ZWdvcnlfbmFtZSAhPSAnJyB8fCBxdWl6X2NhdCAhPSAnJykge1xuXHRcdFx0XHRwYW5lbF9xdWl6X2NhdGVnb3J5X3NlY3Rpb25fb3BlbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYW5lbF9xdWl6X2NhdGVnb3J5X3NlY3Rpb24gPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiBzcHJpbnRmKF94KCclcyBDYXRlZ29yeSBTZXR0aW5ncycsICdwbGFjZWhvbGRlcjogUXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogcGFuZWxfcXVpel9jYXRlZ29yeV9zZWN0aW9uX29wZW5cblx0XHRcdFx0fSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIENhdGVnb3J5IFNsdWcnLCAncGxhY2Vob2xkZXI6IFF1aXonLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXonKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgY2F0ZWdvcnkgc2x1Zy4nLCAncGxhY2Vob2xkZXI6IHF1aXp6ZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXp6ZXMnKSksXG5cdFx0XHRcdFx0dmFsdWU6IHF1aXpfY2F0ZWdvcnlfbmFtZSB8fCAnJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocXVpel9jYXRlZ29yeV9uYW1lKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHF1aXpfY2F0ZWdvcnlfbmFtZTogcXVpel9jYXRlZ29yeV9uYW1lIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBDYXRlZ29yeSBJRCcsICdwbGFjZWhvbGRlcjogUXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdzaG93cyAlcyB3aXRoIG1lbnRpb25lZCBjYXRlZ29yeSBJRC4nLCAncGxhY2Vob2xkZXI6IFF1aXp6ZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXp6ZXMnKSksXG5cdFx0XHRcdFx0dmFsdWU6IHF1aXpfY2F0IHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShxdWl6X2NhdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBxdWl6X2NhdDogcXVpel9jYXQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgQ2F0ZWdvcnkgU2VsZWN0b3InLCAncGxhY2Vob2xkZXI6IFF1aXonLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXonKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgYSAlcyBjYXRlZ29yeSBkcm9wZG93bi4nLCAncGxhY2Vob2xkZXI6IFF1aXp6ZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXp6ZXMnKSksXG5cdFx0XHRcdFx0Y2hlY2tlZDogISFxdWl6X2NhdGVnb3J5c2VsZWN0b3IsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHF1aXpfY2F0ZWdvcnlzZWxlY3Rvcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBxdWl6X2NhdGVnb3J5c2VsZWN0b3I6IHF1aXpfY2F0ZWdvcnlzZWxlY3RvciB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHZhciBwYW5lbF9xdWl6X3RhZ19zZWN0aW9uID0gJyc7XG5cdFx0aWYgKGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddWydxdWl6emVzX3RheG9ub21pZXMnXVsnbGRfcXVpel90YWcnXSA9PT0gJ3llcycpIHtcblx0XHRcdHZhciBwYW5lbF9xdWl6X3RhZ19zZWN0aW9uX29wZW4gPSBmYWxzZTtcblx0XHRcdGlmIChxdWl6X3RhZyAhPSAnJyB8fCBxdWl6X3RhZ19pZCAhPSAnJykge1xuXHRcdFx0XHRwYW5lbF9xdWl6X3RhZ19zZWN0aW9uX29wZW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGFuZWxfcXVpel90YWdfc2VjdGlvbiA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHNwcmludGYoX3goJyVzIFRhZyBTZXR0aW5ncycsICdwbGFjZWhvbGRlcjogUXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogcGFuZWxfcXVpel90YWdfc2VjdGlvbl9vcGVuXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBUYWcgU2x1ZycsICdwbGFjZWhvbGRlcjogUXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdzaG93cyAlcyB3aXRoIG1lbnRpb25lZCB0YWcgc2x1Zy4nLCAncGxhY2Vob2xkZXI6IHF1aXp6ZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXp6ZXMnKSksXG5cdFx0XHRcdFx0dmFsdWU6IHF1aXpfdGFnIHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShxdWl6X3RhZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBxdWl6X3RhZzogcXVpel90YWcgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIFRhZyBJRCcsICdwbGFjZWhvbGRlcjogUXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdzaG93cyAlcyB3aXRoIG1lbnRpb25lZCB0YWcgSUQuJywgJ3BsYWNlaG9sZGVyOiBRdWl6emVzJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdxdWl6emVzJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBxdWl6X3RhZ19pZCB8fCAnJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocXVpel90YWdfaWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcXVpel90YWdfaWQ6IHF1aXpfdGFnX2lkIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dmFyIHBhbmVsX3dwX2NhdGVnb3J5X3NlY3Rpb24gPSAnJztcblx0XHRpZiAobGRsbXNfc2V0dGluZ3NbJ3NldHRpbmdzJ11bJ3F1aXp6ZXNfdGF4b25vbWllcyddWyd3cF9wb3N0X2NhdGVnb3J5J10gPT09ICd5ZXMnKSB7XG5cdFx0XHR2YXIgcGFuZWxfd3BfY2F0ZWdvcnlfc2VjdGlvbl9vcGVuID0gZmFsc2U7XG5cdFx0XHRpZiAoY2F0ZWdvcnlfbmFtZSAhPSAnJyB8fCBjYXQgIT0gJycpIHtcblx0XHRcdFx0cGFuZWxfd3BfY2F0ZWdvcnlfc2VjdGlvbl9vcGVuID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHBhbmVsX3dwX2NhdGVnb3J5X3NlY3Rpb24gPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiBfXygnV1AgQ2F0ZWdvcnkgU2V0dGluZ3MnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aW5pdGlhbE9wZW46IHBhbmVsX3dwX2NhdGVnb3J5X3NlY3Rpb25fb3BlblxuXHRcdFx0XHR9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1dQIENhdGVnb3J5IFNsdWcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgV1AgY2F0ZWdvcnkgc2x1Zy4nLCAncGxhY2Vob2xkZXI6IFF1aXp6ZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXp6ZXMnKSksXG5cdFx0XHRcdFx0dmFsdWU6IGNhdGVnb3J5X25hbWUgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNhdGVnb3J5X25hbWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY2F0ZWdvcnlfbmFtZTogY2F0ZWdvcnlfbmFtZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgQ2F0ZWdvcnkgSUQnLCAncGxhY2Vob2xkZXI6IFF1aXonLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXonKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgY2F0ZWdvcnkgSUQuJywgJ3BsYWNlaG9sZGVyOiBRdWl6emVzJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdxdWl6emVzJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBjYXQgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNhdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjYXQ6IGNhdCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnV1AgQ2F0ZWdvcnkgU2VsZWN0b3InLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aGVscDogX18oJ3Nob3dzIGEgV1AgY2F0ZWdvcnkgZHJvcGRvd24uJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICEhY2F0ZWdvcnlzZWxlY3Rvcixcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY2F0ZWdvcnlzZWxlY3Rvcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjYXRlZ29yeXNlbGVjdG9yOiBjYXRlZ29yeXNlbGVjdG9yIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dmFyIHBhbmVsX3dwX3RhZ19zZWN0aW9uID0gJyc7XG5cdFx0aWYgKGxkbG1zX3NldHRpbmdzWydzZXR0aW5ncyddWydxdWl6emVzX3RheG9ub21pZXMnXVsnd3BfcG9zdF90YWcnXSA9PT0gJ3llcycpIHtcblx0XHRcdHZhciBwYW5lbF93cF90YWdfc2VjdGlvbl9vcGVuID0gZmFsc2U7XG5cdFx0XHRpZiAodGFnICE9ICcnIHx8IHRhZ19pZCAhPSAnJykge1xuXHRcdFx0XHRwYW5lbF93cF90YWdfc2VjdGlvbl9vcGVuID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHBhbmVsX3dwX3RhZ19zZWN0aW9uID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogX18oJ1dQIFRhZyBTZXR0aW5ncycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogcGFuZWxfd3BfdGFnX3NlY3Rpb25fb3BlblxuXHRcdFx0XHR9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1dQIFRhZyBTbHVnJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ3Nob3dzICVzIHdpdGggbWVudGlvbmVkIFdQIHRhZyBzbHVnLicsICdwbGFjZWhvbGRlcjogUXVpenplcycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpenplcycpKSxcblx0XHRcdFx0XHR2YWx1ZTogdGFnIHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSh0YWcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgdGFnOiB0YWcgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdXUCBUYWcgSUQnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnc2hvd3MgJXMgd2l0aCBtZW50aW9uZWQgV1AgdGFnIElELicsICdwbGFjZWhvbGRlcjogUXVpenplcycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpenplcycpKSxcblx0XHRcdFx0XHR2YWx1ZTogdGFnX2lkIHx8ICcnLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSh0YWdfaWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgdGFnX2lkOiB0YWdfaWQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR2YXIgcGFuZWxfcHJldmlldyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFBhbmVsQm9keSxcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IF9fKCdQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRpbml0aWFsT3BlbjogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogX18oJ1Nob3cgUHJldmlldycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0Y2hlY2tlZDogISFwcmV2aWV3X3Nob3csXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X3Nob3cpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByZXZpZXdfc2hvdzogcHJldmlld19zaG93IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHR2YXIgaW5zcGVjdG9yQ29udHJvbHMgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRJbnNwZWN0b3JDb250cm9scyxcblx0XHRcdG51bGwsXG5cdFx0XHRwYW5lbGJvZHlfaGVhZGVyLFxuXHRcdFx0cGFuZWxfcXVpel9ncmlkX3NlY3Rpb24sXG5cdFx0XHRwYW5lbF9xdWl6X2NhdGVnb3J5X3NlY3Rpb24sXG5cdFx0XHRwYW5lbF9xdWl6X3RhZ19zZWN0aW9uLFxuXHRcdFx0cGFuZWxfd3BfY2F0ZWdvcnlfc2VjdGlvbixcblx0XHRcdHBhbmVsX3dwX3RhZ19zZWN0aW9uLFxuXHRcdFx0cGFuZWxfcHJldmlld1xuXHRcdCk7XG5cblx0XHRmdW5jdGlvbiBkb19zZXJ2ZXJzaWRlX3JlbmRlcihhdHRyaWJ1dGVzKSB7XG5cdFx0XHRpZiAoYXR0cmlidXRlcy5wcmV2aWV3X3Nob3cgPT0gdHJ1ZSkge1xuXHRcdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlcnZlclNpZGVSZW5kZXIsIHtcblx0XHRcdFx0XHRibG9jazogJ2xlYXJuZGFzaC9sZC1xdWl6LWxpc3QnLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gX18oJ1tsZF9xdWl6X2xpc3RdIHNob3J0Y29kZSBvdXRwdXQgc2hvd24gaGVyZScsICdsZWFybmRhc2gnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gW2luc3BlY3RvckNvbnRyb2xzLCBkb19zZXJ2ZXJzaWRlX3JlbmRlcihwcm9wcy5hdHRyaWJ1dGVzKV07XG5cdH0sXG5cblx0c2F2ZTogZnVuY3Rpb24gc2F2ZShwcm9wcykge31cbn0pOyIsIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLWNvdXJzZS1wcm9ncmVzc1xuICpcbiAqIEBzaW5jZSAyLjUuOVxuICogQHBhY2thZ2UgTGVhcm5EYXNoXG4gKi9cblxuLyoqXG4gKiBMZWFybkRhc2ggYmxvY2sgZnVuY3Rpb25zXG4gKi9cbmltcG9ydCB7IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCB9IGZyb20gJy4uL2xkbG1zLmpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBibG9jayBsaWJyYXJpZXNcbiAqL1xudmFyIF93cCRpMThuID0gd3AuaTE4bixcbiAgICBfXyA9IF93cCRpMThuLl9fLFxuICAgIF94ID0gX3dwJGkxOG4uX3gsXG4gICAgc3ByaW50ZiA9IF93cCRpMThuLnNwcmludGY7XG52YXIgcmVnaXN0ZXJCbG9ja1R5cGUgPSB3cC5ibG9ja3MucmVnaXN0ZXJCbG9ja1R5cGU7XG52YXIgX3dwJGVkaXRvciA9IHdwLmVkaXRvcixcbiAgICBJbm5lckJsb2NrcyA9IF93cCRlZGl0b3IuSW5uZXJCbG9ja3MsXG4gICAgSW5zcGVjdG9yQ29udHJvbHMgPSBfd3AkZWRpdG9yLkluc3BlY3RvckNvbnRyb2xzO1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBTZXJ2ZXJTaWRlUmVuZGVyID0gX3dwJGNvbXBvbmVudHMuU2VydmVyU2lkZVJlbmRlcixcbiAgICBQYW5lbEJvZHkgPSBfd3AkY29tcG9uZW50cy5QYW5lbEJvZHksXG4gICAgVG9nZ2xlQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlRvZ2dsZUNvbnRyb2wsXG4gICAgVGV4dENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5UZXh0Q29udHJvbDtcblxuXG52YXIgZWwgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQ7XG5cbnZhciBpY29uRWwgPSBlbCgnc3ZnJywgeyB3aWR0aDogMzAwLCBoZWlnaHQ6IDMwMCwgdmlld0JveDogJzAgMCA1MCAxMCcgfSwgZWwoJ3BhdGgnLCB7IGQ6IFwiTTQ3LjEsMGgtNDRjLTEuNywwLTMsMS4zLTMsM3Y0YzAsMS43LDEuMywzLDMsM2g0NGMxLjcsMCwzLTEuMywzLTNWM0M1MC4xLDEuMyw0OC43LDAsNDcuMSwweiBNNDguMSw3YzAsMC42LTAuNCwxLTEsMWgtMTIgVjJoMTJjMC42LDAsMSwwLjQsMSwxVjd6XCIgfSkpO1xuXG5yZWdpc3RlckJsb2NrVHlwZSgnbGVhcm5kYXNoL2xkLWNvdXJzZS1wcm9ncmVzcycsIHtcbiAgICB0aXRsZTogc3ByaW50ZihfeCgnTGVhcm5EYXNoICVzIFByb2dyZXNzJywgJ0xlYXJuRGFzaCBDb3Vyc2UgUHJvZ3Jlc3MnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcbiAgICBkZXNjcmlwdGlvbjogc3ByaW50ZihfeCgnVGhpcyBibG9jayBkaXNwbGF5cyB1c2VycyBwcm9ncmVzcyBiYXIgZm9yIHRoZSAlMSRzLicsICdwbGFjZWhvbGRlcnM6IGNvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuICAgIGljb246IGljb25FbCxcbiAgICBjYXRlZ29yeTogJ2xlYXJuZGFzaC1ibG9ja3MnLFxuICAgIGV4YW1wbGU6IHtcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgZXhhbXBsZV9zaG93OiAxXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHN1cHBvcnRzOiB7XG4gICAgICAgIGN1c3RvbUNsYXNzTmFtZTogZmFsc2VcbiAgICB9LFxuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY291cnNlX2lkOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXJfaWQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlld19zaG93OiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkZWZhdWx0OiAxXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdfdXNlcl9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlld19jb3Vyc2VfaWQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgICAgIH0sXG4gICAgICAgIGV4YW1wbGVfc2hvdzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogMFxuICAgICAgICB9XG4gICAgfSxcbiAgICBlZGl0OiBmdW5jdGlvbiBlZGl0KHByb3BzKSB7XG4gICAgICAgIHZhciBjb3Vyc2VfaWQgPSBwcm9wcy5hdHRyaWJ1dGVzLmNvdXJzZV9pZCxcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcbiAgICAgICAgdmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIHVzZXJfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy51c2VyX2lkLFxuICAgICAgICAgICAgcHJldmlld19zaG93ID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld19zaG93LFxuICAgICAgICAgICAgcHJldmlld191c2VyX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld191c2VyX2lkLFxuICAgICAgICAgICAgcHJldmlld19jb3Vyc2VfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5wcmV2aWV3X2NvdXJzZV9pZCxcbiAgICAgICAgICAgIGV4YW1wbGVfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLmV4YW1wbGVfc2hvdyxcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXMgPSBwcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXG5cbiAgICAgICAgdmFyIGluc3BlY3RvckNvbnRyb2xzID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbHMsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFBhbmVsQm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfXygnU2V0dGluZ3MnLCAnbGVhcm5kYXNoJylcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAnQ291cnNlIElEJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IHNwcmludGYoX3goJ0VudGVyIHNpbmdsZSAlMSRzIElELiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogY291cnNlLCBjb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb3Vyc2VfaWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb3Vyc2VfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY291cnNlX2lkOiBjb3Vyc2VfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdVc2VyIElEJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBfXygnRW50ZXIgc3BlY2lmaWMgVXNlciBJRC4gTGVhdmUgYmxhbmsgZm9yIGN1cnJlbnQgVXNlci4nLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1c2VyX2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodXNlcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB1c2VyX2lkOiB1c2VyX2lkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgUGFuZWxCb2R5LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF9fKCdQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsT3BlbjogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnU2hvdyBQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiAhIXByZXZpZXdfc2hvdyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfc2hvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X3Nob3c6IHByZXZpZXdfc2hvdyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBzcHJpbnRmKF94KCdFbnRlciBhICVzIElEIHRvIHRlc3QgcHJldmlldycsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwcmV2aWV3X2NvdXJzZV9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X2NvdXJzZV9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X2NvdXJzZV9pZDogcHJldmlld19jb3Vyc2VfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdVc2VyIElEJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBfXygnRW50ZXIgYSBVc2VyIElEIHRvIHRlc3QgcHJldmlldycsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHByZXZpZXdfdXNlcl9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X3VzZXJfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJldmlld191c2VyX2lkOiBwcmV2aWV3X3VzZXJfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGZ1bmN0aW9uIGRvX3NlcnZlcnNpZGVfcmVuZGVyKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYWRkIHRoZSBtZXRhIHNvIHRoZSBzZXJ2ZXIga25vd25zIHdoYXQgaXMgYmVpbmcgZWRpdGVkLlxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMubWV0YSA9IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZXJ2ZXJTaWRlUmVuZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrOiAnbGVhcm5kYXNoL2xkLWNvdXJzZS1wcm9ncmVzcycsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fKCdbbGVhcm5kYXNoX2NvdXJzZV9wcm9ncmVzc10gc2hvcnRjb2RlIG91dHB1dCBzaG93biBoZXJlJywgJ2xlYXJuZGFzaCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtpbnNwZWN0b3JDb250cm9scywgZG9fc2VydmVyc2lkZV9yZW5kZXIocHJvcHMuYXR0cmlidXRlcyldO1xuICAgIH0sXG5cbiAgICBzYXZlOiBmdW5jdGlvbiBzYXZlKHByb3BzKSB7XG4gICAgICAgIC8vIERlbGV0ZSBtZXRhIGZyb20gcHJvcHMgdG8gcHJldmVudCBpdCBiZWluZyBzYXZlZC5cbiAgICAgICAgZGVsZXRlIHByb3BzLmF0dHJpYnV0ZXMubWV0YTtcbiAgICB9XG59KTsiLCJcbi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLXZpc2l0b3JcbiAqXG4gKiBAc2luY2UgMi41LjlcbiAqIEBwYWNrYWdlIExlYXJuRGFzaFxuICovXG5cbi8qKlxuICogTGVhcm5EYXNoIGJsb2NrIGZ1bmN0aW9uc1xuICovXG5pbXBvcnQgeyBsZGxtc19nZXRfcG9zdF9lZGl0X21ldGEsIGxkbG1zX2dldF9jdXN0b21fbGFiZWwsIGxkbG1zX2dldF9pbnRlZ2VyX3ZhbHVlIH0gZnJvbSAnLi4vbGRsbXMuanMnO1xuXG4vKipcbiAqIEludGVybmFsIGJsb2NrIGxpYnJhcmllc1xuICovXG52YXIgX3dwJGkxOG4gPSB3cC5pMThuLFxuICAgIF9fID0gX3dwJGkxOG4uX18sXG4gICAgX3ggPSBfd3AkaTE4bi5feCxcbiAgICBzcHJpbnRmID0gX3dwJGkxOG4uc3ByaW50ZjtcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBfd3AkZWRpdG9yID0gd3AuZWRpdG9yLFxuICAgIElubmVyQmxvY2tzID0gX3dwJGVkaXRvci5Jbm5lckJsb2NrcyxcbiAgICBJbnNwZWN0b3JDb250cm9scyA9IF93cCRlZGl0b3IuSW5zcGVjdG9yQ29udHJvbHM7XG52YXIgX3dwJGNvbXBvbmVudHMgPSB3cC5jb21wb25lbnRzLFxuICAgIFBhbmVsQm9keSA9IF93cCRjb21wb25lbnRzLlBhbmVsQm9keSxcbiAgICBUZXh0Q29udHJvbCA9IF93cCRjb21wb25lbnRzLlRleHRDb250cm9sLFxuICAgIFRvZ2dsZUNvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5Ub2dnbGVDb250cm9sO1xuXG5cbnJlZ2lzdGVyQmxvY2tUeXBlKCdsZWFybmRhc2gvbGQtdmlzaXRvcicsIHtcbiAgICB0aXRsZTogX18oJ0xlYXJuRGFzaCBWaXNpdG9yJywgJ2xlYXJuZGFzaCcpLFxuICAgIGRlc2NyaXB0aW9uOiBzcHJpbnRmKF94KCdUaGlzIGJsb2NrIHNob3dzIHRoZSBjb250ZW50IGlmIHRoZSB1c2VyIGlzIG5vdCBlbnJvbGxlZCBpbnRvIHRoZSAlcy4nLCAncGxhY2Vob2xkZXJzOiBjb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcbiAgICBpY29uOiAndmlzaWJpbGl0eScsXG4gICAgc3VwcG9ydHM6IHtcbiAgICAgICAgY3VzdG9tQ2xhc3NOYW1lOiBmYWxzZVxuICAgIH0sXG4gICAgY2F0ZWdvcnk6ICdsZWFybmRhc2gtYmxvY2tzJyxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNvdXJzZV9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICBhdXRvcDoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBlZGl0OiBmdW5jdGlvbiBlZGl0KHByb3BzKSB7XG4gICAgICAgIHZhciBfcHJvcHMkYXR0cmlidXRlcyA9IHByb3BzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBjb3Vyc2VfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5jb3Vyc2VfaWQsXG4gICAgICAgICAgICBhdXRvcCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmF1dG9wLFxuICAgICAgICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgICAgc2V0QXR0cmlidXRlcyA9IHByb3BzLnNldEF0dHJpYnV0ZXM7XG5cblxuICAgICAgICB2YXIgaW5zcGVjdG9yQ29udHJvbHMgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBJbnNwZWN0b3JDb250cm9scyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgUGFuZWxCb2R5LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF9fKCdTZXR0aW5ncycsICdsZWFybmRhc2gnKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzcHJpbnRmKF94KCclcyBJRCcsICdDb3Vyc2UgSUQnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcbiAgICAgICAgICAgICAgICAgICAgaGVscDogc3ByaW50ZihfeCgnRW50ZXIgc2luZ2xlICUxJHMgSUQuIExlYXZlIGJsYW5rIGlmIHVzZWQgd2l0aGluIGEgJTIkcy4nLCAncGxhY2Vob2xkZXJzOiBjb3Vyc2UsIGNvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvdXJzZV9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNvdXJzZV9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjb3Vyc2VfaWQ6IGNvdXJzZV9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnQXV0byBQYXJhZ3JhcGgnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6ICEhYXV0b3AsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShhdXRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBhdXRvcDogYXV0b3AgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHZhciBsZF9ibG9ja19lcnJvcl9tZXNzYWdlID0gJyc7XG4gICAgICAgIHZhciBwcmV2aWV3X2NvdXJzZV9pZCA9IGxkbG1zX2dldF9pbnRlZ2VyX3ZhbHVlKGNvdXJzZV9pZCk7XG5cbiAgICAgICAgaWYgKHByZXZpZXdfY291cnNlX2lkID09PSAwKSB7XG4gICAgICAgICAgICBwcmV2aWV3X2NvdXJzZV9pZCA9IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSgnY291cnNlX2lkJyk7XG4gICAgICAgICAgICBwcmV2aWV3X2NvdXJzZV9pZCA9IGxkbG1zX2dldF9pbnRlZ2VyX3ZhbHVlKHByZXZpZXdfY291cnNlX2lkKTtcblxuICAgICAgICAgICAgaWYgKHByZXZpZXdfY291cnNlX2lkID09IDApIHtcbiAgICAgICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlID0gc3ByaW50ZihfeCgnJTEkcyBJRCBpcyByZXF1aXJlZCB3aGVuIG5vdCB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogQ291cnNlLCBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGRfYmxvY2tfZXJyb3JfbWVzc2FnZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnbGVhcm5kYXNoLWJsb2NrLWVycm9yLW1lc3NhZ2UnIH0sXG4gICAgICAgICAgICAgICAgbGRfYmxvY2tfZXJyb3JfbWVzc2FnZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvdXRwdXRCbG9jayA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6IGNsYXNzTmFtZSB9LFxuICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnbGVhcm5kYXNoLWJsb2NrLWlubmVyJyB9LFxuICAgICAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UsXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KElubmVyQmxvY2tzLCBudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBbaW5zcGVjdG9yQ29udHJvbHMsIG91dHB1dEJsb2NrXTtcbiAgICB9LFxuICAgIHNhdmU6IGZ1bmN0aW9uIHNhdmUocHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChJbm5lckJsb2Nrcy5Db250ZW50LCBudWxsKTtcbiAgICB9XG59KTsiLCIvKipcbiAqIExlYXJuRGFzaCBCbG9jayBsZC1zdHVkZW50XG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsLCBsZGxtc19nZXRfaW50ZWdlcl92YWx1ZSB9IGZyb20gJy4uL2xkbG1zLmpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBibG9jayBsaWJyYXJpZXNcbiAqL1xudmFyIF93cCRpMThuID0gd3AuaTE4bixcbiAgICBfXyA9IF93cCRpMThuLl9fLFxuICAgIF94ID0gX3dwJGkxOG4uX3gsXG4gICAgc3ByaW50ZiA9IF93cCRpMThuLnNwcmludGY7XG52YXIgcmVnaXN0ZXJCbG9ja1R5cGUgPSB3cC5ibG9ja3MucmVnaXN0ZXJCbG9ja1R5cGU7XG52YXIgX3dwJGVkaXRvciA9IHdwLmVkaXRvcixcbiAgICBJbm5lckJsb2NrcyA9IF93cCRlZGl0b3IuSW5uZXJCbG9ja3MsXG4gICAgSW5zcGVjdG9yQ29udHJvbHMgPSBfd3AkZWRpdG9yLkluc3BlY3RvckNvbnRyb2xzO1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBQYW5lbEJvZHkgPSBfd3AkY29tcG9uZW50cy5QYW5lbEJvZHksXG4gICAgVGV4dENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5UZXh0Q29udHJvbCxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbDtcblxuXG5yZWdpc3RlckJsb2NrVHlwZSgnbGVhcm5kYXNoL2xkLXN0dWRlbnQnLCB7XG4gICAgdGl0bGU6IF9fKCdMZWFybkRhc2ggU3R1ZGVudCcsICdsZWFybmRhc2gnKSxcbiAgICBkZXNjcmlwdGlvbjogc3ByaW50ZihfeCgnVGhpcyBibG9jayBzaG93cyB0aGUgY29udGVudCBpZiB0aGUgdXNlciBpcyBlbnJvbGxlZCBpbiB0aGUgJXMuJywgJ3BsYWNlaG9sZGVyczogY291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgaWNvbjogJ3dlbGNvbWUtbGVhcm4tbW9yZScsXG4gICAgY2F0ZWdvcnk6ICdsZWFybmRhc2gtYmxvY2tzJyxcbiAgICBzdXBwb3J0czoge1xuICAgICAgICBjdXN0b21DbGFzc05hbWU6IGZhbHNlXG4gICAgfSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNvdXJzZV9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICB1c2VyX2lkOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9wOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGVkaXQ6IGZ1bmN0aW9uIGVkaXQocHJvcHMpIHtcbiAgICAgICAgdmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGNvdXJzZV9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvdXJzZV9pZCxcbiAgICAgICAgICAgIHVzZXJfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy51c2VyX2lkLFxuICAgICAgICAgICAgYXV0b3AgPSBfcHJvcHMkYXR0cmlidXRlcy5hdXRvcCxcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXMgPSBwcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXG5cbiAgICAgICAgdmFyIGluc3BlY3RvckNvbnRyb2xzID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbHMsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFBhbmVsQm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfXygnU2V0dGluZ3MnLCAnbGVhcm5kYXNoJylcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAnQ291cnNlIElEJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IHNwcmludGYoX3goJ0VudGVyIHNpbmdsZSAlMSRzIElELiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogY291cnNlLCBjb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb3Vyc2VfaWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb3Vyc2VfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY291cnNlX2lkOiBjb3Vyc2VfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdVc2VyIElEJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBfXygnRW50ZXIgc3BlY2lmaWMgVXNlciBJRC4gTGVhdmUgYmxhbmsgZm9yIGN1cnJlbnQgVXNlci4nLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1c2VyX2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodXNlcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB1c2VyX2lkOiB1c2VyX2lkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdBdXRvIFBhcmFncmFwaCcsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogISFhdXRvcCxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGF1dG9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IGF1dG9wOiBhdXRvcCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSAnJztcbiAgICAgICAgdmFyIHByZXZpZXdfY291cnNlX2lkID0gbGRsbXNfZ2V0X2ludGVnZXJfdmFsdWUoY291cnNlX2lkKTtcblxuICAgICAgICBpZiAocHJldmlld19jb3Vyc2VfaWQgPT09IDApIHtcbiAgICAgICAgICAgIHByZXZpZXdfY291cnNlX2lkID0gbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhKCdjb3Vyc2VfaWQnKTtcbiAgICAgICAgICAgIHByZXZpZXdfY291cnNlX2lkID0gbGRsbXNfZ2V0X2ludGVnZXJfdmFsdWUocHJldmlld19jb3Vyc2VfaWQpO1xuXG4gICAgICAgICAgICBpZiAocHJldmlld19jb3Vyc2VfaWQgPT0gMCkge1xuICAgICAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSBzcHJpbnRmKF94KCclMSRzIElEIGlzIHJlcXVpcmVkIHdoZW4gbm90IHVzZWQgd2l0aGluIGEgJTIkcy4nLCAncGxhY2Vob2xkZXJzOiBDb3Vyc2UsIENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsZF9ibG9ja19lcnJvcl9tZXNzYWdlLmxlbmd0aCkge1xuICAgICAgICAgICAgbGRfYmxvY2tfZXJyb3JfbWVzc2FnZSA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdsZWFybmRhc2gtYmxvY2stZXJyb3ItbWVzc2FnZScgfSxcbiAgICAgICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG91dHB1dEJsb2NrID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogY2xhc3NOYW1lIH0sXG4gICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdsZWFybmRhc2gtYmxvY2staW5uZXInIH0sXG4gICAgICAgICAgICAgICAgbGRfYmxvY2tfZXJyb3JfbWVzc2FnZSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoSW5uZXJCbG9ja3MsIG51bGwpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIFtpbnNwZWN0b3JDb250cm9scywgb3V0cHV0QmxvY2tdO1xuICAgIH0sXG5cbiAgICBzYXZlOiBmdW5jdGlvbiBzYXZlKHByb3BzKSB7XG4gICAgICAgIHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoSW5uZXJCbG9ja3MuQ29udGVudCwgbnVsbCk7XG4gICAgfVxufSk7IiwiLyoqXG4gKiBMZWFybkRhc2ggQmxvY2sgbGQtY291cnNlLWNvbXBsZXRlXG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsLCBsZGxtc19nZXRfaW50ZWdlcl92YWx1ZSB9IGZyb20gJy4uL2xkbG1zLmpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBibG9jayBsaWJyYXJpZXNcbiAqL1xudmFyIF93cCRpMThuID0gd3AuaTE4bixcbiAgICBfXyA9IF93cCRpMThuLl9fLFxuICAgIF94ID0gX3dwJGkxOG4uX3gsXG4gICAgc3ByaW50ZiA9IF93cCRpMThuLnNwcmludGY7XG52YXIgcmVnaXN0ZXJCbG9ja1R5cGUgPSB3cC5ibG9ja3MucmVnaXN0ZXJCbG9ja1R5cGU7XG52YXIgX3dwJGVkaXRvciA9IHdwLmVkaXRvcixcbiAgICBJbm5lckJsb2NrcyA9IF93cCRlZGl0b3IuSW5uZXJCbG9ja3MsXG4gICAgSW5zcGVjdG9yQ29udHJvbHMgPSBfd3AkZWRpdG9yLkluc3BlY3RvckNvbnRyb2xzO1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBQYW5lbEJvZHkgPSBfd3AkY29tcG9uZW50cy5QYW5lbEJvZHksXG4gICAgVGV4dENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5UZXh0Q29udHJvbCxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbDtcblxuXG5yZWdpc3RlckJsb2NrVHlwZSgnbGVhcm5kYXNoL2xkLWNvdXJzZS1jb21wbGV0ZScsIHtcbiAgICB0aXRsZTogc3ByaW50ZihfeCgnTGVhcm5EYXNoICVzIENvbXBsZXRlJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcbiAgICBkZXNjcmlwdGlvbjogc3ByaW50ZihfeCgnVGhpcyBibG9jayBzaG93cyB0aGUgY29udGVudCBpZiB0aGUgdXNlciBpcyBlbnJvbGxlZCBpbnRvIHRoZSAlcyBhbmQgaXQgaXMgY29tcGxldGVkLicsICdwbGFjZWhvbGRlcnM6IGNvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuICAgIGljb246ICdzdGFyLWZpbGxlZCcsXG4gICAgY2F0ZWdvcnk6ICdsZWFybmRhc2gtYmxvY2tzJyxcbiAgICBzdXBwb3J0czoge1xuICAgICAgICBjdXN0b21DbGFzc05hbWU6IGZhbHNlXG4gICAgfSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNvdXJzZV9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICB1c2VyX2lkOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9wOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGVkaXQ6IGZ1bmN0aW9uIGVkaXQocHJvcHMpIHtcbiAgICAgICAgdmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGNvdXJzZV9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvdXJzZV9pZCxcbiAgICAgICAgICAgIHVzZXJfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy51c2VyX2lkLFxuICAgICAgICAgICAgYXV0b3AgPSBfcHJvcHMkYXR0cmlidXRlcy5hdXRvcCxcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXMgPSBwcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXG5cbiAgICAgICAgdmFyIGluc3BlY3RvckNvbnRyb2xzID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbHMsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFBhbmVsQm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfXygnU2V0dGluZ3MnLCAnbGVhcm5kYXNoJylcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAnQ291cnNlIElEJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IHNwcmludGYoX3goJ0VudGVyIHNpbmdsZSAlMSRzIElELiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogY291cnNlLCBjb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb3Vyc2VfaWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb3Vyc2VfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY291cnNlX2lkOiBjb3Vyc2VfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdVc2VyIElEJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBfXygnRW50ZXIgc3BlY2lmaWMgVXNlciBJRC4gTGVhdmUgYmxhbmsgZm9yIGN1cnJlbnQgVXNlci4nLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1c2VyX2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodXNlcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB1c2VyX2lkOiB1c2VyX2lkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdBdXRvIFBhcmFncmFwaCcsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogISFhdXRvcCxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGF1dG9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IGF1dG9wOiBhdXRvcCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSAnJztcbiAgICAgICAgdmFyIHByZXZpZXdfY291cnNlX2lkID0gbGRsbXNfZ2V0X2ludGVnZXJfdmFsdWUoY291cnNlX2lkKTtcbiAgICAgICAgaWYgKHByZXZpZXdfY291cnNlX2lkID09PSAwKSB7XG4gICAgICAgICAgICBwcmV2aWV3X2NvdXJzZV9pZCA9IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSgnY291cnNlX2lkJyk7XG4gICAgICAgICAgICBwcmV2aWV3X2NvdXJzZV9pZCA9IGxkbG1zX2dldF9pbnRlZ2VyX3ZhbHVlKHByZXZpZXdfY291cnNlX2lkKTtcblxuICAgICAgICAgICAgaWYgKHByZXZpZXdfY291cnNlX2lkID09IDApIHtcbiAgICAgICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlID0gc3ByaW50ZihfeCgnJTEkcyBJRCBpcyByZXF1aXJlZCB3aGVuIG5vdCB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogQ291cnNlLCBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGRfYmxvY2tfZXJyb3JfbWVzc2FnZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnbGVhcm5kYXNoLWJsb2NrLWVycm9yLW1lc3NhZ2UnIH0sXG4gICAgICAgICAgICAgICAgbGRfYmxvY2tfZXJyb3JfbWVzc2FnZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvdXRwdXRCbG9jayA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6IGNsYXNzTmFtZSB9LFxuICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnbGVhcm5kYXNoLWJsb2NrLWlubmVyJyB9LFxuICAgICAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UsXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KElubmVyQmxvY2tzLCBudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBbaW5zcGVjdG9yQ29udHJvbHMsIG91dHB1dEJsb2NrXTtcbiAgICB9LFxuXG4gICAgc2F2ZTogZnVuY3Rpb24gc2F2ZShwcm9wcykge1xuICAgICAgICByZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KElubmVyQmxvY2tzLkNvbnRlbnQsIG51bGwpO1xuICAgIH1cbn0pOyIsIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLWNvdXJzZS1pbnByb2dyZXNzXG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsLCBsZGxtc19nZXRfaW50ZWdlcl92YWx1ZSB9IGZyb20gJy4uL2xkbG1zLmpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBibG9jayBsaWJyYXJpZXNcbiAqL1xudmFyIF93cCRpMThuID0gd3AuaTE4bixcbiAgICBfXyA9IF93cCRpMThuLl9fLFxuICAgIF94ID0gX3dwJGkxOG4uX3gsXG4gICAgc3ByaW50ZiA9IF93cCRpMThuLnNwcmludGY7XG52YXIgcmVnaXN0ZXJCbG9ja1R5cGUgPSB3cC5ibG9ja3MucmVnaXN0ZXJCbG9ja1R5cGU7XG52YXIgX3dwJGVkaXRvciA9IHdwLmVkaXRvcixcbiAgICBJbm5lckJsb2NrcyA9IF93cCRlZGl0b3IuSW5uZXJCbG9ja3MsXG4gICAgSW5zcGVjdG9yQ29udHJvbHMgPSBfd3AkZWRpdG9yLkluc3BlY3RvckNvbnRyb2xzO1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBQYW5lbEJvZHkgPSBfd3AkY29tcG9uZW50cy5QYW5lbEJvZHksXG4gICAgVGV4dENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5UZXh0Q29udHJvbCxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbDtcblxuXG5yZWdpc3RlckJsb2NrVHlwZSgnbGVhcm5kYXNoL2xkLWNvdXJzZS1pbnByb2dyZXNzJywge1xuICAgIHRpdGxlOiBzcHJpbnRmKF94KCdMZWFybkRhc2ggJXMgSW4gUHJvZ3Jlc3MnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuICAgIGRlc2NyaXB0aW9uOiBzcHJpbnRmKF94KCdUaGlzIGJsb2NrIHNob3dzIHRoZSBjb250ZW50IGlmIHRoZSB1c2VyIGlzIGVucm9sbGVkIGludG8gdGhlICVzIGJ1dCBub3QgeWV0IGNvbXBsZXRlZC4nLCAncGxhY2Vob2xkZXI6IGNvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuICAgIGljb246ICdzdGFyLWhhbGYnLFxuICAgIGNhdGVnb3J5OiAnbGVhcm5kYXNoLWJsb2NrcycsXG4gICAgc3VwcG9ydHM6IHtcbiAgICAgICAgY3VzdG9tQ2xhc3NOYW1lOiBmYWxzZVxuICAgIH0sXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgICBjb3Vyc2VfaWQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgfSxcbiAgICAgICAgdXNlcl9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICBhdXRvcDoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBlZGl0OiBmdW5jdGlvbiBlZGl0KHByb3BzKSB7XG4gICAgICAgIHZhciBfcHJvcHMkYXR0cmlidXRlcyA9IHByb3BzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBjb3Vyc2VfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5jb3Vyc2VfaWQsXG4gICAgICAgICAgICB1c2VyX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMudXNlcl9pZCxcbiAgICAgICAgICAgIGF1dG9wID0gX3Byb3BzJGF0dHJpYnV0ZXMuYXV0b3AsXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGVzID0gcHJvcHMuc2V0QXR0cmlidXRlcztcblxuXG4gICAgICAgIHZhciBpbnNwZWN0b3JDb250cm9scyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xzLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBQYW5lbEJvZHksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogX18oJ1NldHRpbmdzJywgJ2xlYXJuZGFzaCcpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHNwcmludGYoX3goJyVzIElEJywgJ0NvdXJzZSBJRCcsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBzcHJpbnRmKF94KCdFbnRlciBzaW5nbGUgJTEkcyBJRC4gTGVhdmUgYmxhbmsgaWYgdXNlZCB3aXRoaW4gYSAlMiRzLicsICdwbGFjZWhvbGRlcnM6IGNvdXJzZSwgY291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY291cnNlX2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY291cnNlX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvdXJzZV9pZDogY291cnNlX2lkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnVXNlciBJRCcsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgaGVscDogX18oJ0VudGVyIHNwZWNpZmljIFVzZXIgSUQuIExlYXZlIGJsYW5rIGZvciBjdXJyZW50IFVzZXIuJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdXNlcl9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHVzZXJfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgdXNlcl9pZDogdXNlcl9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnQXV0byBQYXJhZ3JhcGgnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6ICEhYXV0b3AsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShhdXRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBhdXRvcDogYXV0b3AgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHZhciBsZF9ibG9ja19lcnJvcl9tZXNzYWdlID0gJyc7XG4gICAgICAgIHZhciBwcmV2aWV3X2NvdXJzZV9pZCA9IGxkbG1zX2dldF9pbnRlZ2VyX3ZhbHVlKGNvdXJzZV9pZCk7XG5cbiAgICAgICAgaWYgKHByZXZpZXdfY291cnNlX2lkID09PSAwKSB7XG4gICAgICAgICAgICBwcmV2aWV3X2NvdXJzZV9pZCA9IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSgnY291cnNlX2lkJyk7XG4gICAgICAgICAgICBwcmV2aWV3X2NvdXJzZV9pZCA9IGxkbG1zX2dldF9pbnRlZ2VyX3ZhbHVlKHByZXZpZXdfY291cnNlX2lkKTtcblxuICAgICAgICAgICAgaWYgKHByZXZpZXdfY291cnNlX2lkID09IDApIHtcbiAgICAgICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlID0gc3ByaW50ZihfeCgnJTEkcyBJRCBpcyByZXF1aXJlZCB3aGVuIG5vdCB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogQ291cnNlLCBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGRfYmxvY2tfZXJyb3JfbWVzc2FnZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnbGVhcm5kYXNoLWJsb2NrLWVycm9yLW1lc3NhZ2UnIH0sXG4gICAgICAgICAgICAgICAgbGRfYmxvY2tfZXJyb3JfbWVzc2FnZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvdXRwdXRCbG9jayA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6IGNsYXNzTmFtZSB9LFxuICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnbGVhcm5kYXNoLWJsb2NrLWlubmVyJyB9LFxuICAgICAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UsXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KElubmVyQmxvY2tzLCBudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBbaW5zcGVjdG9yQ29udHJvbHMsIG91dHB1dEJsb2NrXTtcbiAgICB9LFxuXG4gICAgc2F2ZTogZnVuY3Rpb24gc2F2ZShwcm9wcykge1xuICAgICAgICByZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KElubmVyQmxvY2tzLkNvbnRlbnQsIG51bGwpO1xuICAgIH1cbn0pOyIsIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLWNvdXJzZS1ub3RzdGFydGVkXG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsLCBsZGxtc19nZXRfaW50ZWdlcl92YWx1ZSB9IGZyb20gJy4uL2xkbG1zLmpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBibG9jayBsaWJyYXJpZXNcbiAqL1xudmFyIF93cCRpMThuID0gd3AuaTE4bixcbiAgICBfXyA9IF93cCRpMThuLl9fLFxuICAgIF94ID0gX3dwJGkxOG4uX3gsXG4gICAgc3ByaW50ZiA9IF93cCRpMThuLnNwcmludGY7XG52YXIgcmVnaXN0ZXJCbG9ja1R5cGUgPSB3cC5ibG9ja3MucmVnaXN0ZXJCbG9ja1R5cGU7XG52YXIgX3dwJGVkaXRvciA9IHdwLmVkaXRvcixcbiAgICBJbm5lckJsb2NrcyA9IF93cCRlZGl0b3IuSW5uZXJCbG9ja3MsXG4gICAgSW5zcGVjdG9yQ29udHJvbHMgPSBfd3AkZWRpdG9yLkluc3BlY3RvckNvbnRyb2xzO1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBQYW5lbEJvZHkgPSBfd3AkY29tcG9uZW50cy5QYW5lbEJvZHksXG4gICAgVGV4dENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5UZXh0Q29udHJvbCxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbDtcblxuXG5yZWdpc3RlckJsb2NrVHlwZSgnbGVhcm5kYXNoL2xkLWNvdXJzZS1ub3RzdGFydGVkJywge1xuICAgIHRpdGxlOiBzcHJpbnRmKF94KCdMZWFybkRhc2ggJXMgTm90IFN0YXJ0ZWQnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuICAgIGRlc2NyaXB0aW9uOiBzcHJpbnRmKF94KCdUaGlzIGJsb2NrIHNob3dzIHRoZSBjb250ZW50IGlmIHRoZSB1c2VyIGlzIGVucm9sbGVkIGludG8gdGhlICVzIGJ1dCBub3QgeWV0IHN0YXJ0ZWQuJywgJ3BsYWNlaG9sZGVyczogY291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgaWNvbjogJ3N0YXItZW1wdHknLFxuICAgIGNhdGVnb3J5OiAnbGVhcm5kYXNoLWJsb2NrcycsXG4gICAgc3VwcG9ydHM6IHtcbiAgICAgICAgY3VzdG9tQ2xhc3NOYW1lOiBmYWxzZVxuICAgIH0sXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgICBjb3Vyc2VfaWQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgfSxcbiAgICAgICAgdXNlcl9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICBhdXRvcDoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBlZGl0OiBmdW5jdGlvbiBlZGl0KHByb3BzKSB7XG4gICAgICAgIHZhciBfcHJvcHMkYXR0cmlidXRlcyA9IHByb3BzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBjb3Vyc2VfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5jb3Vyc2VfaWQsXG4gICAgICAgICAgICB1c2VyX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMudXNlcl9pZCxcbiAgICAgICAgICAgIGF1dG9wID0gX3Byb3BzJGF0dHJpYnV0ZXMuYXV0b3AsXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGVzID0gcHJvcHMuc2V0QXR0cmlidXRlcztcblxuXG4gICAgICAgIHZhciBpbnNwZWN0b3JDb250cm9scyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xzLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBQYW5lbEJvZHksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogX18oJ1NldHRpbmdzJywgJ2xlYXJuZGFzaCcpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHNwcmludGYoX3goJyVzIElEJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcbiAgICAgICAgICAgICAgICAgICAgaGVscDogc3ByaW50ZihfeCgnRW50ZXIgc2luZ2xlICUxJHMgSUQuIExlYXZlIGJsYW5rIGlmIHVzZWQgd2l0aGluIGEgJTIkcy4nLCAncGxhY2Vob2xkZXJzOiBjb3Vyc2UsIGNvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvdXJzZV9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNvdXJzZV9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjb3Vyc2VfaWQ6IGNvdXJzZV9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogX18oJ1VzZXIgSUQnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IF9fKCdFbnRlciBzcGVjaWZpYyBVc2VyIElELiBMZWF2ZSBibGFuayBmb3IgY3VycmVudCBVc2VyLicsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVzZXJfaWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSh1c2VyX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IHVzZXJfaWQ6IHVzZXJfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogX18oJ0F1dG8gUGFyYWdyYXBoJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiAhIWF1dG9wLFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoYXV0b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgYXV0b3A6IGF1dG9wIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB2YXIgbGRfYmxvY2tfZXJyb3JfbWVzc2FnZSA9ICcnO1xuICAgICAgICB2YXIgcHJldmlld19jb3Vyc2VfaWQgPSBsZGxtc19nZXRfaW50ZWdlcl92YWx1ZShjb3Vyc2VfaWQpO1xuXG4gICAgICAgIGlmIChwcmV2aWV3X2NvdXJzZV9pZCA9PT0gMCkge1xuICAgICAgICAgICAgcHJldmlld19jb3Vyc2VfaWQgPSBsZGxtc19nZXRfcG9zdF9lZGl0X21ldGEoJ2NvdXJzZV9pZCcpO1xuICAgICAgICAgICAgcHJldmlld19jb3Vyc2VfaWQgPSBsZGxtc19nZXRfaW50ZWdlcl92YWx1ZShwcmV2aWV3X2NvdXJzZV9pZCk7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aWV3X2NvdXJzZV9pZCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgbGRfYmxvY2tfZXJyb3JfbWVzc2FnZSA9IHNwcmludGYoX3goJyUxJHMgSUQgaXMgcmVxdWlyZWQgd2hlbiBub3QgdXNlZCB3aXRoaW4gYSAlMiRzLicsICdwbGFjZWhvbGRlcnM6IENvdXJzZSwgQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2xlYXJuZGFzaC1ibG9jay1lcnJvci1tZXNzYWdlJyB9LFxuICAgICAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3V0cHV0QmxvY2sgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiBjbGFzc05hbWUgfSxcbiAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2xlYXJuZGFzaC1ibG9jay1pbm5lcicgfSxcbiAgICAgICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChJbm5lckJsb2NrcywgbnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gW2luc3BlY3RvckNvbnRyb2xzLCBvdXRwdXRCbG9ja107XG4gICAgfSxcblxuICAgIHNhdmU6IGZ1bmN0aW9uIHNhdmUocHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChJbm5lckJsb2Nrcy5Db250ZW50LCBudWxsKTtcbiAgICB9XG59KTsiLCIvKipcbiAqIExlYXJuRGFzaCBCbG9jayBsZC1jZXJ0aWZpY2F0ZVxuICpcbiAqIEBzaW5jZSAzLjJcbiAqIEBwYWNrYWdlIExlYXJuRGFzaFxuICovXG5cbi8qKlxuICogTGVhcm5EYXNoIGJsb2NrIGZ1bmN0aW9uc1xuICovXG5pbXBvcnQgeyBsZGxtc19nZXRfcG9zdF9lZGl0X21ldGEsIGxkbG1zX2dldF9jdXN0b21fbGFiZWwsIGxkbG1zX2dldF9pbnRlZ2VyX3ZhbHVlIH0gZnJvbSAnLi4vbGRsbXMuanMnO1xuXG4vKipcbiAqIEludGVybmFsIGJsb2NrIGxpYnJhcmllc1xuICovXG52YXIgX3dwJGkxOG4gPSB3cC5pMThuLFxuICAgIF9fID0gX3dwJGkxOG4uX18sXG4gICAgX3ggPSBfd3AkaTE4bi5feCxcbiAgICBzcHJpbnRmID0gX3dwJGkxOG4uc3ByaW50ZjtcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBJbnNwZWN0b3JDb250cm9scyA9IHdwLmVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgU2VydmVyU2lkZVJlbmRlciA9IF93cCRjb21wb25lbnRzLlNlcnZlclNpZGVSZW5kZXIsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFRleHRDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVGV4dENvbnRyb2wsXG4gICAgU2VsZWN0Q29udHJvbCA9IF93cCRjb21wb25lbnRzLlNlbGVjdENvbnRyb2wsXG4gICAgVG9nZ2xlQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlRvZ2dsZUNvbnRyb2w7XG5cblxucmVnaXN0ZXJCbG9ja1R5cGUoJ2xlYXJuZGFzaC9sZC1jb3Vyc2UtcmVzdW1lJywge1xuICAgIHRpdGxlOiBzcHJpbnRmKF94KCclcyBSZXN1bWUnLCAnQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgZGVzY3JpcHRpb246IHNwcmludGYoX3goJ1JldHVybiB0byAlcyBsaW5rL2J1dHRvbi4nLCAnQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgaWNvbjogJ3dlbGNvbWUtbGVhcm4tbW9yZScsXG4gICAgY2F0ZWdvcnk6ICdsZWFybmRhc2gtYmxvY2tzJyxcbiAgICBzdXBwb3J0czoge1xuICAgICAgICBjdXN0b21DbGFzc05hbWU6IGZhbHNlXG4gICAgfSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNvdXJzZV9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICB1c2VyX2lkOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGh0bWxfY2xhc3M6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdfc2hvdzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogMVxuICAgICAgICB9LFxuICAgICAgICBwcmV2aWV3X2NvdXJzZV9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICBwcmV2aWV3X3VzZXJfaWQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgfSxcbiAgICAgICAgZXhhbXBsZV9zaG93OiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkZWZhdWx0OiAwXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGVkaXQ6IGZ1bmN0aW9uIGVkaXQocHJvcHMpIHtcbiAgICAgICAgdmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGNvdXJzZV9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvdXJzZV9pZCxcbiAgICAgICAgICAgIHVzZXJfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy51c2VyX2lkLFxuICAgICAgICAgICAgbGFiZWwgPSBfcHJvcHMkYXR0cmlidXRlcy5sYWJlbCxcbiAgICAgICAgICAgIGh0bWxfY2xhc3MgPSBfcHJvcHMkYXR0cmlidXRlcy5odG1sX2NsYXNzLFxuICAgICAgICAgICAgYnV0dG9uID0gX3Byb3BzJGF0dHJpYnV0ZXMuYnV0dG9uLFxuICAgICAgICAgICAgcHJldmlld19zaG93ID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld19zaG93LFxuICAgICAgICAgICAgcHJldmlld19jb3Vyc2VfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5wcmV2aWV3X2NvdXJzZV9pZCxcbiAgICAgICAgICAgIHByZXZpZXdfdXNlcl9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByZXZpZXdfdXNlcl9pZCxcbiAgICAgICAgICAgIGV4YW1wbGVfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLmV4YW1wbGVfc2hvdyxcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXMgPSBwcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXG5cbiAgICAgICAgdmFyIGluc3BlY3RvckNvbnRyb2xzID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbHMsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFBhbmVsQm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfXygnU2V0dGluZ3MnLCAnbGVhcm5kYXNoJylcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAnQ291cnNlIElEJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IHNwcmludGYoX3goJ0VudGVyIHNpbmdsZSAlMSRzIElELiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogY291cnNlLCBjb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb3Vyc2VfaWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb3Vyc2VfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY291cnNlX2lkOiBjb3Vyc2VfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdVc2VyIElEJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBfXygnRW50ZXIgc3BlY2lmaWMgVXNlciBJRC4gTGVhdmUgYmxhbmsgZm9yIGN1cnJlbnQgVXNlci4nLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1c2VyX2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodXNlcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB1c2VyX2lkOiB1c2VyX2lkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdTaG93IGFzIGJ1dHRvbicsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnWWVzJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICd0cnVlJ1xuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogX18oJ05vJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdmYWxzZSdcbiAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShidXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgYnV0dG9uOiBidXR0b24gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdMYWJlbCcsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgaGVscDogX18oJ0xhYmVsIGZvciBsaW5rIHNob3duIHRvIHVzZXInLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBsYWJlbCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IGxhYmVsOiBsYWJlbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdodG1sX2NsYXNzJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdDbGFzcycsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgaGVscDogX18oJ0hUTUwgY2xhc3MgZm9yIGxpbmsgZWxlbWVudCcsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGh0bWxfY2xhc3MgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShodG1sX2NsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IGh0bWxfY2xhc3M6IGh0bWxfY2xhc3MgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBQYW5lbEJvZHksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogX18oJ1ByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxPcGVuOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdTaG93IFByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6ICEhcHJldmlld19zaG93LFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocHJldmlld19zaG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByZXZpZXdfc2hvdzogcHJldmlld19zaG93IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzcHJpbnRmKF94KCclcyBJRCcsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IHNwcmludGYoX3goJ0VudGVyIGEgJXMgSUQgdG8gdGVzdCBwcmV2aWV3JywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHByZXZpZXdfY291cnNlX2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfY291cnNlX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByZXZpZXdfY291cnNlX2lkOiBwcmV2aWV3X2NvdXJzZV9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogX18oJ1VzZXIgSUQnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IF9fKCdFbnRlciBzcGVjaWZpYyBVc2VyIElELiBMZWF2ZSBibGFuayBmb3IgY3VycmVudCBVc2VyLicsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHByZXZpZXdfdXNlcl9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfdXNlcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X3VzZXJfaWQ6IHByZXZpZXdfdXNlcl9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9fc2VydmVyc2lkZV9yZW5kZXIoYXR0cmlidXRlcykge1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMucHJldmlld19zaG93ID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlcnZlclNpZGVSZW5kZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2s6ICdsZWFybmRhc2gvbGQtY291cnNlLXJlc3VtZScsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fKCdbbGRfY291cnNlX3Jlc3VtZV0gc2hvcnRjb2RlIG91dHB1dCBzaG93biBoZXJlJywgJ2xlYXJuZGFzaCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtpbnNwZWN0b3JDb250cm9scywgZG9fc2VydmVyc2lkZV9yZW5kZXIocHJvcHMuYXR0cmlidXRlcyldO1xuICAgIH1cbn0pOyIsIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLWNvdXJzZS1pbmZvXG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCwgbGRsbXNfZ2V0X3Blcl9wYWdlIH0gZnJvbSAnLi4vbGRsbXMuanMnO1xuXG4vKipcbiAqIEludGVybmFsIGJsb2NrIGxpYnJhcmllc1xuICovXG52YXIgX3dwJGkxOG4gPSB3cC5pMThuLFxuICAgIF9fID0gX3dwJGkxOG4uX18sXG4gICAgX3ggPSBfd3AkaTE4bi5feCxcbiAgICBzcHJpbnRmID0gX3dwJGkxOG4uc3ByaW50ZjtcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBJbnNwZWN0b3JDb250cm9scyA9IHdwLmVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgU2VydmVyU2lkZVJlbmRlciA9IF93cCRjb21wb25lbnRzLlNlcnZlclNpZGVSZW5kZXIsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFJhbmdlQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlJhbmdlQ29udHJvbCxcbiAgICBTZWxlY3RDb250cm9sID0gX3dwJGNvbXBvbmVudHMuU2VsZWN0Q29udHJvbCxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbCxcbiAgICBUZXh0Q29udHJvbCA9IF93cCRjb21wb25lbnRzLlRleHRDb250cm9sO1xuXG5cbnJlZ2lzdGVyQmxvY2tUeXBlKCdsZWFybmRhc2gvbGQtY291cnNlLWluZm8nLCB7XG5cdHRpdGxlOiBzcHJpbnRmKF94KCdMZWFybkRhc2ggJXMgSW5mbyBbbGRfY291cnNlX2luZm9dJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0ZGVzY3JpcHRpb246IHNwcmludGYoX3goJ1RoaXMgYmxvY2sgc2hvd3MgdGhlICVzIGFuZCBwcm9ncmVzcyBmb3IgdGhlIHVzZXIuJywgJ3BsYWNlaG9sZGVyczogY291cnNlcycsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRpY29uOiAnYW5hbHl0aWNzJyxcblx0Y2F0ZWdvcnk6ICdsZWFybmRhc2gtYmxvY2tzJyxcblx0ZXhhbXBsZToge1xuXHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdGV4YW1wbGVfc2hvdzogMVxuXHRcdH1cblx0fSxcblx0c3VwcG9ydHM6IHtcblx0XHRjdXN0b21DbGFzc05hbWU6IGZhbHNlXG5cdH0sXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHR1c2VyX2lkOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6IDBcblx0XHR9LFxuXHRcdHJlZ2lzdGVyZWRfc2hvdzoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogdHJ1ZVxuXHRcdH0sXG5cdFx0cmVnaXN0ZXJlZF9zaG93X3RodW1ibmFpbDoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogdHJ1ZVxuXHRcdH0sXG5cdFx0cmVnaXN0ZXJlZF9udW06IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdHJlZ2lzdGVyZWRfb3JkZXJieToge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnSUQnXG5cdFx0fSxcblx0XHRyZWdpc3RlcmVkX29yZGVyOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICdBU0MnXG5cdFx0fSxcblx0XHRwcm9ncmVzc19zaG93OiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiB0cnVlXG5cdFx0fSxcblx0XHRwcm9ncmVzc19udW06IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdHByb2dyZXNzX29yZGVyYnk6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJ0lEJ1xuXHRcdH0sXG5cdFx0cHJvZ3Jlc3Nfb3JkZXI6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJ0FTQydcblx0XHR9LFxuXHRcdHF1aXpfc2hvdzoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogdHJ1ZVxuXHRcdH0sXG5cdFx0cXVpel9udW06IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdHF1aXpfb3JkZXJieToge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAndGFrZW4nXG5cdFx0fSxcblx0XHRxdWl6X29yZGVyOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICdERVNDJ1xuXHRcdH0sXG5cdFx0cHJldmlld19zaG93OiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiB0cnVlXG5cdFx0fSxcblx0XHRwcmV2aWV3X3VzZXJfaWQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdGV4YW1wbGVfc2hvdzoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogMFxuXHRcdH0sXG5cdFx0bWV0YToge1xuXHRcdFx0dHlwZTogJ29iamVjdCdcblx0XHR9XG5cdH0sXG5cdGVkaXQ6IGZ1bmN0aW9uIGVkaXQocHJvcHMpIHtcblx0XHR2YXIgX3Byb3BzJGF0dHJpYnV0ZXMgPSBwcm9wcy5hdHRyaWJ1dGVzLFxuXHRcdCAgICB1c2VyX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMudXNlcl9pZCxcblx0XHQgICAgcmVnaXN0ZXJlZF9zaG93ID0gX3Byb3BzJGF0dHJpYnV0ZXMucmVnaXN0ZXJlZF9zaG93LFxuXHRcdCAgICByZWdpc3RlcmVkX3Nob3dfdGh1bWJuYWlsID0gX3Byb3BzJGF0dHJpYnV0ZXMucmVnaXN0ZXJlZF9zaG93X3RodW1ibmFpbCxcblx0XHQgICAgcmVnaXN0ZXJlZF9udW0gPSBfcHJvcHMkYXR0cmlidXRlcy5yZWdpc3RlcmVkX251bSxcblx0XHQgICAgcmVnaXN0ZXJlZF9vcmRlcmJ5ID0gX3Byb3BzJGF0dHJpYnV0ZXMucmVnaXN0ZXJlZF9vcmRlcmJ5LFxuXHRcdCAgICByZWdpc3RlcmVkX29yZGVyID0gX3Byb3BzJGF0dHJpYnV0ZXMucmVnaXN0ZXJlZF9vcmRlcixcblx0XHQgICAgcHJvZ3Jlc3Nfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByb2dyZXNzX3Nob3csXG5cdFx0ICAgIHByb2dyZXNzX251bSA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByb2dyZXNzX251bSxcblx0XHQgICAgcHJvZ3Jlc3Nfb3JkZXJieSA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByb2dyZXNzX29yZGVyYnksXG5cdFx0ICAgIHByb2dyZXNzX29yZGVyID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJvZ3Jlc3Nfb3JkZXIsXG5cdFx0ICAgIHF1aXpfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLnF1aXpfc2hvdyxcblx0XHQgICAgcXVpel9udW0gPSBfcHJvcHMkYXR0cmlidXRlcy5xdWl6X251bSxcblx0XHQgICAgcXVpel9vcmRlcmJ5ID0gX3Byb3BzJGF0dHJpYnV0ZXMucXVpel9vcmRlcmJ5LFxuXHRcdCAgICBxdWl6X29yZGVyID0gX3Byb3BzJGF0dHJpYnV0ZXMucXVpel9vcmRlcixcblx0XHQgICAgcHJldmlld191c2VyX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld191c2VyX2lkLFxuXHRcdCAgICBwcmV2aWV3X3Nob3cgPSBfcHJvcHMkYXR0cmlidXRlcy5wcmV2aWV3X3Nob3csXG5cdFx0ICAgIHNldEF0dHJpYnV0ZXMgPSBwcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXG5cblx0XHR2YXIgcGFuZWxib2R5X2hlYWRlciA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFBhbmVsQm9keSxcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IF9fKCdTZXR0aW5ncycsICdsZWFybmRhc2gnKVxuXHRcdFx0fSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogX18oJ1VzZXIgSUQnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdGhlbHA6IF9fKCdFbnRlciBzcGVjaWZpYyBVc2VyIElELiBMZWF2ZSBibGFuayBmb3IgY3VycmVudCBVc2VyLicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0dmFsdWU6IHVzZXJfaWQgfHwgJycsXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSh1c2VyX2lkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB1c2VyX2lkOiB1c2VyX2lkIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCdTaG93IFJlZ2lzdGVyZWQgJXMnLCAncGxhY2Vob2xkZXI6IENvdXJzZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZXMnKSksXG5cdFx0XHRcdGNoZWNrZWQ6ICEhcmVnaXN0ZXJlZF9zaG93LFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocmVnaXN0ZXJlZF9zaG93KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyByZWdpc3RlcmVkX3Nob3c6IHJlZ2lzdGVyZWRfc2hvdyB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnU2hvdyAlcyBQcm9nZXNzJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0Y2hlY2tlZDogISFwcm9ncmVzc19zaG93LFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocHJvZ3Jlc3Nfc2hvdykge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJvZ3Jlc3Nfc2hvdzogcHJvZ3Jlc3Nfc2hvdyB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnU2hvdyAlcyBBdHRlbXB0cycsICdwbGFjZWhvbGRlcjogUXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpKSxcblx0XHRcdFx0Y2hlY2tlZDogISFxdWl6X3Nob3csXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShxdWl6X3Nob3cpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHF1aXpfc2hvdzogcXVpel9zaG93IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHR2YXIgcGFuZWxib2R5X3JlZ2lzdGVyZWQgPSAnJztcblx0XHRpZiAocmVnaXN0ZXJlZF9zaG93ID09PSB0cnVlKSB7XG5cdFx0XHRwYW5lbGJvZHlfcmVnaXN0ZXJlZCA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHNwcmludGYoX3goJ1JlZ2lzdGVyZWQgJXMnLCAncGxhY2Vob2xkZXI6IENvdXJzZXMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZXMnKSksXG5cdFx0XHRcdFx0aW5pdGlhbE9wZW46IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdTaG93IFRodW1ibmFpbCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRjaGVja2VkOiAhIXJlZ2lzdGVyZWRfc2hvd190aHVtYm5haWwsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHJlZ2lzdGVyZWRfc2hvd190aHVtYm5haWwpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcmVnaXN0ZXJlZF9zaG93X3RodW1ibmFpbDogcmVnaXN0ZXJlZF9zaG93X3RodW1ibmFpbCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ3BlciBwYWdlJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ0xlYXZlIGVtcHR5IGZvciBkZWZhdWx0ICglZCkgb3IgMCB0byBzaG93IGFsbCBpdGVtcy4nLCAncGxhY2Vob2xkZXI6IGRlZmF1bHQgcGVyIHBhZ2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9wZXJfcGFnZSgncGVyX3BhZ2UnKSksXG5cdFx0XHRcdFx0dmFsdWU6IHJlZ2lzdGVyZWRfbnVtIHx8ICcnLFxuXHRcdFx0XHRcdG1pbjogMCxcblx0XHRcdFx0XHRtYXg6IDEwMCxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocmVnaXN0ZXJlZF9udW0pIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcmVnaXN0ZXJlZF9udW06IHJlZ2lzdGVyZWRfbnVtIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdFx0a2V5OiAncmVnaXN0ZXJlZF9vcmRlcmJ5Jyxcblx0XHRcdFx0XHRsYWJlbDogX18oJ09yZGVyIGJ5JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiByZWdpc3RlcmVkX29yZGVyYnksXG5cdFx0XHRcdFx0b3B0aW9uczogW3tcblx0XHRcdFx0XHRcdGxhYmVsOiBfXygnSUQgLSBPcmRlciBieSBwb3N0IGlkLiAoZGVmYXVsdCknLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ0lEJ1xuXHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdGxhYmVsOiBfXygnVGl0bGUgLSBPcmRlciBieSBwb3N0IHRpdGxlJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICd0aXRsZSdcblx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRsYWJlbDogX18oJ0RhdGUgLSBPcmRlciBieSBwb3N0IGRhdGUnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2RhdGUnXG5cdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdNZW51IC0gT3JkZXIgYnkgUGFnZSBPcmRlciBWYWx1ZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnbWVudV9vcmRlcidcblx0XHRcdFx0XHR9XSxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocmVnaXN0ZXJlZF9vcmRlcmJ5KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHJlZ2lzdGVyZWRfb3JkZXJieTogcmVnaXN0ZXJlZF9vcmRlcmJ5IH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdFx0a2V5OiAncmVnaXN0ZXJlZF9vcmRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdPcmRlcicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogcmVnaXN0ZXJlZF9vcmRlcixcblx0XHRcdFx0XHRvcHRpb25zOiBbe1xuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdERVNDIC0gaGlnaGVzdCB0byBsb3dlc3QgdmFsdWVzIChkZWZhdWx0KScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnREVTQydcblx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRsYWJlbDogX18oJ0FTQyAtIGxvd2VzdCB0byBoaWdoZXN0IHZhbHVlcycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnQVNDJ1xuXHRcdFx0XHRcdH1dLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShyZWdpc3RlcmVkX29yZGVyKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHJlZ2lzdGVyZWRfb3JkZXI6IHJlZ2lzdGVyZWRfb3JkZXIgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR2YXIgcGFuZWxib2R5X3Byb2dyZXNzID0gJyc7XG5cdFx0aWYgKHByb2dyZXNzX3Nob3cgPT09IHRydWUpIHtcblx0XHRcdHBhbmVsYm9keV9wcm9ncmVzcyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHNwcmludGYoX3goJyVzIFByb2dyZXNzJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdwZXIgcGFnZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdMZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdCAoJWQpIG9yIDAgdG8gc2hvdyBhbGwgaXRlbXMuJywgJ3BsYWNlaG9sZGVyOiBkZWZhdWx0IHBlciBwYWdlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfcGVyX3BhZ2UoJ3Byb2dyZXNzX251bScpKSxcblx0XHRcdFx0XHR2YWx1ZTogcHJvZ3Jlc3NfbnVtIHx8ICcnLFxuXHRcdFx0XHRcdG1pbjogMCxcblx0XHRcdFx0XHRtYXg6IDEwMCxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocHJvZ3Jlc3NfbnVtKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByb2dyZXNzX251bTogcHJvZ3Jlc3NfbnVtIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdFx0a2V5OiAncHJvZ3Jlc3Nfb3JkZXJieScsXG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdPcmRlciBieScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogcHJvZ3Jlc3Nfb3JkZXJieSxcblx0XHRcdFx0XHRvcHRpb25zOiBbe1xuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdJRCAtIE9yZGVyIGJ5IHBvc3QgaWQuIChkZWZhdWx0KScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnSUQnXG5cdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdUaXRsZSAtIE9yZGVyIGJ5IHBvc3QgdGl0bGUnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3RpdGxlJ1xuXHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdGxhYmVsOiBfXygnRGF0ZSAtIE9yZGVyIGJ5IHBvc3QgZGF0ZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnZGF0ZSdcblx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRsYWJlbDogX18oJ01lbnUgLSBPcmRlciBieSBQYWdlIE9yZGVyIFZhbHVlJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICdtZW51X29yZGVyJ1xuXHRcdFx0XHRcdH1dLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcm9ncmVzc19vcmRlcmJ5KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByb2dyZXNzX29yZGVyYnk6IHByb2dyZXNzX29yZGVyYnkgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRyb2wsIHtcblx0XHRcdFx0XHRrZXk6ICdwcm9ncmVzc19vcmRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdPcmRlcicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogcHJvZ3Jlc3Nfb3JkZXIsXG5cdFx0XHRcdFx0b3B0aW9uczogW3tcblx0XHRcdFx0XHRcdGxhYmVsOiBfXygnREVTQyAtIGhpZ2hlc3QgdG8gbG93ZXN0IHZhbHVlcyAoZGVmYXVsdCknLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ0RFU0MnXG5cdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdBU0MgLSBsb3dlc3QgdG8gaGlnaGVzdCB2YWx1ZXMnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ0FTQydcblx0XHRcdFx0XHR9XSxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocHJvZ3Jlc3Nfb3JkZXIpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJvZ3Jlc3Nfb3JkZXI6IHByb2dyZXNzX29yZGVyIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dmFyIHBhbmVsYm9keV9xdWl6ID0gJyc7XG5cdFx0aWYgKHF1aXpfc2hvdyA9PT0gdHJ1ZSkge1xuXHRcdFx0cGFuZWxib2R5X3F1aXogPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiBzcHJpbnRmKF94KCclcyBBdHRlbXB0cycsICdwbGFjZWhvbGRlcjogUXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdwZXIgcGFnZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdMZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdCAoJWQpIG9yIDAgdG8gc2hvdyBhbGwgaXRlbXMuJywgJ3BsYWNlaG9sZGVyOiBkZWZhdWx0IHBlciBwYWdlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfcGVyX3BhZ2UoJ3F1aXpfbnVtJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBxdWl6X251bSB8fCAnJyxcblx0XHRcdFx0XHRtaW46IDAsXG5cdFx0XHRcdFx0bWF4OiAxMDAsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHF1aXpfbnVtKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHF1aXpfbnVtOiBxdWl6X251bSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoU2VsZWN0Q29udHJvbCwge1xuXHRcdFx0XHRcdGtleTogJ3F1aXpfb3JkZXJieScsXG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdPcmRlciBieScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogcXVpel9vcmRlcmJ5LFxuXHRcdFx0XHRcdG9wdGlvbnM6IFt7XG5cdFx0XHRcdFx0XHRsYWJlbDogX18oJ0RhdGUgVGFrZW4gKGRlZmF1bHQpIC0gT3JkZXIgYnkgZGF0ZSB0YWtlbicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAndGFrZW4nXG5cdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdUaXRsZSAtIE9yZGVyIGJ5IHBvc3QgdGl0bGUnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3RpdGxlJ1xuXHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdGxhYmVsOiBfXygnSUQgLSBPcmRlciBieSBwb3N0IGlkLiAoZGVmYXVsdCknLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ0lEJ1xuXHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdGxhYmVsOiBfXygnRGF0ZSAtIE9yZGVyIGJ5IHBvc3QgZGF0ZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnZGF0ZSdcblx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRsYWJlbDogX18oJ01lbnUgLSBPcmRlciBieSBQYWdlIE9yZGVyIFZhbHVlJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICdtZW51X29yZGVyJ1xuXHRcdFx0XHRcdH1dLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShxdWl6X29yZGVyYnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcXVpel9vcmRlcmJ5OiBxdWl6X29yZGVyYnkgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRyb2wsIHtcblx0XHRcdFx0XHRrZXk6ICdxdWl6X29yZGVyJyxcblx0XHRcdFx0XHRsYWJlbDogX18oJ09yZGVyJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBxdWl6X29yZGVyLFxuXHRcdFx0XHRcdG9wdGlvbnM6IFt7XG5cdFx0XHRcdFx0XHRsYWJlbDogX18oJ0RFU0MgLSBoaWdoZXN0IHRvIGxvd2VzdCB2YWx1ZXMgKGRlZmF1bHQpJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICdERVNDJ1xuXHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdGxhYmVsOiBfXygnQVNDIC0gbG93ZXN0IHRvIGhpZ2hlc3QgdmFsdWVzJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICdBU0MnXG5cdFx0XHRcdFx0fV0sXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHF1aXpfb3JkZXIpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcXVpel9vcmRlcjogcXVpel9vcmRlciB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHZhciBpbnNwZWN0b3JDb250cm9scyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdEluc3BlY3RvckNvbnRyb2xzLFxuXHRcdFx0bnVsbCxcblx0XHRcdHBhbmVsYm9keV9oZWFkZXIsXG5cdFx0XHRwYW5lbGJvZHlfcmVnaXN0ZXJlZCxcblx0XHRcdHBhbmVsYm9keV9wcm9ncmVzcyxcblx0XHRcdHBhbmVsYm9keV9xdWl6LFxuXHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogX18oJ1ByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aW5pdGlhbE9wZW46IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdTaG93IFByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0Y2hlY2tlZDogISFwcmV2aWV3X3Nob3csXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfc2hvdykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X3Nob3c6IHByZXZpZXdfc2hvdyB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1VzZXIgSUQnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aGVscDogX18oJ0VudGVyIGEgVXNlciBJRCB0byB0ZXN0IHByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6IHByZXZpZXdfdXNlcl9pZCB8fCAnJyxcblx0XHRcdFx0XHR0eXBlOiAnbnVtYmVyJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocHJldmlld191c2VyX2lkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByZXZpZXdfdXNlcl9pZDogcHJldmlld191c2VyX2lkIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0ZnVuY3Rpb24gZG9fc2VydmVyc2lkZV9yZW5kZXIoYXR0cmlidXRlcykge1xuXHRcdFx0aWYgKGF0dHJpYnV0ZXMucHJldmlld19zaG93ID09IHRydWUpIHtcblx0XHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZXJ2ZXJTaWRlUmVuZGVyLCB7XG5cdFx0XHRcdFx0YmxvY2s6ICdsZWFybmRhc2gvbGQtY291cnNlLWluZm8nLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gX18oJ1tsZF9jb3Vyc2VfaW5mb10gc2hvcnRjb2RlIG91dHB1dCBzaG93biBoZXJlJywgJ2xlYXJuZGFzaCcpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBbaW5zcGVjdG9yQ29udHJvbHMsIGRvX3NlcnZlcnNpZGVfcmVuZGVyKHByb3BzLmF0dHJpYnV0ZXMpXTtcblx0fSxcblxuXHRzYXZlOiBmdW5jdGlvbiBzYXZlKHByb3BzKSB7XG5cdFx0Ly8gRGVsZXRlIG1ldGEgZnJvbSBwcm9wcyB0byBwcmV2ZW50IGl0IGJlaW5nIHNhdmVkLlxuXHRcdGRlbGV0ZSBwcm9wcy5hdHRyaWJ1dGVzLm1ldGE7XG5cblx0XHQvLyBEZWxldGUgcHJldmlld191c2VyX2lkIGZyb20gcHJvcHMgdG8gcHJldmVudCBpdCBiZWluZyBzYXZlZC5cblx0XHRkZWxldGUgcHJvcHMuYXR0cmlidXRlcy5wcmV2aWV3X3VzZXJfaWQ7XG5cdH1cbn0pOyIsIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLXVzZXItY291cnNlLXBvaW50c1xuICpcbiAqIEBzaW5jZSAyLjUuOVxuICogQHBhY2thZ2UgTGVhcm5EYXNoXG4gKi9cblxuLyoqXG4gKiBMZWFybkRhc2ggYmxvY2sgZnVuY3Rpb25zXG4gKi9cbmltcG9ydCB7IGxkbG1zX2dldF9jdXN0b21fbGFiZWwgfSBmcm9tICcuLi9sZGxtcy5qcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgYmxvY2sgbGlicmFyaWVzXG4gKi9cbnZhciBfd3AkaTE4biA9IHdwLmkxOG4sXG4gICAgX18gPSBfd3AkaTE4bi5fXyxcbiAgICBfeCA9IF93cCRpMThuLl94LFxuICAgIHNwcmludGYgPSBfd3AkaTE4bi5zcHJpbnRmO1xudmFyIHJlZ2lzdGVyQmxvY2tUeXBlID0gd3AuYmxvY2tzLnJlZ2lzdGVyQmxvY2tUeXBlO1xudmFyIEluc3BlY3RvckNvbnRyb2xzID0gd3AuZWRpdG9yLkluc3BlY3RvckNvbnRyb2xzO1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBTZXJ2ZXJTaWRlUmVuZGVyID0gX3dwJGNvbXBvbmVudHMuU2VydmVyU2lkZVJlbmRlcixcbiAgICBQYW5lbEJvZHkgPSBfd3AkY29tcG9uZW50cy5QYW5lbEJvZHksXG4gICAgVG9nZ2xlQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlRvZ2dsZUNvbnRyb2wsXG4gICAgVGV4dENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5UZXh0Q29udHJvbDtcblxuXG5yZWdpc3RlckJsb2NrVHlwZSgnbGVhcm5kYXNoL2xkLXVzZXItY291cnNlLXBvaW50cycsIHtcbiAgICB0aXRsZTogc3ByaW50ZihfeCgnTGVhcm5EYXNoIFVzZXIgJXMgUG9pbnRzJywgJ0xlYXJuRGFzaCBVc2VyIENvdXJzZSBQb2ludHMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcbiAgICBkZXNjcmlwdGlvbjogc3ByaW50ZihfeCgnVGhpcyBibG9jayBzaG93cyB0aGUgZWFybmVkICVzIHBvaW50cyBmb3IgdGhlIHVzZXIuJywgJ3BsYWNlaG9sZGVyczogY291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgaWNvbjogJ2NoYXJ0LWFyZWEnLFxuICAgIGNhdGVnb3J5OiAnbGVhcm5kYXNoLWJsb2NrcycsXG4gICAgZXhhbXBsZToge1xuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBleGFtcGxlX3Nob3c6IDFcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc3VwcG9ydHM6IHtcbiAgICAgICAgY3VzdG9tQ2xhc3NOYW1lOiBmYWxzZVxuICAgIH0sXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgICB1c2VyX2lkOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdfc2hvdzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogMVxuICAgICAgICB9LFxuICAgICAgICBwcmV2aWV3X3VzZXJfaWQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGVkaXQ6IGZ1bmN0aW9uIGVkaXQocHJvcHMpIHtcbiAgICAgICAgdmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIHVzZXJfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy51c2VyX2lkLFxuICAgICAgICAgICAgcHJldmlld19zaG93ID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld19zaG93LFxuICAgICAgICAgICAgcHJldmlld191c2VyX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld191c2VyX2lkLFxuICAgICAgICAgICAgc2V0QXR0cmlidXRlcyA9IHByb3BzLnNldEF0dHJpYnV0ZXM7XG5cblxuICAgICAgICB2YXIgaW5zcGVjdG9yQ29udHJvbHMgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBJbnNwZWN0b3JDb250cm9scyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgUGFuZWxCb2R5LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF9fKCdTZXR0aW5ncycsICdsZWFybmRhc2gnKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnVXNlciBJRCcsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgaGVscDogX18oJ0VudGVyIHNwZWNpZmljIFVzZXIgSUQuIExlYXZlIGJsYW5rIGZvciBjdXJyZW50IFVzZXIuJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdXNlcl9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHVzZXJfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgdXNlcl9pZDogdXNlcl9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFBhbmVsQm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfXygnUHJldmlldycsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbE9wZW46IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogX18oJ1Nob3cgUHJldmlldycsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogISFwcmV2aWV3X3Nob3csXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X3Nob3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJldmlld19zaG93OiBwcmV2aWV3X3Nob3cgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdQcmV2aWV3IFVzZXIgSUQnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IF9fKCdFbnRlciBhIFVzZXIgSUQgdG8gdGVzdCBwcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcHJldmlld191c2VyX2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfdXNlcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X3VzZXJfaWQ6IHByZXZpZXdfdXNlcl9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9fc2VydmVyc2lkZV9yZW5kZXIoYXR0cmlidXRlcykge1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMucHJldmlld19zaG93ID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlcnZlclNpZGVSZW5kZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2s6ICdsZWFybmRhc2gvbGQtdXNlci1jb3Vyc2UtcG9pbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX18oJ1tsZF91c2VyX2NvdXJzZV9wb2ludHNdIHNob3J0Y29kZSBvdXRwdXQgc2hvd24gaGVyZScsICdsZWFybmRhc2gnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbaW5zcGVjdG9yQ29udHJvbHMsIGRvX3NlcnZlcnNpZGVfcmVuZGVyKHByb3BzLmF0dHJpYnV0ZXMpXTtcbiAgICB9LFxuXG4gICAgc2F2ZTogZnVuY3Rpb24gc2F2ZShwcm9wcykge1xuICAgICAgICAvLyBEZWxldGUgcHJldmlld191c2VyX2lkIGZyb20gcHJvcHMgdG8gcHJldmVudCBpdCBiZWluZyBzYXZlZC5cbiAgICAgICAgZGVsZXRlIHByb3BzLmF0dHJpYnV0ZXMucHJldmlld191c2VyX2lkO1xuICAgIH1cbn0pOyIsIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLWdyb3VwXG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X2ludGVnZXJfdmFsdWUgfSBmcm9tICcuLi9sZGxtcy5qcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgYmxvY2sgbGlicmFyaWVzXG4gKi9cbnZhciBfd3AkaTE4biA9IHdwLmkxOG4sXG4gICAgX18gPSBfd3AkaTE4bi5fXyxcbiAgICBfeCA9IF93cCRpMThuLl94LFxuICAgIHNwcmludGYgPSBfd3AkaTE4bi5zcHJpbnRmO1xudmFyIHJlZ2lzdGVyQmxvY2tUeXBlID0gd3AuYmxvY2tzLnJlZ2lzdGVyQmxvY2tUeXBlO1xudmFyIF93cCRlZGl0b3IgPSB3cC5lZGl0b3IsXG4gICAgSW5uZXJCbG9ja3MgPSBfd3AkZWRpdG9yLklubmVyQmxvY2tzLFxuICAgIEluc3BlY3RvckNvbnRyb2xzID0gX3dwJGVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFRleHRDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVGV4dENvbnRyb2wsXG4gICAgVG9nZ2xlQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlRvZ2dsZUNvbnRyb2w7XG5cblxucmVnaXN0ZXJCbG9ja1R5cGUoJ2xlYXJuZGFzaC9sZC1ncm91cCcsIHtcbiAgICB0aXRsZTogX18oJ0xlYXJuRGFzaCBHcm91cCcsICdsZWFybmRhc2gnKSxcbiAgICBkZXNjcmlwdGlvbjogX18oJ1RoaXMgYmxvY2sgc2hvd3MgdGhlIGNvbnRlbnQgaWYgdGhlIHVzZXIgaXMgZW5yb2xsZWQgaW50byB0aGUgR3JvdXAuJywgJ2xlYXJuZGFzaCcpLFxuICAgIGljb246ICdncm91cHMnLFxuICAgIGNhdGVnb3J5OiAnbGVhcm5kYXNoLWJsb2NrcycsXG4gICAgc3VwcG9ydHM6IHtcbiAgICAgICAgY3VzdG9tQ2xhc3NOYW1lOiBmYWxzZVxuICAgIH0sXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgICBncm91cF9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgICAgfSxcbiAgICAgICAgdXNlcl9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICBhdXRvcDoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBlZGl0OiBmdW5jdGlvbiBlZGl0KHByb3BzKSB7XG4gICAgICAgIHZhciBfcHJvcHMkYXR0cmlidXRlcyA9IHByb3BzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBncm91cF9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmdyb3VwX2lkLFxuICAgICAgICAgICAgdXNlcl9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnVzZXJfaWQsXG4gICAgICAgICAgICBhdXRvcCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmF1dG9wLFxuICAgICAgICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgICAgc2V0QXR0cmlidXRlcyA9IHByb3BzLnNldEF0dHJpYnV0ZXM7XG5cblxuICAgICAgICB2YXIgaW5zcGVjdG9yQ29udHJvbHMgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBJbnNwZWN0b3JDb250cm9scyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgUGFuZWxCb2R5LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF9fKCdTZXR0aW5ncycsICdsZWFybmRhc2gnKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnR3JvdXAgSUQnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IF9fKCdHcm91cCBJRCAocmVxdWlyZWQpJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZ3JvdXBfaWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShncm91cF9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBncm91cF9pZDogZ3JvdXBfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdVc2VyIElEJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBfXygnRW50ZXIgc3BlY2lmaWMgVXNlciBJRC4gTGVhdmUgYmxhbmsgZm9yIGN1cnJlbnQgVXNlci4nLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1c2VyX2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodXNlcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB1c2VyX2lkOiB1c2VyX2lkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdBdXRvIFBhcmFncmFwaCcsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogISFhdXRvcCxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGF1dG9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IGF1dG9wOiBhdXRvcCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSAnJztcbiAgICAgICAgdmFyIHByZXZpZXdfZ3JvdXBfaWQgPSBsZGxtc19nZXRfaW50ZWdlcl92YWx1ZShncm91cF9pZCk7XG4gICAgICAgIGlmIChwcmV2aWV3X2dyb3VwX2lkID09IDApIHtcbiAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSBfXygnR3JvdXAgSUQgaXMgcmVxdWlyZWQuJywgJ2xlYXJuZGFzaCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2xlYXJuZGFzaC1ibG9jay1lcnJvci1tZXNzYWdlJyB9LFxuICAgICAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3V0cHV0QmxvY2sgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiBjbGFzc05hbWUgfSxcbiAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2xlYXJuZGFzaC1ibG9jay1pbm5lcicgfSxcbiAgICAgICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChJbm5lckJsb2NrcywgbnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gW2luc3BlY3RvckNvbnRyb2xzLCBvdXRwdXRCbG9ja107XG4gICAgfSxcbiAgICBzYXZlOiBmdW5jdGlvbiBzYXZlKHByb3BzKSB7XG4gICAgICAgIHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoSW5uZXJCbG9ja3MuQ29udGVudCwgbnVsbCk7XG4gICAgfVxufSk7IiwiLyoqXG4gKiBMZWFybkRhc2ggQmxvY2sgbGQtcGF5bWVudC1idXR0b25zXG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsLCBsZGxtc19nZXRfaW50ZWdlcl92YWx1ZSB9IGZyb20gJy4uL2xkbG1zLmpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBibG9jayBsaWJyYXJpZXNcbiAqL1xudmFyIF93cCRpMThuID0gd3AuaTE4bixcbiAgICBfXyA9IF93cCRpMThuLl9fLFxuICAgIF94ID0gX3dwJGkxOG4uX3gsXG4gICAgc3ByaW50ZiA9IF93cCRpMThuLnNwcmludGY7XG52YXIgcmVnaXN0ZXJCbG9ja1R5cGUgPSB3cC5ibG9ja3MucmVnaXN0ZXJCbG9ja1R5cGU7XG52YXIgSW5zcGVjdG9yQ29udHJvbHMgPSB3cC5lZGl0b3IuSW5zcGVjdG9yQ29udHJvbHM7XG52YXIgX3dwJGNvbXBvbmVudHMgPSB3cC5jb21wb25lbnRzLFxuICAgIFNlcnZlclNpZGVSZW5kZXIgPSBfd3AkY29tcG9uZW50cy5TZXJ2ZXJTaWRlUmVuZGVyLFxuICAgIFBhbmVsQm9keSA9IF93cCRjb21wb25lbnRzLlBhbmVsQm9keSxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbCxcbiAgICBUZXh0Q29udHJvbCA9IF93cCRjb21wb25lbnRzLlRleHRDb250cm9sO1xuXG5cbnJlZ2lzdGVyQmxvY2tUeXBlKCdsZWFybmRhc2gvbGQtcGF5bWVudC1idXR0b25zJywge1xuICAgIHRpdGxlOiBfXygnTGVhcm5EYXNoIFBheW1lbnQgQnV0dG9ucycsICdsZWFybmRhc2gnKSxcbiAgICBkZXNjcmlwdGlvbjogc3ByaW50ZihfeCgnVGhpcyBibG9jayB0aGUgJXMgcGF5bWVudCBidXR0b25zJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcbiAgICBpY29uOiAnY2FydCcsXG4gICAgY2F0ZWdvcnk6ICdsZWFybmRhc2gtYmxvY2tzJyxcbiAgICBzdXBwb3J0czoge1xuICAgICAgICBjdXN0b21DbGFzc05hbWU6IGZhbHNlXG4gICAgfSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNvdXJzZV9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlld19zaG93OiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkZWZhdWx0OiAxXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdfY291cnNlX2lkOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGVkaXQ6IGZ1bmN0aW9uIGVkaXQocHJvcHMpIHtcbiAgICAgICAgdmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGNvdXJzZV9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvdXJzZV9pZCxcbiAgICAgICAgICAgIHByZXZpZXdfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyxcbiAgICAgICAgICAgIHByZXZpZXdfY291cnNlX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld19jb3Vyc2VfaWQsXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGVzID0gcHJvcHMuc2V0QXR0cmlidXRlcztcblxuXG4gICAgICAgIHZhciBpbnNwZWN0b3JDb250cm9scyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xzLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBQYW5lbEJvZHksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogX18oJ1NldHRpbmdzJywgJ2xlYXJuZGFzaCcpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHNwcmludGYoX3goJyVzIElEJywgJ0NvdXJzZSBJRCcsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBzcHJpbnRmKF94KCdFbnRlciBzaW5nbGUgJTEkcyBJRC4gTGVhdmUgYmxhbmsgaWYgdXNlZCB3aXRoaW4gYSAlMiRzLicsICdwbGFjZWhvbGRlcnM6IGNvdXJzZSwgY291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY291cnNlX2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY291cnNlX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvdXJzZV9pZDogY291cnNlX2lkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgUGFuZWxCb2R5LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF9fKCdQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsT3BlbjogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnU2hvdyBQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiAhIXByZXZpZXdfc2hvdyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfc2hvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X3Nob3c6IHByZXZpZXdfc2hvdyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBzcHJpbnRmKF94KCdFbnRlciBhICVzIElEIHRvIHRlc3QgcHJldmlldycsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwcmV2aWV3X2NvdXJzZV9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X2NvdXJzZV9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X2NvdXJzZV9pZDogcHJldmlld19jb3Vyc2VfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGZ1bmN0aW9uIGRvX3NlcnZlcnNpZGVfcmVuZGVyKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICB2YXIgX3ByZXZpZXdfY291cnNlX2lkID0gbGRsbXNfZ2V0X2ludGVnZXJfdmFsdWUoY291cnNlX2lkKTtcblxuICAgICAgICAgICAgICAgIGlmIChfcHJldmlld19jb3Vyc2VfaWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgX3ByZXZpZXdfY291cnNlX2lkID0gbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhKCdjb3Vyc2VfaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgX3ByZXZpZXdfY291cnNlX2lkID0gbGRsbXNfZ2V0X2ludGVnZXJfdmFsdWUoX3ByZXZpZXdfY291cnNlX2lkKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoX3ByZXZpZXdfY291cnNlX2lkID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSBzcHJpbnRmKF94KCclMSRzIElEIGlzIHJlcXVpcmVkIHdoZW4gbm90IHVzZWQgd2l0aGluIGEgJTIkcy4nLCAncGxhY2Vob2xkZXJzOiBDb3Vyc2UsIENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChsZF9ibG9ja19lcnJvcl9tZXNzYWdlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdsZWFybmRhc2gtYmxvY2stZXJyb3ItbWVzc2FnZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgb3V0cHV0QmxvY2sgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiBjbGFzc05hbWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2xlYXJuZGFzaC1ibG9jay1pbm5lcicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXRCbG9jaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBhZGQgdGhlIG1ldGEgc28gdGhlIHNlcnZlciBrbm93bnMgd2hhdCBpcyBiZWluZyBlZGl0ZWQuXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMubWV0YSA9IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoU2VydmVyU2lkZVJlbmRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6ICdsZWFybmRhc2gvbGQtcGF5bWVudC1idXR0b25zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX18oJ1tsZWFybmRhc2hfcGF5bWVudF9idXR0b25zXSBzaG9ydGNvZGUgb3V0cHV0IHNob3duIGhlcmUnLCAnbGVhcm5kYXNoJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2luc3BlY3RvckNvbnRyb2xzLCBkb19zZXJ2ZXJzaWRlX3JlbmRlcihwcm9wcy5hdHRyaWJ1dGVzKV07XG4gICAgfSxcblxuICAgIHNhdmU6IGZ1bmN0aW9uIHNhdmUocHJvcHMpIHtcbiAgICAgICAgLy8gRGVsZXRlIG1ldGEgZnJvbSBwcm9wcyB0byBwcmV2ZW50IGl0IGJlaW5nIHNhdmVkLlxuICAgICAgICBkZWxldGUgcHJvcHMuYXR0cmlidXRlcy5tZXRhO1xuICAgIH1cbn0pOyIsIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLWNvdXJzZS1jb250ZW50XG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCwgbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhLCBsZGxtc19nZXRfcGVyX3BhZ2UgfSBmcm9tICcuLi9sZGxtcy5qcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgYmxvY2sgbGlicmFyaWVzXG4gKi9cbnZhciBfd3AkaTE4biA9IHdwLmkxOG4sXG4gICAgX18gPSBfd3AkaTE4bi5fXyxcbiAgICBfeCA9IF93cCRpMThuLl94LFxuICAgIHNwcmludGYgPSBfd3AkaTE4bi5zcHJpbnRmO1xudmFyIHJlZ2lzdGVyQmxvY2tUeXBlID0gd3AuYmxvY2tzLnJlZ2lzdGVyQmxvY2tUeXBlO1xudmFyIEluc3BlY3RvckNvbnRyb2xzID0gd3AuZWRpdG9yLkluc3BlY3RvckNvbnRyb2xzO1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBTZXJ2ZXJTaWRlUmVuZGVyID0gX3dwJGNvbXBvbmVudHMuU2VydmVyU2lkZVJlbmRlcixcbiAgICBQYW5lbEJvZHkgPSBfd3AkY29tcG9uZW50cy5QYW5lbEJvZHksXG4gICAgVG9nZ2xlQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlRvZ2dsZUNvbnRyb2wsXG4gICAgVGV4dENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5UZXh0Q29udHJvbDtcblxuXG5yZWdpc3RlckJsb2NrVHlwZSgnbGVhcm5kYXNoL2xkLWNvdXJzZS1jb250ZW50Jywge1xuXHR0aXRsZTogc3ByaW50ZihfeCgnTGVhcm5EYXNoICVzIENvbnRlbnQnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRkZXNjcmlwdGlvbjogc3ByaW50ZihfeCgnVGhpcyBibG9jayBkaXNwbGF5cyB0aGUgJTEkcyBDb250ZW50IHRhYmxlLicsICdwbGFjZWhvbGRlcnM6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRpY29uOiAnZm9ybWF0LWFzaWRlJyxcblx0Y2F0ZWdvcnk6ICdsZWFybmRhc2gtYmxvY2tzJyxcblx0ZXhhbXBsZToge1xuXHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdGV4YW1wbGVfc2hvdzogMVxuXHRcdH1cblx0fSxcblx0c3VwcG9ydHM6IHtcblx0XHRjdXN0b21DbGFzc05hbWU6IGZhbHNlXG5cdH0sXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHRjb3Vyc2VfaWQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdHBlcl9wYWdlOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRwcmV2aWV3X3Nob3c6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IDFcblx0XHR9LFxuXHRcdHByZXZpZXdfY291cnNlX2lkOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRleGFtcGxlX3Nob3c6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IDBcblx0XHR9LFxuXHRcdG1ldGE6IHtcblx0XHRcdHR5cGU6ICdvYmplY3QnXG5cdFx0fVxuXHR9LFxuXHRlZGl0OiBmdW5jdGlvbiBlZGl0KHByb3BzKSB7XG5cdFx0dmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcblx0XHQgICAgY291cnNlX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMuY291cnNlX2lkLFxuXHRcdCAgICBwZXJfcGFnZSA9IF9wcm9wcyRhdHRyaWJ1dGVzLnBlcl9wYWdlLFxuXHRcdCAgICBwcmV2aWV3X3Nob3cgPSBfcHJvcHMkYXR0cmlidXRlcy5wcmV2aWV3X3Nob3csXG5cdFx0ICAgIHByZXZpZXdfY291cnNlX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld19jb3Vyc2VfaWQsXG5cdFx0ICAgIGV4YW1wbGVfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLmV4YW1wbGVfc2hvdyxcblx0XHQgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuXHRcdCAgICBzZXRBdHRyaWJ1dGVzID0gcHJvcHMuc2V0QXR0cmlidXRlcztcblxuXG5cdFx0dmFyIGluc3BlY3RvckNvbnRyb2xzID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0SW5zcGVjdG9yQ29udHJvbHMsXG5cdFx0XHRudWxsLFxuXHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogX18oJ1NldHRpbmdzJywgJ2xlYXJuZGFzaCcpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBJRCcsICdDb3Vyc2UgSUQnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdFbnRlciBzaW5nbGUgJTEkcyBJRC4gTGVhdmUgYmxhbmsgaWYgdXNlZCB3aXRoaW4gYSAlMiRzLicsICdwbGFjZWhvbGRlcnM6IGNvdXJzZSwgY291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBjb3Vyc2VfaWQgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNvdXJzZV9pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjb3Vyc2VfaWQ6IGNvdXJzZV9pZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgcGVyIHBhZ2UnLCAncGxhY2Vob2xkZXI6IExlc3NvbnMnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2xlc3NvbnMnKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnTGVhdmUgZW1wdHkgZm9yIGRlZmF1bHQgKCVkKSBvciAwIHRvIHNob3cgYWxsIGl0ZW1zLicsICdwbGFjZWhvbGRlcjogZGVmYXVsdCBwZXIgcGFnZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X3Blcl9wYWdlKCdwZXJfcGFnZScpKSxcblx0XHRcdFx0XHR2YWx1ZTogcGVyX3BhZ2UgfHwgJycsXG5cdFx0XHRcdFx0dHlwZTogJ251bWJlcicsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHBlcl9wYWdlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHBlcl9wYWdlOiBwZXJfcGFnZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpLFxuXHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogX18oJ1ByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0aW5pdGlhbE9wZW46IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdTaG93IFByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0Y2hlY2tlZDogISFwcmV2aWV3X3Nob3csXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfc2hvdykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X3Nob3c6IHByZXZpZXdfc2hvdyB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ0VudGVyIGEgJXMgSUQgdG8gdGVzdCBwcmV2aWV3JywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0XHR2YWx1ZTogcHJldmlld19jb3Vyc2VfaWQgfHwgJycsXG5cdFx0XHRcdFx0dHlwZTogJ251bWJlcicsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfY291cnNlX2lkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByZXZpZXdfY291cnNlX2lkOiBwcmV2aWV3X2NvdXJzZV9pZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdGZ1bmN0aW9uIGRvX3NlcnZlcnNpZGVfcmVuZGVyKGF0dHJpYnV0ZXMpIHtcblx0XHRcdGlmIChhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyA9PSB0cnVlKSB7XG5cdFx0XHRcdC8vIFdlIGFkZCB0aGUgbWV0YSBzbyB0aGUgc2VydmVyIGtub3ducyB3aGF0IGlzIGJlaW5nIGVkaXRlZC5cblx0XHRcdFx0YXR0cmlidXRlcy5tZXRhID0gbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhKCk7XG5cblx0XHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZXJ2ZXJTaWRlUmVuZGVyLCB7XG5cdFx0XHRcdFx0YmxvY2s6ICdsZWFybmRhc2gvbGQtY291cnNlLWNvbnRlbnQnLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gX18oJ1tjb3Vyc2VfY29udGVudF0gc2hvcnRjb2RlIG91dHB1dCBzaG93biBoZXJlJywgJ2xlYXJuZGFzaCcpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBbaW5zcGVjdG9yQ29udHJvbHMsIGRvX3NlcnZlcnNpZGVfcmVuZGVyKHByb3BzLmF0dHJpYnV0ZXMpXTtcblx0fSxcblxuXHRzYXZlOiBmdW5jdGlvbiBzYXZlKHByb3BzKSB7XG5cdFx0Ly8gRGVsZXRlIG1ldGEgZnJvbSBwcm9wcyB0byBwcmV2ZW50IGl0IGJlaW5nIHNhdmVkLlxuXHRcdGRlbGV0ZSBwcm9wcy5hdHRyaWJ1dGVzLm1ldGE7XG5cdH1cbn0pOyIsIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLWNvdXJzZS1leHBpcmUtc3RhdHVzXG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuaW1wb3J0IHsgbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsIH0gZnJvbSAnLi4vbGRsbXMuanMnO1xuXG4vKipcbiAqIEludGVybmFsIGJsb2NrIGxpYnJhcmllc1xuICovXG52YXIgX3dwJGkxOG4gPSB3cC5pMThuLFxuICAgIF9fID0gX3dwJGkxOG4uX18sXG4gICAgX3ggPSBfd3AkaTE4bi5feCxcbiAgICBzcHJpbnRmID0gX3dwJGkxOG4uc3ByaW50ZjtcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBJbnNwZWN0b3JDb250cm9scyA9IHdwLmVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgU2VydmVyU2lkZVJlbmRlciA9IF93cCRjb21wb25lbnRzLlNlcnZlclNpZGVSZW5kZXIsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFRvZ2dsZUNvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5Ub2dnbGVDb250cm9sLFxuICAgIFRleHRDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVGV4dENvbnRyb2w7XG5cblxucmVnaXN0ZXJCbG9ja1R5cGUoJ2xlYXJuZGFzaC9sZC1jb3Vyc2UtZXhwaXJlLXN0YXR1cycsIHtcblx0dGl0bGU6IHNwcmludGYoX3goJ0xlYXJuRGFzaCAlcyBFeHBpcmUgU3RhdHVzJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0ZGVzY3JpcHRpb246IHNwcmludGYoX3goJ1RoaXMgYmxvY2sgZGlzcGxheXMgdGhlIHVzZXIgJXMgYWNjZXNzIGV4cGlyZSBkYXRlLicsICdwbGFjZWhvbGRlcnM6IGNvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRpY29uOiAnY2xvY2snLFxuXHRjYXRlZ29yeTogJ2xlYXJuZGFzaC1ibG9ja3MnLFxuXHRleGFtcGxlOiB7XG5cdFx0YXR0cmlidXRlczoge1xuXHRcdFx0ZXhhbXBsZV9zaG93OiAxXG5cdFx0fVxuXHR9LFxuXHRzdXBwb3J0czoge1xuXHRcdGN1c3RvbUNsYXNzTmFtZTogZmFsc2Vcblx0fSxcblx0YXR0cmlidXRlczoge1xuXHRcdGNvdXJzZV9pZDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0dXNlcl9pZDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0bGFiZWxfYmVmb3JlOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRsYWJlbF9hZnRlcjoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0YXV0b3A6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IHRydWVcblx0XHR9LFxuXHRcdHByZXZpZXdfc2hvdzoge1xuXHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0ZGVmYXVsdDogMVxuXHRcdH0sXG5cdFx0cHJldmlld19jb3Vyc2VfaWQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdHByZXZpZXdfdXNlcl9pZDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0ZXhhbXBsZV9zaG93OiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiAwXG5cdFx0fSxcblx0XHRtZXRhOiB7XG5cdFx0XHR0eXBlOiAnb2JqZWN0J1xuXHRcdH1cblx0fSxcblx0ZWRpdDogZnVuY3Rpb24gZWRpdChwcm9wcykge1xuXHRcdHZhciBjb3Vyc2VfaWQgPSBwcm9wcy5hdHRyaWJ1dGVzLmNvdXJzZV9pZCxcblx0XHQgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuXHRcdHZhciBfcHJvcHMkYXR0cmlidXRlcyA9IHByb3BzLmF0dHJpYnV0ZXMsXG5cdFx0ICAgIHVzZXJfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy51c2VyX2lkLFxuXHRcdCAgICBsYWJlbF9iZWZvcmUgPSBfcHJvcHMkYXR0cmlidXRlcy5sYWJlbF9iZWZvcmUsXG5cdFx0ICAgIGxhYmVsX2FmdGVyID0gX3Byb3BzJGF0dHJpYnV0ZXMubGFiZWxfYWZ0ZXIsXG5cdFx0ICAgIGF1dG9wID0gX3Byb3BzJGF0dHJpYnV0ZXMuYXV0b3AsXG5cdFx0ICAgIHByZXZpZXdfY291cnNlX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld19jb3Vyc2VfaWQsXG5cdFx0ICAgIHByZXZpZXdfdXNlcl9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByZXZpZXdfdXNlcl9pZCxcblx0XHQgICAgcHJldmlld19zaG93ID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld19zaG93LFxuXHRcdCAgICBleGFtcGxlX3Nob3cgPSBfcHJvcHMkYXR0cmlidXRlcy5leGFtcGxlX3Nob3csXG5cdFx0ICAgIHNldEF0dHJpYnV0ZXMgPSBwcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXG5cblx0XHR2YXIgaW5zcGVjdG9yQ29udHJvbHMgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRJbnNwZWN0b3JDb250cm9scyxcblx0XHRcdG51bGwsXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiBfXygnU2V0dGluZ3MnLCAnbGVhcm5kYXNoJylcblx0XHRcdFx0fSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIElEJywgJ0NvdXJzZSBJRCcsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHRcdGhlbHA6IHNwcmludGYoX3goJ0VudGVyIHNpbmdsZSAlMSRzIElELiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogY291cnNlLCBjb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdFx0dmFsdWU6IGNvdXJzZV9pZCB8fCAnJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY291cnNlX2lkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvdXJzZV9pZDogY291cnNlX2lkIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnVXNlciBJRCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRoZWxwOiBfXygnRW50ZXIgc3BlY2lmaWMgVXNlciBJRC4gTGVhdmUgYmxhbmsgZm9yIGN1cnJlbnQgVXNlci4nLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6IHVzZXJfaWQgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHVzZXJfaWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgdXNlcl9pZDogdXNlcl9pZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ0xhYmVsIEJlZm9yZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRoZWxwOiBfXygnVGhlIGxhYmVsIHByZWZpeCBzaG93biBiZWZvcmUgdGhlIGFjY2VzcyBleHBpcmVzJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBsYWJlbF9iZWZvcmUgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGxhYmVsX2JlZm9yZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBsYWJlbF9iZWZvcmU6IGxhYmVsX2JlZm9yZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ0xhYmVsIEFmdGVyJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdGhlbHA6IF9fKCdUaGUgbGFiZWwgcHJlZml4IHNob3duIGFmdGVyIGFjY2VzcyBoYXMgZXhwaXJlZCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogbGFiZWxfYWZ0ZXIgfHwgJycsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGxhYmVsX2FmdGVyKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGxhYmVsX2FmdGVyOiBsYWJlbF9hZnRlciB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnQXV0byBQYXJhZ3JhcGgnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0Y2hlY2tlZDogISFhdXRvcCxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoYXV0b3ApIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgYXV0b3A6IGF1dG9wIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCksXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiBfXygnUHJldmlldycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1Nob3cgUHJldmlldycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRjaGVja2VkOiAhIXByZXZpZXdfc2hvdyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocHJldmlld19zaG93KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByZXZpZXdfc2hvdzogcHJldmlld19zaG93IH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBJRCcsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdFx0aGVscDogc3ByaW50ZihfeCgnRW50ZXIgYSAlcyBJRCB0byB0ZXN0IHByZXZpZXcnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHRcdHZhbHVlOiBwcmV2aWV3X2NvdXJzZV9pZCB8fCAnJyxcblx0XHRcdFx0XHR0eXBlOiAnbnVtYmVyJyxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocHJldmlld19jb3Vyc2VfaWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJldmlld19jb3Vyc2VfaWQ6IHByZXZpZXdfY291cnNlX2lkIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnVXNlciBJRCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHRoZWxwOiBfXygnRW50ZXIgYSBVc2VyIElEIHRvIHRlc3QgcHJldmlldycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogcHJldmlld191c2VyX2lkIHx8ICcnLFxuXHRcdFx0XHRcdHR5cGU6ICdudW1iZXInLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X3VzZXJfaWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJldmlld191c2VyX2lkOiBwcmV2aWV3X3VzZXJfaWQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHRmdW5jdGlvbiBkb19zZXJ2ZXJzaWRlX3JlbmRlcihhdHRyaWJ1dGVzKSB7XG5cdFx0XHRpZiAoYXR0cmlidXRlcy5wcmV2aWV3X3Nob3cgPT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBXZSBhZGQgdGhlIG1ldGEgc28gdGhlIHNlcnZlciBrbm93bnMgd2hhdCBpcyBiZWluZyBlZGl0ZWQuXG5cdFx0XHRcdGF0dHJpYnV0ZXMubWV0YSA9IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSgpO1xuXG5cdFx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoU2VydmVyU2lkZVJlbmRlciwge1xuXHRcdFx0XHRcdGJsb2NrOiAnbGVhcm5kYXNoL2xkLWNvdXJzZS1leHBpcmUtc3RhdHVzJyxcblx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIF9fKCdbbGRfY291cnNlX2V4cGlyZV9zdGF0dXNdIHNob3J0Y29kZSBvdXRwdXQgc2hvd24gaGVyZScsICdsZWFybmRhc2gnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gW2luc3BlY3RvckNvbnRyb2xzLCBkb19zZXJ2ZXJzaWRlX3JlbmRlcihwcm9wcy5hdHRyaWJ1dGVzKV07XG5cdH0sXG5cblx0c2F2ZTogZnVuY3Rpb24gc2F2ZShwcm9wcykge1xuXHRcdC8vIERlbGV0ZSBtZXRhIGZyb20gcHJvcHMgdG8gcHJldmVudCBpdCBiZWluZyBzYXZlZC5cblx0XHRkZWxldGUgcHJvcHMuYXR0cmlidXRlcy5tZXRhO1xuXG5cdFx0Ly8gRGVsZXRlIHByZXZpZXdfdXNlcl9pZCBmcm9tIHByb3BzIHRvIHByZXZlbnQgaXQgYmVpbmcgc2F2ZWQuXG5cdFx0ZGVsZXRlIHByb3BzLmF0dHJpYnV0ZXMucHJldmlld191c2VyX2lkO1xuXHR9XG59KTsiLCIvKipcbiAqIExlYXJuRGFzaCBCbG9jayBsZC1jZXJ0aWZpY2F0ZVxuICpcbiAqIEBzaW5jZSAzLjJcbiAqIEBwYWNrYWdlIExlYXJuRGFzaFxuICovXG5cbi8qKlxuICogTGVhcm5EYXNoIGJsb2NrIGZ1bmN0aW9uc1xuICovXG5pbXBvcnQgeyBsZGxtc19nZXRfcG9zdF9lZGl0X21ldGEsIGxkbG1zX2dldF9jdXN0b21fbGFiZWwsIGxkbG1zX2dldF9pbnRlZ2VyX3ZhbHVlIH0gZnJvbSAnLi4vbGRsbXMuanMnO1xuXG4vKipcbiAqIEludGVybmFsIGJsb2NrIGxpYnJhcmllc1xuICovXG52YXIgX3dwJGkxOG4gPSB3cC5pMThuLFxuICAgIF9fID0gX3dwJGkxOG4uX18sXG4gICAgX3ggPSBfd3AkaTE4bi5feCxcbiAgICBzcHJpbnRmID0gX3dwJGkxOG4uc3ByaW50ZjtcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBJbnNwZWN0b3JDb250cm9scyA9IHdwLmVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgU2VydmVyU2lkZVJlbmRlciA9IF93cCRjb21wb25lbnRzLlNlcnZlclNpZGVSZW5kZXIsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFRleHRDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVGV4dENvbnRyb2wsXG4gICAgVG9nZ2xlQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlRvZ2dsZUNvbnRyb2w7XG5cblxucmVnaXN0ZXJCbG9ja1R5cGUoJ2xlYXJuZGFzaC9sZC1jZXJ0aWZpY2F0ZScsIHtcbiAgICB0aXRsZTogX18oJ0xlYXJuRGFzaCBDZXJ0aWZpY2F0ZScsICdsZWFybmRhc2gnKSxcbiAgICBkZXNjcmlwdGlvbjogX3goJ1RoaXMgc2hvcnRjb2RlIHNob3dzIGEgQ2VydGlmaWNhdGUgZG93bmxvYWQgbGluay4nLCAnbGVhcm5kYXNoJyksXG4gICAgaWNvbjogJ3dlbGNvbWUtbGVhcm4tbW9yZScsXG4gICAgY2F0ZWdvcnk6ICdsZWFybmRhc2gtYmxvY2tzJyxcbiAgICBzdXBwb3J0czoge1xuICAgICAgICBjdXN0b21DbGFzc05hbWU6IGZhbHNlXG4gICAgfSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNvdXJzZV9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICBxdWl6X2lkOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXJfaWQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgfSxcbiAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NfaHRtbDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdfc2hvdzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogMVxuICAgICAgICB9LFxuICAgICAgICBwcmV2aWV3X2NvdXJzZV9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICBwcmV2aWV3X3F1aXpfaWQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlld191c2VyX2lkOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGV4YW1wbGVfc2hvdzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogMFxuICAgICAgICB9XG4gICAgfSxcbiAgICBlZGl0OiBmdW5jdGlvbiBlZGl0KHByb3BzKSB7XG4gICAgICAgIHZhciBfcHJvcHMkYXR0cmlidXRlcyA9IHByb3BzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBjb3Vyc2VfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5jb3Vyc2VfaWQsXG4gICAgICAgICAgICBxdWl6X2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMucXVpel9pZCxcbiAgICAgICAgICAgIHVzZXJfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy51c2VyX2lkLFxuICAgICAgICAgICAgbGFiZWwgPSBfcHJvcHMkYXR0cmlidXRlcy5sYWJlbCxcbiAgICAgICAgICAgIGNsYXNzX2h0bWwgPSBfcHJvcHMkYXR0cmlidXRlcy5jbGFzc19odG1sLFxuICAgICAgICAgICAgY29udGV4dCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvbnRleHQsXG4gICAgICAgICAgICBjYWxsYmFjayA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNhbGxiYWNrLFxuICAgICAgICAgICAgcHJldmlld19zaG93ID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld19zaG93LFxuICAgICAgICAgICAgcHJldmlld19jb3Vyc2VfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5wcmV2aWV3X2NvdXJzZV9pZCxcbiAgICAgICAgICAgIHByZXZpZXdfcXVpel9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByZXZpZXdfcXVpel9pZCxcbiAgICAgICAgICAgIHByZXZpZXdfdXNlcl9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByZXZpZXdfdXNlcl9pZCxcbiAgICAgICAgICAgIGV4YW1wbGVfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLmV4YW1wbGVfc2hvdyxcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXMgPSBwcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXG5cbiAgICAgICAgdmFyIGluc3BlY3RvckNvbnRyb2xzID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbHMsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFBhbmVsQm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfXygnU2V0dGluZ3MnLCAnbGVhcm5kYXNoJylcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAnQ291cnNlIElEJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IHNwcmludGYoX3goJ0VudGVyIHNpbmdsZSAlMSRzIElELiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogY291cnNlLCBjb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb3Vyc2VfaWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb3Vyc2VfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY291cnNlX2lkOiBjb3Vyc2VfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHNwcmludGYoX3goJyVzIElEJywgJ1F1aXogSUQnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXonKSksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IHNwcmludGYoX3goJ0VudGVyIHNpbmdsZSAlMSRzIElELiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogcXVpeiwgcXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdxdWl6JykpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcXVpel9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHF1aXpfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcXVpel9pZDogcXVpel9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogX18oJ1VzZXIgSUQnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IF9fKCdFbnRlciBzcGVjaWZpYyBVc2VyIElELiBMZWF2ZSBibGFuayBmb3IgY3VycmVudCBVc2VyLicsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVzZXJfaWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSh1c2VyX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IHVzZXJfaWQ6IHVzZXJfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdMYWJlbCcsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgaGVscDogX18oJ0xhYmVsIGZvciBsaW5rIHNob3duIHRvIHVzZXInLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBsYWJlbCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IGxhYmVsOiBsYWJlbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogX18oJ0NsYXNzJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBfXygnSFRNTCBjbGFzcyBmb3IgbGluayBlbGVtZW50JywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2xhc3NfaHRtbCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNsYXNzX2h0bWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY2xhc3NfaHRtbDogY2xhc3NfaHRtbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogX18oJ0NvbnRleHQnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IF9fKCdVc2VyIGRlZmluZWQgdmFsdWUgdG8gYmUgcGFzc2VkIGludG8gc2hvcnRjb2RlIGhhbmRsZXInLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb250ZXh0IHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjb250ZXh0OiBjb250ZXh0IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnQ2FsbGJhY2snLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IF9fKCdDdXN0b20gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIGRlZmF1bHQgb3V0cHV0JywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2FsbGJhY2sgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjYWxsYmFjazogY2FsbGJhY2sgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBQYW5lbEJvZHksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogX18oJ1ByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxPcGVuOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdTaG93IFByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6ICEhcHJldmlld19zaG93LFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocHJldmlld19zaG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByZXZpZXdfc2hvdzogcHJldmlld19zaG93IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzcHJpbnRmKF94KCclcyBJRCcsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IHNwcmludGYoX3goJ0VudGVyIGEgJXMgSUQgdG8gdGVzdCBwcmV2aWV3JywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHByZXZpZXdfY291cnNlX2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfY291cnNlX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByZXZpZXdfY291cnNlX2lkOiBwcmV2aWV3X2NvdXJzZV9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAncGxhY2Vob2xkZXI6IFF1aXonLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXonKSksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IHNwcmludGYoX3goJ0VudGVyIGEgJXMgSUQgdG8gdGVzdCBwcmV2aWV3JywgJ3BsYWNlaG9sZGVyOiBRdWl6JywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdxdWl6JykpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcHJldmlld19xdWl6X2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfcXVpel9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X3F1aXpfaWQ6IHByZXZpZXdfcXVpel9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogX18oJ1VzZXIgSUQnLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IF9fKCdFbnRlciBzcGVjaWZpYyBVc2VyIElELiBMZWF2ZSBibGFuayBmb3IgY3VycmVudCBVc2VyLicsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHByZXZpZXdfdXNlcl9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfdXNlcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X3VzZXJfaWQ6IHByZXZpZXdfdXNlcl9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgLypcbiAgICAgICAgbGV0IGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSAnJztcbiAgICAgICAgbGV0IHNob3dfY291cnNlX2lkID0gbGRsbXNfZ2V0X2ludGVnZXJfdmFsdWUoY291cnNlX2lkKTtcbiAgICAgICAgbGV0IHNob3dfcXVpel9pZCA9IGxkbG1zX2dldF9pbnRlZ2VyX3ZhbHVlKHF1aXpfaWQpO1xuICAgICAgICAgbGV0IHBvc3RfdHlwZSA9IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSgncG9zdF90eXBlJyk7ICAgIFxuICAgICAgICAgaWYgKHNob3dfY291cnNlX2lkID09PSAwKSB7XG4gICAgICAgICAgICBpZiAocG9zdF90eXBlID09PSAnc2Z3ZC1jb3Vyc2VzJykge1xuICAgICAgICAgICAgICAgIHNob3dfY291cnNlX2lkID0gbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhKCdwb3N0X2lkJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChwb3N0X3R5cGUgPT09ICdzZndkLWxlc3NvbnMnKSB8fCAocG9zdF90eXBlID09PSAnc2Z3ZC10b3BpYycpIHx8IChwb3N0X3R5cGUgPT09ICdzZndkLXF1aXonKSkge1xuICAgICAgICAgICAgICAgIHNob3dfY291cnNlX2lkID0gbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhKCdjb3Vyc2VfaWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3dfY291cnNlX2lkID0gbGRsbXNfZ2V0X2ludGVnZXJfdmFsdWUoc2hvd19jb3Vyc2VfaWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG93X3F1aXpfaWQgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChsZGxtc19nZXRfcG9zdF9lZGl0X21ldGEoJ3Bvc3RfdHlwZScpID09PSAnc2Z3ZC1xdWl6Jykge1xuICAgICAgICAgICAgICAgIHNob3dfcXVpel9pZCA9IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSgncG9zdF9pZCcpO1xuICAgICAgICAgICAgICAgIHNob3dfcXVpel9pZCA9IGxkbG1zX2dldF9pbnRlZ2VyX3ZhbHVlKHNob3dfcXVpel9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgIGlmICgoc2hvd19jb3Vyc2VfaWQgPT0gMCkgJiYgKHNob3dfcXVpel9pZCA9PSAwKSkge1xuICAgICAgICAgICAgbGRfYmxvY2tfZXJyb3JfbWVzc2FnZSA9IHNwcmludGYoX3goJyUxJHMgSUQgb3IgJTIkcyBJRCBpcyByZXF1aXJlZCB3aGVuIG5vdCB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogQ291cnNlLCBRdXosIENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXonKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpO1xuICAgICAgICB9XG4gICAgICAgICBpZiAobGRfYmxvY2tfZXJyb3JfbWVzc2FnZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UgPSAoPHNwYW4gY2xhc3NOYW1lPVwibGVhcm5kYXNoLWJsb2NrLWVycm9yLW1lc3NhZ2VcIj57bGRfYmxvY2tfZXJyb3JfbWVzc2FnZX08L3NwYW4+KTtcbiAgICAgICAgfVxuICAgICAgICAgY29uc3Qgb3V0cHV0QmxvY2sgPSAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxlYXJuZGFzaC1ibG9jay1pbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICB7bGRfYmxvY2tfZXJyb3JfbWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgICAgPElubmVyQmxvY2tzIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICAgICAgKi9cblxuICAgICAgICBmdW5jdGlvbiBkb19zZXJ2ZXJzaWRlX3JlbmRlcihhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5wcmV2aWV3X3Nob3cgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoU2VydmVyU2lkZVJlbmRlciwge1xuICAgICAgICAgICAgICAgICAgICBibG9jazogJ2xlYXJuZGFzaC9sZC1jZXJ0aWZpY2F0ZScsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fKCdbbGRfY2VydGlmaWNhdGVdIHNob3J0Y29kZSBvdXRwdXQgc2hvd24gaGVyZScsICdsZWFybmRhc2gnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbaW5zcGVjdG9yQ29udHJvbHMsIGRvX3NlcnZlcnNpZGVfcmVuZGVyKHByb3BzLmF0dHJpYnV0ZXMpXTtcbiAgICB9XG59KTsiLCIvKipcbiAqIExlYXJuRGFzaCBCbG9jayBsZC1xdWl6LWNvbXBsZXRlXG4gKlxuICogQHNpbmNlIDMuMlxuICogQHBhY2thZ2UgTGVhcm5EYXNoXG4gKi9cblxuLyoqXG4gKiBMZWFybkRhc2ggYmxvY2sgZnVuY3Rpb25zXG4gKi9cbmltcG9ydCB7IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCwgbGRsbXNfZ2V0X2ludGVnZXJfdmFsdWUgfSBmcm9tICcuLi9sZGxtcy5qcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgYmxvY2sgbGlicmFyaWVzXG4gKi9cbnZhciBfd3AkaTE4biA9IHdwLmkxOG4sXG4gICAgX18gPSBfd3AkaTE4bi5fXyxcbiAgICBfeCA9IF93cCRpMThuLl94LFxuICAgIHNwcmludGYgPSBfd3AkaTE4bi5zcHJpbnRmO1xudmFyIHJlZ2lzdGVyQmxvY2tUeXBlID0gd3AuYmxvY2tzLnJlZ2lzdGVyQmxvY2tUeXBlO1xudmFyIF93cCRlZGl0b3IgPSB3cC5lZGl0b3IsXG4gICAgSW5uZXJCbG9ja3MgPSBfd3AkZWRpdG9yLklubmVyQmxvY2tzLFxuICAgIEluc3BlY3RvckNvbnRyb2xzID0gX3dwJGVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgU2VydmVyU2lkZVJlbmRlciA9IF93cCRjb21wb25lbnRzLlNlcnZlclNpZGVSZW5kZXIsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFRleHRDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVGV4dENvbnRyb2wsXG4gICAgVG9nZ2xlQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlRvZ2dsZUNvbnRyb2w7XG5cblxucmVnaXN0ZXJCbG9ja1R5cGUoJ2xlYXJuZGFzaC9sZC1xdWl6LWNvbXBsZXRlJywge1xuICAgIHRpdGxlOiBzcHJpbnRmKF94KCdMZWFybkRhc2ggJXMgQ29tcGxldGUnLCAncGxhY2Vob2xkZXI6IFF1aXonLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXonKSksXG4gICAgZGVzY3JpcHRpb246IHNwcmludGYoX3goJ1RoaXMgYmxvY2sgc2hvd3MgdGhlIGNvbnRlbnQgaWYgdGhlIHVzZXIgaXMgaGFzIGNvbXBsZXRlZCB0aGUgJXMuJywgJ3BsYWNlaG9sZGVyczogcXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpKSxcbiAgICBpY29uOiAnc3Rhci1maWxsZWQnLFxuICAgIGNhdGVnb3J5OiAnbGVhcm5kYXNoLWJsb2NrcycsXG4gICAgc3VwcG9ydHM6IHtcbiAgICAgICAgY3VzdG9tQ2xhc3NOYW1lOiBmYWxzZVxuICAgIH0sXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgICBjb3Vyc2VfaWQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgfSxcbiAgICAgICAgcXVpel9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICB1c2VyX2lkOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGVkaXQ6IGZ1bmN0aW9uIGVkaXQocHJvcHMpIHtcbiAgICAgICAgdmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGNvdXJzZV9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvdXJzZV9pZCxcbiAgICAgICAgICAgIHF1aXpfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy5xdWl6X2lkLFxuICAgICAgICAgICAgdXNlcl9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnVzZXJfaWQsXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGVzID0gcHJvcHMuc2V0QXR0cmlidXRlcztcblxuXG4gICAgICAgIHZhciBpbnNwZWN0b3JDb250cm9scyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xzLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBQYW5lbEJvZHksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogX18oJ1NldHRpbmdzJywgJ2xlYXJuZGFzaCcpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHNwcmludGYoX3goJyVzIElEJywgJ1F1aXogSUQnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXonKSksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IHNwcmludGYoX3goJ0VudGVyIHNpbmdsZSAlMSRzIElELiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogcXVpeiwgcXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdxdWl6JykpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcXVpel9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHF1aXpfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcXVpel9pZDogcXVpel9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAnQ291cnNlIElEJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIGhlbHA6IHNwcmludGYoX3goJ0VudGVyIHNpbmdsZSAlMSRzIElELiBMZWF2ZSBibGFuayBpZiB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogY291cnNlLCBjb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb3Vyc2VfaWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb3Vyc2VfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY291cnNlX2lkOiBjb3Vyc2VfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdVc2VyIElEJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBfXygnRW50ZXIgc3BlY2lmaWMgVXNlciBJRC4gTGVhdmUgYmxhbmsgZm9yIGN1cnJlbnQgVXNlci4nLCAnbGVhcm5kYXNoJyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1c2VyX2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodXNlcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB1c2VyX2lkOiB1c2VyX2lkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB2YXIgbGRfYmxvY2tfZXJyb3JfbWVzc2FnZSA9ICcnO1xuICAgICAgICB2YXIgcHJldmlld19xdWl6X2lkID0gbGRsbXNfZ2V0X2ludGVnZXJfdmFsdWUocXVpel9pZCk7XG4gICAgICAgIGlmIChwcmV2aWV3X3F1aXpfaWQgPT09IDApIHtcbiAgICAgICAgICAgIGlmICgnc2Z3ZC1xdWl6JyA9PT0gbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhKCdwb3N0X3R5cGUnKSkge1xuICAgICAgICAgICAgICAgIHByZXZpZXdfcXVpel9pZCA9IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSgncG9zdF9pZCcpO1xuICAgICAgICAgICAgICAgIHByZXZpZXdfcXVpel9pZCA9IGxkbG1zX2dldF9pbnRlZ2VyX3ZhbHVlKHByZXZpZXdfcXVpel9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldmlld19xdWl6X2lkID09IDApIHtcbiAgICAgICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlID0gc3ByaW50ZihfeCgnJTEkcyBJRCBpcyByZXF1aXJlZCB3aGVuIG5vdCB1c2VkIHdpdGhpbiBhICUyJHMuJywgJ3BsYWNlaG9sZGVyczogUXVpeiwgUXVpeicsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpeicpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdxdWl6JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2xlYXJuZGFzaC1ibG9jay1lcnJvci1tZXNzYWdlJyB9LFxuICAgICAgICAgICAgICAgIGxkX2Jsb2NrX2Vycm9yX21lc3NhZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3V0cHV0QmxvY2sgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiBjbGFzc05hbWUgfSxcbiAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2xlYXJuZGFzaC1ibG9jay1pbm5lcicgfSxcbiAgICAgICAgICAgICAgICBsZF9ibG9ja19lcnJvcl9tZXNzYWdlLFxuICAgICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChJbm5lckJsb2NrcywgbnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gW2luc3BlY3RvckNvbnRyb2xzLCBvdXRwdXRCbG9ja107XG4gICAgfSxcbiAgICBzYXZlOiBmdW5jdGlvbiBzYXZlKHByb3BzKSB7XG4gICAgICAgIHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoSW5uZXJCbG9ja3MuQ29udGVudCwgbnVsbCk7XG4gICAgfVxufSk7IiwiLyoqXG4gKiBMZWFybkRhc2ggQmxvY2sgbGQtY291cnNlaW5mb1xuICpcbiAqIEBzaW5jZSAyLjUuOVxuICogQHBhY2thZ2UgTGVhcm5EYXNoXG4gKi9cblxuLyoqXG4gKiBMZWFybkRhc2ggYmxvY2sgZnVuY3Rpb25zXG4gKi9cbmltcG9ydCB7IGxkbG1zX2dldF9wb3N0X2VkaXRfbWV0YSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCB9IGZyb20gJy4uL2xkbG1zLmpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBibG9jayBsaWJyYXJpZXNcbiAqL1xudmFyIF93cCRpMThuID0gd3AuaTE4bixcbiAgICBfXyA9IF93cCRpMThuLl9fLFxuICAgIF94ID0gX3dwJGkxOG4uX3gsXG4gICAgc3ByaW50ZiA9IF93cCRpMThuLnNwcmludGY7XG52YXIgcmVnaXN0ZXJCbG9ja1R5cGUgPSB3cC5ibG9ja3MucmVnaXN0ZXJCbG9ja1R5cGU7XG52YXIgSW5zcGVjdG9yQ29udHJvbHMgPSB3cC5lZGl0b3IuSW5zcGVjdG9yQ29udHJvbHM7XG52YXIgX3dwJGNvbXBvbmVudHMgPSB3cC5jb21wb25lbnRzLFxuICAgIFNlcnZlclNpZGVSZW5kZXIgPSBfd3AkY29tcG9uZW50cy5TZXJ2ZXJTaWRlUmVuZGVyLFxuICAgIFBhbmVsQm9keSA9IF93cCRjb21wb25lbnRzLlBhbmVsQm9keSxcbiAgICBTZWxlY3RDb250cm9sID0gX3dwJGNvbXBvbmVudHMuU2VsZWN0Q29udHJvbCxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbCxcbiAgICBUZXh0Q29udHJvbCA9IF93cCRjb21wb25lbnRzLlRleHRDb250cm9sO1xuXG5cbnJlZ2lzdGVyQmxvY2tUeXBlKCdsZWFybmRhc2gvbGQtY291cnNlaW5mbycsIHtcblx0dGl0bGU6IHNwcmludGYoX3goJ0xlYXJuRGFzaCAlcyBJbmZvIFtjb3Vyc2VpbmZvXScsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdGRlc2NyaXB0aW9uOiBzcHJpbnRmKF94KCdUaGlzIGJsb2NrIGRpc3BsYXlzICVzIHJlbGF0ZWQgaW5mb3JtYXRpb24nLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRpY29uOiAnYW5hbHl0aWNzJyxcblx0Y2F0ZWdvcnk6ICdsZWFybmRhc2gtYmxvY2tzJyxcblx0c3VwcG9ydHM6IHtcblx0XHRjdXN0b21DbGFzc05hbWU6IGZhbHNlXG5cdH0sXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHRzaG93OiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJ1xuXHRcdH0sXG5cdFx0Y291cnNlX2lkOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHR1c2VyX2lkOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRmb3JtYXQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnXG5cdFx0fSxcblx0XHRzZWNvbmRzX2Zvcm1hdDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZydcblx0XHR9LFxuXHRcdGRlY2ltYWxzOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJ1xuXHRcdH0sXG5cdFx0cHJldmlld19zaG93OiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiAxXG5cdFx0fSxcblx0XHRwcmV2aWV3X2NvdXJzZV9pZDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0cHJldmlld191c2VyX2lkOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRtZXRhOiB7XG5cdFx0XHR0eXBlOiAnb2JqZWN0J1xuXHRcdH1cblx0fSxcblx0ZWRpdDogZnVuY3Rpb24gZWRpdChwcm9wcykge1xuXHRcdHZhciBfcHJvcHMkYXR0cmlidXRlcyA9IHByb3BzLmF0dHJpYnV0ZXMsXG5cdFx0ICAgIGNvdXJzZV9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvdXJzZV9pZCxcblx0XHQgICAgc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLnNob3csXG5cdFx0ICAgIHVzZXJfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy51c2VyX2lkLFxuXHRcdCAgICBmb3JtYXQgPSBfcHJvcHMkYXR0cmlidXRlcy5mb3JtYXQsXG5cdFx0ICAgIHNlY29uZHNfZm9ybWF0ID0gX3Byb3BzJGF0dHJpYnV0ZXMuc2Vjb25kc19mb3JtYXQsXG5cdFx0ICAgIGRlY2ltYWxzID0gX3Byb3BzJGF0dHJpYnV0ZXMuZGVjaW1hbHMsXG5cdFx0ICAgIHByZXZpZXdfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyxcblx0XHQgICAgcHJldmlld191c2VyX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld191c2VyX2lkLFxuXHRcdCAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG5cdFx0ICAgIHNldEF0dHJpYnV0ZXMgPSBwcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXG5cblx0XHR2YXIgZmllbGRfc2hvdyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRrZXk6ICdzaG93Jyxcblx0XHRcdHZhbHVlOiBzaG93LFxuXHRcdFx0bGFiZWw6IF9fKCdTaG93JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0b3B0aW9uczogW3tcblx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJyVzIFRpdGxlJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0dmFsdWU6ICdjb3Vyc2VfdGl0bGUnXG5cdFx0XHR9LCB7XG5cdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBVUkwnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHR2YWx1ZTogJ2NvdXJzZV91cmwnXG5cdFx0XHR9LCB7XG5cdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBQb2ludHMnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0XHR2YWx1ZTogJ2NvdXJzZV9wb2ludHMnXG5cdFx0XHR9LCB7XG5cdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCclcyBQcmljZScsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdHZhbHVlOiAnY291cnNlX3ByaWNlJ1xuXHRcdFx0fSwge1xuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgUHJpY2UgVHlwZScsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdHZhbHVlOiAnY291cnNlX3ByaWNlX3R5cGUnXG5cdFx0XHR9LCB7XG5cdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCdUb3RhbCBVc2VyICVzIFBvaW50cycsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdHZhbHVlOiAndXNlcl9jb3Vyc2VfcG9pbnRzJ1xuXHRcdFx0fSwge1xuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnVG90YWwgVXNlciAlcyBUaW1lJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0dmFsdWU6ICd1c2VyX2NvdXJzZV90aW1lJ1xuXHRcdFx0fSwge1xuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgQ29tcGxldGVkIE9uIChkYXRlKScsICdwbGFjZWhvbGRlcjogQ291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRcdHZhbHVlOiAnY29tcGxldGVkX29uJ1xuXHRcdFx0fSwge1xuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgRW5yb2xsZWQgT24gKGRhdGUpJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ2NvdXJzZScpKSxcblx0XHRcdFx0dmFsdWU6ICdlbnJvbGxlZF9vbidcblx0XHRcdH0sIHtcblx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJ0N1bXVsYXRpdmUgJXMgU2NvcmUnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpenplcycpKSxcblx0XHRcdFx0dmFsdWU6ICdjdW11bGF0aXZlX3Njb3JlJ1xuXHRcdFx0fSwge1xuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnQ3VtdWxhdGl2ZSAlcyBQb2ludHMnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpenplcycpKSxcblx0XHRcdFx0dmFsdWU6ICdjdW11bGF0aXZlX3BvaW50cydcblx0XHRcdH0sIHtcblx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJ1Bvc3NpYmxlIEN1bXVsYXRpdmUgJXMgVG90YWwgUG9pbnRzJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXp6ZXMnKSksXG5cdFx0XHRcdHZhbHVlOiAnY3VtdWxhdGl2ZV90b3RhbF9wb2ludHMnXG5cdFx0XHR9LCB7XG5cdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCdDdW11bGF0aXZlICVzIFBlcmNlbnRhZ2UnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpenplcycpKSxcblx0XHRcdFx0dmFsdWU6ICdjdW11bGF0aXZlX3BlcmNlbnRhZ2UnXG5cdFx0XHR9LCB7XG5cdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCdDdW11bGF0aXZlICVzIFRpbWUgU3BlbnQnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpenplcycpKSxcblx0XHRcdFx0dmFsdWU6ICdjdW11bGF0aXZlX3RpbWVzcGVudCdcblx0XHRcdH0sIHtcblx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJ0FnZ3JlZ2F0ZSAlcyBQZXJjZW50YWdlJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXp6ZXMnKSksXG5cdFx0XHRcdHZhbHVlOiAnYWdncmVnYXRlX3BlcmNlbnRhZ2UnXG5cdFx0XHR9LCB7XG5cdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCdBZ2dyZWdhdGUgJXMgU2NvcmUnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpenplcycpKSxcblx0XHRcdFx0dmFsdWU6ICdhZ2dyZWdhdGVfc2NvcmUnXG5cdFx0XHR9LCB7XG5cdFx0XHRcdGxhYmVsOiBzcHJpbnRmKF94KCdBZ2dyZWdhdGUgJXMgUG9pbnRzJywgJ3BsYWNlaG9sZGVyOiBDb3Vyc2UnLCAnbGVhcm5kYXNoJyksIGxkbG1zX2dldF9jdXN0b21fbGFiZWwoJ3F1aXp6ZXMnKSksXG5cdFx0XHRcdHZhbHVlOiAnYWdncmVnYXRlX3BvaW50cydcblx0XHRcdH0sIHtcblx0XHRcdFx0bGFiZWw6IHNwcmludGYoX3goJ1Bvc3NpYmxlIEFnZ3JlZ2F0ZSAlcyBUb3RhbCBQb2ludHMnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpenplcycpKSxcblx0XHRcdFx0dmFsdWU6ICdhZ2dyZWdhdGVfdG90YWxfcG9pbnRzJ1xuXHRcdFx0fSwge1xuXHRcdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnQWdncmVnYXRlICVzIFRpbWUgU3BlbnQnLCAncGxhY2Vob2xkZXI6IENvdXJzZScsICdsZWFybmRhc2gnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgncXVpenplcycpKSxcblx0XHRcdFx0dmFsdWU6ICdhZ2dyZWdhdGVfdGltZXNwZW50J1xuXHRcdFx0fV0sXG5cdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2Uoc2hvdykge1xuXHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHNob3c6IHNob3cgfSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR2YXIgZmllbGRfY291cnNlX2lkID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRsYWJlbDogc3ByaW50ZihfeCgnJXMgSUQnLCAnQ291cnNlIElEJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSksXG5cdFx0XHRoZWxwOiBzcHJpbnRmKF94KCdFbnRlciBzaW5nbGUgJTEkcyBJRC4gTGVhdmUgYmxhbmsgaWYgdXNlZCB3aXRoaW4gYSAlMiRzLicsICdwbGFjZWhvbGRlcnM6IGNvdXJzZSwgY291cnNlJywgJ2xlYXJuZGFzaCcpLCBsZGxtc19nZXRfY3VzdG9tX2xhYmVsKCdjb3Vyc2UnKSwgbGRsbXNfZ2V0X2N1c3RvbV9sYWJlbCgnY291cnNlJykpLFxuXHRcdFx0dmFsdWU6IGNvdXJzZV9pZCB8fCAnJyxcblx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb3Vyc2VfaWQpIHtcblx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjb3Vyc2VfaWQ6IGNvdXJzZV9pZCB9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHR2YXIgZmllbGRfdXNlcl9pZCA9ICcnO1xuXG5cdFx0aWYgKHNob3cgIT0gJ2NvdXJzZV90aXRsZScgJiYgc2hvdyAhPSAnY291cnNlX3VybCcgJiYgc2hvdyAhPSAnY291cnNlX3VybCcgJiYgc2hvdyAhPSAnY291cnNlX3BvaW50cycgJiYgc2hvdyAhPSAnY291cnNlX3ByaWNlJyAmJiBzaG93ICE9ICdjb3Vyc2VfcHJpY2VfdHlwZScpIHtcblx0XHRcdGZpZWxkX3VzZXJfaWQgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0bGFiZWw6IF9fKCdVc2VyIElEJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRoZWxwOiBfXygnRW50ZXIgc3BlY2lmaWMgVXNlciBJRC4gTGVhdmUgYmxhbmsgZm9yIGN1cnJlbnQgVXNlci4nLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdHZhbHVlOiB1c2VyX2lkIHx8ICcnLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodXNlcl9pZCkge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgdXNlcl9pZDogdXNlcl9pZCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dmFyIGZpZWxkX2Zvcm1hdCA9ICcnO1xuXHRcdGlmIChzaG93ID09ICdjb21wbGV0ZWRfb24nIHx8IHNob3cgPT0gJ2Vucm9sbGVkX29uJykge1xuXHRcdFx0ZmllbGRfZm9ybWF0ID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdGxhYmVsOiBfXygnRm9ybWF0JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRoZWxwOiBfXygnVGhpcyBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRhdGUgZm9ybWF0LiBEZWZhdWx0OiBcIkYgaiwgWSwgZzppIGEuJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHR2YWx1ZTogZm9ybWF0IHx8ICcnLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoZm9ybWF0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBmb3JtYXQ6IGZvcm1hdCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dmFyIGZpZWxkX3NlY29uZHNfZm9ybWF0ID0gJyc7XG5cdFx0aWYgKHNob3cgPT0gJ3VzZXJfY291cnNlX3RpbWUnKSB7XG5cdFx0XHRmaWVsZF9zZWNvbmRzX2Zvcm1hdCA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdGtleTogJ3NlY29uZHNfZm9ybWF0Jyxcblx0XHRcdFx0dmFsdWU6IHNlY29uZHNfZm9ybWF0LFxuXHRcdFx0XHRsYWJlbDogX18oJ1NlY29uZHMgRm9ybWF0JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRvcHRpb25zOiBbe1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnVGltZSAtIDIwbWluIDQ5c2VjJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAndGltZSdcblx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnU2Vjb25kcyAtIDE0MzYnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdzZWNvbmRzJ1xuXHRcdFx0XHR9XSxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHNlY29uZHNfZm9ybWF0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBzZWNvbmRzX2Zvcm1hdDogc2Vjb25kc19mb3JtYXQgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHZhciBmaWVsZF9kZWNpbWFscyA9ICcnO1xuXHRcdGlmIChzaG93ID09ICdjb3Vyc2VfcG9pbnRzJyB8fCBzaG93ID09ICd1c2VyX2NvdXJzZV9wb2ludHMnKSB7XG5cdFx0XHRmaWVsZF9kZWNpbWFscyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogX18oJ0RlY2ltYWxzJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRoZWxwOiBfXygnTnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHNob3cuIERlZmF1bHQgaXMgMi4nLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdHZhbHVlOiBkZWNpbWFscyB8fCAnJyxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGRlY2ltYWxzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBkZWNpbWFsczogZGVjaW1hbHMgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHZhciBwYW5lbF9wcmV2aWV3ID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0e1xuXHRcdFx0XHR0aXRsZTogX18oJ1ByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdGluaXRpYWxPcGVuOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUb2dnbGVDb250cm9sLCB7XG5cdFx0XHRcdGxhYmVsOiBfXygnU2hvdyBQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRjaGVja2VkOiAhIXByZXZpZXdfc2hvdyxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfc2hvdykge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJldmlld19zaG93OiBwcmV2aWV3X3Nob3cgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG5cdFx0XHRcdGxhYmVsOiBfXygnVXNlciBJRCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0aGVscDogX18oJ0VudGVyIGEgVXNlciBJRCB0byB0ZXN0IHByZXZpZXcnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdHZhbHVlOiBwcmV2aWV3X3VzZXJfaWQgfHwgJycsXG5cdFx0XHRcdHR5cGU6ICdudW1iZXInLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocHJldmlld191c2VyX2lkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X3VzZXJfaWQ6IHByZXZpZXdfdXNlcl9pZCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0dmFyIGluc3BlY3RvckNvbnRyb2xzID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0SW5zcGVjdG9yQ29udHJvbHMsXG5cdFx0XHRudWxsLFxuXHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogX18oJ1NldHRpbmdzJywgJ2xlYXJuZGFzaCcpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZpZWxkX2NvdXJzZV9pZCxcblx0XHRcdFx0ZmllbGRfdXNlcl9pZCxcblx0XHRcdFx0ZmllbGRfc2hvdyxcblx0XHRcdFx0ZmllbGRfZm9ybWF0LFxuXHRcdFx0XHRmaWVsZF9zZWNvbmRzX2Zvcm1hdCxcblx0XHRcdFx0ZmllbGRfZGVjaW1hbHNcblx0XHRcdCksXG5cdFx0XHRwYW5lbF9wcmV2aWV3XG5cdFx0KTtcblxuXHRcdGZ1bmN0aW9uIGRvX3NlcnZlcnNpZGVfcmVuZGVyKGF0dHJpYnV0ZXMpIHtcblx0XHRcdGlmIChhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyA9PSB0cnVlKSB7XG5cdFx0XHRcdC8vIFdlIGFkZCB0aGUgbWV0YSBzbyB0aGUgc2VydmVyIGtub3ducyB3aGF0IGlzIGJlaW5nIGVkaXRlZC5cblx0XHRcdFx0YXR0cmlidXRlcy5tZXRhID0gbGRsbXNfZ2V0X3Bvc3RfZWRpdF9tZXRhKCk7XG5cblx0XHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZXJ2ZXJTaWRlUmVuZGVyLCB7XG5cdFx0XHRcdFx0YmxvY2s6ICdsZWFybmRhc2gvbGQtY291cnNlaW5mbycsXG5cdFx0XHRcdFx0YXR0cmlidXRlczogYXR0cmlidXRlc1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBfXygnW2NvdXJzZWluZm9dIHNob3J0Y29kZSBvdXRwdXQgc2hvd24gaGVyZScsICdsZWFybmRhc2gnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gW2luc3BlY3RvckNvbnRyb2xzLCBkb19zZXJ2ZXJzaWRlX3JlbmRlcihwcm9wcy5hdHRyaWJ1dGVzKV07XG5cdH0sXG5cdHNhdmU6IGZ1bmN0aW9uIHNhdmUocHJvcHMpIHtcblx0XHQvLyBEZWxldGUgbWV0YSBmcm9tIHByb3BzIHRvIHByZXZlbnQgaXQgYmVpbmcgc2F2ZWQuXG5cdFx0ZGVsZXRlIHByb3BzLmF0dHJpYnV0ZXMubWV0YTtcblx0fVxufSk7IiwiLy9pbXBvcnQgJy4vaTE4bi5qcyc7XG5cbi8qKlxuICogSW1wb3J0IExlYXJuRGFzaCBibG9ja3NcbiAqL1xuaW1wb3J0ICcuL2xkLWxvZ2luJztcbmltcG9ydCAnLi9sZC1wcm9maWxlJztcbmltcG9ydCAnLi9sZC1jb3Vyc2UtbGlzdCc7XG5pbXBvcnQgJy4vbGQtbGVzc29uLWxpc3QnO1xuaW1wb3J0ICcuL2xkLXRvcGljLWxpc3QnO1xuaW1wb3J0ICcuL2xkLXF1aXotbGlzdCc7XG5pbXBvcnQgJy4vbGQtY291cnNlLXByb2dyZXNzJztcbmltcG9ydCAnLi9sZC12aXNpdG9yJztcbmltcG9ydCAnLi9sZC1zdHVkZW50JztcbmltcG9ydCAnLi9sZC1jb3Vyc2UtY29tcGxldGUnO1xuaW1wb3J0ICcuL2xkLWNvdXJzZS1pbnByb2dyZXNzJztcbmltcG9ydCAnLi9sZC1jb3Vyc2Utbm90c3RhcnRlZCc7XG5pbXBvcnQgJy4vbGQtY291cnNlLXJlc3VtZSc7XG5pbXBvcnQgJy4vbGQtY291cnNlLWluZm8nO1xuaW1wb3J0ICcuL2xkLXVzZXItY291cnNlLXBvaW50cyc7XG5pbXBvcnQgJy4vbGQtdXNlci1ncm91cHMnO1xuaW1wb3J0ICcuL2xkLWdyb3VwJztcbmltcG9ydCAnLi9sZC1wYXltZW50LWJ1dHRvbnMnO1xuaW1wb3J0ICcuL2xkLWNvdXJzZS1jb250ZW50JztcbmltcG9ydCAnLi9sZC1jb3Vyc2UtZXhwaXJlLXN0YXR1cyc7XG5pbXBvcnQgJy4vbGQtY2VydGlmaWNhdGUnO1xuaW1wb3J0ICcuL2xkLXF1aXotY29tcGxldGUnO1xuaW1wb3J0ICcuL2xkLWNvdXJzZWluZm8nO1xuaW1wb3J0ICcuL2xkLXVzZXJtZXRhJzsiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDelBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzljQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25RQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3pSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n")},,function(module,exports){eval("/**\n * LearnDash Block ld-usermeta\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * Internal block libraries\n */\nvar _wp$i18n = wp.i18n,\n __ = _wp$i18n.__,\n _x = _wp$i18n._x,\n sprintf = _wp$i18n.sprintf;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar InspectorControls = wp.editor.InspectorControls;\nvar _wp$components = wp.components,\n ServerSideRender = _wp$components.ServerSideRender,\n Tooltip = _wp$components.Tooltip,\n PanelBody = _wp$components.PanelBody,\n PanelRow = _wp$components.PanelRow,\n RangeControl = _wp$components.RangeControl,\n FormToggle = _wp$components.FormToggle,\n SelectControl = _wp$components.SelectControl,\n ToggleControl = _wp$components.ToggleControl,\n TextControl = _wp$components.TextControl;\n\n\nregisterBlockType('learndash/ld-usermeta', {\n\ttitle: __('LearnDash User meta', 'learndash'),\n\tdescription: __('This block displays User meta field', 'learndash'),\n\ticon: 'id',\n\tcategory: 'learndash-blocks',\n\texample: {\n\t\tattributes: {\n\t\t\texample_show: 1\n\t\t}\n\t},\n\tsupports: {\n\t\tcustomClassName: false\n\t},\n\tattributes: {\n\t\tfield: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tuser_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tpreview_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 1\n\t\t},\n\t\tpreview_user_id: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t}\n\n\t},\n\tedit: function edit(props) {\n\t\tvar _props$attributes = props.attributes,\n\t\t field = _props$attributes.field,\n\t\t user_id = _props$attributes.user_id,\n\t\t preview_show = _props$attributes.preview_show,\n\t\t preview_user_id = _props$attributes.preview_user_id,\n\t\t className = props.className,\n\t\t setAttributes = props.setAttributes;\n\n\n\t\tvar field_field = wp.element.createElement(SelectControl, {\n\t\t\tkey: 'field',\n\t\t\tlabel: __('Field', 'learndash'),\n\t\t\toptions: [{\n\t\t\t\tlabel: __('User Login', 'learndash'),\n\t\t\t\tvalue: 'user_login'\n\t\t\t}, {\n\t\t\t\tlabel: __('User Display Name', 'learndash'),\n\t\t\t\tvalue: 'display_name'\n\t\t\t}, {\n\t\t\t\tlabel: __('User Nicename', 'learndash'),\n\t\t\t\tvalue: 'user_nicename'\n\t\t\t}, {\n\t\t\t\tlabel: __('User First Name', 'learndash'),\n\t\t\t\tvalue: 'first_name'\n\t\t\t}, {\n\t\t\t\tlabel: __('User Last Name', 'learndash'),\n\t\t\t\tvalue: 'last_name'\n\t\t\t}, {\n\t\t\t\tlabel: __('User Nickname', 'learndash'),\n\t\t\t\tvalue: 'nickname'\n\t\t\t}, {\n\t\t\t\tlabel: __('User Email', 'learndash'),\n\t\t\t\tvalue: 'user_email'\n\t\t\t}, {\n\t\t\t\tlabel: __('User URL', 'learndash'),\n\t\t\t\tvalue: 'user_url'\n\t\t\t}, {\n\t\t\t\tlabel: __('User Description', 'learndash'),\n\t\t\t\tvalue: 'description'\n\t\t\t}],\n\t\t\tonChange: function onChange(field) {\n\t\t\t\treturn setAttributes({ field: field });\n\t\t\t}\n\t\t});\n\n\t\tvar field_user_id = wp.element.createElement(TextControl, {\n\t\t\tlabel: __('User ID', 'learndash'),\n\t\t\thelp: __('Enter specific User ID. Leave blank for current User.', 'learndash'),\n\t\t\tvalue: user_id || '',\n\t\t\tonChange: function onChange(user_id) {\n\t\t\t\treturn setAttributes({ user_id: user_id });\n\t\t\t}\n\t\t});\n\n\t\tvar panel_preview = wp.element.createElement(\n\t\t\tPanelBody,\n\t\t\t{\n\t\t\t\ttitle: __('Preview', 'learndash'),\n\t\t\t\tinitialOpen: false\n\t\t\t},\n\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\tlabel: __('Show Preview', 'learndash'),\n\t\t\t\tchecked: !!preview_show,\n\t\t\t\tonChange: function onChange(preview_show) {\n\t\t\t\t\treturn setAttributes({ preview_show: preview_show });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(TextControl, {\n\t\t\t\tlabel: __('User ID', 'learndash'),\n\t\t\t\thelp: __('Enter a User ID to test preview', 'learndash'),\n\t\t\t\tvalue: preview_user_id || '',\n\t\t\t\ttype: 'number',\n\t\t\t\tonChange: function onChange(preview_user_id) {\n\t\t\t\t\treturn setAttributes({ preview_user_id: preview_user_id });\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tvar inspectorControls = wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Settings', 'learndash')\n\t\t\t\t},\n\t\t\t\tfield_user_id,\n\t\t\t\tfield_field\n\t\t\t),\n\t\t\tpanel_preview\n\t\t);\n\n\t\tfunction do_serverside_render(attributes) {\n\t\t\tif (attributes.preview_show == true) {\n\t\t\t\treturn wp.element.createElement(ServerSideRender, {\n\t\t\t\t\tblock: 'learndash/ld-usermeta',\n\t\t\t\t\tattributes: attributes\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn __('[usermeta] shortcode output shown here', 'learndash');\n\t\t\t}\n\t\t}\n\n\t\treturn [inspectorControls, do_serverside_render(props.attributes)];\n\t},\n\n\tsave: function save(props) {\n\t\t// Delete preview_user_id from props to prevent it being saved.\n\t\tdelete props.attributes.preview_user_id;\n\t}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Jsb2Nrcy9sZC11c2VybWV0YS9pbmRleC5qcz8wZDA1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLXVzZXJtZXRhXG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIEludGVybmFsIGJsb2NrIGxpYnJhcmllc1xuICovXG52YXIgX3dwJGkxOG4gPSB3cC5pMThuLFxuICAgIF9fID0gX3dwJGkxOG4uX18sXG4gICAgX3ggPSBfd3AkaTE4bi5feCxcbiAgICBzcHJpbnRmID0gX3dwJGkxOG4uc3ByaW50ZjtcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBJbnNwZWN0b3JDb250cm9scyA9IHdwLmVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgU2VydmVyU2lkZVJlbmRlciA9IF93cCRjb21wb25lbnRzLlNlcnZlclNpZGVSZW5kZXIsXG4gICAgVG9vbHRpcCA9IF93cCRjb21wb25lbnRzLlRvb2x0aXAsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFBhbmVsUm93ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxSb3csXG4gICAgUmFuZ2VDb250cm9sID0gX3dwJGNvbXBvbmVudHMuUmFuZ2VDb250cm9sLFxuICAgIEZvcm1Ub2dnbGUgPSBfd3AkY29tcG9uZW50cy5Gb3JtVG9nZ2xlLFxuICAgIFNlbGVjdENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5TZWxlY3RDb250cm9sLFxuICAgIFRvZ2dsZUNvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5Ub2dnbGVDb250cm9sLFxuICAgIFRleHRDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVGV4dENvbnRyb2w7XG5cblxucmVnaXN0ZXJCbG9ja1R5cGUoJ2xlYXJuZGFzaC9sZC11c2VybWV0YScsIHtcblx0dGl0bGU6IF9fKCdMZWFybkRhc2ggVXNlciBtZXRhJywgJ2xlYXJuZGFzaCcpLFxuXHRkZXNjcmlwdGlvbjogX18oJ1RoaXMgYmxvY2sgZGlzcGxheXMgVXNlciBtZXRhIGZpZWxkJywgJ2xlYXJuZGFzaCcpLFxuXHRpY29uOiAnaWQnLFxuXHRjYXRlZ29yeTogJ2xlYXJuZGFzaC1ibG9ja3MnLFxuXHRleGFtcGxlOiB7XG5cdFx0YXR0cmlidXRlczoge1xuXHRcdFx0ZXhhbXBsZV9zaG93OiAxXG5cdFx0fVxuXHR9LFxuXHRzdXBwb3J0czoge1xuXHRcdGN1c3RvbUNsYXNzTmFtZTogZmFsc2Vcblx0fSxcblx0YXR0cmlidXRlczoge1xuXHRcdGZpZWxkOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJ1xuXHRcdH0sXG5cdFx0dXNlcl9pZDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0cHJldmlld19zaG93OiB7XG5cdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRkZWZhdWx0OiAxXG5cdFx0fSxcblx0XHRwcmV2aWV3X3VzZXJfaWQ6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9XG5cblx0fSxcblx0ZWRpdDogZnVuY3Rpb24gZWRpdChwcm9wcykge1xuXHRcdHZhciBfcHJvcHMkYXR0cmlidXRlcyA9IHByb3BzLmF0dHJpYnV0ZXMsXG5cdFx0ICAgIGZpZWxkID0gX3Byb3BzJGF0dHJpYnV0ZXMuZmllbGQsXG5cdFx0ICAgIHVzZXJfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy51c2VyX2lkLFxuXHRcdCAgICBwcmV2aWV3X3Nob3cgPSBfcHJvcHMkYXR0cmlidXRlcy5wcmV2aWV3X3Nob3csXG5cdFx0ICAgIHByZXZpZXdfdXNlcl9pZCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByZXZpZXdfdXNlcl9pZCxcblx0XHQgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuXHRcdCAgICBzZXRBdHRyaWJ1dGVzID0gcHJvcHMuc2V0QXR0cmlidXRlcztcblxuXG5cdFx0dmFyIGZpZWxkX2ZpZWxkID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRyb2wsIHtcblx0XHRcdGtleTogJ2ZpZWxkJyxcblx0XHRcdGxhYmVsOiBfXygnRmllbGQnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRvcHRpb25zOiBbe1xuXHRcdFx0XHRsYWJlbDogX18oJ1VzZXIgTG9naW4nLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdHZhbHVlOiAndXNlcl9sb2dpbidcblx0XHRcdH0sIHtcblx0XHRcdFx0bGFiZWw6IF9fKCdVc2VyIERpc3BsYXkgTmFtZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0dmFsdWU6ICdkaXNwbGF5X25hbWUnXG5cdFx0XHR9LCB7XG5cdFx0XHRcdGxhYmVsOiBfXygnVXNlciBOaWNlbmFtZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0dmFsdWU6ICd1c2VyX25pY2VuYW1lJ1xuXHRcdFx0fSwge1xuXHRcdFx0XHRsYWJlbDogX18oJ1VzZXIgRmlyc3QgTmFtZScsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0dmFsdWU6ICdmaXJzdF9uYW1lJ1xuXHRcdFx0fSwge1xuXHRcdFx0XHRsYWJlbDogX18oJ1VzZXIgTGFzdCBOYW1lJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHR2YWx1ZTogJ2xhc3RfbmFtZSdcblx0XHRcdH0sIHtcblx0XHRcdFx0bGFiZWw6IF9fKCdVc2VyIE5pY2tuYW1lJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHR2YWx1ZTogJ25pY2tuYW1lJ1xuXHRcdFx0fSwge1xuXHRcdFx0XHRsYWJlbDogX18oJ1VzZXIgRW1haWwnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdHZhbHVlOiAndXNlcl9lbWFpbCdcblx0XHRcdH0sIHtcblx0XHRcdFx0bGFiZWw6IF9fKCdVc2VyIFVSTCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0dmFsdWU6ICd1c2VyX3VybCdcblx0XHRcdH0sIHtcblx0XHRcdFx0bGFiZWw6IF9fKCdVc2VyIERlc2NyaXB0aW9uJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHR2YWx1ZTogJ2Rlc2NyaXB0aW9uJ1xuXHRcdFx0fV0sXG5cdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoZmllbGQpIHtcblx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBmaWVsZDogZmllbGQgfSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR2YXIgZmllbGRfdXNlcl9pZCA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0bGFiZWw6IF9fKCdVc2VyIElEJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0aGVscDogX18oJ0VudGVyIHNwZWNpZmljIFVzZXIgSUQuIExlYXZlIGJsYW5rIGZvciBjdXJyZW50IFVzZXIuJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0dmFsdWU6IHVzZXJfaWQgfHwgJycsXG5cdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodXNlcl9pZCkge1xuXHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHVzZXJfaWQ6IHVzZXJfaWQgfSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR2YXIgcGFuZWxfcHJldmlldyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFBhbmVsQm9keSxcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IF9fKCdQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRpbml0aWFsT3BlbjogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogX18oJ1Nob3cgUHJldmlldycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0Y2hlY2tlZDogISFwcmV2aWV3X3Nob3csXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X3Nob3cpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByZXZpZXdfc2hvdzogcHJldmlld19zaG93IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogX18oJ1VzZXIgSUQnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdGhlbHA6IF9fKCdFbnRlciBhIFVzZXIgSUQgdG8gdGVzdCBwcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHR2YWx1ZTogcHJldmlld191c2VyX2lkIHx8ICcnLFxuXHRcdFx0XHR0eXBlOiAnbnVtYmVyJyxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfdXNlcl9pZCkge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJldmlld191c2VyX2lkOiBwcmV2aWV3X3VzZXJfaWQgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdHZhciBpbnNwZWN0b3JDb250cm9scyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdEluc3BlY3RvckNvbnRyb2xzLFxuXHRcdFx0bnVsbCxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IF9fKCdTZXR0aW5ncycsICdsZWFybmRhc2gnKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmaWVsZF91c2VyX2lkLFxuXHRcdFx0XHRmaWVsZF9maWVsZFxuXHRcdFx0KSxcblx0XHRcdHBhbmVsX3ByZXZpZXdcblx0XHQpO1xuXG5cdFx0ZnVuY3Rpb24gZG9fc2VydmVyc2lkZV9yZW5kZXIoYXR0cmlidXRlcykge1xuXHRcdFx0aWYgKGF0dHJpYnV0ZXMucHJldmlld19zaG93ID09IHRydWUpIHtcblx0XHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZXJ2ZXJTaWRlUmVuZGVyLCB7XG5cdFx0XHRcdFx0YmxvY2s6ICdsZWFybmRhc2gvbGQtdXNlcm1ldGEnLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gX18oJ1t1c2VybWV0YV0gc2hvcnRjb2RlIG91dHB1dCBzaG93biBoZXJlJywgJ2xlYXJuZGFzaCcpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBbaW5zcGVjdG9yQ29udHJvbHMsIGRvX3NlcnZlcnNpZGVfcmVuZGVyKHByb3BzLmF0dHJpYnV0ZXMpXTtcblx0fSxcblxuXHRzYXZlOiBmdW5jdGlvbiBzYXZlKHByb3BzKSB7XG5cdFx0Ly8gRGVsZXRlIHByZXZpZXdfdXNlcl9pZCBmcm9tIHByb3BzIHRvIHByZXZlbnQgaXQgYmVpbmcgc2F2ZWQuXG5cdFx0ZGVsZXRlIHByb3BzLmF0dHJpYnV0ZXMucHJldmlld191c2VyX2lkO1xuXHR9XG59KTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n")},function(module,exports){eval("/**\n * LearnDash Block ld-user-groups\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * Internal block libraries\n */\nvar _wp$i18n = wp.i18n,\n __ = _wp$i18n.__,\n _x = _wp$i18n._x,\n sprintf = _wp$i18n.sprintf;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar InspectorControls = wp.editor.InspectorControls;\nvar _wp$components = wp.components,\n ServerSideRender = _wp$components.ServerSideRender,\n Tooltip = _wp$components.Tooltip,\n PanelBody = _wp$components.PanelBody,\n PanelRow = _wp$components.PanelRow,\n RangeControl = _wp$components.RangeControl,\n FormToggle = _wp$components.FormToggle,\n SelectControl = _wp$components.SelectControl,\n ToggleControl = _wp$components.ToggleControl,\n TextControl = _wp$components.TextControl;\n\n\nregisterBlockType('learndash/ld-user-groups', {\n title: __('LearnDash User Groups', 'learndash'),\n description: __('This block displays the list of groups users are assigned to as users or leaders.', 'learndash'),\n icon: 'groups',\n category: 'learndash-blocks',\n example: {\n attributes: {\n example_show: 1\n }\n },\n supports: {\n customClassName: false\n },\n attributes: {\n user_id: {\n type: 'string',\n default: ''\n },\n preview_show: {\n type: 'boolean',\n default: 1\n },\n preview_user_id: {\n type: 'string'\n\n }\n },\n edit: function edit(props) {\n var _props$attributes = props.attributes,\n user_id = _props$attributes.user_id,\n preview_user_id = _props$attributes.preview_user_id,\n preview_show = _props$attributes.preview_show,\n setAttributes = props.setAttributes;\n\n\n var inspectorControls = wp.element.createElement(\n InspectorControls,\n null,\n wp.element.createElement(\n PanelBody,\n {\n title: __('Settings', 'learndash')\n },\n wp.element.createElement(TextControl, {\n label: __('User ID', 'learndash'),\n help: __('Enter specific User ID. Leave blank for current User.', 'learndash'),\n value: user_id || '',\n onChange: function onChange(user_id) {\n return setAttributes({ user_id: user_id });\n }\n })\n ),\n wp.element.createElement(\n PanelBody,\n {\n title: __('Preview', 'learndash'),\n initialOpen: false\n },\n wp.element.createElement(ToggleControl, {\n label: __('Show Preview', 'learndash'),\n checked: !!preview_show,\n onChange: function onChange(preview_show) {\n return setAttributes({ preview_show: preview_show });\n }\n }),\n wp.element.createElement(TextControl, {\n label: __('User ID', 'learndash'),\n help: __('Enter a User ID to test preview', 'learndash'),\n value: preview_user_id || '',\n type: 'number',\n onChange: function onChange(preview_user_id) {\n return setAttributes({ preview_user_id: preview_user_id });\n }\n })\n )\n );\n\n function do_serverside_render(attributes) {\n if (attributes.preview_show == true) {\n return wp.element.createElement(ServerSideRender, {\n block: 'learndash/ld-user-groups',\n attributes: attributes\n });\n } else {\n return __('[user_groups] output shown here', 'learndash');\n }\n }\n\n return [inspectorControls, do_serverside_render(props.attributes)];\n },\n\n save: function save(props) {\n // Delete preview_user_id from props to prevent it being saved.\n delete props.attributes.preview_user_id;\n\n // Delete preview_user_id from props to prevent it being saved.\n delete props.attributes.preview_user_id;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Jsb2Nrcy9sZC11c2VyLWdyb3Vwcy9pbmRleC5qcz82NmIyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLXVzZXItZ3JvdXBzXG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIEludGVybmFsIGJsb2NrIGxpYnJhcmllc1xuICovXG52YXIgX3dwJGkxOG4gPSB3cC5pMThuLFxuICAgIF9fID0gX3dwJGkxOG4uX18sXG4gICAgX3ggPSBfd3AkaTE4bi5feCxcbiAgICBzcHJpbnRmID0gX3dwJGkxOG4uc3ByaW50ZjtcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBJbnNwZWN0b3JDb250cm9scyA9IHdwLmVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgU2VydmVyU2lkZVJlbmRlciA9IF93cCRjb21wb25lbnRzLlNlcnZlclNpZGVSZW5kZXIsXG4gICAgVG9vbHRpcCA9IF93cCRjb21wb25lbnRzLlRvb2x0aXAsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFBhbmVsUm93ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxSb3csXG4gICAgUmFuZ2VDb250cm9sID0gX3dwJGNvbXBvbmVudHMuUmFuZ2VDb250cm9sLFxuICAgIEZvcm1Ub2dnbGUgPSBfd3AkY29tcG9uZW50cy5Gb3JtVG9nZ2xlLFxuICAgIFNlbGVjdENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5TZWxlY3RDb250cm9sLFxuICAgIFRvZ2dsZUNvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5Ub2dnbGVDb250cm9sLFxuICAgIFRleHRDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVGV4dENvbnRyb2w7XG5cblxucmVnaXN0ZXJCbG9ja1R5cGUoJ2xlYXJuZGFzaC9sZC11c2VyLWdyb3VwcycsIHtcbiAgICB0aXRsZTogX18oJ0xlYXJuRGFzaCBVc2VyIEdyb3VwcycsICdsZWFybmRhc2gnKSxcbiAgICBkZXNjcmlwdGlvbjogX18oJ1RoaXMgYmxvY2sgZGlzcGxheXMgdGhlIGxpc3Qgb2YgZ3JvdXBzIHVzZXJzIGFyZSBhc3NpZ25lZCB0byBhcyB1c2VycyBvciBsZWFkZXJzLicsICdsZWFybmRhc2gnKSxcbiAgICBpY29uOiAnZ3JvdXBzJyxcbiAgICBjYXRlZ29yeTogJ2xlYXJuZGFzaC1ibG9ja3MnLFxuICAgIGV4YW1wbGU6IHtcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgZXhhbXBsZV9zaG93OiAxXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHN1cHBvcnRzOiB7XG4gICAgICAgIGN1c3RvbUNsYXNzTmFtZTogZmFsc2VcbiAgICB9LFxuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgdXNlcl9pZDoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICBwcmV2aWV3X3Nob3c6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IDFcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlld191c2VyX2lkOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJ1xuXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGVkaXQ6IGZ1bmN0aW9uIGVkaXQocHJvcHMpIHtcbiAgICAgICAgdmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gcHJvcHMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIHVzZXJfaWQgPSBfcHJvcHMkYXR0cmlidXRlcy51c2VyX2lkLFxuICAgICAgICAgICAgcHJldmlld191c2VyX2lkID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld191c2VyX2lkLFxuICAgICAgICAgICAgcHJldmlld19zaG93ID0gX3Byb3BzJGF0dHJpYnV0ZXMucHJldmlld19zaG93LFxuICAgICAgICAgICAgc2V0QXR0cmlidXRlcyA9IHByb3BzLnNldEF0dHJpYnV0ZXM7XG5cblxuICAgICAgICB2YXIgaW5zcGVjdG9yQ29udHJvbHMgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBJbnNwZWN0b3JDb250cm9scyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgUGFuZWxCb2R5LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF9fKCdTZXR0aW5ncycsICdsZWFybmRhc2gnKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnVXNlciBJRCcsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgaGVscDogX18oJ0VudGVyIHNwZWNpZmljIFVzZXIgSUQuIExlYXZlIGJsYW5rIGZvciBjdXJyZW50IFVzZXIuJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdXNlcl9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHVzZXJfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgdXNlcl9pZDogdXNlcl9pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFBhbmVsQm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfXygnUHJldmlldycsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbE9wZW46IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogX18oJ1Nob3cgUHJldmlldycsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogISFwcmV2aWV3X3Nob3csXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X3Nob3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJldmlld19zaG93OiBwcmV2aWV3X3Nob3cgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdVc2VyIElEJywgJ2xlYXJuZGFzaCcpLFxuICAgICAgICAgICAgICAgICAgICBoZWxwOiBfXygnRW50ZXIgYSBVc2VyIElEIHRvIHRlc3QgcHJldmlldycsICdsZWFybmRhc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHByZXZpZXdfdXNlcl9pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X3VzZXJfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgcHJldmlld191c2VyX2lkOiBwcmV2aWV3X3VzZXJfaWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGZ1bmN0aW9uIGRvX3NlcnZlcnNpZGVfcmVuZGVyKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZXJ2ZXJTaWRlUmVuZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrOiAnbGVhcm5kYXNoL2xkLXVzZXItZ3JvdXBzJyxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX18oJ1t1c2VyX2dyb3Vwc10gb3V0cHV0IHNob3duIGhlcmUnLCAnbGVhcm5kYXNoJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2luc3BlY3RvckNvbnRyb2xzLCBkb19zZXJ2ZXJzaWRlX3JlbmRlcihwcm9wcy5hdHRyaWJ1dGVzKV07XG4gICAgfSxcblxuICAgIHNhdmU6IGZ1bmN0aW9uIHNhdmUocHJvcHMpIHtcbiAgICAgICAgLy8gRGVsZXRlIHByZXZpZXdfdXNlcl9pZCBmcm9tIHByb3BzIHRvIHByZXZlbnQgaXQgYmVpbmcgc2F2ZWQuXG4gICAgICAgIGRlbGV0ZSBwcm9wcy5hdHRyaWJ1dGVzLnByZXZpZXdfdXNlcl9pZDtcblxuICAgICAgICAvLyBEZWxldGUgcHJldmlld191c2VyX2lkIGZyb20gcHJvcHMgdG8gcHJldmVudCBpdCBiZWluZyBzYXZlZC5cbiAgICAgICAgZGVsZXRlIHByb3BzLmF0dHJpYnV0ZXMucHJldmlld191c2VyX2lkO1xuICAgIH1cbn0pOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3\n")},function(module,exports){eval("/**\n * LearnDash Block ld-login\n *\n * @since 2.5.9\n * @package LearnDash\n */\n\n/**\n * LearnDash block functions\n */\n//import {\n//\tldlms_get_custom_label,\n//\tldlms_get_per_page,\n//} from '../ldlms.js';\n\n/**\n * Internal block libraries\n */\nvar _wp$i18n = wp.i18n,\n __ = _wp$i18n.__,\n _x = _wp$i18n._x,\n sprintf = _wp$i18n.sprintf;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar InspectorControls = wp.editor.InspectorControls;\nvar _wp$components = wp.components,\n ServerSideRender = _wp$components.ServerSideRender,\n PanelBody = _wp$components.PanelBody,\n SelectControl = _wp$components.SelectControl,\n ToggleControl = _wp$components.ToggleControl,\n TextControl = _wp$components.TextControl;\n\n\nregisterBlockType('learndash/ld-login', {\n\ttitle: _x('LearnDash Login', 'learndash'),\n\tdescription: __('This shortcode adds the login button on any page', 'learndash'),\n\ticon: 'admin-network',\n\tcategory: 'learndash-blocks',\n\texample: {\n\t\tattributes: {\n\t\t\texample_show: 1\n\t\t}\n\t},\n\tsupports: {\n\t\tcustomClassName: false\n\t},\n\tattributes: {\n\t\tlogin_url: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlogin_label: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlogin_placement: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlogin_button: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\n\t\tlogout_url: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlogout_label: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tlogout_placement: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'right'\n\t\t},\n\t\tlogout_button: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\tpreview_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tpreview_action: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t},\n\t\texample_show: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: 0\n\t\t}\n\t},\n\tedit: function edit(props) {\n\t\tvar _props$attributes = props.attributes,\n\t\t login_url = _props$attributes.login_url,\n\t\t login_label = _props$attributes.login_label,\n\t\t login_placement = _props$attributes.login_placement,\n\t\t login_button = _props$attributes.login_button,\n\t\t logout_url = _props$attributes.logout_url,\n\t\t logout_label = _props$attributes.logout_label,\n\t\t logout_placement = _props$attributes.logout_placement,\n\t\t logout_button = _props$attributes.logout_button,\n\t\t preview_show = _props$attributes.preview_show,\n\t\t preview_action = _props$attributes.preview_action,\n\t\t example_show = _props$attributes.example_show,\n\t\t setAttributes = props.setAttributes;\n\n\n\t\tvar panelbody_login = wp.element.createElement(\n\t\t\tPanelBody,\n\t\t\t{\n\t\t\t\ttitle: __('Login Settings', 'learndash')\n\t\t\t},\n\t\t\twp.element.createElement(TextControl, {\n\t\t\t\tlabel: __('Login URL', 'learndash'),\n\t\t\t\thelp: __('Override default login URL', 'learndash'),\n\t\t\t\tvalue: login_url || '',\n\t\t\t\tonChange: function onChange(login_url) {\n\t\t\t\t\treturn setAttributes({ login_url: login_url });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(TextControl, {\n\t\t\t\tlabel: __('Login Label', 'learndash'),\n\t\t\t\thelp: __('Override default label \"Login\"', 'learndash'),\n\t\t\t\tvalue: login_label || '',\n\t\t\t\tonChange: function onChange(login_label) {\n\t\t\t\t\treturn setAttributes({ login_label: login_label });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(SelectControl, {\n\t\t\t\tkey: 'login_placement',\n\t\t\t\tlabel: __('Login Icon Placement', 'learndash'),\n\t\t\t\tvalue: login_placement,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: __('Left - To left of label', 'learndash'),\n\t\t\t\t\tvalue: ''\n\t\t\t\t}, {\n\t\t\t\t\tlabel: __('Right - To right of label', 'learndash'),\n\t\t\t\t\tvalue: 'right'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: __('None - No icon', 'learndash'),\n\t\t\t\t\tvalue: 'none'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(login_placement) {\n\t\t\t\t\treturn setAttributes({ login_placement: login_placement });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(SelectControl, {\n\t\t\t\tkey: 'login_button',\n\t\t\t\tlabel: __('Login Displayed as', 'learndash'),\n\t\t\t\thelp: __('Display as Button or link', 'learndash'),\n\t\t\t\tvalue: login_button,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: __('Button', 'learndash'),\n\t\t\t\t\tvalue: ''\n\t\t\t\t}, {\n\t\t\t\t\tlabel: __('Link', 'learndash'),\n\t\t\t\t\tvalue: 'link'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(login_button) {\n\t\t\t\t\treturn setAttributes({ login_button: login_button });\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tvar panelbody_logout = wp.element.createElement(\n\t\t\tPanelBody,\n\t\t\t{\n\t\t\t\ttitle: __('Logout Settings', 'learndash')\n\t\t\t},\n\t\t\twp.element.createElement(TextControl, {\n\t\t\t\tlabel: __('Logout URL', 'learndash'),\n\t\t\t\thelp: __('Override default logout URL', 'learndash'),\n\t\t\t\tvalue: logout_url || '',\n\t\t\t\tonChange: function onChange(logout_url) {\n\t\t\t\t\treturn setAttributes({ logout_url: logout_url });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(TextControl, {\n\t\t\t\tlabel: __('Logout Label', 'learndash'),\n\t\t\t\thelp: __('Override default label \"Logout\"', 'learndash'),\n\t\t\t\tvalue: logout_label || '',\n\t\t\t\tonChange: function onChange(logout_label) {\n\t\t\t\t\treturn setAttributes({ logout_label: logout_label });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(SelectControl, {\n\t\t\t\tkey: 'logout_placement',\n\t\t\t\tlabel: __('Logout Icon Placement', 'learndash'),\n\t\t\t\tvalue: logout_placement,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: __('Left - To left of label', 'learndash'),\n\t\t\t\t\tvalue: 'left'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: __('Right - To right of label', 'learndash'),\n\t\t\t\t\tvalue: 'right'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: __('None - No icon', 'learndash'),\n\t\t\t\t\tvalue: 'none'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(logout_placement) {\n\t\t\t\t\treturn setAttributes({ logout_placement: logout_placement });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(SelectControl, {\n\t\t\t\tkey: 'logout_button',\n\t\t\t\tlabel: __('Logout Displayed as', 'learndash'),\n\t\t\t\thelp: __('Display as Button or link', 'learndash'),\n\t\t\t\tvalue: logout_button,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: __('Button', 'learndash'),\n\t\t\t\t\tvalue: ''\n\t\t\t\t}, {\n\t\t\t\t\tlabel: __('Link', 'learndash'),\n\t\t\t\t\tvalue: 'link'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(logout_button) {\n\t\t\t\t\treturn setAttributes({ logout_button: logout_button });\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tvar panel_preview = wp.element.createElement(\n\t\t\tPanelBody,\n\t\t\t{\n\t\t\t\ttitle: __('Preview', 'learndash'),\n\t\t\t\tinitialOpen: false\n\t\t\t},\n\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\tlabel: __('Show Preview', 'learndash'),\n\t\t\t\tchecked: !!preview_show,\n\t\t\t\tonChange: function onChange(preview_show) {\n\t\t\t\t\treturn setAttributes({ preview_show: preview_show });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(SelectControl, {\n\t\t\t\tkey: 'preview_action',\n\t\t\t\tlabel: __('Preview Action', 'learndash'),\n\t\t\t\tvalue: preview_action,\n\t\t\t\toptions: [{\n\t\t\t\t\tlabel: __('Login', 'learndash'),\n\t\t\t\t\tvalue: 'login'\n\t\t\t\t}, {\n\t\t\t\t\tlabel: __('Logout', 'learndash'),\n\t\t\t\t\tvalue: 'logout'\n\t\t\t\t}],\n\t\t\t\tonChange: function onChange(preview_action) {\n\t\t\t\t\treturn setAttributes({ preview_action: preview_action });\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tvar inspectorControls = wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\tpanelbody_login,\n\t\t\tpanelbody_logout,\n\t\t\tpanel_preview\n\t\t);\n\n\t\tfunction do_serverside_render(attributes) {\n\t\t\tif (attributes.preview_show == true) {\n\t\t\t\treturn wp.element.createElement(ServerSideRender, {\n\t\t\t\t\tblock: 'learndash/ld-login',\n\t\t\t\t\tattributes: attributes\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn __('[learndash_login] shortcode output shown here', 'learndash');\n\t\t\t}\n\t\t}\n\n\t\treturn [inspectorControls, do_serverside_render(props.attributes)];\n\t},\n\n\tsave: function save(props) {\n\t\t// Delete meta from props to prevent it being saved.\n\t\tdelete props.attributes.meta;\n\n\t\t// Delete preview_user_id from props to prevent it being saved.\n\t\tdelete props.attributes.preview_user_id;\n\t}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Jsb2Nrcy9sZC1sb2dpbi9pbmRleC5qcz8yOWY1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGVhcm5EYXNoIEJsb2NrIGxkLWxvZ2luXG4gKlxuICogQHNpbmNlIDIuNS45XG4gKiBAcGFja2FnZSBMZWFybkRhc2hcbiAqL1xuXG4vKipcbiAqIExlYXJuRGFzaCBibG9jayBmdW5jdGlvbnNcbiAqL1xuLy9pbXBvcnQge1xuLy9cdGxkbG1zX2dldF9jdXN0b21fbGFiZWwsXG4vL1x0bGRsbXNfZ2V0X3Blcl9wYWdlLFxuLy99IGZyb20gJy4uL2xkbG1zLmpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBibG9jayBsaWJyYXJpZXNcbiAqL1xudmFyIF93cCRpMThuID0gd3AuaTE4bixcbiAgICBfXyA9IF93cCRpMThuLl9fLFxuICAgIF94ID0gX3dwJGkxOG4uX3gsXG4gICAgc3ByaW50ZiA9IF93cCRpMThuLnNwcmludGY7XG52YXIgcmVnaXN0ZXJCbG9ja1R5cGUgPSB3cC5ibG9ja3MucmVnaXN0ZXJCbG9ja1R5cGU7XG52YXIgSW5zcGVjdG9yQ29udHJvbHMgPSB3cC5lZGl0b3IuSW5zcGVjdG9yQ29udHJvbHM7XG52YXIgX3dwJGNvbXBvbmVudHMgPSB3cC5jb21wb25lbnRzLFxuICAgIFNlcnZlclNpZGVSZW5kZXIgPSBfd3AkY29tcG9uZW50cy5TZXJ2ZXJTaWRlUmVuZGVyLFxuICAgIFBhbmVsQm9keSA9IF93cCRjb21wb25lbnRzLlBhbmVsQm9keSxcbiAgICBTZWxlY3RDb250cm9sID0gX3dwJGNvbXBvbmVudHMuU2VsZWN0Q29udHJvbCxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbCxcbiAgICBUZXh0Q29udHJvbCA9IF93cCRjb21wb25lbnRzLlRleHRDb250cm9sO1xuXG5cbnJlZ2lzdGVyQmxvY2tUeXBlKCdsZWFybmRhc2gvbGQtbG9naW4nLCB7XG5cdHRpdGxlOiBfeCgnTGVhcm5EYXNoIExvZ2luJywgJ2xlYXJuZGFzaCcpLFxuXHRkZXNjcmlwdGlvbjogX18oJ1RoaXMgc2hvcnRjb2RlIGFkZHMgdGhlIGxvZ2luIGJ1dHRvbiBvbiBhbnkgcGFnZScsICdsZWFybmRhc2gnKSxcblx0aWNvbjogJ2FkbWluLW5ldHdvcmsnLFxuXHRjYXRlZ29yeTogJ2xlYXJuZGFzaC1ibG9ja3MnLFxuXHRleGFtcGxlOiB7XG5cdFx0YXR0cmlidXRlczoge1xuXHRcdFx0ZXhhbXBsZV9zaG93OiAxXG5cdFx0fVxuXHR9LFxuXHRzdXBwb3J0czoge1xuXHRcdGN1c3RvbUNsYXNzTmFtZTogZmFsc2Vcblx0fSxcblx0YXR0cmlidXRlczoge1xuXHRcdGxvZ2luX3VybDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0bG9naW5fbGFiZWw6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdGxvZ2luX3BsYWNlbWVudDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0bG9naW5fYnV0dG9uOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblxuXHRcdGxvZ291dF91cmw6IHtcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdGxvZ291dF9sYWJlbDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdH0sXG5cdFx0bG9nb3V0X3BsYWNlbWVudDoge1xuXHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRkZWZhdWx0OiAncmlnaHQnXG5cdFx0fSxcblx0XHRsb2dvdXRfYnV0dG9uOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRwcmV2aWV3X3Nob3c6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IHRydWVcblx0XHR9LFxuXHRcdHByZXZpZXdfYWN0aW9uOiB7XG5cdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0fSxcblx0XHRleGFtcGxlX3Nob3c6IHtcblx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdGRlZmF1bHQ6IDBcblx0XHR9XG5cdH0sXG5cdGVkaXQ6IGZ1bmN0aW9uIGVkaXQocHJvcHMpIHtcblx0XHR2YXIgX3Byb3BzJGF0dHJpYnV0ZXMgPSBwcm9wcy5hdHRyaWJ1dGVzLFxuXHRcdCAgICBsb2dpbl91cmwgPSBfcHJvcHMkYXR0cmlidXRlcy5sb2dpbl91cmwsXG5cdFx0ICAgIGxvZ2luX2xhYmVsID0gX3Byb3BzJGF0dHJpYnV0ZXMubG9naW5fbGFiZWwsXG5cdFx0ICAgIGxvZ2luX3BsYWNlbWVudCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmxvZ2luX3BsYWNlbWVudCxcblx0XHQgICAgbG9naW5fYnV0dG9uID0gX3Byb3BzJGF0dHJpYnV0ZXMubG9naW5fYnV0dG9uLFxuXHRcdCAgICBsb2dvdXRfdXJsID0gX3Byb3BzJGF0dHJpYnV0ZXMubG9nb3V0X3VybCxcblx0XHQgICAgbG9nb3V0X2xhYmVsID0gX3Byb3BzJGF0dHJpYnV0ZXMubG9nb3V0X2xhYmVsLFxuXHRcdCAgICBsb2dvdXRfcGxhY2VtZW50ID0gX3Byb3BzJGF0dHJpYnV0ZXMubG9nb3V0X3BsYWNlbWVudCxcblx0XHQgICAgbG9nb3V0X2J1dHRvbiA9IF9wcm9wcyRhdHRyaWJ1dGVzLmxvZ291dF9idXR0b24sXG5cdFx0ICAgIHByZXZpZXdfc2hvdyA9IF9wcm9wcyRhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyxcblx0XHQgICAgcHJldmlld19hY3Rpb24gPSBfcHJvcHMkYXR0cmlidXRlcy5wcmV2aWV3X2FjdGlvbixcblx0XHQgICAgZXhhbXBsZV9zaG93ID0gX3Byb3BzJGF0dHJpYnV0ZXMuZXhhbXBsZV9zaG93LFxuXHRcdCAgICBzZXRBdHRyaWJ1dGVzID0gcHJvcHMuc2V0QXR0cmlidXRlcztcblxuXG5cdFx0dmFyIHBhbmVsYm9keV9sb2dpbiA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFBhbmVsQm9keSxcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IF9fKCdMb2dpbiBTZXR0aW5ncycsICdsZWFybmRhc2gnKVxuXHRcdFx0fSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogX18oJ0xvZ2luIFVSTCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0aGVscDogX18oJ092ZXJyaWRlIGRlZmF1bHQgbG9naW4gVVJMJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHR2YWx1ZTogbG9naW5fdXJsIHx8ICcnLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UobG9naW5fdXJsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBsb2dpbl91cmw6IGxvZ2luX3VybCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0bGFiZWw6IF9fKCdMb2dpbiBMYWJlbCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0aGVscDogX18oJ092ZXJyaWRlIGRlZmF1bHQgbGFiZWwgXCJMb2dpblwiJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHR2YWx1ZTogbG9naW5fbGFiZWwgfHwgJycsXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShsb2dpbl9sYWJlbCkge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgbG9naW5fbGFiZWw6IGxvZ2luX2xhYmVsIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdGtleTogJ2xvZ2luX3BsYWNlbWVudCcsXG5cdFx0XHRcdGxhYmVsOiBfXygnTG9naW4gSWNvbiBQbGFjZW1lbnQnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdHZhbHVlOiBsb2dpbl9wbGFjZW1lbnQsXG5cdFx0XHRcdG9wdGlvbnM6IFt7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdMZWZ0IC0gVG8gbGVmdCBvZiBsYWJlbCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJydcblx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnUmlnaHQgLSBUbyByaWdodCBvZiBsYWJlbCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3JpZ2h0J1xuXHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdOb25lIC0gTm8gaWNvbicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ25vbmUnXG5cdFx0XHRcdH1dLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UobG9naW5fcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBsb2dpbl9wbGFjZW1lbnQ6IGxvZ2luX3BsYWNlbWVudCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoU2VsZWN0Q29udHJvbCwge1xuXHRcdFx0XHRrZXk6ICdsb2dpbl9idXR0b24nLFxuXHRcdFx0XHRsYWJlbDogX18oJ0xvZ2luIERpc3BsYXllZCBhcycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0aGVscDogX18oJ0Rpc3BsYXkgYXMgQnV0dG9uIG9yIGxpbmsnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdHZhbHVlOiBsb2dpbl9idXR0b24sXG5cdFx0XHRcdG9wdGlvbnM6IFt7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdCdXR0b24nLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICcnXG5cdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ0xpbmsnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdsaW5rJ1xuXHRcdFx0XHR9XSxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGxvZ2luX2J1dHRvbikge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgbG9naW5fYnV0dG9uOiBsb2dpbl9idXR0b24gfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdHZhciBwYW5lbGJvZHlfbG9nb3V0ID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0e1xuXHRcdFx0XHR0aXRsZTogX18oJ0xvZ291dCBTZXR0aW5ncycsICdsZWFybmRhc2gnKVxuXHRcdFx0fSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChUZXh0Q29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogX18oJ0xvZ291dCBVUkwnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdGhlbHA6IF9fKCdPdmVycmlkZSBkZWZhdWx0IGxvZ291dCBVUkwnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdHZhbHVlOiBsb2dvdXRfdXJsIHx8ICcnLFxuXHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UobG9nb3V0X3VybCkge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgbG9nb3V0X3VybDogbG9nb3V0X3VybCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcblx0XHRcdFx0bGFiZWw6IF9fKCdMb2dvdXQgTGFiZWwnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdGhlbHA6IF9fKCdPdmVycmlkZSBkZWZhdWx0IGxhYmVsIFwiTG9nb3V0XCInLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdHZhbHVlOiBsb2dvdXRfbGFiZWwgfHwgJycsXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShsb2dvdXRfbGFiZWwpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGxvZ291dF9sYWJlbDogbG9nb3V0X2xhYmVsIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdGtleTogJ2xvZ291dF9wbGFjZW1lbnQnLFxuXHRcdFx0XHRsYWJlbDogX18oJ0xvZ291dCBJY29uIFBsYWNlbWVudCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0dmFsdWU6IGxvZ291dF9wbGFjZW1lbnQsXG5cdFx0XHRcdG9wdGlvbnM6IFt7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdMZWZ0IC0gVG8gbGVmdCBvZiBsYWJlbCcsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ2xlZnQnXG5cdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1JpZ2h0IC0gVG8gcmlnaHQgb2YgbGFiZWwnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdyaWdodCdcblx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnTm9uZSAtIE5vIGljb24nLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdub25lJ1xuXHRcdFx0XHR9XSxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGxvZ291dF9wbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGxvZ291dF9wbGFjZW1lbnQ6IGxvZ291dF9wbGFjZW1lbnQgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRyb2wsIHtcblx0XHRcdFx0a2V5OiAnbG9nb3V0X2J1dHRvbicsXG5cdFx0XHRcdGxhYmVsOiBfXygnTG9nb3V0IERpc3BsYXllZCBhcycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0aGVscDogX18oJ0Rpc3BsYXkgYXMgQnV0dG9uIG9yIGxpbmsnLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdHZhbHVlOiBsb2dvdXRfYnV0dG9uLFxuXHRcdFx0XHRvcHRpb25zOiBbe1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnQnV0dG9uJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnJ1xuXHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdMaW5rJywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbGluaydcblx0XHRcdFx0fV0sXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShsb2dvdXRfYnV0dG9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBsb2dvdXRfYnV0dG9uOiBsb2dvdXRfYnV0dG9uIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHR2YXIgcGFuZWxfcHJldmlldyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFBhbmVsQm9keSxcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IF9fKCdQcmV2aWV3JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRpbml0aWFsT3BlbjogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuXHRcdFx0XHRsYWJlbDogX18oJ1Nob3cgUHJldmlldycsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0Y2hlY2tlZDogISFwcmV2aWV3X3Nob3csXG5cdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcmV2aWV3X3Nob3cpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IHByZXZpZXdfc2hvdzogcHJldmlld19zaG93IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChTZWxlY3RDb250cm9sLCB7XG5cdFx0XHRcdGtleTogJ3ByZXZpZXdfYWN0aW9uJyxcblx0XHRcdFx0bGFiZWw6IF9fKCdQcmV2aWV3IEFjdGlvbicsICdsZWFybmRhc2gnKSxcblx0XHRcdFx0dmFsdWU6IHByZXZpZXdfYWN0aW9uLFxuXHRcdFx0XHRvcHRpb25zOiBbe1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnTG9naW4nLCAnbGVhcm5kYXNoJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdsb2dpbidcblx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnTG9nb3V0JywgJ2xlYXJuZGFzaCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbG9nb3V0J1xuXHRcdFx0XHR9XSxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByZXZpZXdfYWN0aW9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwcmV2aWV3X2FjdGlvbjogcHJldmlld19hY3Rpb24gfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdHZhciBpbnNwZWN0b3JDb250cm9scyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdEluc3BlY3RvckNvbnRyb2xzLFxuXHRcdFx0bnVsbCxcblx0XHRcdHBhbmVsYm9keV9sb2dpbixcblx0XHRcdHBhbmVsYm9keV9sb2dvdXQsXG5cdFx0XHRwYW5lbF9wcmV2aWV3XG5cdFx0KTtcblxuXHRcdGZ1bmN0aW9uIGRvX3NlcnZlcnNpZGVfcmVuZGVyKGF0dHJpYnV0ZXMpIHtcblx0XHRcdGlmIChhdHRyaWJ1dGVzLnByZXZpZXdfc2hvdyA9PSB0cnVlKSB7XG5cdFx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoU2VydmVyU2lkZVJlbmRlciwge1xuXHRcdFx0XHRcdGJsb2NrOiAnbGVhcm5kYXNoL2xkLWxvZ2luJyxcblx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIF9fKCdbbGVhcm5kYXNoX2xvZ2luXSBzaG9ydGNvZGUgb3V0cHV0IHNob3duIGhlcmUnLCAnbGVhcm5kYXNoJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtpbnNwZWN0b3JDb250cm9scywgZG9fc2VydmVyc2lkZV9yZW5kZXIocHJvcHMuYXR0cmlidXRlcyldO1xuXHR9LFxuXG5cdHNhdmU6IGZ1bmN0aW9uIHNhdmUocHJvcHMpIHtcblx0XHQvLyBEZWxldGUgbWV0YSBmcm9tIHByb3BzIHRvIHByZXZlbnQgaXQgYmVpbmcgc2F2ZWQuXG5cdFx0ZGVsZXRlIHByb3BzLmF0dHJpYnV0ZXMubWV0YTtcblxuXHRcdC8vIERlbGV0ZSBwcmV2aWV3X3VzZXJfaWQgZnJvbSBwcm9wcyB0byBwcmV2ZW50IGl0IGJlaW5nIHNhdmVkLlxuXHRcdGRlbGV0ZSBwcm9wcy5hdHRyaWJ1dGVzLnByZXZpZXdfdXNlcl9pZDtcblx0fVxufSk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n")}]);
| ver. 1.4 |
Github
|
.
| PHP 7.0.33 | Generation time: 0 |
proxy
|
phpinfo
|
Settings